淺談sql之連接查詢


SQL之連接查詢

 

一、連接查詢的分類

        sql中將連接查詢分成四類:

  •   內鏈接
  •   外連接
    •  左外連接
    •     右外連接   
  •   自然連接
  •   交叉連接

 

二、連接查詢的分類

  數據庫表如下:

  1.學生表

  

  2.老師表

  

  3.班級表

  

 

  表用於連接查詢教學,不要糾結表的設計~

 

 三、連接查詢之內連接

 

概念

  內鏈接[inner]join,從左表中取出每一條記錄,去右表中與所有記錄進行匹配;
    是某個條件在左表中與右表中相同最終才會有保留結果,否則不保留。 

 

基本語法
  左表[inner] join 右表 on 左表.字段=右表.字段;on表示連接條件;條件字段就是代表相同的業務含義

 

例子

  查詢sql語句如下

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name
  FROM
      student
  INNER JOIN class ON student.c_id = class.id;

 

  查詢結果

  

 

  分析:從查詢結果不難看出,student的c_id和class的id是連接條件,以左表student為主表,以student表中每一條記錄的c_id作為右表class的id主鍵的查詢條件去匹配相關的信息。

  

  擴展:內連接還可以使用where 代替on關鍵字,或者如下寫法代替:

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name
  FROM
      student,
      class
  where student.c_id = class.id;

 

  四、連接查詢之外連接

 

概念

  外連接:outer join,以某張表為主,取出里面所有的記錄,每條與另外一張表進行連接,不管能不能匹配上條件,最終都會保留;能匹配正確保留,不能匹配,其他標的字段都是空null

  外連接分為兩種;是以某張表為主表;
      left join:左連接,已左表為主表;
      right join:右鏈接 ,以左表為主表。

 

基本語法

  左表left/right join 右表 on 左表.字段=右表.字段

 

例子

  (1)左連接

  sql語句:  

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name
  FROM
      student
  left JOIN class ON student.c_id = class.id;

  查詢結果

  

  分析:左連接,以左表student為主表,每條與另外一張表進行連接,多余同學的c_id在class匹配不上,並沒有這個班級,但是依舊保留下來,其他字段顯示NULL。

  

  (2)右連接

  sql語句:

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name
  FROM
      student
  right JOIN class ON student.c_id = class.id;

  查詢結果

  

  這里我就不再分析啦~都很好理解,不懂的看看上面的左連接自己推導一下~

 

五、連接查詢之自然連接

 

概念

  自然連接;natural join,自然連接,就是自動匹配連接條件;系統以字段名字作為匹配模式(同名字段就作為條件,多個同名字段都作為條件)

  ps:   自然連接很沒有用!!!實際開發中並不會用到所以了解就好了!!!

    內鏈接和外連接都可以模擬自然連接

    使用同名字段,合並字段
    左表 left/right/inner join 左表 using(字段名);

 

六、連接查詢之交叉連接

 

概念

  交叉連接; cross join,從一張表中循環取出每一條記錄,每條記錄都去另外一張表進行匹配,匹配一定保留(沒有條件匹配),而連接本身字段就會增加(保留),最終形成的結果叫做笛卡爾積。

 

基本語法

  左表 cross join右表;也可以攜程  from 左表,右表。

 

例子

  sql語句:

  SELECT
      *
  FROM
     student,
        class ;

  查詢結果

  

  分析:簡單來說就是,左表中的每一條記錄都與由表中的每一條記錄匹配一遍。

  ps:  交叉連接沒什么用,只是保證連接這種結構的完整性!!!

 

筆記就到這了,但是上面說到的都是兩個表的連接查詢,那么,是否可以多個表進行連接查詢呢?當然是可以的。

 

 

多表連接查詢

 

sql語句如下:

  SELECT
      student.s_name,
      student.c_id,
      class.id,
      class.c_name,
          class.t_id,
          teacher.id as tid,
          teacher.t_name
  FROM
      student
  left JOIN class ON student.c_id = class.id
  left JOIN teacher ON class.t_id = teacher.id;

 

查詢結果:

  

分析:多表連接查詢,其實就是兩個表連接查詢組成一個新的表,這個新的表再與第三個表進行連接查詢,以此類推,不懂的,思考一下?


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM