- use db_sqlserver2
- select 姓名, 工資, 面積, 金額, (工資+金額/1000) as 實發工資 from 職工,倉庫, 訂購單
- where 職工.職工号=訂購單.職工号 and 職工.倉庫号=倉庫.倉庫号

2:
[sql]
view plain copy- select 姓名,工資,金額 from 職工,訂購單 where 姓名 like '%平%' and 職工.職工号 = 訂購單.職工号 order by 工資 desc
3:
- select 姓名,工資,金額 from 職工,訂購單 where 姓名 like '%平%' and 職工.職工号 = 訂購單.職工号 order by 工資 desc, 金額 desc
4:
- select 姓名, 工資, 城市, (select AVG(工資) from 職工) as 平均工資 , (工資-(select AVG(工資) from 職工)) as 與平均工資之差
- from 職工, 倉庫 where 倉庫.倉庫号=職工.倉庫号
5:帶儲存功能的多表連接配接查詢
在SQL語句中,利用into語句可以把查詢到的結果儲存成一張新表,然後再對新表進行資料資訊查詢。
- select 倉庫.倉庫号, 城市, 面積, 姓名, 工資, 金額 into 多表連接配接産生的新表 from 倉庫, 職工, 訂購單
- where 倉庫.倉庫号=職工.倉庫号 and 職工.職工号=訂購單.職工号
- select * from 多表連接配接産生的新表
//檢視不同倉庫中的所有職工的倉庫号、平均銷售金額、最大銷售金額、最小銷售金額、最大銷售金額與最小銷售金額之差的資訊
- select 倉庫号, AVG(金額) as 平均銷售金額, MAX(金額) as 最大銷售金額, MIN(金額) as 最小銷售金額,
- (MAX(金額) - MIN(金額)) as 最大金額與最小金額之差 from 多表連接配接産生的新表 group by 倉庫号;
可以把分組查詢結果再生成一張新表
- (MAX(金額) - MIN(金額)) as 最大金額與最小金額之差 into 分組查詢産生的新表
- from 多表連接配接産生的新表 group by 倉庫号;
- select * from 分組查詢産生的新表
6: 内連接配接查詢(inner join)
使用比較運算符對表之間的某些資料進行比較,并列出這些表中與連接配接條件相比對的資料行。
- select 姓名, 城市 from 倉庫 inner join 職工 on 職工.倉庫号=倉庫.倉庫号
多表的内連接配接查詢
- select 城市,面積, 姓名, 工資, 金額 from 倉庫
- inner join 職工 on 職工.倉庫号=倉庫.倉庫号
- inner join 訂購單 on 職工.職工号=訂購單.職工号
- and 工資>1800 and 面積<1000 and 金額 != 16600
7:左連接配接查詢(left join)
除滿足連接配接條件的記錄顯示外,第一張表中不滿足條件的記錄也顯示在結果集中。
- select 姓名, 城市 from 倉庫
- left join 職工 on 職工.倉庫号=倉庫.倉庫号 and 城市 is not null and 姓名 like '%王%'
- select 城市, 面積, 姓名, 工資, 金額 from 倉庫
- left join 職工 on 職工.倉庫号 = 倉庫.倉庫号
- left join 訂購單 on 職工.職工号=訂購單.職工号
- and 工資>1800 and 面積<1000 and 金額!=16600
在第一個left join左連接配接中,第一張表是倉庫表,第二張表是職工表,在第二個left join左連接配接中,第一張表是職工表,第二張表是訂購單表
8:右連接配接查詢
除滿足連接配接條件的記錄顯示外,第二張表中不滿足條件的記錄也顯示在查詢結果集中
- right join 職工 on 職工.倉庫号=倉庫.倉庫号 where 城市 is not null and 姓名 like '%王%'
- right join 職工 on 職工.倉庫号=倉庫.倉庫号
- right join 訂購單 on 職工.職工号=訂購單.職工号
- and 工資>1500 and 面積<1000 and 金額!=16600
- <span style="color:#ff0000;">where</span> 工資>1500 and 面積<1000 and 金額!=16600
把and關鍵字換為where關鍵字後的效果圖,會發現那些無用的資料沒有了
9:全連接配接查詢
除滿足連接配接條件的記錄顯示外,兩張表中的不能滿足條件的記錄也顯示在查詢結果集中
- select 姓名,城市 from 倉庫 full join 職工 on 職工.倉庫号=倉庫.倉庫号 and 城市 is not null and
- 姓名 like '%王%';
集合的交、并、差運算查詢
為了進行并、交、差運算,要求運算的兩個查詢結果具有相同的字段個數,并且對應的字段的值要出自同一個值域,即具有相同的資料類型和取值範圍
10:并運算(union)
主要将兩個或者更多個查詢的結果組合為單個結果集,該結果集包含聯合查詢中的全部查詢的全部行
- select 倉庫号 from 倉庫 where 城市='北京'
- union
- select 倉庫号 from 職工 where 工資>2000
- select distinct 倉庫.倉庫号 from 倉庫, 職工 where 倉庫.倉庫号=職工.倉庫号 and (城市='北京' or 工資>2000)
使用union all 保留重複行
- union all
11:交運算(intersect)
可以将兩個select語句的查詢結果通過交運算合并成一個查詢結果
- intersect
- select distinct 倉庫.倉庫号 from 倉庫, 職工 where 城市='北京' and 倉庫.倉庫号=職工.倉庫号 and 工資>2000
12:差運算(except)
可以計算兩個select查詢結果之間的資料差,即傳回在一個查詢結果中存在,但在另一個查詢結果中不存在的所有行。
- select 倉庫号 from 倉庫 where 城市='北京'
- except
- select 倉庫号 from 職工 where 工資>2900
- select 倉庫号 from 倉庫 where 城市='北京' and 倉庫号 not in(select 倉庫号 from 職工 where 工資>2900)