预览模式: 普通 | 列表

找些不错的sql面试题-1

SQL代码
  1. Student(S#,Sname,Sage,Ssex) 学生表   
  2. Course(C#,Cname,T#) 课程表   
  3. SC(S#,C#,score) 成绩表   
  4. Teacher(T#,Tname) 教师表   
  5.   
  6. 问题:   
  7. 1、查询“001”课程比“002”课程成绩高的所有学生的学号;   
  8.   select a.S# from (select s#,score from SC where C#='001') a,(select s#,score   
  9.   from SC where C#='002') b   
  10.   where a.score>b.score and a.s#=b.s#;   
  11. 2、查询平均成绩大于60分的同学的学号和平均成绩;   
  12.     select S#,avg(score)   
  13.     from sc   
  14.     group by S# having avg(score) >60;   
  15. 3、查询所有同学的学号、姓名、选课数、总成绩;   
  16.   select Student.S#,Student.Sname,count(SC.C#),sum(score)   
  17.   from Student left Outer join SC on Student.S#=SC.S#   
  18.   group by Student.S#,Sname   
  19. 4、查询姓“李”的老师的个数;   
  20.   select count(distinct(Tname))   
  21.   from Teacher   
  22.   where Tname like '李%';   
  23. 5、查询没学过“叶平”老师课的同学的学号、姓名;   
  24.     select Student.S#,Student.Sname   
  25.     from Student    
  26.     where S# not in (select distinct( SC.S#) from SC,Course,Teacher where  SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平');   
  27. 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;   
  28.   select Student.S#,Student.Sname from Student,SC where Student.S#=SC.S# and SC.C#='001'and exists( Select * from SC as SC_2 where SC_2.S#=SC.S# and SC_2.C#='002');   
  29. 7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;   
  30.   select S#,Sname   
  31.   from Student   
  32.   where S# in (select S# from SC ,Course ,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname='叶平' group by S# having count(SC.C#)=(select count(C#) from Course,Teacher  where Teacher.T#=Course.T# and Tname='叶平'));   
  33. 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名;   
  34.   Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2   
  35.   from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2 <score;   
  36. 9、查询所有课程成绩小于60分的同学的学号、姓名;   
  37.   select S#,Sname   
  38.   from Student   
  39.   where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);   
  40. 10、查询没有学全所有课的同学的学号、姓名;   
  41.     select Student.S#,Student.Sname   
  42.     from Student,SC   
  43.     where Student.S#=SC.S# group by  Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);   
  44. 11、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;   
  45.     select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';   
  46. 12、查询至少学过学号为“001”同学所有一门课的其他同学学号和姓名;   
  47.     select distinct SC.S#,Sname   
  48.     from Student,SC   
  49.     where Student.S#=SC.S# and C# in (select C# from SC where S#='001');   
  50. 13、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;   
  51.     update SC set score=(select avg(SC_2.score)   
  52.     from SC SC_2   
  53.     where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='叶平');   
  54. 14、查询和“1002”号的同学学习的课程完全相同的其他同学学号和姓名;   
  55.     select S# from SC where C# in (select C# from SC where S#='1002')   
  56.     group by S# having count(*)=(select count(*) from SC where S#='1002');   
  57. 15、删除学习“叶平”老师课的SC表记录;   
  58.     Delect SC   
  59.     from course ,Teacher    
  60.     where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='叶平';   
  61. 16、向SC表中插入一些记录,这些记录要求符合以下条件:没有上过编号“003”课程的同学学号、2、   
  62.     号课的平均成绩;   
  63.     Insert SC select S#,'002',(Select avg(score)   
  64.     from SC where C#='002'from Student where S# not in (Select S# from SC where C#='002');   
  65. 17、按平均成绩从高到低显示所有学生的“数据库”、“企业管理”、“英语”三门的课程成绩,按如下形式显示: 学生ID,,数据库,企业管理,英语,有效课程数,有效平均分   
  66.     Select S# as 学生ID   
  67.         ,(Select score FROM SC Where SC.S#=t.S# AND C#='004'AS 数据库   
  68.         ,(Select score FROM SC Where SC.S#=t.S# AND C#='001'AS 企业管理   
  69.         ,(Select score FROM SC Where SC.S#=t.S# AND C#='006'AS 英语   
  70.         ,COUNT(*) AS 有效课程数, AVG(t.score) AS 平均成绩   
  71.     FROM SC AS t   
  72.     GROUP BY S#   
  73.     ORDER BY avg(t.score)    
  74. 18、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分   
  75.     Select L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分   
  76.     FROM SC L ,SC AS R   
  77.     Where L.C# = R.C# and   
  78.         L.score = (Select MAX(IL.score)   
  79.                       FROM SC AS IL,Student AS IM   
  80.                       Where L.C# = IL.C# and IM.S#=IL.S#   
  81.                       GROUP BY IL.C#)   
  82.         AND   
  83.         R.Score = (Select MIN(IR.score)   
  84.                       FROM SC AS IR   
  85.                       Where R.C# = IR.C#   
  86.                   GROUP BY IR.C#   
  87.                     );   
  88. 19、按各科平均成绩从低到高和及格率的百分数从高到低顺序   
  89.     Select t.C# AS 课程号,max(course.Cname)AS 课程名,isnull(AVG(score),0) AS 平均成绩   
  90.         ,100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分数   
  91.     FROM SC T,Course   
  92.     where t.C#=course.C#   
  93.     GROUP BY t.C#   
  94.     ORDER BY 100 * SUM(CASE WHEN  isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC   
  95. 20、查询如下课程平均成绩和及格率的百分数(用"1行"显示): 企业管理(001),马克思(002),OO&UML (003),数据库(004)   
  96.     Select SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 ENDAS 企业管理平均分   
  97.         ,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 ENDAS 企业管理及格百分数   
  98.         ,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 ENDAS 马克思平均分   
  99.         ,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 ENDAS 马克思及格百分数   
  100.         ,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 ENDAS UML平均分   
  101.         ,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 ENDAS UML及格百分数   
  102.         ,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 ENDAS 数据库平均分   
  103.         ,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 ENDAS 数据库及格百分数   
  104.   FROM SC  
  105.   
  106.   
  107. 21、查询不同老师所教不同课程平均分从高到低显示   
  108.   Select max(Z.T#) AS 教师ID,MAX(Z.Tname) AS 教师姓名,C.C# AS 课程ID,MAX(C.Cname) AS 课程名称,AVG(Score) AS 平均成绩   
  109.     FROM SC AS T,Course AS C ,Teacher AS Z   
  110.     where T.C#=C.C# and C.T#=Z.T#   
  111.   GROUP BY C.C#   
  112.   ORDER BY AVG(Score) DESC   
  113. 22、查询如下课程成绩第 3 名到第 6 名的学生成绩单:企业管理(001),马克思(002),UML (003),数据库(004)   
  114.     [学生ID],[学生姓名],企业管理,马克思,UML,数据库,平均成绩   
  115.     Select  DISTINCT top 3   
  116.       SC.S# As 学生学号,   
  117.         Student.Sname AS 学生姓名 ,   
  118.       T1.score AS 企业管理,   
  119.       T2.score AS 马克思,   
  120.       T3.score AS UML,   
  121.       T4.score AS 数据库,   
  122.       ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 总分   
  123.       FROM Student,SC  LEFT JOIN SC AS T1   
  124.                       ON SC.S# = T1.S# AND T1.C# = '001'   
  125.             LEFT JOIN SC AS T2   
  126.                       ON SC.S# = T2.S# AND T2.C# = '002'   
  127.             LEFT JOIN SC AS T3   
  128.                       ON SC.S# = T3.S# AND T3.C# = '003'   
  129.             LEFT JOIN SC AS T4   
  130.                       ON SC.S# = T4.S# AND T4.C# = '004'   
  131.       Where student.S#=SC.S# and   
  132.       ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)   
  133.       NOT IN   
  134.       (Select   
  135.             DISTINCT   
  136.             TOP 15 WITH TIES   
  137.             ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)   
  138.       FROM sc   
  139.             LEFT JOIN sc AS T1   
  140.                       ON sc.S# = T1.S# AND T1.C# = 'k1'   
  141.             LEFT JOIN sc AS T2   
  142.                       ON sc.S# = T2.S# AND T2.C# = 'k2'   
  143.             LEFT JOIN sc AS T3   
  144.                       ON sc.S# = T3.S# AND T3.C# = 'k3'   
  145.             LEFT JOIN sc AS T4   
  146.                       ON sc.S# = T4.S# AND T4.C# = 'k4'   
  147.       ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);   
  148.   
  149. 23、统计列印各科成绩,各分数段人数:课程ID,课程名称,[100-85],[85-70],[70-60],[ <60]   
  150.     Select SC.C# as 课程ID, Cname as 课程名称   
  151.         ,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 ENDAS [100 - 85]   
  152.         ,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 ENDAS [85 - 70]   
  153.         ,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 ENDAS [70 - 60]   
  154.         ,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 ENDAS [60 -]   
  155.     FROM SC,Course   
  156.     where SC.C#=Course.C#   
  157.     GROUP BY SC.C#,Cname;   
  158.   
  159. 24、查询学生平均成绩及其名次   
  160.       Select 1+(Select COUNTdistinct 平均成绩)   
  161.               FROM (Select S#,AVG(score) AS 平均成绩   
  162.                       FROM SC   
  163.                   GROUP BY S#   
  164.                   ) AS T1   
  165.             Where 平均成绩 > T2.平均成绩) as 名次,   
  166.       S# as 学生学号,平均成绩   
  167.     FROM (Select S#,AVG(score) 平均成绩   
  168.             FROM SC   
  169.         GROUP BY S#   
  170.         ) AS T2   
  171.     ORDER BY 平均成绩 desc;   
  172.     
  173. 25、查询各科成绩前三名的记录:(不考虑成绩并列情况)   
  174.       Select t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数   
  175.       FROM SC t1   
  176.       Where score IN (Select TOP 3 score   
  177.               FROM SC   
  178.               Where t1.C#= C#   
  179.             ORDER BY score DESC   
  180.               )   
  181.       ORDER BY t1.C#;   
  182. 26、查询每门课程被选修的学生数   
  183.   select c#,count(S#) from sc group by C#;   
  184. 27、查询出只选修了一门课程的全部学生的学号和姓名   
  185.   select SC.S#,Student.Sname,count(C#) AS 选课数   
  186.   from SC ,Student   
  187.   where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;   
  188. 28、查询男生、女生人数   
  189.     Select count(Ssex) as 男生人数 from Student group by Ssex having Ssex='男';   
  190.     Select count(Ssex) as 女生人数 from Student group by Ssex having Ssex='女';   
  191. 29、查询姓“张”的学生名单   
  192.     Select Sname FROM Student Where Sname like '张%';   
  193. 30、查询同名同性学生名单,并统计同名人数   
  194.   select Sname,count(*) from Student group by Sname having  count(*)>1;;   
  195. 31、1981年出生的学生名单(注:Student表中Sage列的类型是datetime)   
  196.     select Sname,  CONVERT(char (11),DATEPART(year,Sage)) as age   
  197.     from student   
  198.     where  CONVERT(char(11),DATEPART(year,Sage))='1981';   
  199. 32、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列   
  200.     Select C#,Avg(score) from SC group by C# order by Avg(score),C# DESC ;   
  201. 33、查询平均成绩大于85的所有学生的学号、姓名和平均成绩   
  202.     select Sname,SC.S# ,avg(score)   
  203.     from Student,SC   
  204.     where Student.S#=SC.S# group by SC.S#,Sname having    avg(score)>85;   
  205. 34、查询课程名称为“数据库”,且分数低于60的学生姓名和分数   
  206.     Select Sname,isnull(score,0)   
  207.     from Student,SC,Course   
  208.     where SC.S#=Student.S# and SC.C#=Course.C# and  Course.Cname='数据库'and score <60;   
  209. 35、查询所有学生的选课情况;   
  210.     Select SC.S#,SC.C#,Sname,Cname   
  211.     FROM SC,Student,Course   
  212.     where SC.S#=Student.S# and SC.C#=Course.C# ;   
  213. 36、查询任何一门课程成绩在70分以上的姓名、课程名称和分数;   
  214.     Select  distinct student.S#,student.Sname,SC.C#,SC.score   
  215.     FROM student,Sc   
  216.     Where SC.score>=70 AND SC.S#=student.S#;   
  217. 37、查询不及格的课程,并按课程号从大到小排列   
  218.     select c# from sc where scor e <60 order by C# ;   
  219. 38、查询课程编号为003且课程成绩在80分以上的学生的学号和姓名;   
  220.     select SC.S#,Student.Sname from SC,Student where SC.S#=Student.S# and Score>80 and C#='003';   
  221. 39、求选了课程的学生人数   
  222.     select count(*) from sc;   
  223. 40、查询选修“叶平”老师所授课程的学生中,成绩最高的学生姓名及其成绩   
  224.     select Student.Sname,score   
  225.     from Student,SC,Course C,Teacher   
  226.     where Student.S#=SC.S# and SC.C#=C.C# and C.T#=Teacher.T# and Teacher.Tname='叶平' and SC.score=(select max(score)from SC where C#=C.C# );   
  227. 41、查询各个课程及相应的选修人数   
  228.     select count(*) from sc group by C#;   
  229. 42、查询不同课程成绩相同的学生的学号、课程号、学生成绩   
  230.   select distinct  A.S#,B.score from SC A  ,SC B where A.Score=B.Score and A.C# <>B.C# ;   
  231. 43、查询每门功成绩最好的前两名   
  232.     Select t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数   
  233.       FROM SC t1   
  234.       Where score IN (Select TOP 2 score   
  235.               FROM SC   
  236.               Where t1.C#= C#   
  237.             ORDER BY score DESC   
  238.               )   
  239.       ORDER BY t1.C#;   
  240. 44、统计每门课程的学生选修人数(超过10人的课程才统计)。要求输出课程号和选修人数,查询结果按人数降序排列,查询结果按人数降序排列,若人数相同,按课程号升序排列    
  241.     select  C# as 课程号,count(*) as 人数   
  242.     from  sc    
  243.     group  by  C#   
  244.     order  by  count(*) desc,c#    
  245. 45、检索至少选修两门课程的学生学号   
  246.     select  S#    
  247.     from  sc    
  248.     group  by  s#   
  249.     having  count(*)  >  =  2   
  250. 46、查询全部学生都选修的课程的课程号和课程名   
  251.     select  C#,Cname    
  252.     from  Course    
  253.     where  C#  in  (select  c#  from  sc group  by  c#)    
  254. 47、查询没学过“叶平”老师讲授的任一门课程的学生姓名   
  255.     select Sname from Student where S# not in (select S# from Course,Teacher,SC where Course.T#=Teacher.T# and SC.C#=course.C# and Tname='叶平');   
  256. 48、查询两门以上不及格课程的同学的学号及其平均成绩   
  257.     select S#,avg(isnull(score,0)) from SC where S# in (select S# from SC where score <60 group by S# having count(*)>2)group by S#;   
  258. 49、检索“004”课程分数小于60,按分数降序排列的同学学号   
  259.     select S# from SC where C#='004'and score <60 order by score desc;   
  260. 50、删除“002”同学的“001”课程的成绩   
  261. delete from Sc where S#='001'and C#='001';  

Tags: SQL 面试

分类:MSSQL | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 46

整理精华帖子

行列转换:
http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html?33238(总 结帖子)
http://topic.csdn.net/u/20090912/14/25d2e1b2-f352-4713-8618-d3433ba27bef.html?99104(经 典帖子)

合并分拆表:
http://topic.csdn.net/u/20080612/22/c850499f-bce3-4877-82d5-af2357857872.html?23514
果果字符串整理系列

处理表重复记录
http://topic.csdn.net/u/20080626/00/43d0d10c-28f1-418d-a05b-663880da278a.html?85256

SSAS系列:
过渡到SSAS之一:简单模型认识
过渡到SSAS之二:服务的发布
和尚翻译的SSRS的帖子

SSIS系列:

小梁系列之SSIS遍历记录查询邮件

小梁系列之SSIS表达式

小梁系列之SSIS “查找组件” 查找范围内的数据

小梁系列之SSIS 同步和异步转换

小梁系列之SSIS中 “条件拆分”组件中 ISNUMERIC的问题

小梁系列之脚本任务中访问记录集 RecordSet

小梁系列之SSIS中数据源和数据目标中 的”保留空值”


有关SQL注入的帖子:
SQL注入专题
http://topic.csdn.net/u/20090326/11/5e584897-2dd7-4e10-af1b-9b48b146af8e.html?95281
http://topic.csdn.net/u/20090523/19/72041932-b65c-49c1-ad36-d2c63b38b174.html?96607

经典代码系列:
经典短小代码
第一季
第二季
最近的一个
http://topic.csdn.net/u/20080605/15/ca6b25f3-3e60-4b95-ac7e-7d7dc02354e6.html?87229
T-SQL常见基础疑点问答整理(1)
T-SQL常见基础疑点问答整理(2)


石头系列之2005事务与锁定系列
事务与锁定第一篇
事务与锁定第二篇
事务与锁定第三篇
事务与锁定第四篇
事务与锁定第五篇
事务与锁定第六篇

石头系列之数据库引擎结构
数据库引擎结构一
数据库引擎结构二
数据库引擎结构三

各种进制的转换:(来自影子)
http://topic.csdn.net/u/20090707/16/9a7b8e46-1467-4373-a195-39d80b826827.html?28501

关于数据库的同步的帖子:
http://topic.csdn.net/u/20080523/11/08e4624a-13d1-4a6c-a9bc-7cfdd721a351.html?4574
http://topic.csdn.net/u/20080801/11/2f79d062-8049-4ade-a884-01dbaa429135.html?63426
http://topic.csdn.net/u/20090520/22/2267467b-0c40-4a5e-8b71-24838be0ff64.html?10943
两台服务器的相互同步


数据的导入导出部分:
CSV文件批量导入数据库
http://topic.csdn.net/u/20091009/11/5f3ebd1a-de5f-4d92-bc76-0f2103a34b5a.html?48287
excel导入SQL
http://topic.csdn.net/u/20090724/00/a479a979-8a20-4abb-a184-8a0ee56608c2.html?86864
BCP:
http://topic.csdn.net/u/20090720/21/b27734aa-c091-4a6b-96db-f234e2699385.html?84209
http://topic.csdn.net/u/20090720/21/b27734aa-c091-4a6b-96db-f234e2699385.html?2600
数据的转移
一个比较巧的导法

数据的分页:
http://topic.csdn.net/u/20090416/02/4e3cb6d6-707a-4f42-b295-3e9fd5df7691.html?52379

SQL查询与性能优化系列:
SQL性能优化综述
SQL Server查询优化
SQL优化之执行计划
五种提高SQL性能的方法
SQL开发的二十一条军规
一千万条数据的优化
如何提高sql查询100万条数据 count(*)汇总的速度
数据库优化汇总
海量数据库的相关处理

索引系列:
全文索引
查看索引信息/生成创建索引脚本
聚焦索引与非聚焦索引及其查询效率

递归函数系列:
BOM:
其他:
http://topic.csdn.net/u/20090807/08/19f980a3-3830-4261-90ca-0f85ec628492.html?62247

如何判断一个IP地址在一个IP地址段

身份证号码的转化

2005CLR系列:

环比运算
树结构
天气服务
正则表达式

数据库的并发性以及锁相关的帖子:
一个简单的存储过程产生死锁
单条Update语句是否加事务与锁的关系
分析死锁并整理


触发器、存储过程等
触发器综述

触发器删除的一个问题

分组求前N条数据:
分组求前N条数据

数据库的备份与恢复等问题
数据库的备份与恢复等问题
还原指定文件夹下的备份

作业:
自动备份数据库作业

SQL常见的安装问题
SQL常见的安装问题
SQL不能连接的完美解决方案

远程连接操作 整理帖子
远程连接操作 整理帖子

自动生成流水号
自动生成流水号

求每行的最小的那个字母

数据库的加密
数据库的加密

根据时间求某个月所有日期或者某天的所有时间段
根据时间求某个月所有日期或者某天的所有时间段

如何查漏号字段
如何查漏号字段

多列求最大值或者最小值
多列求最大值或者最小值

Tags: SQL 收集

分类:MSSQL | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 40
SQL代码
  1. 1:replace 函数  
  2. 第一个参数你的字符串,第二个参数你想替换的部分,第三个参数你要替换成什么  
  3. select replace('lihan','a','b')  
  4.                                                                     
  5. -----------------------------  
  6. lihbn  
  7.   
  8. (所影响的行数为 1 行)  
  9. =========================================================  
  10. 2:substring函数  
  11. 第一个参数你的字符串,第二个是开始替换位置,第三个结束替换位置  
  12. select substring('lihan',0,3);  
  13. -----   
  14. li  
  15.   
  16. (所影响的行数为 1 行)  
  17. =========================================================  
  18. 3:charindex函数  
  19. 第一个参数你要查找的char,第二个参数你被查找的字符串 返回参数一在参数二的位置  
  20. select  charindex('a','lihan')  
  21. -----------   
  22. 4  
  23.   
  24. (所影响的行数为 1 行)  
  25.   
  26. ===========================================================  
  27. 4:ASCII函数  
  28. 返回字符表达式中最左侧的字符的 ASCII 代码值。  
  29. select ASCII('lihan')  
  30. -----------   
  31. 108  
  32.   
  33. (所影响的行数为 1 行)  
  34.   
  35. ================================================================  
  36. 5:nchar函数  
  37. 根据 Unicode 标准的定义,返回具有指定的整数代码的 Unicode 字符。  
  38. 参数是介于 0 与 65535 之间的正整数。如果指定了超出此范围的值,将返回 NULL。  
  39. select nchar(3213)  
  40. ----   
  41. unicode字符  
  42.   
  43. (所影响的行数为 1 行)  
  44.   
  45. =========================================================  
  46. 6:soundex  
  47. 返回一个由四个字符组成的代码 (SOUNDEX),用于评估两个字符串的相似性。  
  48. Select SOUNDEX ('lihan'), SOUNDEX ('lihon');  
  49. ----- -----   
  50. L546  L542  
  51.   
  52. (所影响的行数为 1 行)  
  53. =========================================================  
  54. 7:char  
  55. 参数为介于 0 和 255 之间的整数。如果该整数表达式不在此范围内,将返回 NULL 值。  
  56. Select char(125)  
  57. ----   
  58. }  
  59.   
  60. (所影响的行数为 1 行)  
  61.   
  62. ==========================================================  
  63. 8:str函数  
  64. 第一个参数必须为数字,第二个参数表示转化成char型占的位置,小于参数一位置返回*,大于右对齐  
  65. Select str(12345,3)  
  66. ----   
  67. ***  
  68.   
  69. (所影响的行数为 1 行)  
  70.   
  71. Select str(12345,12)  
  72. ------------   
  73.        12345  
  74.   
  75. (所影响的行数为 1 行)  
  76. ===========================================================  
  77. 9:difference函数  
  78. 返回一个整数值,指示两个字符表达式的 SOUNDEX 值之间的差异。  
  79. 返回的整数是 SOUNDEX 值中相同字符的个数。返回的值从 0 到 4 不等:0 表示几乎不同或完全不同,4 表示几乎相同或完全相同。  
  80. Select difference('lihan','liha')  
  81. -----------   
  82. 3  
  83.   
  84. (所影响的行数为 1 行)  
  85.   
  86.   
  87. ==================================================================  
  88. 10:stuff函数(四个参数)  
  89. 函数将字符串插入另一字符串。它在第一个字符串中从开始位置删除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。  
  90. Select stuff('lihan',2,3,'lihan')  
  91. --------   
  92. llihann  
  93.   
  94. (所影响的行数为 1 行)  
  95. ===============================================================  
  96.   
  97. 11:left函数  
  98. 返回最左边N个字符,由参数决定  
  99. select left('lihan',4)  
  100. -----   
  101. liha  
  102.   
  103. (所影响的行数为 1 行)  
  104. ================================================================  
  105.   
  106. 12 right函数  
  107. 返回最右边N个字符,由参数决定  
  108. select right('lihan',4)  
  109. -----   
  110. ihan  
  111.   
  112. (所影响的行数为 1 行)  
  113. ================================================================  
  114.   
  115. 13:replicate函数  
  116. 我的认为是把参数一复制参数二次  
  117. select replicate('lihan',4)  
  118. --------------------   
  119. lihanlihanlihanlihan  
  120.   
  121. (所影响的行数为 1 行)  
  122.   
  123. ================================================================  
  124.   
  125. 14:len函数  
  126. 返回参数长度  
  127. select len('lihan')  
  128. -----------   
  129. 5  
  130.   
  131. (所影响的行数为 1 行)  
  132.   
  133.   
  134. ================================================================  
  135. 15:reverse函数  
  136. 反转字符串  
  137. select reverse('lihan')  
  138. -----   
  139. nahil  
  140.   
  141. (所影响的行数为 1 行)  
  142.   
  143.   
  144. =================================================================  
  145.   
  146. 16:lowerupper函数  
  147. 参数大小写转化  
  148. select lower(upper('lihan'))  
  149. --------------------   
  150. lihan  
  151.   
  152. (所影响的行数为 1 行)  
  153.   
  154. ====================================================================  
  155.   
  156. 17:ltrim和rtrim函数  
  157. 删除左边空格和右面空格  
  158. select ltrim('    lihan                 ')  
  159. --------------------------   
  160. lihan                   
  161.   
  162. (所影响的行数为 1 行)  
  163. select rtrim('    lihan')  
  164. ---------   
  165.     lihan  
  166.   
  167. (所影响的行数为 1 行)  

Tags: SQL 收集

分类:MSSQL | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 69

如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS)。
在这里,我 不打算介绍使用SQL Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计。这些经验来自我过去几年中经受的教训,一 直来,我看到许多同样的设计错误被一次又一次的重复。
一、了解你用的工具
不要轻视这一点,这是我在这篇文章中讲述的最关键的一条。也许你 也看到有很多的SQL Server程序员没有掌握全部的T-SQL命令和SQL Server提供的那些有用的工具。
“什么?我要浪费一个月的 时间来学习那些我永远也不会用到的SQL命令???”,你也许会这样说。对的,你不需要这样做。但是你应该用一个周末浏览所有的T-SQL命令。在这里, 你的任务是了解,将来,当你设计一个查询时,你会记起来:“对了,这里有一个命令可以完全实现我需要的功能”,于是,到MSDN查看这个命令的确切语法。
二、 不要使用游标
让我再重复一遍:不要使用游标。如果你想破坏整个系统的性能的话,它们倒是你最有效的首选办法。大多数的初学者都使用游标,而没有意 识到它们对性能造成的影响。它们占用内存,还用它们那些不可思议的方式锁定表,另外,它们简直就像蜗牛。而最糟糕的是,它们可以使你的DBA所能做的一切 性能优化等于没做。不知你是否知道每执行一次FETCH就等于执行一次Select命令?这意味着如果你的游标有10000条记录,它将执行10000次 Select!如果你使用一组Select、Update或者Delete来完成相应的工作,那将有效率的多。
初学者一般认为使用游标是一种比较 熟悉和舒适的编程方式,可很不幸,这会导致糟糕的性能。显然,SQL的总体目的是你要实现什么,而不是怎样实现。
我曾经用T-SQL重写了一个基 于游标的存储过程,那个表只有100,000条记录,原来的存储过程用了40分钟才执行完毕,而新的存储过程只用了10秒钟。在这里,我想你应该可以看到 一个不称职的程序员究竟在干了什么!!!
我们可以写一个小程序来取得和处理数据并且更新数据库,这样做有时会更有效。记住:对于循环,T-SQL 无能为力。
我再重新提醒一下:使用游标没有好处。除了DBA的工作外,我从来没有看到过使用游标可以有效的完成任何工作。
三、规范化你的 数据表
为什么不规范化数据库?大概有两个借口:出于性能的考虑和纯粹因为懒惰。至于第二点,你迟早得为此付出代价。而关于性能的问题,你不需要优 化根本就不慢的东西。我经常看到一些程序员“反规范化”数据库,他们的理由是“原来的设计太慢了”,可结果却常常是他们让系统更慢了。DBMS被设计用来 处理规范数据库的,因此,记住:按照规范化的要求设计数据库。
四、不要使用Select *
这点不太容易做到,我太了解了,因为我自己 就经常这样干。可是,如果在Select中指定你所需要的列,那将会带来以下的好处:
1 减少内存耗费和网络的带宽
2 你可以得到更安全的设计
3 给查询优化器机会从索引读取所有需要的列
五、了解你将要对数据进行的操作
为你的数据库创建一个健壮的 索引,那可是功德一件。可要做到这一点简直就是一门艺术。每当你为一个表添加一个索引,Select会更快了,可Insert和Delete却大大的变慢 了,因为创建了维护索引需要许多额外的工作。显然,这里问题的关键是:你要对这张表进行什么样的操作。这个问题不太好把握,特别是涉及Delete和 Update时,因为这些语句经常在Where部分包含Select命令。
六、不要给“性别”列创建索引
首先,我们必须了解索引是如何加 速对表的访问的。你可以将索引理解为基于一定的标准上对表进行划分的一种方式。如果你给类似于“性别”这样的列创建了一个索引,你仅仅是将表划分为两部 分:男和女。你在处理一个有1,000,000条记录的表,这样的划分有什么意义?记住:维护索引是比较费时的。当你设计索引时,请遵循这样的规则:根据 列可能包含不同内容的数目从多到少排列,比如:姓名+省份+性别。
七、使用事务
请使用事务,特别是当查询比较耗时。如果系统出现问题,这 样做会救你一命的。一般有些经验的程序员都有体会-----你经常会碰到一些不可预料的情况会导致存储过程崩溃。
八、小心死锁
按照一定的 次序来访问你的表。如果你先锁住表A,再锁住表B,那么在所有的存储过程中都要按照这个顺序来锁定它们。如果你(不经意的)某个存储过程中先锁定表B,再 锁定表A,这可能就会导致一个死锁。如果锁定顺序没有被预先详细的设计好,死锁是不太容易被发现的。
九、不要打开大的数据集
一个经常被提 出的问题是:我怎样才能迅速的将100000条记录添加到ComboBox中?这是不对的,你不能也不需要这样做。很简单,你的用户要浏览100000条 记录才能找到需要的记录,他一定会诅咒你的。在这里,你需要的是一个更好的UI,你需要为你的用户显示不超过100或200条记录。
十、不要使用 服务器端游标
与服务器端游标比起来,客户端游标可以减少服务器和网络的系统开销,并且还减少锁定时间。
十一、使用参数查询
有时, 我在CSDN技术论坛看到类似这样的问题:“Select * FROM a Where a.id='A'B,因为单引号查询发生异常,我该怎么办?”,而普遍的回答是:用两个单引号代替单引号。这是错误的。这样治标不治本,因为你还会在其他 一些字符上遇到这样的问题,更何况这样会导致严重的bug,除此以外,这样做还会使SQL Server的缓冲系统无法发挥应有的作用。使用参数查询, 釜底抽薪,这些问题统统不存在了。
十二、在程序编码时使用大数据量的数据库
程序员在开发中使用的测试数据库一般数据量都不大,可经常的是 最终用户的数据量都很大。我们通常的做法是不对的,原因很简单:现在硬盘不是很贵,可为什么性能问题却要等到已经无可挽回的时候才被注意呢?
十 三、不要使用Insert导入大批的数据
请不要这样做,除非那是必须的。使用UTS或者BCP,这样你可以一举而兼得灵活性和速度。
十 四、注意超时问题
查询数据库时,一般数据库的缺省都比较小,比如15秒或者30秒。而有些查询运行时间要比这长,特别是当数据库的数据量不断变大 时。
十五、不要忽略同时修改同一记录的问题
有时候,两个用户会同时修改同一记录,这样,后一个修改者修改了前一个修改者的操作,某些更新 就会丢失。处理这种情况不是很难:创建一个timestamp字段,在写入前检查它,如果允许,就合并修改,如果存在冲突,提示用户。
十六、在细 节表中插入纪录时,不要在主表执行Select MAX(ID)
这是一个普遍的错误,当两个用户在同一时间插入数据时,这会导致错误。你可以使用 SCOPE_IDENTITY,IDENT_CURRENT和IDENTITY。如果可能,不要使用IDENTITY,因为在有触发器的情况下,它会引起 一些问题(详见这里的讨论)。
十七、避免将列设为NULLable
如果可能的话,你应该避免将列设为NULLable。系统会为 NULLable列的每一行分配一个额外的字节,查询时会带来更多的系统开销。另外,将列设为NULLable使编码变得复杂,因为每一次访问这些列时都 必须先进行检查。
我并不是说NULLS是麻烦的根源,尽管有些人这样认为。我认为如果你的业务规则中允许“空数据”,那么,将列设为 NULLable有时会发挥很好的作用,但是,如果在类似下面的情况中使用NULLable,那简直就是自讨苦吃。
CustomerName1
CustomerAddress1
CustomerEmail1
CustomerName2
CustomerAddress2
CustomerEmail3
CustomerName1
CustomerAddress2
CustomerEmail3
如 果出现这种情况,你需要规范化你的表了。
十八、尽量不要使用TEXT数据类型
除非你使用TEXT处理一个很大的数据,否则不要使用它。因 为它不易于查询,速度慢,用的不好还会浪费大量的空间。一般的,VARCHAR可以更好的处理你的数据。
十九、尽量不要使用临时表
尽量不 要使用临时表,除非你必须这样做。一般使用子查询可以代替临时表。使用临时表会带来系统开销,如果你是用COM+进行编程,它还会给你带来很大的麻烦,因 为COM+使用数据库连接池而临时表却自始至终都存在。SQL Server提供了一些替代方案,比如Table数据类型。
二十、学会分析查询
SQL Server查询分析器是你的好伙伴,通过它你可以了解查询和索引是如何影响性能的。
二十一、使用参照完整性
定义主健、唯一性约束和外 键,这样做可以节约大量的时间。

Tags: SQL 军规

分类:MSSQL | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 45

SQL注入专题--整理帖

SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别, 所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一 部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得 某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没 查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。能不能根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据,是高 手与“菜鸟”的根本区别。
SQL注入漏洞全接触--入门篇
SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没 查看IIS日志的习惯,可能被入侵很长时间都不会发觉。
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449834.aspx
SQL 注入漏洞全接触--进阶篇
SQL注入的一般步骤,首先,判断环境,寻找注入点,判断数据库类型,其次,根据注入参数类型,在脑海中重构SQL语句的原貌。
详细内 容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449870.aspx
SQL 注入漏洞全接触--高级篇
看完入门篇和进阶篇后,稍加练习,破解一般的网站是没问题了。但如果碰到表名列名猜不到,或程序作者过滤了一些特殊字符,怎么提高注入的成功率?怎么样提 高猜解效率?
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449883.aspx
SQL 注入法攻击一日通
SQL注入的简单原理和攻击一般步骤,文章作者想让人一天学会SQL注入攻击。
详细内 容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449901.aspx
SQL Server应用程序中的高级SQL注入
这份文档是详细讨论SQL注入技术,它适应于比较流行的IIS+ASP+SQLSERVER平台。它讨论了哪些SQL语句能通过各种各样的方法注入到应用 程序中,并且记录与攻击相关的数据确认和数据库锁定。
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449913.aspx
编 写通用的ASP防SQL注入攻击程序
如果编写通用的SQL防注入程序一般的http请求不外乎get 和 post,所以只要我们在文件中过滤所有post或者get请求中的参数信息中非法字符即可,所以我们实现http 请求信息过滤就可以判断是是否受到SQL注入攻击。
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449925.aspx
利 用instr()函数防止SQL注入攻击
学asp也有一段时间了,这几天一直在写自己的程序,也遇到了好多问题,我就不得不得考虑到一些现在的漏洞,比如,‘ 或 and 1=1等等的一些漏洞!别的先不管,今天我就来说说如何堵这个漏洞!详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449932.aspx
SQL 注入攻击的原理及其防范措施
ASP编程门槛很低,新手很容易上路。在一段不长的时间里,新手往往就已经能够编出看来比较完美的动态网站,在功能上,老手能做到的,新手也能够做到。
详 细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449940.aspx
跨 站式SQL注入技巧
学习如何从数据库中获取想要获得的内容。
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449948.aspx
防 范Sql注入式攻击
Sql注入式攻击是指利用设计上的漏洞,在目标服务器上运行Sql 命令以及进行其他方式的攻击 动态生成Sql命令时没有对用户输入的数据进行验证是Sql注入攻击得逞的主要原因。
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449951.aspx
Dreamweaver 中sql注入式攻击的防范
在安全性方面,新手最容易忽略的问题就是SQL注入漏洞的问题。用NBSI 2.0对网上的一些ASP网站稍加扫描,就能发现许多ASP网站存在SQL注入漏洞。详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449953.aspx
PHP 与SQL注入攻击
SQL注入攻击是黑客攻击网站最常用的手段。如果你的站点没有使用严格的用户输入检验,那么常容易遭到SQL注入攻击。SQL注入攻击通常通过给站点数据 库提交不良的数据或查询语句来实现,很可能使数据库中的纪录遭到暴露,更改或被删除。下面来谈谈SQL注入攻击是如何实现的,又如何防范。
详细内 容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449956.aspx
SQL 注入攻击零距离
一次次的SQL注射入侵,一次次的网站被黑,总是那句话,漏洞在所难免,难道一点办法都没吗?这篇文章就是为大家解析下SQL注 射的原理,以及给出一些预防方法。
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449959.aspx
SQL 注入技术和跨站脚本攻击的检测
在最近两年中,安全专家应该对网络应用层的攻击更加重视。因为无论你有多强壮的防火墙规则设置或者非常勤于补漏的修补机制,如果你的网络应用程序开发者没 有遵循 安全代码进行开发,攻击者将通过80端口进入你的系统。
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449961.aspx
菜 鸟入门级:SQL注入攻击
一般国内的小一点的新闻站点程序 都有 ""&request 这种漏洞,下面我讲解攻击方法。
详 细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449963.aspx
三 步堵死SQL注入漏洞
防御SQL注入有妙法,第一步:很多新手从网上下载SQL通用防注入系统的程序,在需要防范注入的页面头部用 来防止别人进行手动注入测试.
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449965.aspx
SQL 注入实战---利用“dbo”获得SQL管理权限和系统权限
如果显示“dbo” 转换数据类型为 int 的列时发生语法错误 那么就可以用我下面介绍的方法来获得系统管理权限,如果是“abc” 转换数据类型为 int 的列时发生语法错误 那么就用不能用我下面的介绍来获得系统权限了.
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449967.aspx
两 个防SQL注入过滤代码
SQL注入防护的一种简单方法,在网页中嵌入过滤代码,基于认为的安全防护措施.
详细内 容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449969.aspx
蓝 雨设计整站SQL注入漏洞
以下文章中就会出现NOWA修改系统漏洞当中从未有的SQL注入漏洞!只怪蓝雨修改程序的时候没有做好注入问题了!这个可不能怪我!谁叫人家程序设计员不 会注意安全死角阿?
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449972.aspx
SQL 注入渗透某网络安全公司的网站全过程
写这篇文章不是为了告诉大家如何去做入侵,而是希望提醒大家:“入侵是偶然的,但安全并不是必然的”,不要疏忽运作上的一些小细节。
详细内 容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449973.aspx
sql 注入防御
SQL注入通过网页对网站数据库进行修改。它能够直接在数据库中添加具有管理员权限的用户,从而最终获得系统管理员权限。黑客可以利用获得的管理员权限任 意获得网站上的文件或者在网页上加挂木马和各种恶意程序,对网站和访问该网站的网友都带来巨大危害.详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449976.aspx
终 极防范SQL注入漏洞
其实SQL注入漏洞并不可怕,知道原理 + 耐心仔细,就可以彻底防范!下面给出4个函数,足够你抵挡一切SQL注入漏洞!读懂代码,你就能融会贯通.详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449979.aspx
SQL 注入与ASP木马上传
SQL注入后,如何上传木马,一直是比较头疼的事,我这里提供上传木马的一种另一种方法。
1、SQL注 入的时候,用xp_cmdshell 向服务器上写入一个能写文件的asp文件.
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449983.aspx
如 何在SQL注入时保护数据库
SQL注入是防止数据库攻击的一个有效策略。攻击者将注入一个SQL语句到另外一个语句中,这个通常会损坏你的数据库。有数据库接口的Web站点通常在 SQL注入的时候容易受到攻击,因为它们是基于动态的SQL.
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449986.aspx
天 晨设计整站SQL注入漏洞
作者从一个安全工作员的角度,对天晨设计整站SQL注入漏洞做出了详细的测试.
详细内 容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449988.aspx
浅 谈sql注入式(SQL injection)攻击与防范
没有系统的学习过asp或者php编程,也没有系统的学习过access、sqlserver、mysql等数据库,所以我不是一个程序员,虽然经常干一 些类似程序员的事情.
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449991.aspx
用 vbs来写sql注入等80端口的攻击脚本
昨天晚上在机器里乱翻时无意打开一个vbs脚本,突然发现一个以前没有见过的对象Test.SendRequest("http://" & g_sServer & "/testfiles/browser.asp"),虽然对象没有见过,但是意思很明显:发送http请求.
详 细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449992.aspx
C# 检查字符串,防SQL注入攻击
这些天,CSDN上讨论SQL注入攻击似乎是如火如荼啊...我也来参合一下..如下,CheckParams函数,接收参数任意,如参数中有字符串,则 对字符串进行检查,如参数中有集合(如Array之类,总之是实现了ICollection的),则对集合中的字符串元素进行检查.
详细内 容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449994.aspx
关 于对SQL注入80004005 及其它错误消息分析
本文详细讲述了 Microsoft 数据访问组件 (MDAC) 收到 0x800040005 错误的一些常见原因,MDAC 包括 ActiveX 数据对象、OLE DB 和远程数据服务 (RDS)。同时,本文还讨论了其它一些错误消息,包括 80040e21、80040e14 和80040e10.
详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3449996.aspx
SQL 注入入侵动网SQL版论坛
现在动网最新版本是7.0+SP2。应该说安全性已经是很高的了。所以从脚本本身的问题去突破它难度不小。但是我们可以从外部的一些途径间接“搞定”动 网.现在IIS+ASP+SQL2000的组合是比较常见的。而一个网站运用大量的ASP脚本程序,难免不出纰漏。如果一台主机上存在某个SQL注入点, 而这台主机又安装有动网SQL版的话,基本上可以得出结论:这个动网就是你的了。下面来看一下实例.详细内容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3450001.aspx
利 用SQL注入2分钟入侵网站全程实录
说起流光、溯雪、乱刀,可以说是大名鼎鼎无人不知无人不晓,这些都是小榕哥的作品。每次一提起小榕哥来,我的崇拜景仰就如滔滔江水,连绵不绝~~~~(又 来了!) 让我们崇拜的小榕哥最新又发布了SQL注入工具,这回喜欢利用SQL注入入侵网站的黑友们有福了。小榕哥的工具就是强!偶用它来搞定我们本地的信息港,从 寻找注入漏洞到注入攻击成功,通过准确计时,总共只用了3分还差40秒,呵呵,王者风范,就是强啊!不信吗?看看我的入侵过程吧.
详细内 容>>
http://blog.csdn.net/wufeng4552/archive/2008/12/05/3450005.aspx

Tags: SQL 注入 整理

分类:MSSQL | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 50

sql server术语学习表一

“(全部)”级别 ((All) level)
“全部”成员 (All member)
ActiveX 数据对象 (ActiveX Data Objects)
ActiveX 数据对象(多维)(ADO MD) (ActiveX Data Objects (Multidimensional) (ADO MD))
ANSI 到 OEM 的转换 (ANSI to OEM conversion)
API 服务器游标 (API server cursor)
bcp 实用工具 (bcp utility)
bcp 文件 (bcp files)
bigint 数据类型 (bigint data type)
binary 数据类型 (binary data type)
bit 数据类型 (bit data type)
char 数据类型 (char data type)
CHECK 约束 (CHECK constraints)
CLR 触发器 (CLR trigger)
CLR 存储过程 (CLR stored procedure)
CLR 函数 (CLR function)
CLR 用户定义类型 (CLR user-defined type)
COM 结构化存储文件 (COM-structured storage file)
CPU 忙 (CPU busy)
DataReader
datetime 数据类型 (datetime data type)
DDL 触发器 (DDL trigger)
decimal 数据类型 (decimal data type)
DEFAULT 约束 (DEFAULT constraint)
DML 触发器 (DML trigger)
DSN
DTS 包 (DTS package)
DTS 包模板 (DTS package template)
ETL
float 数据类型 (float data type)
guest
image 数据类型 (image data type)
int (integer) 数据类型 (int (integer) data type)
master 数据库 (master database)
Microsoft 消息队列 (Microsoft Message Queuing)
model 数据库 (model database)
money 数据类型 (money data type)
MSMQ
MSX
nchar 数据类型 (nchar data type)
niladic 函数 (niladic functions)
ntext 数据类型 (ntext data type)
NULL
nvarchar 数据类型 (nvarchar data type)
ODBC 驱动程序 (ODBC driver)
ODBC 数据源 (ODBC data source)
OLE DB
OLE DB 访问接口 (OLE DB provider)
OLE DB 使用者 (OLE DB consumer)
OLE 自动化对象 (OLE Automation objects)
OLE 自动化服务器 (OLE Automation server)
OLE 自动化控制器 (OLE Automation controller)
pubs 数据库 (pubs database)
real 数据类型 (real data type)
Select
smalldatetime 数据类型 (smalldatetime data type)
smallint 数据类型 (smallint data type)
smallmoney 数据类型 (smallmoney data type)
SQL Mail
SQL Server 身份验证 (SQL Server Authentication)
SQL Server 事件转发服务器 (SQL Server Event Forwarding Server)
SQL 表达式 (SQL e­xpression)
SQL 查询 (SQL query)
SQL 排序规则 (SQL collation)
SQL 数据库 (SQL database)
SQL 语句 (SQL statement)
sql_variant 数据类型 (sql_variant data type)
SQL-92
tempdb 数据库 (tempdb database)
text 数据类型 (text data type)
theta 联接 (theta join)
timestamp 数据类型 (timestamp data type)
tinyint 数据类型 (tinyint data type)
Transact-SQL
Transact-SQL 游标 (Transact-SQL cursor)
TSX
Unicode
Unicode 格式 (Unicode format)
Unicode 排序规则 (Unicode collation)
UNIQUE 约束 (UNIQUE constraints)
uniqueidentifier 数据类型 (uniqueidentifier data type)
uniqueifier
varbinary 数据类型 (varbinary data type)
varchar 数据类型 (varchar data type)
Web 同步 (Web synchronization)
Where 子句 (Where clause)
Windows Management Instrumentation
Windows 排序规则 (Windows collation)
WMI
WMI 查询语言 (WMI Query Language)
WQL
安全标识符 (SID) (Security Identifier (SID))
安全扩展插件 (security extension)
安全套接字层 (SSL)
安装程序初始化文件 (Setup initialization file)
按范围分区 (range partitioning)
暗示性权限 (implied permission)
半累加性度量值 (semiadditive measure)
绑定 (binding)
保存点 (savepoint)
报表处理扩展插件 (report processing extension)
报表定义 (report definition)
报表服务器管理员 (report server administrator)
报表快照 (report snapshot)
报表模型 (report model)
备份 (back up)
备份 (backup)
备份集 (backup set)
备份媒体 (backup media)
备份设备 (backup device)
备份文件 (backup file)
备用服务器 (standby server)
备用文件 (standby file)
备注 (memo)
被链接表 (linked table)
被引用键 (referenced key)
本地登录标识 (local login identification)
本地订阅 (local subscription)
本地多维数据集 (local cube)
本地分发服务器 (local Distributor)
本地分区视图 (local partitioned view)
本地服务器 (local server)
本地组 (local group)
本机格式 (native format)
编写复制脚本 (replication scripting)
变化的维度 (changing dimension)
变量 (variable)
标记 (token)
标记化 (tokenization)
标量聚合 (scalar aggregate)
标识符 (identifier)
标识列 (identity column)
标识属性 (identity property)
表 (table)
表达式 (e­xpression)
表格格式数据流 (TDS) (tabular data stream (TDS))
表级约束 (table-level constraint)
表扫描 (table scan)
表数据类型 (table data type)
表锁 (table lock)
别名 (alias)
别名 (nickname)
别名数据类型 (alias data type)
并发 (concurrency)
不对称层次结构 (unbalanced hierarchy)
不感知游标 (insensitive cursor)
不可重复读 (nonrepeatable read)
不齐整层次结构 (ragged hierarchy)
布尔值 (Boolean)
步骤对象 (step object)
部分备份 (partial backup)
部分差异备份 (partial differential backup)
参数化 (parameterization)
参数化报表 (parameterized report)
参数化行筛选器 (parameterized row filter)
操作 (action)
层次结构 (hierarchy)
插入查询 (Insert query)
插入值查询 (Insert Values query)
查询优化器 (query optimizer)
查找表 (lookup table)
差异备份 (differential backup)
差异数据库备份 (differential database backup)
常规多维数据集 (regular cube)
常规维度 (regular dimension)
常量 (constant)
超大型维度 (very large dimension)
超文本标记语言 (HTML) (Hypertext Markup Language (HTML))
撤消 (undo)
成员 (member)
成员变量 (member variable)
成员键列 (member key column)
成员名列 (member name column)
成员委托 (member delegation)
成员属性 (member property)
成员组 (member group)
呈现的报表 (rendered report)
呈现扩展插件 (rendering extension)
程序集 (assembly)
持久化计算列 (persisted computed column)
持久性 (persistence)
初始快照 (initial snapshot)
初始同步 (initial synchronization)
触发器 (trigger)
传递查询 (pass-through query)
传递扩展插件 (delivery extension)
传递顺序 (pass order)
传递语句 (pass-through statement)
串联 (concatenation)
垂直分区 (vertical partitioning)
垂直筛选 (vertical filtering)
纯日志备份 (pure log backup)
词干分析器 (stemmer)
磁带备份 (tape backup)
存储过程 (stored procedure)
存储库 (repository)
存储库 SQL 架构 (Repository SQL schema)
存储库对象 (repository object)
存储库类型信息模型 (RTIM) (Repository Type Information Model (RTIM))
存储库引擎 (repository engine)
存档文件 (archive file)
错误日志 (error log)
错误状态号 (error state number)
大级别 (large level)
大容量操作日志备份 (bulk log backup)
大容量导出 (bulk export)
大容量导入 (bulk import)
大容量日志恢复模式 (bulk-logged recovery model)
代码页 (code page)
单用户模式 (single-user mode)
单元 (cell)
单元集 (cellset)
递归分区 (recursive partitioning)
点击链接型报表 (clickthrough report)
调用级接口 (call-level interface (CLI))
订阅 (subscribe)
订阅 (subscription)
订阅方 (Subscriber)
订阅服务器 (subscribing server)
订阅过期时间 (subscription expiration period)
订阅数据库 (subscription database)
定位更新 (positioned update)
定型数据集 (training data set)
动态 SQL 语句 (dynamic SQL statements)
动态恢复 (dynamic recovery)
动态快照 (dynamic snapshot)
动态筛选器 (dynamic filter)
动态锁定 (dynamic locking)
动态游标 (dynamic cursor)
度量值 (measure)
段落还原 (piecemeal restore)
断字 (word-breaking)
断字符 (word breaker)
队列 (queue)
对等复制 (peer-to-peer replication)
对齐 (alignment)
对象 (object)
对象变量 (object variable)
对象标识符 (object identifier)
对象依赖关系 (object dependencies)
多对多关系 (many-to-many relationship)
多对一关系 (many-to-one relationship)
多服务器管理 (multiserver administration)
多个实例 (multiple instances)
多基准差异备份 (multibase differential)
多维 OLAP (MOLAP) (multidimensional OLAP (MOLAP))
多维表达式 (MDX) (Multidimensional Expressions (MDX))
多维结构 (multidimensional structure)
多维数据集 (cube)
多维数据集角色 (cube role)
多线程服务器应用程序 (multithreaded server application)
多用户 (multiuser)
多重继承 (multiple inheritance)
二进制大型对象 (binary large object)
发布 (publication)
发布保持期 (publication retention period)
发布表 (publishing table)
发布服务器 (Publisher)
发布服务器 (publishing server)
发布数据库 (publication database)
反身关系 (reflexive relationship)
返回参数 (return parameters)
范围查询 (range query)
方法 (method)
访问接口 (provider)
非聚集索引 (nonclustered index)
非强制关系 (unenforced relationship)
非叶 (nonleaf)
非叶成员 (nonleaf member)
分布式查询 (distributed query)
分布式分区视图 (distributed partitioned view)
分布式事务 (distributed transaction)
分段 (segmentation)
分发 (distribute)
分发保持期 (distribution retention period)
分发服务器 (Distributor)
分发数据库 (distribution database)
分隔符 (delimiter)
分配单元 (allocation unit)
分区 (partition)
分区 (partitioning)
分区方案 (partition scheme)
分区函数 (partition function)
分区快照 (partitioned snapshot)
分区依据列 (partitioning column)
分析服务器 (Analysis server)
服务器订阅 (server subscription)
服务器名称 (server name)
服务器游标 (server cursor)
辅助服务器 (secondary server)
辅助数据库 (secondary database)
父级 (parent)
复制 (replication)
复制冲突查看器 (Replication Conflict Viewer)
复制的数据 (replicated data)
复制监视器 (Replication Monitor)
复制拓扑 (replication topology)
干扰词 (noise word)
隔离级别 (isolation level)
跟踪令牌 (tracer token)
跟踪文件 (trace file)
更改脚本 (change script)
更新 (update)
更新查询 (Update query)
更新锁 (update lock)
更新统计信息 (update statistics)
工具 (tool)
公共语言运行时 (common language runtime)
共享锁 (shared lock)
共享维度 (shared dimension)
固定服务器角色 (fixed server role)
固定数据库角色 (fixed database role)
关键字 (keyword)
关系 (relationship)
关系 OLAP (ROLAP) (relational OLAP (ROLAP))
关系对象 (relationship object)
关系类型 (relationship type)
关系数据库 (relational database)
关系数据库管理系统 (RDBMS) (relational database management system (RDBMS))
归置 (collocation)
规范化规则 (normalization rules)
规则 (rule)
规则 (rules)
滚动 (scroll)
国际标准化组织 (ISO) (International organization for Standardization (ISO))
国际电工技术委员会 (IEC) (International Electrotechnical Commission (IEC))
过程缓存 (procedure cache)
过度适应 (overfitting)
函数 (function)
合并 (merge)
合并复制 (merge replication)
后代 (descendant)
候选键 (candidate key)
还原 (restore)
还原顺序 (restore sequence)
缓存老化 (cache aging)
幻影 (phantom)
恢复 (recover)
恢复 (recovery)
恢复点 (recovery point)
恢复分叉点 (recovery fork point)
恢复分支 (recovery branch)
恢复间隔 (recovery interval)
恢复路径 (recovery path)
恢复模式 (recovery model)
回滚 (roll back)
混合 OLAP (HOLAP) (hybrid OLAP (HOLAP))
活动语句 (active statement)
伙伴 (partner)
基本数据类型 (base data type)
基表 (base table)
基础表 (underlying table)
基准备份 (base backup)
级别 (level)
级别 (rank)
级联更新 (cascading update)
级联删除 (cascading delete)
计划备份 (scheduled backup)
计划强制 (plan forcing)
计划指南 (plan guide)
计算成员 (calculated member)
计算传递 (calculation pass)
计算公式 (calculation formula)
计算机 DSN (machine DSN)

Tags: SQL 术语

分类:MSSQL | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 38

Delphi与SQL模糊查询

Delphi代码
  1. 模糊查询  
  2.   
  3.   
  4. 1.用变量进行模糊查询  
  5. 对数据进行模糊查询主要用SQL语句LIKE来实现。该语句放在Where语句的后面,使用标识符“%”、“_”、“[]”、“[^]”对数据进行模糊查询。  
  6. 例如,对姓名为“王”,并且姓名为两个字的学生信息。  
  7. Select * FROM MR_Student where 姓名 like '林_'  
  8. 例如,查询数学成绩在70~79之间的学生信息。  
  9. Select * FROM MR_Student where 数学 like '7[0123456789]'  
  10. 例如,查询除三年级二班的所有学生信息。  
  11. Select * FROM MR_Student where 班级 like '三年[^二]_'  
  12. 例如,查询三年级的所有学生信息。  
  13. Select * FROM MR_Student where 班级like '三*'  
  14. 下面对姓名进行模糊查询,只要在“姓名”文本框中输入名字中的任意一个字,便可以查找相关人员的信息。  
  15. 操作步骤如下:  
  16. 1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDateTimePicker、TDataSource、TButton和TDBGrid等组件。  
  17. 2)主要程序代码如下:  
  18.   with ADOQuery1 do  
  19.   begin  
  20.     close;  
  21.     SQL.Clear;  
  22.     SQL.Add('Select * FROM MR_Student where 姓名 like '+''''+'%'+Trim(edit1.Text)+'%'+'''');  
  23.     open;  
  24.   end;  
  25. 上面的SQL语句也可以写成如下形式:  
  26. SQL.Add('Select * FROM MR_Student where 姓名 like ''%'+Trim(edit1.Text)+'%''');  
  27.   
  28.   
  29. 2.使用参数进行模糊查询  
  30. 在Delphi中进行模糊查询时,可以用TADOQuery组件来向SQL语句中传递参数。  
  31. 其格式为:“Like:参数名”。  
  32. 利用TADOQuery组件的ParamByName方法将值传递给参数。  
  33. * 注意:在Like后面必须加空格。  
  34. 下面用TADOQuery组件进行参数传递,并对数据进行模糊查询。  
  35. 操作步骤如下:  
  36. 1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDateTimePicker、TDataSource、TButton和TDBGrid等组件。  
  37. 2)主要程序代码如下:  
  38.   with ADOQuery1 do  
  39.   begin  
  40.     close;  
  41.     SQL.Clear;  
  42.     SQL.Add('Select * FROM MR_Student where 姓名 like :aa');  
  43.     Parameters.ParamByName('aa').Value:='%'+trim(Edit1.text)+'%';  
  44.     open;  
  45.   end;  
  46.     
  47.     
  48. 3.复杂模糊查询  
  49. 在对信息进行模糊查询的时候,也可以通过逻辑运算符(AND、OR、NOT)插入其他的查询条件来提高查询的速度。  
  50. 下面是模糊查询和其他查询方法相结合而形成的复杂模糊查询。  
  51. 操作步骤如下:  
  52. 1)运行Delphi,在窗体中添加TADOConnection、TADOQuery、TDateTimePicker、TDataSource、TButton、TComboBox和TDBGrid等组件。  
  53. 2)主要程序代码如下:  
  54.   if CheckBox1.Checked=true then  
  55.    Str := ' and 班级='+''''+ComboBox1.Text+''''  
  56.   else  
  57.    ComboBox1.Enabled := False;  
  58.   with ADOQuery1 do  
  59.   begin  
  60.    close;  
  61.    SQL.Clear;  
  62.    SQL.Add('Select * FROM MR_Student where 姓名 like ''%'+Trim(edit1.Text)+'%'''+Str);  
  63.    open;  
  64.   end;  

Tags: Delphi SQL 模糊 查询

分类:Delphi | 固定链接 | 评论: 0 | 引用: 0 | 查看次数: 39