MySQL---关于数据表的基本语句及操作 (下)多表联查


 接上篇MySQL---关于数据表的基本语句及操作 (上)

(下)篇是关于多表联查的基本语句操作。

目录

一、如何连系多个表?

二、如何设置外键

1.观察多表之间的关系

2.建立外键

三、表连接查询

1.内连接

2.左外连接

​3.右外连接

​4.子查询(嵌套查询)


一、如何连系多个表?

多张表之间的连系需要通过外键(引用百度中的解释)进行关联。

外键:是一个关联键,外键用来建立表与表之间的关联关系,外键所在的表称为从(子)表。外键所关联的表称为主(父)表。

外键是一个列,该列负责与关联表联系

二、如何设置外键

1.观察多表之间的关系

以学生(tbl_student)、成绩(tbl_score)、课程(tbl_course)表为例,

学生表和成绩表之间共同拥有的属性是stu_id;

成绩表和课程表之间共同拥有的属性是course_id;

所以要在成绩表中设置外键,用来连接学生表和课程表。

2.建立外键

以Navicat Premium 15为例,鼠标放在成绩表上,右键-->设计表-->然后选择外键

然后设置字段、被引用的模式、被引用的表、被引用的字段

然后在逆向数据库到模型中查看,设置完之后就是上图的样子。

三、表连接查询

1.内连接

两个表中都存在的才查询,如果只有一张表存在则不查询,通过主外键来确定是否两张表都存在

内连接所使用的关键字为:INNER JOIN

-- 使用内连接查询获得学生及学生的成绩信息
SELECT 
	stu.stu_name,
	stu.stu_sex,
	stu.stu_age,
	score.score_score
FROM   -- 主表
	tbl_student as stu
INNER JOIN  -- 子表
	tbl_score as score
ON   -- 联系条件
	stu.stu_Id = score.stu_Id

  

-- 使用内连接查询获得学生信息及成绩信息(学号,姓名,性别,年龄,课程名称,成绩)
SELECT
stu.stu_id,
stu.stu_name,
stu.stu_sex,
stu.stu_age,
course.course_name,
score.score_score
FROM
tbl_student as stu
INNER JOIN
tbl_score as score
ON
stu.stu_id=score.stu_id
INNER JOIN
tbl_course as course
ON
score.couse_id=course.course_id

  

2.左外连接

两张表关联,左外连接查询,以左表为主,右表为副,在左表中没有右表的元素都为空

内连接所使用的关键字为:LEFT JOIN

-- 使用左外连接查询学生和成绩表   左外连接查询,以左表为主,右表为副,在左表中没有右表的元素都为空
SELECT 
	stu.*,score.score_id,score.score_score
FROM
	tbl_student AS stu
LEFT JOIN
	tbl_score AS score
ON
	stu.stu_id = score.score_id

3.右外连接

两张表关联,右外连接查询,以右表为主,左表为副,只显示左表中存在右表的元素

右外连接使用的关键字为:RIGHT JOIN

-- 使用右外连接查询学生和成绩表   右外连接查询,以右表为主,左表为副,只显示左表中存在右表的元素
SELECT
	stu.*,score.score_id,score.score_score
FROM
	tbl_student AS stu
RIGHT JOIN
	tbl_score AS score
ON
	stu.stu_id = score.stu_id

4.子查询(嵌套查询)

在一个查询语句中,又包含一个或多个查询语句

小括号内部的查询语句称为子查询,外部的查询语句称为主查询

在执行时先执行子查询,然后在执行主查询

-- 2.使用子查询
SELECT
	stu_Id,stu_Name
FROM
	tbl_student
WHERE stu_Id IN(
	SELECT
		stu_Id
	FROM
		tbl_score
	WHERE
		score_score>70
)

SELECT * FROM tbl_student  -- 查询出学生表中参加考试的人
WHERE EXISTS(SELECT*FROM tbl_score WHERE stu_Id = tbl_student.stu_Id)


  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值