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

第15章 联结表

15.1联结

联结查询(join),是SQL最强大的功能之一。

15.1.1关系表

关系数据库,主键、外键。

15.2创建联结

例:列出每个供应商的产品和价格:select vend_name,prod_name,prod_price from vendors,products where vendors.vend_id=products.vend_id order by vend_name,prod_name;

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

15.2.1笛卡尔积(叉联结)

上面例子中,where子句作为联结条件,如果不设联结条件,将会出现笛卡尔积。

所有,注意:不要忘了使用,或不正确的使用where联结条件。

笛卡尔积:不设联结条件,查询两个表时,行数为两个表行数相乘,列数为两个表列数相加(如果显示所有列时)。

例:select vend_name,prod_name,prod_price from vendors,products order by vend_name,prod_name;

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

15.2.2内部联结(inner join)

上面第一个例子中,from 表A,表B where联结条件,也可改为另一种格式,
内联结:表A inner join 表B on 联结条件

例:列出每个供应商的产品和价格:select vend_name,prod_name,prod_price from vendors inner join products on vendors.vend_id=products.vend_id order by vend_name,prod_name;

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

15.2.3联结多个表

一条select语句中,可以联结的表数目没有限制,但是联结表越多,查询耗费资源越多,性能越下降厉害。

创建联结的规则也相同:列出所有的表,然后定义表间关系。

例:显示订单20005中的所有货品:select prod_name,vend_name,prod_price,quantity from products,orderitems,vendors where products.prod_id=orderitems.prod_id and products.vend_id=vendors.vend_id and order_num=20005;

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

再看第14章中的例子,可以改写如下:
例:列出订购TNT2货品的所有客户信息:select cust_name,cust_contact from customers,orderitems,orders where customers.cust_id=orders.cust_id and orders.order_num=orderitems.order_num and prod_id='TNT2';

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


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

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

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

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

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