SQL:1999连接

SQL:1999连接
SQL:1999连接在语法上和传统的ORACLE连接有着很大的不同。SQL:1999连接的类型在FROM语句中指明。ORACLE 9I支持的SQL:1999连接包括:

l         CROSS连接

l         NATURAL连接

l         OUTER连接

l         LEFT OUTER连接

l         RIGHT OUTER连接

l         FULL OUTER连接

以下的几个小节将详细介绍这些新的连接方式。

2.3.1.1 CROSS连接
    CROSS连接是一种对两个表的交叉乘积。是对两个表的卡笛尔乘积。下面的例子:

    SELECT last_name, department_name

    FROM   employees

    CROSS JOIN departments;

    这个语句等同于:

    SELECT last_name, department_name

    FROM employees, departments;

 2.2.1.2 NATURAL连接
NATURAL连接的条件是两个表中名称相同的字段都有相同的值。如果两个表中相同名称的字段的类不同,那么会发生错误。如果有select *,那么在结果集中,相同的字段只出现一次。

在NATURAL连接中,选取的字段前面不需要用别名限定。比如:

 

    SELECT employee_id, last_name, department_id

    FROM employees

    NATURAL JOIN departments;

等同于下面的语句:

    SELECT employee_id, last_name, departments.department_id

    FROM employees, departments

    WHERE employees.department_id = departments.department_id;

如果并不是所有的名称相同的字段都需要进行’=’连接,那么就不能使用NATURAL连接,而可以使用USING语句,比如

 

    SELECT employee_id, last_name, job_history.department_id

    FROM employees

    JOIN job_history

    USING (employee_id);

这个语句等同于:

    SELECT employees.employee_id, last_name, job_history.department_id

    FROM employees, job_history

    WHERE employees.employee_id=job_history.employee_id;

要注意的是NATURAL和USING是不兼容的,不能同时使用。如果连接字段的字段名不同,那么可以使用ON语句来代替USING,比如:

    SELECT employees.employee_id, last_name, job_history.department_id

    FROM employees

    JOIN job_history

    ON (employees.employee_id=job_history.employee_id);

2.2.1.3 OUTER JOIN(外连接)
两个表连接的时候,只返回符合条件的记录的连接方式称为内连接(INNER JOIN),档连接的时候返回内连接结果和不符合条件的部分记录称为外连接,外连接分为左连接和右连接和全连接。返回左面表的不符合条件的记录称为左连接(LEFT OUTER JOIN),反之称为右连接(RIGHT OUTER JOIN),返回两个表的不符合条件的记录的连接称为全连接(FULL OUT JOIN)。在9i之前,也支持外连接,可以使用’(+)’来指明外连接。

1、左外连接LEFT OUTER JOIN

    以下是一个左外连接的例子:

 

    SELECT employee_id, department_name

    FROM departments d

    LEFT OUTER JOIN employees e

    ON (e.department_id= d.department_id);

这个语句等同于:

    SELECT employee_id, department_name

    FROM departments d, employees e

    WHERE e.department_id(+) = d.department_id;

2、右外连接RIGHT OUTER JOIN

    以下是一个右外连接的例子:

    SELECT cust_last_name, order_id,order_date

    FROM orders o

    RIGHT OUTER JOIN customers c

    ON (o.customer_id = c.customer_id);

该语句等同于:

    SELECT cust_last_name, order_id, order_date

    FROM orders o, customers c

    WHERE c.customer_id = o.customer_id(+);

3、全外连接FULL OUTER JOIN

   这种连接方式是以前版本的ORACLE所不支持的。 以下的例子:

    SELECT l.city, c.country_name

    FROM locations l

    FULL OUTER JOIN countries c

    ON (l.country_id = c.country_id);

等同于:

    SELECT l.city, c.country_name

    FROM locations l, countries c

    WHERE l.country_id = c.country_id(+)

    UNION

    SELECT l.city, c.country_name

    FROM locations l, countries c

    WHERE l.country_id(+) = c.country_id;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值