首页投稿(暂停使用,暂停投稿)程序员PL/SQL

Oracle_多表查询

2016-06-22  本文已影响606人  MPPC

<a name="sql多表查询"></a>

SQL多表查询

<a name="等值和不等值连接查询"></a>

等值和不等值连接查询

SELECT  table1.column, table2.column
FROM  table1, table2
WHERE table1.column1 = table2.column2;

<a name="等值连接"></a>

等值连接
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;
-- 练习:查询出公司员工的 last_name, department_name, city
SELECT last_name, department_name, city
FROM employees e ,departments d ,locations l
WHERE e.department_id = d.department_id AND d.location_id = l.location_id 

<a name="非等值连接"></a>

非等值连接
-- EMPLOYEES表中的列工资应在JOB_GRADES表中的最高工资与最低工资之间
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;

<a name="内连接、外连接左(或右)-外连接、满外连接"></a>

内连接、外连接(左(或右) 外连接、满外连接)

<a name="内连接"></a>

内连接
SELECT e.last_name, d.department_name 
FROM employees e, departments d
WHERE e.department_id = d.department_id
-- SQL1999语法的方式
SELECT e.last_name, d.department_name 
FROM employees e 
INNER JOIN departments d ON e.department_id = d.department_id

<a name="外连语法"></a>

外连语法
SELECT  table1.column, table2.column
FROM  table1, table2
WHERE table1.column(+) = table2.column;

-- 示例
SELECT e.last_name, d.department_name 
FROM employees e, departments d
WHERE e.department_id(+) = d.department_id

-- SQL1999方式
SELECT e.last_name, d.department_name 
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id) 
SELECT  table1.column, table2.column
FROM  table1, table2
WHERE table1.column = table2.column(+);

-- 示例
SELECT e.last_name, d.department_name 
FROM employees e, departments d
WHERE e.department_id = d.department_id(+)

-- SQL1999方式
SELECT e.last_name, d.department_name 
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id) 

<a name="满外连接"></a>

满外连接
-- 满外连接
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)

<a name="自连接"></a>

自连接
-- 练习:查询出 last_name 为 ‘Chen’ 的员工的 manager 的信息
SELECT worker.last_name || ' works for ' || manager.last_name
FROM employees worker , employees manager
WHERE worker.manager_id = manager.employee_id  AND INITCAP(worker.last_name) = 'Chen'

<a name="叉集了解"></a>

叉集(了解)
SELECT last_name, department_name
FROM   employees
CROSS JOIN departments

<a name="自然连接"></a>

自然连接

返回的是,两个表中具有相同名字的列的“且、交集”,而非“或,并集”。即:比如employee类和department类都有
department_id和manager_id,返回二者都相同的结果。

SELECT department_id, department_name,
       location_id, city
FROM   departments
NATURAL JOIN locations

<a name="使用using创建连接"></a>

使用USING创建连接

select  last_name,department_name 
from employees 
join departments using (department_id);

<a name="使用on-子句创建连接-常用"></a>

使用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
上一篇 下一篇

猜你喜欢

热点阅读