一、基本知识
查询语法的标准写法:
select
列名列表
from
表名列表
where....
笛卡尔积:
* 有两个集合A,B .取这两个集合的所有组成情况。
* 要完成多表查询,需要消除无用的数据
二、多表查询的分类:
1. 内连接查询
(1)隐式内连接:使用 where 条件消除无用数据
* 例子:
-- 查询所有员工信息和对应的部门信息
SELECT * FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
-- 查询员工表的名称,性别,部门表的名称
SELECT emp.name,emp.gender,dept.name FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
-- 为了方便查询,可以起别名,标准写法,方便阅读
SELECT
t1.name, -- 员工表的姓名
t1.gender,-- 员工表的性别
t2.name -- 部门表的名称
FROM
emp t1,
dept t2
WHERE
t1.`dept_id` = t2.`id`;
(2)显式内连接
* 语法: select 字段列表 from 表名1 [inner] join 表名2 on 条件
* 例如:
* SELECT * FROM emp INNER JOIN dept ON emp.`dept_id` = dept.`id`;
-- inner是可选的可以省略,中括号表示可以省略
* SELECT * FROM emp JOIN dept ON emp.`dept_id` = dept.`id`;
(3)内连接查询步骤
* 从哪些表中查询数据
* 条件是什么
* 查询哪些字段
2. 外连接查询:
(1) 左外连接:
* 语法:select 字段列表 from 表1 left [outer] join 表2 on 条件;
* 查询的是左表所有数据以及其交集部分。
* 例子:
-- 查询所有员工信息,如果员工有部门,则查询部门名称,没有部门,则不显示部门名称
SELECT t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
(2)右外连接:
* 语法:select 字段列表 from 表1 right [outer] join 表2 on 条件;
* 查询的是右表所有数据以及其交集部分。
* 例子:
SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.`dept_id` = t2.`id`;