1. 程式人生 > 其它 >02-子查詢與表連線

02-子查詢與表連線

技術標籤:MySQL資料庫mysql

語法格式:
	select 欄位列表|* from 表名
	[join 表名或select語句 on 條件]
	[where 搜尋條件]
	[group by 分組欄位 [having 分組條件]]
	[order by 排序欄位 排序規則]
	[limit 分頁引數]

1、子查詢

1.1、利用子查詢進行過濾
將子查詢的結果作為父查詢的條件:
	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'));
1.2、子查詢作為計算欄位
	select cust_id,cust_name,
		(
		select count(*)
			from orders
			where orders.cust_id = customers.cust_id) as orders
		)
	from customers
	order by cust_name;

2、表連線

INNER JOIN(內連線,或等值連線):獲取兩個表中欄位匹配關係的記錄。
LEFT JOIN(左連線):獲取左表所有記錄,即使右表沒有對應匹配的記錄。
RIGHT JOIN(右連線): 與 LEFT JOIN 相反,用於獲取右表所有記錄,即使左表沒有對應匹配的記錄。

在這裡插入圖片描述

注意

儘量使用表連線查詢代替子查詢,連線查詢的效能優於子查詢。

3、組合查詢

 UNION 操作符用於連線兩個以上的 SELECT 語句的結果組合到一個結果集合中。多個 SELECT 語句會刪除重複的資料。

語法格式:
	SELECT expression1, expression2, ... expression_n
	FROM tables
	[WHERE conditions]
	UNION [ALL | DISTINCT]
	SELECT expression1, expression2, ... expression_n
	FROM tables
	[WHERE conditions];

引數
	expression1, expression2, ... expression_n: 要檢索的列。
	tables: 要檢索的資料表。
	WHERE conditions: 可選, 檢索條件。
	DISTINCT: 可選,刪除結果集中重複的資料。預設情況下 UNION 操作符已經刪除了重複資料,所以 DISTINCT 修飾符對結果沒啥影響。
	ALL: 可選,返回所有結果集,包含重複資料。

詳情請參考MySQL教程|菜鳥教程