1.查询指定列
--SELECT classNo,className,institute
--FROM Class
2.消除重复元组
--SELECT DISTINCT institute
--FROM Class
3.查询所有列
--SELECT *
--FROM Class
4.给属性列起名(此处的AS可以省略也可以不省略)
--SELECT institute AS 所属学院,classNo AS 班级编号,className AS 班级名称
--FROM Class
5.查询经过计算的列(LOWER 将课程名的大写字母转换为小写字母)
--SELECT courseNo AS 课程号,LOWER(courseName)AS 课程名,courseHour/16 AS 周课时
--FROM Course
6.比较运算
--SELECT classNo 班级编号,className 班级名,institute 学院
--FROM Class
--WHERE grade = 2015
7.查询年龄
--SELECT studentNo 学号,studentName 学生姓名,birthday 出生日期
--FROM Student
--WHERE YEAR(GETDATE())-YEAR(birthday)>=19
8.范围查询((NOT)BETWEEN A AND B)(不在)在 (A,B)范围内
9.集合查询
--9.1 属于该集合查询
--SELECT studentNo,courseNo,score
--FROM Score
--WHERE courseNo IN (001,005,009)
--9.2 不属于该集合的查询(IN(a,b,c) NOT IN(a,b,c))
--SELECT studentName,native,classNo
--FROM Student
--WHERE native NOT IN ('南昌','上海')
10.空值查询(IS NULL IS NOT NULL)
11.字符匹配查询(LIKE 任意一个字符用_ 任意多个字符串用%)
--11.1 %的使用
--SELECT *
--FROM Class
--WHERE className LIKE
--11.2 _的使用
--SELECT *
--FROM Student
--WHERE studentName LIKE
--11.3 当不使用_或LIKE时,可以使用 =
--SELECT *
--FROM Student
--WHERE nation =
--11.4 特别注意,当查询的字符串中本身包含通配符% 或 _ 就必须使用ESCAPE<换码字符>短语,对通配符进行转义处理
--SELECT *
--FROM Class
--WHERE className LIKE
--WHERE className LIKE
12.逻辑运算
--12.1 逻辑或OR运算查询
--SELECT *
--FROM Score
--WHERE courseNo='001'OR courseNo='005'OR courseNo='003'
--12.2 逻辑与AND运算查询
--SELECT *
--FROM Student
--WHERE YEAR(birthday) = 1998 AND nation = '汉族'
--12.3 不等于的扩展
--SELECT *
--FROM Student
--WHERE YEAR(birthday)! = 1999 AND nation != '汉族'
--12.4 成绩范围内查询
--SELECT *
--FROM Score
--WHERE score>=80 AND score <=90
--12.5 成绩范围外查询
--SELECT *
--FROM Score
--WHERE score<80 OR score >90
13.排序查询(升序 默认的,可以不填,要填就填ASC,降序为DESC)
--SELECT *
--FROM Student
--WHERE YEAR(birthday) = '1999'
--ORDER BY studentNo DESC
14.查询表
--SELECT *
--FROM (SELECT * FROM Student WHERE sex ='女') AS a
--WHERE YEAR(birthday) = 1999
--上面语句可以等价于下面语句
--SELECT *
--FROM Student
--WHERE YEAR(birthday) = 1999 AND sex = '女'
15.聚合查询(重点)
--count()计数 sum()求和 avg()平均值 max()最大值 min() 最小值
--15.1 查询学生的总人数
--SELECT count(*) AS 学生人数
--FROM Student
--15.2 查询所有选课的人数(注:去除重复的)
--SELECT COUNT(DISTINCT studentNo) AS 选课人数已经去掉重复
--FROM Student
--15.3 查询学号为1500003同学所选课程的平均分
--SELECT AVG(Score) AS 平均分
--FROM Score
--WHERE studentNo = '1500003'
16 分组查询(重点)
--GROUP BY 子句对查询结果按某一列或某几列进行分组,值相等的分为一组;
--HAVING子句对分组的结果进行选择,仅输出满足条件的组,配合GROUP BY 子句配合使用
--16.1 查询每个同学的选课门数,平均分数和最高分
--SELECT studentNo,count(*) AS 选课门数,AVG(score) AS 平均分,MAX(score)最高分
--FROM Score
--GROUP BY studentNo
--16.2 查询平均分在80分以上的每个同学的选课门数、平均分和最高分
--SELECT studentNo,count(*) AS 选课门数,AVG(score) AS 平均分,MAX(score)最高分
--FROM Score
--GROUP BY studentNo
--HAVING AVG(score)>= 70
17.连接查询(重点)
--17.1 等值连接
--SELECT studentNo,studentName,native,Student.classNo,className
--FROM Student,Class
--WHERE Student.classNo = Class.classNo AND institute =
--当涉及到多个表的相同属性名,必须在相同的属性名前加上表名加以区分如 Student.classNo
--上述语句改写为:
--SELECT studentNo,studentName,native,S.classNo,className
--FROM Student S,Class
--WHERE S.classNo = Class.classNo AND institute =
--上述语句进一步简化
--SELECT studentNo,studentName,native,S.classNo,className
--FROM Student S,Class C
--WHERE S.classNo = C.classNo AND institute =
18.查找选修了课程名称为“计算机原理”的同学学号、姓名。
--SELECT studentName,st.studentNo
--FROM Course c,Student st,Score sc
--WHERE c.CourseName = '计算机原理' AND sc.studentNo = st.studentNo AND sc.courseNo = c.courseNo
19.查找同时选修为001和002课程的同学学号、姓名、课程号和相应成绩,并按学号输出
--SELECT sc.studentNo,studentName,c.courseNO,sc.score
--FROM Score sc,Student st,(SELECT* FROM Score WHERE courseNo = '002')c
--WHERE (sc.courseNo = '001') AND (sc.studentNo = st.studentNo) AND (st.studentNo = c.studentNo)
--ORDER BY st.studentNo
--错误用法:sc.course ='001'AND sc.course = '002'错误点:在逻辑运算当中,不可以对同一个属性进行逻辑“与”的等值运算
20、查询获得的总学分(注:只有成绩合格才能获得该课程的学分)大于或等于28的同学的学号、姓名和总学分,并按学号排序输出。
--SELECT st.studentNo,st.studentName,SUM(c.creditHour) AS 总学分
--FROM Score sc,Course c,Student st
--WHERE st.studentNo = sc.studentNo AND c.courseNo = sc.courseNo AND sc.score>=60
--GROUP BY st.studentNo,studentName
--HAVING SUM(c.creditHour)>=28
--ORDER BY st.studentNo
21、实现成绩表Score和课程表Course的自然连接
--SELECT studentNo,a.courseNo,score,courseName,creditHour,courseHour,priorCourse
--FROM Score a,Course b
--WHERE a.courseNo = b.courseNo
22、查找同时选修了编号为001和002课程的同学学号、姓名、课程号和相应成绩,并按照学号输出
--SELECT a.studentNo,studentName,b.courseNo,b.score,c.courseNo,c.score
--FROM Student a,Score b,Score c
--WHERE b.courseNo = '001' AND c.courseNo = '002' AND b.studentNo = c.studentNo AND a.studentNo = b.studentNo
--ORDER BY a.studentNo
23、在学生表Student中查找与李宏冰同学在同一个班的同学的姓名,班级编号和出生日期
--SELECT a.studentName,a.classNo,a.birthday
--FROM Student a,Student b
--WHERE b.studentName='李宏冰' AND a.classNo = b.classNo
24、查询2015级每个班级的班级名称,所属学院、学生学号、学生姓名,按班级名称排序输出。
--SELECT className,institute,studentNo,studentName
--FROM Class a,Student b
--WHERE a.classNo = b.classNo AND grade = 2015
--ORDER BY className
--注意:班级表中的金融管理15=01班没有出现在查询结果中,原因是该班没有学生。
25、使用左外连接查询2015级每个班级的班级名称,所属学院、学生学号、学生姓名,按班级名称和学号排序输出。
--语法:表1 + LEFT(RIGHT) OUTER JOIN + 表2 + ON +连接条件
--SELECT className,institute,studentNo,studentName
--FROM Class a LEFT OUTER JOIN Student b ON a.classNo = b.classNo
--WHERE grade = 2015
--ORDER BY className,studentNo
--注:相比外连接,这里把一个值为空的学生,也输出来了。
26、使用右外连接查询2015级每个班级的班级名称、所属学院、学生学号、学生姓名,按班级名称和学号排序输出
--SELECT className,institute,studentNo,studentName
--FROM Class a RIGHT OUTER JOIN Student b ON a.classNo = b.classNo
--WHERE grade = 2015
--ORDER BY className,studentNo
27、使用全外连接查询2015级每个班级的班级名称、所属学院、学生学号、学生姓名,按班级名称和学号排序输出。
--SELECT className,institute,studentNo,studentName
--FROM Class a FULL OUTER JOIN Student b ON a.classNo = b.classNo
--WHERE grade = 2015
--ORDER BY className,studentNo
28、查询选修过课程地学生姓名(IN子查询地运用)
--SELECT studentName
--FROM Student
--WHERE Student.studentNO IN (SELECT Score.studentNo FROM Score)
29、查找选修过课程名中包含“系统”地课程地同学学号、姓名和班级编号。(非相关子查询)
--SELECT studentNo,studentName,classNo
--FROM Student
--WHERE studentNo IN (SELECT studentNo FROM Score WHERE courseNo IN (SELECT courseNo FROM Course WHERE courseName LIKE