MySQL多表查询
SQL92标准
1. 等值连接
SELECT name,boyName FROM boys,beauty WHERE beauty.bf_id = boys.id;
SELECT last_name,department_name FROM employee,department WHERE employee.department_id = department.department_id;
-
为表起别名
-
多个表顺序可变
-
可以加筛选
-
可以加分组
-
可以加排序
-
可以实现多个表(>2)连接
2. 非等值连接
SELECT
salary,grade_level
FROM
employee e,job_grade g
where
salary BETWEEN g.lowest_salary AND g.highest_salary
;
3. 自连接
SELECT
e.employee_id,e.last_name,m.employee_id,m.last_name
FROM
employee e, employee m;
WHERE
e.manager_id = m.employee_id;
SQL99标准
基本语法
SELECT
查询列表
FROM 表1 别名 [连接类型]
JOIN 表2 别名 ON 连接条件 [[连接类型]
JOIN 表n 别名 ON 连接条件 ...]
[WHERE 限制条件]
[GROUP BY 分组条件]
[ORDER BY 分组条件]
[LIMIT m,n]
1. 内连接
内连接使用关键之INNER JOIN
等值连接
ON后面使用的是等值条件
例如:
SELECT
last_name,department_name
FROM
departments d
INNER JOIN
employees e ON e.department_id = d.department_id
SELECT
last_name,job_title
FROM
employees e
INNER JOIN
jobs j ON e.job_id = j.job_id
WHERE
e.last_name LIKE '%e%'
;
非等值连接
ON后面使用的是不等表达式进行连接
例如:
SELECT
salary,grade_level
FROM
employees e
JOIN job_grades g ON e.salary BETWEEN g.lowest_sal AND g.highest_sal
;
自连接
自连接就是自己表和自己连接,其实就是内连接的一种特例
SELECT
e.last_name 姓名, m.last_name 领导姓名
FROM
employees e
JOIN
employees m ON e.manager_id = m.employee_id
WHERE
e.last_name LIKE '%k%'
;
2. 外连接
外连接使用关键字LEFT OUTER JOIN或者RIGHT OUTER JOIN
左外连接
对于左外连接,主表放在前面,例如:
SELECT
b.name 没有男朋友的女生
FROM
beauty b
LEFT OUTER JOIN
boys bo ON b.boyfriend_id = bo.id
WHERE
bo.id IS NOT NULL
;
主表在左边
右外连接
对于右外连接,主表放在后面,例如:
SELECT
b.name 没有男朋友的女生
FROM
boys bo
RIGHT OUTER JOIN
beauty b ON b.boyfriend_id = bo.id
WHERE
bo.id IS NOT NULL
;
主表在左边
全外连接
全外连接相当于左外和右外连接的结果集的并集,当前MySQL不支持,使用的关键词是FULL OUTER JOIN
3. 交叉连接
就是笛卡尔积,例如:
SELECT
b.*,bo.*
FROM
beauty b
CROSS JOIN
boys bo
;

浙公网安备 33010602011771号