内连接(INNER JOIN)
左外连接(LEFT OUTER JOIN)
右外连接(RIGHT OUTER JOIN)
全外连接(FULL OUTER JOIN)
交叉连接(CROSS JOIN)
自然连接(NATURAL JOIN)
自连接(Self Join)
SELECT d.department_id,
e.department_id,
d.department_name,
e.first_name,
e.last_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id;
SELECT d.department_id,
e.department_id,
d.department_name,
e.first_name,
e.last_name
FROM employees e, departments d
WHERE e.department_id = d.department_id;
ANSI SQL/86 标准,使用FROM和WHERE关键字指定表的连接条件。
ANSI SQL/92 标准,使用JOIN和ON关键字指定表的连接条件。
SELECT d.department_id,
e.department_id,
d.department_name,
e.first_name,
e.last_name
FROM departments d
LEFT JOIN employees e
ON e.department_id = d.department_id;
table1 RIGHT JOIN table2
table2 LEFT JOIN table1
SELECT d.department_id,
e.department_id,
d.department_name,
e.first_name,
e.last_name
FROM departments d
RIGHT JOIN employees e
ON d.department_id = e.department_id;
SELECT d.department_id,
e.department_id,
d.department_name,
e.first_name,
e.last_name
FROM departments d
FULL JOIN employees e
ON d.department_id = e.department_id
WHERE e.employee_id IN (176, 177, 178)
OR d.department_id IN (110, 120, 130);
SELECT d.department_id,
e.department_id,
d.department_name,
e.first_name,
e.last_name
FROM departments d
LEFT JOIN employees e
ON d.department_id = e.department_id AND e.employee_id = 0;
SELECT d.department_id,
e.department_id,
d.department_name,
e.first_name,
e.last_name
FROM departments d
LEFT JOIN employees e
ON d.department_id = e.department_id
WHERE e.employee_id = 0;
SELECT v || '*' || h || '=' || v*h
FROM generate_series(1,9) v
CROSS JOIN generate_series(1,9) h;
SELECT v || '*' || h || '=' || v*h
FROM generate_series(1,9) v, generate_series(1,9) h;
SELECT v || '*' || h || '=' || v*h
FROM generate_series(1,9) v
JOIN generate_series(1,9) h ON TRUE;
连接条件是等值连接,即 t1.col1 = t2.col1;
两个表中的列必须同名同类型,即 t1.col1 和 t2.col1 的类型相同。
SELECT d.department_id,
e.department_id,
d.department_name,
e.first_name,
e.last_name
FROM employees e
JOIN departments d
USING (department_id);
SELECT d.department_id,
d.department_name,
e.first_name,
e.last_name
FROM departments d
NATURAL JOIN employees e;
SELECT e.first_name||', '||e.last_name AS employee_name,
m.first_name||', '||m.last_name AS manageer_name
FROM employees m
JOIN employees e
ON m.employee_id = e.manager_id;
SELECT d.department_name,
e.first_name||', '||e.last_name AS employee_name,
j.job_title
FROM departments d
JOIN employees e ON d.department_id = e.department_id
JOIN jobs j ON j.job_id = e.job_id;
原文作者:SQL编程思想;如有侵权,请联系管理员删除。