笛卡尔集
笛卡尔集会在下面条件下产生:spa
为了不笛卡尔集, 能够在 WHERE 加入有效的链接条件。3d
Oracle 链接
使用链接在多个表中查询数据。code
SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column1 = table2.column2;
等值链接
示例blog
SELECT employees.employee_id, employees.last_name, employees.department_id, departments.department_id, departments.location_id FROM employees, departments WHERE employees.department_id = departments.department_id;
区分重复的列名
ci
表的别名it
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e, departments d WHERE e.department_id = d.department_id;
链接多个表
io
非等值链接
EMPLOYEES表中的列工资应在JOB_GRADES表中的最高工资与最低工资之间
示例table
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;
内链接和外链接
ast
外链接语法class
右外链接 SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column(+) = table2.column; 左外链接 SELECT table1.column, table2.column FROM table1, table2 WHERE table1.column = table2.column(+);
示例
SELECT e.last_name, e.department_id, d.department_name FROM employees e, departments d WHERE e.department_id (+) = d.department_id;
自链接
示例
SELECT worker.last_name || ' works for ' || manager.last_name FROM employees worker, employees manager WHERE worker.manager_id = manager.employee_id;
1999 语法链接
SELECT table1.column, table2.column FROM table1 [CROSS JOIN table2] | [NATURAL JOIN table2] | [JOIN table2 USING (column_name)] | [JOIN table2 ON(table1.column_name = table2.column_name)] | [LEFT|RIGHT|FULL OUTER JOIN table2 ON (table1.column_name = table2.column_name)];
使用ON 子句建立链接
示例
SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id FROM employees e JOIN departments d ON ( e.department_id = d.department_id );
使用 ON 子句建立多表链接
示例
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 LEFT OUTER JOIN departments d ON ( e.department_id = d.department_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 );