所謂的多表查詢就是同時查詢多張表才能得到需要的資料
1.簡要概述
將乙個查詢結果作為另乙個查詢語句的一部分
select * from employee where salary=(select max(salary) from employee);
子查詢需要放在()中先執行子查詢,將子查詢的結果作為父查詢的一部分
2.4種子查詢:
1.單行單列
子查詢結果是單列
,在where
後面作為條件
2.單行多列
子查詢結果是多行單列,結果集類似於乙個陣列,在where
後面作為條件
,父查詢使用in
運算子
3.多行多列
子查詢結果是多列
,在from
後面作為表
,
select 查詢字段 from (子查詢) 表別名 where 條件;
4.作為計算字段使用子查詢
例如:兩張表:
表一:
表二:
我想查詢每乙個使用者的訂單數量
select cust_name,(select count(*) from orderswhere orders.`cust_id` = customers.`cust_id`) as 訂單數 from customers order by customers.`cust_name`;
內連線隱式:select 字段 from 表1, 表2 where 條件;
顯式:
select 字段 from 表1 inner join 表2 on 表連線條件;
select 字段 from 表1 join 表2 on 表連線條件;
on 用於去除笛卡爾積,如有後面還有其他條件使用where
笛卡爾積:沒有聯結條件的表關係返回的結果為笛卡兒積。檢索出的行的數目將是第乙個表中的數乘以第二個表中的行數。
外連線:
1.左連線:select 欄位名 from 左表 left outer join 右表 on 表連線件;
特點:滿足要求的資料顯示,並且左表不滿足要求的資料也顯示
2.右連線:
select 欄位名 from 左表 right outer join 右表 on 表連線條件
特點:滿足要求的資料顯示,並且右表不滿足要求的資料也顯示
自連線:
假如你發現某物品(其id為dtntr)存在問題,因此想知道生產該物
品的**商生產的其他物品是否也存在這些問題。此查詢要求首先找到
生產id為dtntr的物品的**商,然後找出這個**商生產的其他物品。
下面是解決此問題的一種方法:
select prod_name,prod_id from products where vend_id = (select vend_id from products where prod_id = 'dtntr');
使用自連線:
通過題目的要求找出一致點也就是vend_id
那麼可以寫成這個樣子
select p1.prod_id,p1.prod_name from products as p1,products as p2
where p1.`vend_id`= p2.`vend_id`
and p2.`prod_id` ='dtntr';
可以看出使用了兩張表結構一樣的表
然後上面**中還是用了表別名,應該注意,表別名只在查詢執行中使用。與列別名不一樣,表別名
不返回到客戶機。
MySql語句 DQL 多表查詢
子查詢1.出現的位置 2.條件 分類 兩表上下連線,共同顯示 分類 內連線 兩表相乘 笛卡爾積 笛卡爾積 外連線外連線分主次,左外以左為主,右外以右為主,主表的每一項都會顯示,無論是否滿足條件!當不滿足條件時,次表使用null來補位!左外連線左外 select from 表1 別名1 left ou...
mysql 資料查詢語句 多表
連線查詢,是關聯式資料庫中最主要的查詢,包括等值查詢 自然連線查詢 非等值查詢 自身連線查詢 外連線查詢和復合條件連線查詢等。1 等值與非等值連線查詢 連線查詢的where子句中用來連線兩個表的條件稱為連線條件或連線謂詞。當連線運算子為 時,稱為等值連線。使用其他運算子稱為非等值連線。連線謂詞中的列...
mysql多表 MySQL 多表查詢
多表查詢 select listname from tablename1,tablename2 笛卡爾積 多表查詢中,如果沒有連線條件,則會產生笛卡爾積 數學中的定義 假設集合a 集合b 則兩個集合的笛卡爾積為 實際執行環境下,應避免使用笛卡爾積 解決方案 在where加入有效的連線條件 等值連線 ...