多表查询。多表查询有多种方法,隐式查询、链接查询(包括外连接查询和内连接查询)、交叉查询。


目录

 隐式查询

内链接查询

外链接查询

 交叉查询

全链接查询



例如:


mysql 多个参数查询 mysql查询多个表_字段

result表

mysql 多个参数查询 mysql查询多个表_字段_02

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.主键

以左表为主表,查询右表;若为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 的作用是不去除重复数据。