天天看點

SQL三表連接配接查詢與集合的并、交、差運算查詢

  1. use db_sqlserver2  
  2. select 姓名, 工資, 面積, 金額, (工資+金額/1000) as 實發工資 from 職工,倉庫, 訂購單   
  3.    where 職工.職工号=訂購單.職工号 and 職工.倉庫号=倉庫.倉庫号  
SQL三表連接配接查詢與集合的并、交、差運算查詢

2:

[sql] 

view plain copy
  1. select 姓名,工資,金額 from 職工,訂購單 where 姓名 like '%平%' and 職工.職工号 = 訂購單.職工号 order by 工資 desc  

3:

  1. select 姓名,工資,金額 from 職工,訂購單 where 姓名 like '%平%' and 職工.職工号 = 訂購單.職工号 order by 工資 desc, 金額 desc  
SQL三表連接配接查詢與集合的并、交、差運算查詢

4:

  1. select 姓名, 工資, 城市, (select AVG(工資) from 職工) as 平均工資 , (工資-(select AVG(工資) from 職工)) as 與平均工資之差  
  2. from 職工, 倉庫 where 倉庫.倉庫号=職工.倉庫号  
SQL三表連接配接查詢與集合的并、交、差運算查詢

5:帶儲存功能的多表連接配接查詢

    在SQL語句中,利用into語句可以把查詢到的結果儲存成一張新表,然後再對新表進行資料資訊查詢。

  1. select 倉庫.倉庫号, 城市, 面積, 姓名, 工資, 金額 into 多表連接配接産生的新表 from 倉庫, 職工, 訂購單   
  2. where 倉庫.倉庫号=職工.倉庫号 and 職工.職工号=訂購單.職工号  
  1. select * from 多表連接配接産生的新表  
SQL三表連接配接查詢與集合的并、交、差運算查詢

//檢視不同倉庫中的所有職工的倉庫号、平均銷售金額、最大銷售金額、最小銷售金額、最大銷售金額與最小銷售金額之差的資訊

  1. select 倉庫号, AVG(金額) as 平均銷售金額, MAX(金額) as 最大銷售金額, MIN(金額) as 最小銷售金額,   
  2. (MAX(金額) - MIN(金額)) as 最大金額與最小金額之差 from 多表連接配接産生的新表 group by 倉庫号;  
SQL三表連接配接查詢與集合的并、交、差運算查詢

可以把分組查詢結果再生成一張新表

  1. (MAX(金額) - MIN(金額)) as 最大金額與最小金額之差 into 分組查詢産生的新表  
  2.  from 多表連接配接産生的新表 group by 倉庫号;  
  3.  select * from 分組查詢産生的新表  

6: 内連接配接查詢(inner join)

    使用比較運算符對表之間的某些資料進行比較,并列出這些表中與連接配接條件相比對的資料行。

  1. select 姓名, 城市 from 倉庫 inner join 職工 on 職工.倉庫号=倉庫.倉庫号  

   多表的内連接配接查詢

  1. select 城市,面積, 姓名, 工資, 金額 from 倉庫     
  2.   inner join 職工 on 職工.倉庫号=倉庫.倉庫号  
  3.   inner join 訂購單 on 職工.職工号=訂購單.職工号  
  4.   and 工資>1800 and 面積<1000 and 金額 != 16600  

7:左連接配接查詢(left join)

      除滿足連接配接條件的記錄顯示外,第一張表中不滿足條件的記錄也顯示在結果集中。

  1. select 姓名, 城市 from 倉庫   
  2.    left join 職工 on 職工.倉庫号=倉庫.倉庫号 and 城市 is not null and 姓名 like '%王%'  
SQL三表連接配接查詢與集合的并、交、差運算查詢
  1. select 城市, 面積, 姓名, 工資, 金額 from 倉庫   
  2.    left join 職工 on 職工.倉庫号 = 倉庫.倉庫号  
  3.    left join 訂購單 on 職工.職工号=訂購單.職工号  
  4.    and 工資>1800 and 面積<1000 and 金額!=16600  
SQL三表連接配接查詢與集合的并、交、差運算查詢

  在第一個left join左連接配接中,第一張表是倉庫表,第二張表是職工表,在第二個left join左連接配接中,第一張表是職工表,第二張表是訂購單表

8:右連接配接查詢

      除滿足連接配接條件的記錄顯示外,第二張表中不滿足條件的記錄也顯示在查詢結果集中

  1. right join 職工 on 職工.倉庫号=倉庫.倉庫号 where 城市 is not null and 姓名 like '%王%'  
SQL三表連接配接查詢與集合的并、交、差運算查詢
  1.    right join 職工 on 職工.倉庫号=倉庫.倉庫号  
  2.    right join 訂購單 on 職工.職工号=訂購單.職工号  
  3.    and 工資>1500 and 面積<1000 and 金額!=16600  
SQL三表連接配接查詢與集合的并、交、差運算查詢
  1.    <span style="color:#ff0000;">where</span> 工資>1500 and 面積<1000 and 金額!=16600  

把and關鍵字換為where關鍵字後的效果圖,會發現那些無用的資料沒有了

SQL三表連接配接查詢與集合的并、交、差運算查詢

9:全連接配接查詢

    除滿足連接配接條件的記錄顯示外,兩張表中的不能滿足條件的記錄也顯示在查詢結果集中

  1. select 姓名,城市 from 倉庫 full join 職工 on 職工.倉庫号=倉庫.倉庫号 and 城市 is not null and  
  2. 姓名 like '%王%';  
SQL三表連接配接查詢與集合的并、交、差運算查詢

集合的交、并、差運算查詢

為了進行并、交、差運算,要求運算的兩個查詢結果具有相同的字段個數,并且對應的字段的值要出自同一個值域,即具有相同的資料類型和取值範圍

 10:并運算(union)

         主要将兩個或者更多個查詢的結果組合為單個結果集,該結果集包含聯合查詢中的全部查詢的全部行

  1. select 倉庫号 from 倉庫 where 城市='北京'  
  2. union  
  3. select 倉庫号 from 職工 where 工資>2000  
  1. select distinct 倉庫.倉庫号 from 倉庫, 職工 where 倉庫.倉庫号=職工.倉庫号 and (城市='北京' or 工資>2000)  

使用union all 保留重複行

  1. union all  
SQL三表連接配接查詢與集合的并、交、差運算查詢

11:交運算(intersect)

  可以将兩個select語句的查詢結果通過交運算合并成一個查詢結果

  1. intersect  
  1. select distinct 倉庫.倉庫号 from 倉庫, 職工 where 城市='北京' and 倉庫.倉庫号=職工.倉庫号 and 工資>2000  
SQL三表連接配接查詢與集合的并、交、差運算查詢

12:差運算(except)

     可以計算兩個select查詢結果之間的資料差,即傳回在一個查詢結果中存在,但在另一個查詢結果中不存在的所有行。

  1. select 倉庫号 from 倉庫 where 城市='北京'   
  2. except   
  3. select 倉庫号 from 職工 where 工資>2900  
  1. select 倉庫号 from 倉庫 where 城市='北京' and 倉庫号 not in(select 倉庫号 from 職工 where 工資>2900)  
SQL三表連接配接查詢與集合的并、交、差運算查詢