《mysql必知必会》读书实战笔记16-高级联结查询

第16章 创建高级联结

16.1使用表别名

除了列别名,也可以使用表别名,作用是:

a.缩短sql语句;
b.允许在单条select中,多次使用相同的表别名;
c.与列别名不同,表别名不返回到客户端显示。

例:统计所有订购货品TNT2的客户信息:select cust_name,cust_contact from customers as a,orders as b,orderitems as c where a.cust_id=b.cust_id and b.order_num=c.order_num and c.prod_id='TNT2' order by cust_name;

《mysql必知必会》读书实战笔记16-高级联结查询_第1张图片

16.2 使用不同类型的联结

前面几章介绍的是内连接,或称等值联结,属于简单连接。
下面看另外3中连接:自联结、自然联结、外联结。

16.2.1自联结

例:发现某物品id为DTNTR存在问题,想找出该物品供应商的其他产品是否也有问题:
a.子查询方式:select prod_id,prod_name from products where vend_id=(select vend_id from products where prod_id='DTNTR');

《mysql必知必会》读书实战笔记16-高级联结查询_第2张图片

b.自联结方式:select a.prod_id,a.prod_name from products as a,products as b where a.vend_id=b.vend_id and b.prod_id='DTNTR';

《mysql必知必会》读书实战笔记16-高级联结查询_第3张图片

自联结通常代替相同表中的子查询,效率通常比子查询高,但实际效率,需要比较得知。

16.2.2自然联结

自然联结:只能检索展示唯一的列,即对第一个表可以用“ * ”通配符,联结的其他表只能使用明确的列名,不能产生重复列。

《mysql必知必会》读书实战笔记16-高级联结查询_第4张图片


16.2.3 外部联结

外部联结:相关表中可能没有对应的关联行,例如:客户表中客户1,在关联的订单表中,没有客户1的订货记录。

内连接与外连接的区别:

内部联结inner join——关联两个表中相同的行。

例:统计所有客户及其订单:select c.cust_id,o.order_num from customers as c inner join orders as o on c.cust_id=o.cust_id;

《mysql必知必会》读书实战笔记16-高级联结查询_第5张图片

外部联结——关联两个表中所有的行,包括不同的行。
外部联结outer join有两种:左外连接left outer join、右外连接right outer join,区别只是表的顺序不同。

例:统计所有客户及其订单,包括没有订单的客户:select c.cust_id,o.order_num from customers as c left outer join orders as o on c.cust_id=o.cust_id;

《mysql必知必会》读书实战笔记16-高级联结查询_第6张图片

16.3使用带聚集函数的联结

outer join on + group by

例:查询所有客户及其订单数:select c.cust_id,c.cust_name,count(o.order_num) as num_ord from customers as c left outer join orders as o on c.cust_id=o.cust_id group by c.cust_id;

《mysql必知必会》读书实战笔记16-高级联结查询_第7张图片

16.4联结和联结条件

使用连接时,必须提供连接条件,否则会得出笛卡尔积。


《mysql必知必会》是一本好书,是一本sql语言入门书,豆瓣评分很高。

作者是英国的Ben Forta,世界知名的技术作家,由人民邮电出版社发行,我觉得原作名: MySQL Crash Course,直译为:《MYSQL速成》更具畅销书潜质,只是比较俗吧,呵呵。

书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。

前三章是基础概念,讲了SQL和数据库的基本概念,Mysql数据库的概念和使用方法,第四章开始SQL实操练习,这里是本书的一些实操练习笔记,有兴趣的话可以按这个练习几遍,相信对新手会很有帮助,让你不经意间功力大增。

你可能感兴趣的:(《mysql必知必会》读书实战笔记16-高级联结查询)