《mysql必知必会》读书实战笔记14-子查询

第14章 使用子查询

14.1子查询

简单查询:查询单个数据表的select查询语句。

子查询:嵌套在其他查询中的查询语句。

14.2用子查询过滤数据

即:子查询的结果,放在where后,作为过滤条件值。

例:列出订购TNT2货品的所有客户信息:

步骤分析:

a.通过货品TNT2,在订单货品表中找到订单编号:select order_num from orderitems where prod_id='TNT2';

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

b.通过订单编号,在订单表中找到客户ID:select cust_id from orders where order_num in (20005,20007);

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

c.通过客户ID,在客户表中找到客户名称、联系方式等信息:select cust_name,cust_contact from customers where cust_id in (10001,10004);

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

嵌套子查询,就是将a/b/c嵌套起来:

select cust_name,cust_contact
from customers
where cust_id in (select cust_id
                            from orders
                            where order_num in (select order_num
                                                              from orderitems
                                                              where prod_id='TNT2'));

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

14.3作为计算字段使用子查询

即:子查询的结果,放在计算字段中。

例:显示客户表中每个客户的订单总数:

步骤分析:

a.客户表的客户id等于订单表中的客户id时,在订单表中计算订单数量:

select cust_id,
           cust_name,
           cust_state,
           (select count(order_num)
             from orders
             where orders.cust_id=customers.cust_id) as order_count 
from customers 
order by cust_name;

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

上面的 orders.cust_id=customers.cust_id,表名与列名由句点分隔,叫做完全限定列名


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

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

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

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

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