第14章 使用子查询
14.1子查询
简单查询:查询单个数据表的select查询语句。
子查询:嵌套在其他查询中的查询语句。
14.2用子查询过滤数据
即:子查询的结果,放在where后,作为过滤条件值。
例:列出订购TNT2货品的所有客户信息:
步骤分析:
a.通过货品TNT2,在订单货品表中找到订单编号:select order_num from orderitems where prod_id='TNT2';
b.通过订单编号,在订单表中找到客户ID:select cust_id from orders where order_num in (20005,20007);
c.通过客户ID,在客户表中找到客户名称、联系方式等信息:select cust_name,cust_contact from customers where cust_id in (10001,10004);
嵌套子查询,就是将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'));
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;
上面的 orders.cust_id=customers.cust_id,表名与列名由句点分隔,叫做完全限定列名。
《mysql必知必会》是一本好书,是一本sql语言入门书,豆瓣评分很高。
作者是英国的Ben Forta,世界知名的技术作家,由人民邮电出版社发行,我觉得原作名: MySQL Crash Course,直译为:《MYSQL速成》更具畅销书潜质,只是比较俗吧,呵呵。
书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。
前三章是基础概念,讲了SQL和数据库的基本概念,Mysql数据库的概念和使用方法,第四章开始SQL实操练习,这里是本书的一些实操练习笔记,有兴趣的话可以按这个练习几遍,相信对新手会很有帮助,让你不经意间功力大增。