多表查询
作者:吴东梅 撰写时间:2019 年 3 月 29 日
笛卡尔集
注意:如果数据过多,而又造成了笛卡儿积,可能会运行到电脑死机。
为了避免笛卡尔集, 可以在 WHERE 加入有效的连接条件。
叉集 = 笛卡尔集
•使用CROSS JOIN 子句使连接的表产生叉集。
•叉集和笛卡尔集是相同的。
Oracle 连接
连接多个表
•连接 n个表,至少需要 n-1个连接条件。 例如:连接三个表,至少需要两个连接条件。
等值连接 (用等值连接把表连接起来查询出数据)
select employees.employee_id,employees.department_id,departments.department_name,city
from employees,departments,locations
where employees.department_id=departments.department_id
and locations.location_id = departments.location_id;
如下图显示出来的数据就是用表与表的等值条件连接起来显示出来的数据。
外连接语法
使用外连接可以查询不满足连接条件的数据。
外连接的符号是 (+)。
(+) 在左边叫右外连接,在右边叫左外连接 。没有(+)在的那一边就是主表。主表的所有数据都要全部显示出来。
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column = table2.column(+); --左外连接
左外连接 sql 1999 语法
Select employees.employee_id,employees.department_id,departments.department_name,city
from employees left join departments
on employees.department_id = departments.department_id
left join locations
on locations.location_ID = departments.location_id; --多表连接的时候,每一个left join 都要有一个on 连接
例如:用了外连接的方法去查询数据,那么就是作为主表的表,不管有没有符合条件,都会把那条数据显示出来,但是其他的表并没有对应的数据,所以其他的表的数据就会显示为空,如下图所示:
自连接
如果在一个连接查询中,涉及到的两个表都是同一个表,这种查询称为自连接查询。
自连接是一种特殊的内连接,它是指相互连接的表在物理上为同一张表,但可以在逻辑上分为两张表。
例如:
SELECT worker.last_name || ’ works for ’ || manager.last_name
FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id;
自然连接
•NATURAL JOIN 子句,会以两个表中具有相同名字的列为条件创建等值连接。
•如果只是列名相同而数据类型不同,则会产生错误。
SELECT department_id, department_name,
location_id, city
FROM departments NATURAL JOIN locations;
如下图所示,查出来的数据就是下面两张表自动以相同的名字的列创建的等值连接查出来的数据。
使用ON 子句创建连接(常用)
•可以使用 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;
例如:如下图所示,用on子句指定的连接条件,就是两张表连接在一起的条件。下图数据就是三张表连接查询出来的数据。
内连接和外连接(2)
•在SQL: 1999中,内连接只返回满足连接条件的数据
•两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行,这种连接称为左(或右) 外连接。
左外连接 右外连接
LEFT OUTER JOIN RIGHT OUTER JOIN
•两个表在连接过程中除了返回满足连接条件的行以外还返回两个表中不满足条件的行 ,这种连接称为满外连接。
满外连接(把连接表的所有数据全部返回)
FULL OUTER JOIN
满外连接把所有连接查询的表的数据全部查询出来,不管有没有满足查询条件,如下图所示:
Oracle 多表查询
最新推荐文章于 2019-12-22 17:25:11 发布