SQL必知必会(13)——创建高级联结

1、使用表别名

SELECT cust_name,cust_contact
FROM customer AS c,order AS o,orderItems AS OI
WHERE c.cust_id = o.cust_id
AND OI.order_num = o.order_num
AND prod_id='RGAN01';

注意:
1、缩短SQL语句。
2、允许在一条SELEC语句中多次使用相同的表。
3、ORACLE不支持AS关键字。要在Oracle中使用别名,可以不用AS,简单的指定列名即可。

2、使用不同类型的联结

2.1、自联结

SELECT c1.cust_id,c1.cust_name,c1.cust_contact
FROM customers AS c1,customers AS c2
WHERE c1.cust_name=c2.cust_name
AND c2.cust_contact = 'Jim Jones';

注意:
1、使用表别名可以在一条SELECT语句中不止一次引用相同的表。
2、许多DBMS处理联结远比处理子查询快得多。

2.2、自然联结

SELECT C.* ,order_num,o.order_data,OI.prod_id,OI.quantity,OI.item_price
FROM customers AS c,order AS o,orderitems AS OI
WHERE c.cust_id = o.cust_id
AND OI.order_num = o.order_num
AND prod_id 'RGAN01';
#自然联结要求你只能选择哪些唯一的列,一般通过对一个表使用通配符,而对其他表的列使用明确的子集来完成。

2.3、外联结

SELECT customers.cust_id,orders.order_num
FROM customers LEFT OUTER JOIN orders
ON customers.cust_id = orders.cust_id;
#联结包含了那些在相关表中没有关联行的行,这种联结称为外联结

注意:
1、在使用OUTER JOIN语句时,必须使用RIGHT或LEFT关键字包括其所有行的表(RIGHT指出的是OUTER JOIN右边的表,而LEFT指出的是OUTER JOIN左边的表)。
2、左外联结和右外联结可以相互转换。

SELECT customers.cust_id,orders.order_num
FROM orders FULL OUTER JOIN customers
ON orders .cust_id = customers.cust_id;
#全外联结包含两个表的不关联的行

注意:
1、Access,MariaDB,MySQL,Open Office Base 和SQLite不支持FULL OUTER JOIN语法。

3、使用聚集函数的联结

SELECT customers.cust_id.count(orders.order_num) AS num_ord
FROM customers INNER JOIN orders
ON customers.cust_id = orders.cust_id
GROUP BY customers.cust_id;
#检索所有顾客及每个顾客所下的订单数

4、使用联结和联结条件

1、一般我们使用内联结,但使用外联结也有效。
2、关于确切的联结语法,应该查看具体的文档,看相应的DBMS支持何种语法。
3、保证使用正确的联结条件。
4、应该总提供联结条件,否则会得出笛卡儿积

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值