七、子查询
任何SQL语句都是查询,但此术语一般用于select 语句 https://forta.com/books/0672327120/ 要用到的表文件在上述链接可下载
7.1 利用子查询进行过滤
常见问题
SELECT * FROM customers
WHERE cust_id
IN(
SELECT cust_id
FROM orders
WHERE order_num
IN
(SELECT order_num
FROM `orderitems
` WHERE `prod_id
`='TNT2')
)
使用子查询,应该保证select语句具有与where语句中相同数目的列,通常子查询将返回单个列并且于单个列匹配,但如果需要也可以使用多个列。效率问题:子查询并不总是最有效的解决此类问题的方法
7.2计算字段使用子查询
SELECT cust_name
,cust_state
,(SELECT COUNT(*) FROM orders
WHERE orders
.cust_id
= customers
.cust_id
) AS orders
FROM customers
ORDER BY cust_name
order 是一个计算字段,由括号里的子查询建立的,该子查询对检索出来的每个用户都执行一次。
八、连接查询
数据表的连接有:
内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现外连接: 包括 (1)左外连接(左边的表不加限制) LEFT JOIN (2)右外连接(右边的表不加限制)RIGHT JOIN (3)**全外连接(**左右两表都不加限制) FULL JOIN自连接(连接发生在一张基表内) 详情见: SQL中内外连接的区别
九、联合查询
UNION常用语法
语句
1
UNION
语句
2
[union]
语句
3...
union语句必须由两条或以上的select语句构成,语句之间用union隔开此外**,每条语句的列数必须是相同的,但是顺序可以不同**,数据类型必须相似union 默认去除重复的行,如果需要所有数据可以采用union all 关键字order by语句只能写一次,在最后一条select语句后面,它将用来排序所有的查询结果union查询结果就像是每一条select语句的结果,拼接到了一起。(个人感觉)
SELECT vend_id
,prod_id
,prod_price
FROM products
WHERE prod_price
<=5
UNION
SELECT vend_id
,prod_id
,prod_price
FROM products
WHERE vend_id
IN(1001,1002)