数据查询
基本结构:
SELECT 目标列名
FROM 表名
WHERE <检索条件>
GROUP BY <分组依据的列名>
HAVING <组提取条件>
ORDER BY <排序依据列>
查询经过计算的列并加入常数列:
SELECT sname, '出生年份:'2020-age 查询姓名及其出生年份,并加入常数列
FROM student
改变列标题:
SELECT sname 姓名, 'Year of Birth' 出生年份,2020-age
FROM student
去掉重复行:
SELECT DISTINCT sid
FROM sc
查询满足条件的元组:
字符匹配:
LIKE 运算符:
格式:
列名 [NOT] LIKE <匹配串>
匹配串可包括以下四种通配符:
'_' :匹配任意一个字符
'%' :匹配0或多个字符
'[]' :匹配[]中的任意一个字符;对于连续字母的匹配,可简写
'[^]':不匹配[]中的任意一个字符
查询结果排序:
ORDER BY 列名 ASC(升序)|DESC(降序)
查询学号,成绩,按成绩降序排列:
SELECT sid,grade
FROM sc
WHERE cid=8108001 ORDER BY grade DESC
SQL提供的计算函数:
COUNT(*) :统计表中元组个数;
COUNT ([DISTINCT] 列名) :统计本列列值个数
SUM([DISTINCT] 列名) :计算列值总和
AVG([DISTINCT] 列名) :计算列值平均数
MAX([DISTINCT] 列名) :求列值最大值
MIN([DISTINCT] 列名) :求列值最小值
对查询结果进行分组:
一般形式:
GROUP BY 分组条件
HAVING 组过滤条件
查询每名学生的选课门数和平均成绩
SELECT sid as 学号,
COUNT(*) as 选课门数,
AVG(grade) as 平均成绩
FROM sc GROUP BY sid
查询选修三门以上课程的学生的学号
SELECT sid
FROM sc
GROUP BY sid
HAVING COUNT(*) > 3
多表连接查询
内连接
查询计算机系学生的修课情况,要求列出学生姓名、课程名和成绩
SELECT student.sid, cid, grade
FROM sc, student
WHERE sc.sid=student.sid
AND student.department='计算机'
嵌套查询:
查询选修了8108010的课程且成绩高于此课程平均成绩的学生的学号、成绩
SELECT sid, grade
FROM sc
WHERE cid=8108010
AND grade> (
SELECT AVG(grade) FROM sc
WHERE cid=8108010)
存在性测试:一般使用EXISTS谓词
查询选修了8108010的学生姓名
SELECT sname FROM student
WHERE EXISTS
(SELECT * FROM sc
WHERE sc.sid=student.sid
AND cid=8108010)