|
示例表:
学生表(学号,姓名,年龄,性别)
成绩表(学号,课程号,成绩)
课程表(课程号,课程名,教师)
关系代数运算应用实例:
1)查询学习课程号为"C2"的学生学号与成绩.
SELECT 学号,成绩 FROM 成绩表 WHERE 课程号='C2'
2)查询学习课程号为"C2"的学生学号与姓名.
写法1(联接查询,作笛卡儿积操作,速度最慢):
SELECT 学生表.学号,姓名 FROM 学生表,成绩表 WHERE 学生表,学号=成绩表.学号 AND 课程号='C2'
写法2(嵌套查询):
SELECT 学号,姓名 FROM 学生表 WHERE 学号 IN (SELECT 学号 FROM 成绩表 WHERE 课程号='C2')
写法3(嵌套查询):
SELECT 学号,姓名 FROM 学生表 WHERE 'C2' IN (SELECT 学号 FROM 成绩表 WHERE 学号=学生表.学号)
写法4(使用存在量词的嵌套查询):
SELECT 学号,姓名 FROM 学生表 WHERE EXISTS (SELECT * FROM 成绩表 WHERE 学号=学生表.学号 AND 课程号='C2')
3)查询查询课程名为"英语"的学生的学号与姓名.
写法1:
SELECT 学号,姓名 FROM 学生表 WHERE 学号 IN (SELECT 学号 FROM 成绩表 WHERE 课程号 IN (SELECT 课程号 FROM 课程表 WHERE 课程名='英语'))
写法2:
SELECT 学号,姓名 FROM 学生表,成绩表,课程表 WHERE 学生表.学号=成绩表.学号 AND 课程表.课程号=成绩表.课程号 AND 课程表.课程名='英语'
4)查询选修课程号为"C2"和"C4"的学生学号.
SELECT 学号 FROM 成绩表 WHERE 课程号='C2' AND 课程号='C4'
5)查询至少选修课程号为"C2"和"C4"的学生学号.
SELECT X.学号 FROM 成绩表 AS X,成绩表 AS Y WHERE X.学号=Y.学号 AND X.课程号='C2' AND Y.课程号='C4'
6)查询不学"C2"课程的学生的姓名和年龄.
SELECT 姓名,年龄 FROM 学生表 WHERE NOT EXISTS (SELECT * fROM 成绩表 WHERE 学号=学生表.学号 AND 课程号='C2')
7)查询学习全部课程的学生的姓名.
SELECT 姓名 FROM 学生表 WHERE NOT EXISTS (SELECT * FROM 课程表 WHERE NOT EXISTS (SELECT * FROM 成绩表 WHERE 学号=学生表.学号 AND 课程号=课程表.课程号))
8)查询所学课程包含学号为"S3"的学生所学课程的学生学号.
SELECT DISTINCT 学号 FROM 成绩表 AS X WHERE NOT EXISTS (SELECT * FROM 成绩表 AS Y WHERE 学号='S3' AND NOT EXISTS (SELECT * FROM 成绩表 AS Z WHERE 学号=X.学号 AND 课程号=Y.课程号))
聚合函数应用实例:
1)查询男学生的总人数和平均年龄.
SELECT COUNT(*),AVG(年龄) FROM 学生表 WHERE 性别='男'
2)查询选修了课程的学生人数.
SELECT COUNT(DISTINCT 学号) FROM 课程表
SELECT语句完整句法实例:
1)查询每一年龄选修课程的学生人数.
SELECT 年龄,COUNT(DISTINCT 学生表.学号) FROM 学生表,成绩表 WHERE 学生表.学号=成绩表.学号 GROUP BY 年龄
2)查询男同学的每一年龄组(超过50人)的人数,要求查询结果按人数升序排序,人数相同时按年龄降序排序.
SELECT 年龄,COUNT(学号) FROM 学生表 WHERE 性别='男' GROUP BY 年龄 HAVING COUNT(*)>50 GROUP BY 2,AGE DESC
未完待续...... |
|