花絮
子查询解析
在单一查询不够用的时候,请使用子查询。
子查询只不过是查询里的查询。
SELECT some_column,anther_column
FROM table
WHERE column = (SELECT column FROM table);
因为查询里使用了 = 运算符,所以子查询里只会返回单一值,特定行和列的交叉点,这一个值将是WHERE子句中比对数据列的条件。
SELECT zip_code
FROM zip_code WHERE city =
(SELECT zip_code
From zip_code
WHERE city = 'Memphis' AND state ='TN'
)
;
非关联子查询
如果子查询可以独立运行且不会引用外层查询的任何结果,即称为外层查询。
上面都是
有时候最好创建测试数据库来尝试各种查询方式,比较查询运行时间。
联接比子查询更有效率。
关联子查询
关联子查询是内层查询的解析需要依赖于外层查询的结果。
关联子查询的常见用法是找出所有外层查询结果里不存在于关联表里的数据。
SELECT mc.first_name firstname,mc.last_name lastname,mc.email email
FROM my_contacts mc
WHERE NOT EXISTS(
SELECT * FROM job_cerrent jc
WHERE mc.contact_id = jc.contact_id
) ;
问答录
Q:内层查询究竟可以返回什么?外层查询呢?
A:大多数情况下,内层查询只能返回单一值,也就是一列里的一行。而后,外层查询才能利用这个值与列中其他值进行比较。
一般而言,子查询必须返回一个值,使用IN是例外情况。
Q:所以说,子查询可以放在子查询里吗?
A:of couse.
Q:据说使用子查询能解决的事情,用联接也可以?是这样吗?
A:不然呢?