等於鏈接
SELECT e.employee_id
,e.department_id
,d.department_name
,d.location_id
FROM employees e
,departments d
WHERE e.department_id = d.department_id;
不等鏈接
包括>,<,!=,between
SELECT e.last_name
,e.salary
,j.grade_level
FROM employees e
,job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal;
外鏈接
包括左外連接,右外連接
SELECT e.last_name
,e.department_id
,d.department_name
FROM employees e
,departments d
WHERE e.department_id = d.department_id(+);
SELECT e.last_name
,e.department_id
,d.department_id
,d.department_name
FROM employees e
,departments d
WHERE e.department_id(+) = d.department_id;
自鏈接
是一種概念,某個table和自己本身鏈接,比如:table1給另一個“自己”起別名爲table2
SELECT worker.last_name || ' works for ' || manager.last_name,
worker.employee_id,
worker.manager_id
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id;
交叉連接
相當於沒有鏈接條件的多表關聯查詢,結果是個笛卡爾乘積,實際工作中很少用到
select last_name,department_name
from employees
cross join departments
自然鏈接
相當於Oracle的“等於連接”,只不過是讓系統自己去找兩張表中字段名相同的字段爲“等於連接”條件
注:如果兩個表中有相同的列名,但字段類型不一樣,會引起錯誤
避免使用
select department_id, department_name, location_id, city
from departments natural
join locations
相當於
select department_id, department_name, d.location_id, city
from departments d, locations l
Where d.location_id = l.location_id;
Using子句
Using子句可開着是 自然連接 的一種補充功能,我們知道自然連接會讓系統自動查找兩張表中的所有列名相同的字段,並試圖建立“等於連接”;但有的時候我們不期望這麼做,而只是期望某個特定的字段作爲“等於連接”的條件,這種情況下可以使用Using 子句來做限制
SELECT e.employee_id, e.last_name, d.location_id
FROM employees e
JOIN departments d
USING (department_id);
內連接
相當於Oracle的“等於鏈接” , 關鍵字:INNER JOIN
注:INNER JOIN 可簡寫爲JOIN ,即省去INNER
SELECT employee_id, city, department_name
FROM employees e
JOIN departments d ON d.department_id = e.department_id
JOIN locations l ON d.location_id = l.location_id;
外連接
可細分爲左外連接、右外連接、全外連接
左外連接
SELECT employee_id, city, department_name
FROM employees e
JOIN departments d
ON d.department_id = e.department_id
JOIN locations l
ON d.location_id = l.location_id;
右外連接
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
全外連接
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);