多表查询
1内链接查询
隐式内链接
使用where 消除无用数据
SELECT * FROM 表1,表2 WHERE 表1外键 = 表2主键;
推荐书写格式
SELECT
t1.列1, -- 备注
t1.列2, -- 备注
t2.列3 -- 备注
FROM
表1 t1,
表2 t2
WHERE
t1.外键 = t2.主键;
显式内链接
SELECT * FROM 表1 INNER JOIN 表2 ON 表1外键 = 表2主键;
SELECT * FROM 表1 JOIN 表2 ON 表1外键 = 表2主键;
2 外链接查询
左外链接
语法
SELECT 字段列表 FROM 表1 LEFT 【OUTER】 JOIN 表2 ON 条件 ;
查询的是 左表所有的数据以及交集部分
SELECT
t1.*,
t2.`name`
FROM
表1 t1
LEFT JOIN
表2 t2
ON
t1.外键 = t2.主键;
右外链接
SELECT 字段列表 FROM 表1 RIGHT 【OUTER】 JOIN 表2 ON 条件 ;
查询的是 右表所有的数据以及交集部分
SELECT
t1.*,
t2.`name`
FROM
表1 t1
RIGHT JOIN
表2 t2
ON
t1.外键 = t2.主键;
3 子查询
概念 查询中嵌套查询,称嵌套查询为子查询;
子查询是的结果是单行单列的
子查询作为条件,使用运算符去判断
SELECT * FROM 表1 WHERE 列1 = (SELECT MAX(列1) FROM 表1);
SELECT * FROM 表1 WHERE 列1 < (SELECT AVG(列1) FROM 表1);
子查询是的结果是多行单列的
子查询作为条件,使用运算符去判断
SELECT * FROM 表1 WHERE 表2 IN(SELECT 表2.列1 FROM 表2 WHERE 表2.列2='xx部' OR 表2.列2='xx部');
子查询是的结果是多行多列的
子查询作为虚拟表参与查询
SELECT * FROM 表1 t1,表2 t2 WHERE t1.外键 = t2.主键 AND t1.列1 >= 30;