数据库学习 | 您所在的位置:网站首页 › 数据库三表连接查询语句 › 数据库学习 |
多表联合查询 多表联合查询可以通过连接运算实现,而连接运算又可以通过广义笛卡尔积后在进行选择运算来实现。
Select 多表联合查询语句 Select 列名 [[,列名]...] from 表名1,表名2,,... Where 查询条件;
可以使用as为表或者字段(属性)取别名;
Select 列名 [[,列名]...] from 表名1 [as] 别名1,表名2 [as} 别名2,,... Where 查询条件; Select 列名1 [as] 列别名1 [[,列名2 [as] 列别名2]...] from 表名1 [as] 表别名1,表名2 [as] 表别名2,,... Where 查询条件; “[]”表示其中的内容可以省略;
查询条件中要包含连接条件,通过不同的连接条件可以实现等值连接、不等值连接等各种连接。
示例: 原表数据: 学生表 student
老师表 teacher:
课程表 course:
选课表 student_course:
1 按“0001”号课程成绩由高到低顺序显示所有学生学号、姓名、成绩(二表连接); SELECT student.student_id, student.student_name, student_course.score FROM student, student_course WHERE student.student_id = student_course.student_id AND student_course.course_id = '0001' ORDER BY student_course.score DESC;当两个(多个)表中有相同的字段(属性,列名)时,使用表名(或表别名).列名的形式对查询内容和条件内容进行区分。 运行结果:
2 按“高等数学”课程成绩由高到低顺序显示所有学生姓名、学号、分数、课程名(三表连接); SELECT st.student_id, st.student_name, sc.score, co.course_name FROM student AS st, student_course AS sc, course AS co WHERE st.student_id = sc.student_id AND sc.course_id = co.course_id AND co.course_name = '高等数学' ORDER BY sc.score DESC;运行结果:
3 查询有薪水差额的任意两位教师(单表连接查询); SELECT t1.teacher_id AS '教工号1', t1.teacher_name AS '教师姓名1', t2.teacher_id AS '教工号2', t2.teacher_name AS '教师姓名2' FROM teacher t1, teacher t2 WHERE t1.teacher_salary > t2.teacher_salary;运行结果:
(数据较多,这里只显示一部分) 4 查询既学过“0001”又学过“0002”号课程的所有学生学号; SELECT sc1.student_id '学号' FROM student_course sc1, student_course sc2 WHERE sc1.student_id = sc2.student_id AND sc1.course_id = '0001' AND sc2.course_id = '0002';运行结果:
5 查询“0001”号课程比“0002”号课程成绩低的所有学生学号姓名; SELECT st.student_id '学号', st.student_name '姓名' FROM student_course sc1, student_course sc2, student st WHERE sc1.student_id = sc2.student_id AND sc1.student_id = st.student_id AND sc1.course_id = '0001' AND sc2.course_id = '0002' AND sc1.score < sc2.score;运行结果:
|
CopyRight 2018-2019 实验室设备网 版权所有 |