sql必知必会13-创建高级联结

作者: liluchang 分类: 数据库 发布时间: 2018-05-10 09:11

这一章中我们将使用表别名来做操作。

为什么要使用表别名

  1. 因为可以缩短sql语句。
  2. 因为使用表别名能在一条sql语句中不止一次的引用相同的表(下面会举例)。

先举个使用表别名的例子

select cust_name,cust_country from customers as C,orders as O,orderitems as OI where C.cust_id = O.cust_id and OI.order_num = O.order_num and prod_id = 'RGAN01';

这条sql语句中,所有的表都使用了别名。后期可以简化语句,请注意,表别名不会返回数据,这点跟列别名不一样。

自联结

下面举个自联结的例子,即我们所说的引用相同的表,我们要给jom相同公司的人都发一份邮件,那么两种实现方式

普通

select cust_id,cust_name,cust_contact from customers where cust_name = (select cust_name from customers where cust_contact = 'Jim Jones');

自联结

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';

上面的customers不止一次出现在语句中,这是正确的,但是特别容易有歧义性,导致DBMS不知道你要查询的是哪个表,所以我们使用了表别名。

许多DBMS处理自联结远比处理子查询快的多,所以可以测试一下自己使用的DBMS两种方法的速度。

自然连接

联结查询的时候,我们的表中可能会有相同的列而导致我们返回都次结果,自然联结排除多次出现,使每一列仅返回一次。

这个工作系统不会完成,得我们自己来完成,通常我们可以会使用通配符select c1.*来返回一个表中的所有列,而对别的表使用明确的子集来完成例如,c2.cust_name.

我们上面的所有内联结操作都是自然联结,而且可能永远都不会用到不是自然联结的内联结。

外联结

 

 

 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

标签云