02-子查詢與表連線
阿新 • • 發佈:2020-12-13
語法格式:
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教程|菜鳥教程