Oracle 创建高级连接

11 篇文章 1 订阅

Oracle 创建高级连接

在Oracle中使用的数据库表连接包括:内连接,外连接(左外连接,右外连接),全连接等

1、使用表别名

SELECT RTrim(vend_name) || ', (' || RTrim(vend_country) || ')'AS vend_title
FROM vendors
ORDER BY vend_name;

注:RTrim()函数用于截取字符串,详情见,|| 用于拼接字符串

除了为列名和计算字段使用别名外,SQL还允许为表名使用别名。这样做的两个主要原因是:

  • 缩短SQL语法
  • 允许在单个SELECT语句内多次使用同一个表

注意:不适用AS的情况

与大多数DBMS不同,Oracle没有使用AS关键字类命名表的别名;在Oracle中不能用As指定表的别名,但是可以用做指定列的别名,但在存储过程中,指定列的别名与与原有列的别名相同,会报错。

2、使用不同的连接类型

以下介绍除内连接(等值连接)外的3种连接(自连接、自然连接、外连接)。

1、自连接

所谓自连接就是表与表本身进行连接

示例:

SELECT p1.prod_id, p1.prod_name
FROM products p1
INNER JOIN products p2 ON p1.vend_id = p2.vend_id
WHERE p2.prod_id = 'DTNTR';

提示:用自连接代替子查询

自连接通常用于代替使用子查询的语句,从与外层语句相同的表中检索数据。尽管最终结果是相同的,但有时这些连接查询的执行速度要比子查询快得多。

2、自然连接

无论何时连接表,至少会有一列(要连接的列)出现在多个表中。标准连接会返回所有的数据,甚至会使同一个列出现多次。自然连接将会简单的消除多次出现的列,使得每一列只会返回一次。

下面给出一个示例:

SELECT c.*, o.order_num, o.order_date,
            oi.prod_id, oi.quantity, OI.item_price
FROM customers c, orders o, orderitems oi
WHERE c.cust_id = o.cust_id
   AND oi.order_num = o.order_num
   AND prod_id = 'FB';

3、其他连接

大多数连接都是把一个表中的一些行与另一个表中的一些行相关联,但是,偶尔你也想要包括一些行,它们没有相关的行,这类连接称为外连接。

下面的SELECT语句是一个简单的内连接,它用于检索所有顾客及其订单的列表:

SELECT customers.cust_id, orders.order_num
FROM customers
INNER JOIN orders ON customers.cust_id = orders.cust_id;

外连接的语法是类似的。

SELECT customers.cust_id, orders.order_num
FROM customers
LEFT OUTER JOIN orders ON customers.cust_id = orders.cust_id;

提示:外连接类型

有两种基本的外连接形式:左外连接和右外连接,它们之间的唯一区别是相关联的表的顺序。

4、使用连接和连接条件

关于连接有以下关键点:

  • 要特别注意使用的连接类型。你时常想要一个内连接,但是使用外连接通常也是有效的。
  • 确保使用正确的连接条件,否则将返回错误数据
  • 确保总是提供一个连接条件,否则最终得到一个笛卡尔积
  • 可能在一个连接中包括多个表,甚至每个表可以具有不同的连接类型。尽管这是合法的并且通常是有用的,但是要确保先单独测试每个连接,然后把它们放在一起测试,这使得查错要简单得多。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值