0
点赞
收藏
分享

微信扫一扫

MySQL-多表查询

东方小不点 2022-04-03 阅读 94
mysql

        如果要查询多个表中的数据,就需要使用多表查询。多表查询有多种方法,隐式查询链接查询(包括外连接查询内连接查询)、交叉查询


目录

 隐式查询

内链接查询

外链接查询

 交叉查询

全链接查询



例如:

result表

student表

 在如上两张表中,如果要查询 result 表中 studentResult 字段值大于80的学生姓名 studentName ,此时就要使用多表查询。

SELECT student.studentName,result.studentResult
FROM student,result
WHERE student.studentNo = result.studentNo
			AND result.studentResult > 80

 隐式查询

格式

SELECT 列名1,列名2,...
FROM 表1,表2
WHERE 表1.主键列 = 表2.主键列
	  AND 限制条件

隐式查询中,需要注意:在 WHERE 语句中必须写出  表1.主键列 = 表2.主键列 ;在所有的链接查询中,如果两个表有相同的列,则列之前必须加上表名,若无相同列则可以省略。 

内链接查询

格式

SELECT 列名1,列名2
FROM 表名1
INNER JOIN  表名2 
ON 主键表主键列 = 外键表的外键列

例如, 查询 result 表中 studentResult 字段值大于80的学生姓名 studentName 

SELECT studentName,studentResult
FROM student
INNER JOIN result
ON student.studentNo = result.studentNo

外链接查询

格式

SELECT 列名1,列名2,...
FROM 表1
LEFT(RIGHT) JOIN 表2
ON 表1.主键 = 表2.主键

 JOIN 前的LEFT 和 RIGHT ,若为LEFT , 则表示以左表为主表,查询右表;若为RIGHT , 则表示以右表为主表,查询左表。

例如, 左外链接查询 result 表中 studentResult 字段值大于80的学生姓名 studentName 

SELECT student.studentName,result.studentResult
FROM result
LEFT JOIN student
ON student.studentNo = result.studentNo
WHERE result.studentResult > 80

例如, 右外链接查询 result 表中 studentResult 字段值大于80的学生姓名 studentName 

SELECT student.studentName,result.studentResult
FROM student
RIGHT JOIN result
ON student.studentNo = result.studentNo
WHERE result.studentResult > 80

 交叉查询

交叉查询会产生笛卡尔积,在实际的应用中应该避免这种情况。

SELECT 列名1,列名2,...
FROM 表名1
CROSS JOIN 表名2

全链接查询

格式

SELECT 表名1.列名1,表名1.列名2,...
FROM 表名1
UNION
SELECT 表名2.列名1,表名2.列名2,...
FROM 表名2;

全链接查询中,UNION的作用是去除重复数据,UNION ALL 的作用是不去除重复数据。

 

举报

相关推荐

0 条评论