1. 程式人生 > >SQL三表連線查詢與集合的並、交、差運算查詢

SQL三表連線查詢與集合的並、交、差運算查詢

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


2:

  1. select 姓名,工資,金額 from 職工,訂購單 where 姓名 like'%平%'and 職工.職工號 = 訂購單.職工號 orderby 工資 desc

3:

  1. select 姓名,工資,金額 from 職工,訂購單 where 姓名 like'%平%'and 職工.職工號 = 訂購單.職工號 orderby 工資 
    desc, 金額 desc


4:

  1. select 姓名, 工資, 城市, (selectAVG(工資) from 職工) as 平均工資 , (工資-(selectAVG(工資) from 職工)) as 與平均工資之差  
  2. from 職工, 倉庫 where 倉庫.倉庫號=職工.倉庫號  

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

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

  1. select 倉庫.倉庫號, 城市, 面積, 姓名, 工資, 金額 into 多表連線產生的新表 from 倉庫, 職工, 訂購單   
  2. where
     倉庫.倉庫號=職工.倉庫號 and 職工.職工號=訂購單.職工號  

  1. select * from 多表連線產生的新表  


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

  1. select 倉庫號, AVG(金額) as 平均銷售金額, MAX(金額) as 最大銷售金額, MIN(金額) as 最小銷售金額,   
  2. (MAX(金額) - MIN(金額)) as 最大金額與最小金額之差 from 多表連線產生的新表 groupby 倉庫號;  


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

  1. select 倉庫號, AVG
    (金額) as 平均銷售金額, MAX(金額) as 最大銷售金額, MIN(金額) as 最小銷售金額,   
  2. (MAX(金額) - MIN(金額)) as 最大金額與最小金額之差 into 分組查詢產生的新表  
  3.  from 多表連線產生的新表 groupby 倉庫號;  
  4.  select * from 分組查詢產生的新表  

6: 內連線查詢(inner join)

    使用比較運算子對錶之間的某些資料進行比較,並列出這些表中與連線條件相匹配的資料行。

  1. select 姓名, 城市 from 倉庫 innerjoin 職工 on 職工.倉庫號=倉庫.倉庫號  

   多表的內連線查詢

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

7:左連線查詢(left join)

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

  1. select 姓名, 城市 from 倉庫   
  2.    leftjoin 職工 on 職工.倉庫號=倉庫.倉庫號 and 城市 isnotnulland 姓名 like'%王%'

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


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

8:右連線查詢

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

  1. select 姓名, 城市 from 倉庫   
  2. rightjoin 職工 on 職工.倉庫號=倉庫.倉庫號 where 城市 isnotnulland 姓名 like'%王%'

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


  1. select 城市, 面積, 姓名, 工資, 金額 from 倉庫   
  2.    rightjoin 職工 on 職工.倉庫號=倉庫.倉庫號  
  3.    rightjoin 訂購單 on 職工.職工號=訂購單.職工號  
  4.    <span style="color:#ff0000;">where</span> 工資>1500 and 面積<1000 and 金額!=16600  
把and關鍵字換為where關鍵字後的效果圖,會發現那些無用的資料沒有了



9:全連線查詢

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

  1. select 姓名,城市 from 倉庫 fulljoin 職工 on 職工.倉庫號=倉庫.倉庫號 and 城市 isnotnulland
  2. 姓名 like'%王%';  


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

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

 10:並運算(union)

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

  1. select 倉庫號 from 倉庫 where 城市='北京'
  2. union
  3. select 倉庫號 from 職工 where 工資>2000  

  1. select 倉庫號 from 倉庫 where 城市='北京'
  2. union
  3. select 倉庫號 from 職工 where 工資>2000  
  4. selectdistinct 倉庫.倉庫號 from 倉庫, 職工 where 倉庫.倉庫號=職工.倉庫號 and (城市='北京'or 工資>2000)  
使用union all 保留重複行
  1. select 倉庫號 from 倉庫 where 城市='北京'
  2. unionall
  3. select 倉庫號 from 職工 where 工資>2000  

11:交運算(intersect)

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

  1. select 倉庫號 from 倉庫 where 城市='北京'
  2. intersect
  3. select 倉庫號 from 職工 where 工資>2000  

  1. selectdistinct 倉庫.倉庫號 from 倉庫, 職工 where 城市='北京'and 倉庫.倉庫號=職工.倉庫號 and 工資>2000  


12:差運算(except)

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

  1. select 倉庫號 from 倉庫 where 城市='北京'
  2. except
  3. 相關推薦

    SQL連線查詢集合運算查詢

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

    SQL連線的兩種不同思路

    之前寫SQL一直都是按照基本的思路 select from 表1 LEFT JOIN where。。。 今天看到別人的SQL ,雖然新方法更復雜,但是確實開闊了思路。 step1 set宣告變數 step2 方法一: SELECT T1…, T2… FROM (SELECT 列1,列2… F

    資料結構——求集合(單鏈)的運算

    求集合(用單鏈表表示)的並、交和差運算: 問題描述:該演算法的設計,要求執行結果如下所示: (包含三種排序) 集合的運算如下: 原 集 合A: c a e h 原 集 合B: f h b g d a 有序集合A: a c e h 有序集合B: a b d f g h 集合的並C: a b

    Atitit 資料join 的原理java實現 Atitit join連線的原理實現 13SQL Server 連線種方式   (1) Merge Join   (2) Nested

    Atitit 資料join 的原理與java實現   Atitit join表連線的原理與實現   13、SQL Server 表連線的三種方式 (1) Merge Join (2) Nested Loop Join (3) Hash Join &

    9mysql連線查詢簡單語句

    mysql 三表聯查: 左連線案例:(在兩表聯查的基礎上再加一層) select username,ps,name,tel from (t1 left join t2 on t1.t1_id=t2.t1_id) left join t3 on t1.t1_id=t3.t1_id 其他連結

    mybatis連線查詢資料重複問題

    此問題的產生,主要是資料庫的欄位名一樣導致 三張表   DOCTOR JOB OBJECT 有問題的查詢語句和查詢結果是: SELECT d.*,j.*,o.* from (select d

    資料庫連線查詢怎麼做

    有三個表 a b c c.aid對應a.aid c.bid對應b.bid 現在要查出a.aname,b.bname,c.value怎麼寫sql語句? select a.aname,b.bname,c.value from c inner join a on c.aid=a.aid inner join b

    遠端連線區域網內的sql server 無法連線 錯誤解決方法

    第一個錯誤"SQL Server 不存在或訪問被拒絕"通常是最複雜的,錯誤發生的原因比較多,需要檢查的方面也比較多 。一般說來,有以下幾種可能性:   1、SQL Server名稱或IP地址拼寫有誤;   2、伺服器端網路配置有誤;   3、客戶端網路配置有誤。   要解決這個問題,我們一般要遵循以

    SQL Server 連線

    資料庫操作中,我們需要的結果可能在兩張表甚至多張表中,這時候就需要表連線操作,多表查詢中的各個表之間的欄位會存在連線,比如主外來鍵關聯,可以使用主外來鍵來關聯每張表。表連線方式有以下幾種: JOIN: 如果表中有至少一個匹配,則返回行 LEFT JOIN(左連線): 即

    sql連刪

        最近專案中遇到一個三表連刪的問題,在網上找了好多資料,但是大多數都是打醬油的,最終還是自己研究出來了,其實沒什麼難度,大家多想想也可以寫出來,發個帖子記錄下 <!-- 三表連刪  刪除多條--> <!-- 類別表,使用者表,中間表 --> &l

    C#連線MySQL資料庫,建庫

    本文章是建立在已經安裝MySQL資料庫的前提,預設安裝在C:\Program Files (x86)\MySQL,建議在安裝時選中Connector.NET 6.9的安裝,裡面有MySQL與C#連線的動態連結庫。   幫助文件C:\Program Files (x86)\MySQL\Connec

    SQL資料庫連線圖文詳解

    總結:left join 以左表為準,查詢出左表的所有資料,右表中有對應的則顯示出來,沒有對應的則顯示為null.注:A left join B on  與  A,B where  有相同效果,如下:select student.* ,Score.* from student inner join Score

    【TOJ 1743】集合運算(set集合的運用)

    運用 導入 -s std 數字 set集合 一行 輸入數據 turn Description 給定兩個集合A和B的所有元素,計算它們的交、並、差集。 Input 輸入數據有多組,第一行為數據的組數T,接下來有2T行,每組數據占2行,每行有若幹個整數,第一行的所有整數構成集

    資料庫基礎(1)關係的布林運算:資料集的,補和有效補運算

    關係的布林運算主要包括:並,交,差,廣義笛卡爾積,補,有效補 並集 定義: 關係R和S的並集結果,由屬於R或屬於S的所有元組組成,其結果是一個新關係。記為: Q = R ∪ S = {t | t ∈ R 或 t ∈ S } 例子: 注意! 這個並集求出來是不含重複元組的!

    stl中set的

          set的鍵是自動排序的,對應的求並集差集交集都可以用到這個有序的特性,時間複雜度都為O(m+n),m,n分別為兩個容器的大小 1.set_union可以用來求兩個集合的並集,它是一種穩定的操作,因為元素間的相對位置不會改變。 原始碼如下: template &

    MyBatis學習總結()——多關聯查詢動態SQL

    一、多表關聯查詢 表與表之間有三種常見的關聯關係,分別是一對一,一對多與多對多關係,MyBatis直接提供一對一與一對多的關聯關係,可以通過間接的方式實現多對多關聯。 1.1、一對一關係 1.1.1、執行環境 假定一個員工(emp)擁有一個登入使用者(user),員工與使用者表之間是一對一關係:

    學習筆記day64-----oracle-sql標準的連線集合運算函式和分組查詢操作

    1、sql標準中的表連線 1.1、內連線 語法: select 欄位列表 from 表1 [inner] join 表2 on 關聯條件; --三表

    sql-多查詢JOIN分組GROUP BY

    group 邊表 AS inner left join sdn AR full join ner 一、內部連接:兩個表的關系是平等的,可以從兩個表中獲取數據。用ON表示連接條件 SELECT A.a,B.b FROM At AS A INNER JOINT Bt AS B

    VB6基本資料庫應用():連線資料庫SQL語句的Select語句初步

    資料庫我們已經建好了,重提一下上一章的結果,我們最後建立了一張Student的表,其中有StudentID(數字的雙精度型別)和StudentName(文字型別。補充一下,2013中有【長文字】和【短文字】,人名不會很長,根據上一章選擇儘量小的資料型別的規則,這裡就選【短文字】就可以了)。儘

    資料庫sql語句多連線查詢+group by分組的使用

    參考自:https://blog.csdn.net/fly_fly_fly_pig/article/details/81325116 平時用sql查詢經常遇到的問題,這次搜到了一個博主的文章,解決了問題。但是其中的深層原因還沒有想清楚,本文需要完善。 更正前 CREATE VIE