首页 > 代码库 > SQL语句总结

SQL语句总结

SQL语句中常用关键词及其解释如下:1)SELECT将资料从数据库中的表格内选出,两个关键字:从 (FROM) 数据库中的表格内选出 (SELECT)。语法为SELECT "栏位名" FROM "表格名"2)DISTINCT在上述 SELECT 关键词后加上一个 DISTINCT 就可以去除选择出来的栏位中的重复,从而完成求得这个表格/栏位内有哪些不同的值的功能。语法为SELECT DISTINCT "栏位名" FROM "表格名"3)WHERE这个关键词可以帮助我们选择性地抓资料,而不是全取出来。语法为SELECT "栏位名" FROM "表格名" WHERE "条件" 4)AND OR上例中的 WHERE 指令可以被用来由表格中有条件地选取资料。这个条件可能是简单的 (像上一页的例子),也可能是复杂的。复杂条件是由二或多个简单条件透过 AND 或是 OR 的连接而成。语法为:SELECT "栏位名"  FROM "表格名"  WHERE "简单条件"  {[AND|OR] "简单条件"}+5)IN在 SQL 中,在两个情况下会用到 IN  这个指令;这一页将介绍其中之一:与 WHERE 有关的那一个情况。在这个用法下,我们事先已知道至少一个我们需要的值,而我们将这些知道的值都放入 IN  这个子句。语法为:SELECT "栏位名"  FROM "表格名"  WHERE "栏位名" IN (‘值一‘, ‘值二‘, ...)  6)BETWEENIN 这个指令可以让我们依照一或数个不连续 (discrete)的值的限制之内抓出资料库中的值,而 BETWEEN 则是让我们可以运用一个范围 (range)  内抓出资料库中的值,语法为:SELECT "栏位名"  FROM "表格名" WHERE "栏位名" BETWEEN ‘值一‘ AND ‘值二‘ 7)LIKELIKE 是另一个在 WHERE  子句中会用到的指令。基本上, LIKE  能让我们依据一个模式(pattern) 来找出我们要的资料。语法为:SELECT "栏位名"  FROM "表格名"  WHERE "栏位名" LIKE {模式} 8)ORDER BY我们经常需要能够将抓出的资料做一个有系统的显示。这可能是由小往大 (ascending)  或是由大往小(descending)。在这种情况下,我们就可以运用 ORDER BY 这个指令来达到我们的目的。语法为:SELECT "栏位名"  FROM "表格名 [WHERE "条件"] ORDER BY "栏位名" [ASC, DESC] 9)函数函数允许我们能够对这些数字的型态存在的行或者列做运算,包括 AVG (平均)、COUNT (计数)、MAX (最大值)、MIN (最小值)、SUM (总合)。语法为:SELECT "函数名"("栏位名") FROM "表格名"  10)COUNT这个关键词能够帮我我们统计有多少笔资料被选出来,语法为:SELECT COUNT("栏位名") FROM "表格名"11)GROUP BYGROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。语法为:SELECT "栏位1", SUM("栏位2")  FROM "表格名"  GROUP BY "栏位1" 12)HAVING该关键词可以帮助我们对函数产生的值来设定条件。语法为:SELECT "栏位1", SUM("栏位2")  FROM "表格名"  GROUP BY "栏位1"  HAVING (函数条件)  13)ALIAS我们可以通过ALIAS为列名称和表名称指定别名,语法为:SELECT "表格别名"."栏位1" "栏位别名"  FROM "表格名" "表格别名"  下面为一个例子,通过它我们应该能很好地掌握以上关键词的使用方法。Student(S#,Sname,Sage,Ssex) 学生表Course(C#,Cname,T#) 课程表SC(S#,C#,score) 成绩表Teacher(T#,Tname) 教师表问题:1、查询“001”课程比“002”课程成绩高的所有学生的学号;select a.S#from (select s#,score from SC where C#=’001′) a,(select s#,score from SC where C#=’002′) bwhere a.score>b.score and a.s#=b.s#;2、查询平均成绩大于60分的同学的学号和平均成绩;select S#,avg(score)from scgroup by S# having avg(score) >60;3、查询所有同学的学号、姓名、选课数、总成绩;select Student.S#,Student.Sname,count(SC.C#),sum(score)from Student left Outer join SC on Student.S#=SC.S#group by Student.S#,Sname4、查询姓“李”的老师的个数;select count(distinct(Tname))from Teacherwhere Tname like ‘李%’;5、查询没学过“叶平”老师课的同学的学号、姓名;select Student.S#,Student.Snamefrom Studentwhere S# not in (select distinct( SC.S#) from SC,Course,Teacher where SC.C#=Course.C# and Teacher.T#=Course.T# and Teacher.Tname=’叶平’);6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere 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′);7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;select S#,Snamefrom Studentwhere S# in(select S#from SC ,Course ,Teacherwhere 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=’叶平’));8、查询所有课程成绩小于60分的同学的学号、姓名;select S#,Snamefrom Studentwhere S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);9、查询没有学全所有课的同学的学号、姓名;select Student.S#,Student.Snamefrom Student,SCwhere Student.S#=SC.S#group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);10、查询至少有一门课与学号为“1001”的同学所学相同的同学的学号和姓名;select S#,Snamefrom Student,SCwhere Student.S#=SC.S# and C# in (select C# from SC where S#=‘1001‘);11、删除学习“叶平”老师课的SC表记录;Delect SCfrom course ,Teacherwhere Course.C#=SC.C# and Course.T#= Teacher.T# and Tname=‘叶平‘;12、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分SELECT L.C# 课程ID,L.score 最高分,R.score 最低分FROM SC L ,SC RWHERE L.C# = R.C#andL.score = (SELECT MAX(IL.score)FROM SC IL,Student IMWHERE IL.C# = L.C# and IM.S#=IL.S#GROUP BY IL.C#)andR.Score = (SELECT MIN(IR.score)FROM SC IRWHERE IR.C# = R.C#GROUP BY IR.C# );13、查询学生平均成绩及其名次SELECT 1+(SELECT COUNT( distinct 平均成绩)FROM (SELECT S#,AVG(score) 平均成绩FROM SCGROUP BY S# ) T1WHERE 平均成绩 > T2.平均成绩) 名次, S# 学生学号,平均成绩FROM (SELECT S#,AVG(score) 平均成绩 FROM SC GROUP BY S# ) T2ORDER BY 平均成绩 desc;14、查询各科成绩前三名的记录:(不考虑成绩并列情况)SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 3 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC)ORDER BY t1.C#;15、查询每门功成绩最好的前两名SELECT t1.S# as 学生ID,t1.C# as 课程ID,Score as 分数FROM SC t1WHERE score IN (SELECT TOP 2 scoreFROM SCWHERE t1.C#= C#ORDER BY score DESC )ORDER BY t1.C#;

 

SQL语句总结