1.测试数据如下
student 表,学生表
sno sname ssex sage sdept
1 刘敏 女 19 计算机
2 周松 男 21 计算机
3 张明 男 20 经贸
4 孟欣 女 21 信管
学生课程表 course
cno cname cpno
1 数据库 4
2 操作系统 3
3 信息系统
4 数据结构 2
学生选课表
sno cno grade
1 1 89
1 2 97
1 3 67
2 1 78
2 2 90
使用内联操作
直接式,无需关键词
查询学生信息和选课成绩
select ss.sno,ss.sname,course.cname,sc.grade from student ss ,sc,course where ss.sno=sc.sno and course.cno=sc.cno;
关键词INNER JOIN
select ss.sno,ss.sname,course.cname,sc.grade from student ss INNER JOIN sc on ss.sno=sc.sno INNER JOIN course on course.cno=sc.cno
输出结果
sno sname cname grade
1 刘敏 数据库 89
1 刘敏 操作系统 97
1 刘敏 信息系统 67
2 周松 数据库 78
2 周松 操作系统 90
课程名称和选行课程
select c1.cname,c2.cname from course c1,course c2 where c2.cpno=c1.cno;
select c1.cname,c2.cname from course c1 INNER JOIN course c2 on c2.cpno=c1.cno
2.左连接
左表所有记录,右表条件满足
查询所有学生的成绩
select sx.*,sc.cno,sc.grade from student sx LEFT JOIN sc on sc.sno=sx.sno;
sno sname ssex sage sdept cno grade
1 刘敏 女 19 计算机 1 89
1 刘敏 女 19 计算机 2 97
1 刘敏 女 19 计算机 3 67
2 周松 男 21 计算机 1 78
2 周松 男 21 计算机 2 90
3 张明 男 20 经贸
4 孟欣 女 21 信管
3.右连接
右表全部,左表条件满足
查询选课学生的成绩 信息
select sx.*,sc.cno,sc.grade from student sx RIGHT JOIN sc on sc.sno=sx.sno;
sno sname ssex sage sdept cno grade
1 刘敏 女 19 计算机 1 89
1 刘敏 女 19 计算机 2 97
1 刘敏 女 19 计算机 3 67
2 周松 男 21 计算机 1 78
2 周松 男 21 计算机 2 90
4.子查询 EXISTS
先执行外层,然后将执行外层的每一行都传递到子查询里面,然后比对,得出真假,类似 嵌套的 2 个遍历