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

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
















