查询 检查 检索 都用查询语句
最简单的查询语句 SELECT FROM
单表查询
一、用*代表所有列、查询具体的列
- 查询student 表的所有信息
SELECT *
FROM student - 查询所有学生的学号姓名
SELECT ALL sno,sname
FROM student - 查询所有女生的信息
SELECT *
FROM student
WHERE sex=‘女’ - 查询王老师所授课的课程信息
SELECT *
FROM course
WHERE teacher=‘王老师’
二、where子句中带比较运算符的查询条件、用and或or连接条件
- 查询年龄小于18岁的女生的学号和姓名
SELECT sno,sname
FROM student
WHERE sage<18 AND sex=‘女’ - 查询年龄小于18或籍贯是河南郑州的学生学号姓名
SELECT sno,sname
FROM student
WHERE sage<18 OR home=‘河南郑州’
三、where子句中带in的查询。
- 查询王老师、刘老师、李老师所教授的课程号课程名
SELECT cno,cname
FROM course
WHERE teacher IN (‘王老师’,‘刘老师’,‘李老师’)
四、空值查询null或not null
- 查询cpno为空的课程号和课程名
SELECT cno,cname
FROM course
WHERE cpno IS NULL - 查询home为空的学生学号和姓名
SELECT sno,sname
FROM student
WHERE home IS NULL
五、between…and…
- 查询年龄在16到20岁之间的学生的学号和姓名
SELECT sno,sname
FROM student
WHERE sage BETWEEN 16 AND 20 - 查询学分在3到6分之间的课程号、课程名、学分
SELECT cno,cname,credit
FROM course
WHERE credit BETWEEN 3 AND 6
六、模糊查询
- 查询所有姓刘的学生信息。
SELECT *
FROM student
WHERE sname LIKE ‘刘%’ - 查询COURSE表中第二个字为据的课程信息。
SELECT *
FROM course
WHERE cname LIKE ‘_据%’ - 查询所有姓刘、李、王的学生信息。
SELECT *
FROM student
WHERE sname LIKE ‘刘%’ OR sname LIKE ‘李%’ OR sname LIKE ‘王%’ - 查询姓名由5个字母组成的学生姓名和学号。
SELECT sname,sno
FROM student
WHERE sname LIKE ‘_____’ - 查询姓名中有乐字的学生学号和姓名。
SELECT sname,sno
FROM student
WHERE sname LIKE ‘%乐%’
七、消除重复的元组distinct
- 查询sc表的sno列。
SELECT DISTINCT sno
FROM sc
八、对查询结果进行排序
- 查询20102学生的选修信息并按成绩的降序输出。
SELECT *
FROM sc
WHERE sno=‘2012’
ORDER BY score DESC, cno DESC
九、聚合函数(集函数)
- 查询20101学生的总成绩和平均成绩。
SELECT sno 学号 SUM(score) 总分, AVG(score) AS 平均分
FROM sc
WHERE sno=‘20101’ - 查询20102学生的最高成绩和最低成绩。
SELECT sno 学号,MAX(score) 最高分,MIN(score) 最低分
FROM sc
WHERE sno=‘20102’ - 查询选课人次。
SELECT COUNT (sno)
FROM sc - 查询选课人数。
SELECT COUNT (DISTINCT sno)
FROM sc
十、分组查询
- 查询每个学生的总成绩和平均成绩。
SELECT SUM(score) 总成绩, AVG(score) 平均成绩
FROM student
GROUP BY sno - 查询平均成绩大于90分的学生学号和平均成绩。
SELECT sno 学号, AVG(score) 平均分
FROM sc
GROUP BY sno
HAVING AVG(score)>90 - 查询每门课程的选课人数。
SELECT cno 课程号, COUNT (sno) 选课人数
FROM sc
GROUP BY cno
十一、显示查询结果中的部分元组(limit)
- 查询所有姓刘的学生信息,且只显示前4条记录。
SELECT *
FROM student
WHERE sname LIKE ‘刘%’
LIMIT 4 - 输出STUDENT表的第3行到第10行的记录。
SELECT *
FROM student
LIMIT (2,8)
多表查询
一、使用 UNION 、 UNION ALL 合并查询
- 查询student 表和sc表的sno列
SELECT sno
FROM student
UNION
SELECT sno
FROM sc 消除了重复数据
SELECT sno
FROM student
UNION ALL
SELECT sno
FROM sc
UNION 、 UNION ALL的区别:UNION消除了重复数据
二、笛卡尔积(cross join)交叉连接(列相加,行相乘)
- 查询student表 sc表的笛卡尔积
SELECT *
FROM student CROSS JOIN sc
三、内连接和多表连接、子查询
- 查询选修了c101课程的学生的学号和成绩
SELECT sno,score
FROM sc
WHERE cno=‘c101’ - 查询选修了c101课程的学生的学号和姓名
法一:SELECT student.sno,sname
FROM student INNER JOIN sc ON studnet.sno=sc.sno
WHERE cno=‘c101’ (内连接)
法二:SELECT sc.sno,sname
FROM student,sc
WHERE student.sno=sc.sno AND cno=‘c101’ (多表连接)
法三:
SELECT sno,sname
FROM student
WHERE sno IN(SELECT sno
FROM sc
WHERE cno=‘c101’) (嵌套连接)
- 查询20101号学生所选修的课程号和课程名
法一:SELECT course.cno,cname
FROM course INNER JOIN sc ON course.cno=sc.cno
WHERE sno=‘20101’
法二:SELECT sc.cno,cname
FROM course,sc
WHERE course.cno=sc.cno AND sno=‘20101’
法三:
SELECT cno,cname
FROM course
WHERE cno IN(SELECT cno
FROM sc
WHERE sno=‘20101’)
- 查询选修了数据结构课程的学生的学号
法一:SELECT sno
FROM course INNER JOIN sc ON course.cno=sc.cno
WHERE cname=‘数据结构’
法二:SELECT sno
FROM course,sc
WHERE course.cno=sc.cno AND cname=‘数据结构’
法三:
SELECT sno
FROM sc
WHERE cno IN (SELECT cno
FROM course
WHERE cname=‘数据结构’)
- 查询选修了数据结构课程的学生的学号和姓名
法一:SELECT student.sno,sname
FROM student JOIN sc ON student.sno=sc.cno JOIN course ON sc.cno=course.cno
WHERE cname=‘数据结构’
法二:SELECT sc.sno,sname
FROM student,sc,course
WHERE student.sno=sc.cno AND sc.cno=course.cno AND cname=‘数据结构’
法三:
SELECT cno
FROM course
WHERE cname=‘数据结构’
SELECT sno,sname
FROM student
WHERE sno IN (SELECT sno
FROM sc
WHERE cno IN (SELECT cno
FROM course
WHERE cname=‘数据结构’))
四、自然连接(natural)
- 查询sc表和student表的自然连接的结果
SELECT *
FROM sc NATURAL JOIN student (自然连接)
SELECT *
FROM sc JOIN student ON sc.cno=student.sno (内连接/等值连接)
等值连接有重复的属性列 自然连接没有重复的属性列
- 查询sc表和course表的自然连接的结果
SELECT *
FROM sc NATURAL JOIN course
五、自连接
- 查询和李思远同学同岁的学生学号和姓名
法一:SELECT sno,sname
FROM student
WHERE sage=(SELECT sage
FROM student
WHERE sname=‘李思远’
)
子查询,也叫嵌套查询
法二:SELECT s2.sno,s2.sname
FROM student s1,student s2
WHERE s1.sage=s2.sage AND s1.sname=‘李思远’ AND s1.snam!=‘李思远’
六、外连接
- 查询sc表和student表的左外连接、右外连接
LEFT OUTER JOIN
RIGHT OUTER JOIN
SELECT *
FROM sc LEFT OUTER JOIN student ON sc.sno=student.sno
SELECT *
FROM sc RIGHT OUTER JOIN student ON sc.sno=student.sno