前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库学习 – select(多表联查)[通俗易懂]

数据库学习 – select(多表联查)[通俗易懂]

作者头像
全栈程序员站长
发布2022-07-21 15:33:55
1.3K0
发布2022-07-21 15:33:55
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

多表联合查询

多表联合查询可以通过连接运算实现,而连接运算又可以通过广义笛卡尔积后在进行选择运算来实现。

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”号课程成绩由高到低顺序显示所有学生学号、姓名、成绩(二表连接);

代码语言:javascript
复制
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 按“高等数学”课程成绩由高到低顺序显示所有学生姓名、学号、分数、课程名(三表连接);

代码语言:javascript
复制
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 查询有薪水差额的任意两位教师(单表连接查询);

代码语言:javascript
复制
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”号课程的所有学生学号;

代码语言:javascript
复制
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”号课程成绩低的所有学生学号姓名;

代码语言:javascript
复制
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;

运行结果:

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/124750.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月4,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档