欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQL查詢?nèi)腴T(中篇)

 更新時間:2011年09月05日 00:03:27   作者:  
SQL查詢?nèi)腴T(中篇)
引言
在前篇文章中(SQL查詢?nèi)腴T(上篇),我對數(shù)據(jù)庫查詢的基本概念以及單表查詢做了詳細(xì)的解釋,本篇文章中,主要說明SQL中的各種連接以及使用范圍,以及更進(jìn)一步的解釋關(guān)系代數(shù)法和關(guān)系演算法對在同一條查詢的不同思路。

多表連接簡介
在關(guān)系數(shù)據(jù)庫中,一個查詢往往會涉及多個表,因為很少有數(shù)據(jù)庫只有一個表,而如果大多查詢只涉及到一個表的,那么那個表也往往低于第三范式,存在大量冗余和異常。

因此,連接(Join)就是一種把多個表連接成一個表的重要手段.

比如簡單兩個表連接學(xué)生表(Student)和班級(Class)表,如圖: 
   12

     進(jìn)行連接后如圖:

     3

笛卡爾積
      笛卡爾積在SQL中的實現(xiàn)方式既是交叉連接(Cross Join)。所有連接方式都會先生成臨時笛卡爾積表,笛卡爾積是關(guān)系代數(shù)里的一個概念,表示兩個表中的每一行數(shù)據(jù)任意組合,上圖中兩個表連接即為笛卡爾積(交叉連接)

      在實際應(yīng)用中,笛卡爾積本身大多沒有什么實際用處,只有在兩個表連接時加上限制條件,才會有實際意義,下面看內(nèi)連接

內(nèi)連接
      如果分步驟理解的話,內(nèi)連接可以看做先對兩個表進(jìn)行了交叉連接后,再通過加上限制條件(SQL中通過關(guān)鍵字on)剔除不符合條件的行的子集,得到的結(jié)果就是內(nèi)連接了.上面的圖中,如果我加上限制條件

      對于開篇中的兩個表,假使查詢語句如下:

復(fù)制代碼 代碼如下:

SELECT *
  FROM [Class] c
       inner join
       [Student] s
       on c.ClassID=s.StudentClassID

  可以將上面查詢語句進(jìn)行分部理解,首先先將Class表和Student表進(jìn)行交叉連接,生成如下表:
5

     然后通過on后面的限制條件,只選擇那些StudentClassID和ClassID相等的(上圖中劃了綠色的部分),最終,得到選擇后的表的子集

     4

當(dāng)然,內(nèi)連接on后面的限制條件不僅僅是等號,還可以使用比較運算符,包括了>(大于)、>=(大于或等于)、<=(小于或等于)、<(小于)、!>(不大于)、!<(不小于)和<>(不等于)。當(dāng)然,限制條件所涉及的兩個列的數(shù)據(jù)類型必須匹配.

對于上面的查詢語句,如果將on后面限制條件由等于改為大于:

復(fù)制代碼 代碼如下:

SELECT *
FROM [Class] c
inner join
[Student] s
on c.ClassID>s.StudentClassID

則結(jié)果從第一步的笛卡爾積中篩選出那些ClassID大于StudentClassID的子集:

6

雖然上面連接后的表并沒有什么實際意義,但這里僅僅作為DEMO使用:-)

關(guān)系演算
上面笛卡爾積的概念是關(guān)系代數(shù)中的概念,而我在前一篇文章中提到還有關(guān)系演算的查詢方法.上面的關(guān)系代數(shù)是分布理解的,上面的語句推導(dǎo)過程是這樣的:“對表Student和Class進(jìn)行內(nèi)連接,匹配所有ClassID和StudentClassID相等行,選擇所有的列”

而關(guān)系演算法,更多關(guān)注的是我想要什么,比如說上面同樣查詢,用關(guān)系演算法思考的方式是“給我找到所有學(xué)生的信息,包括他們的班級信息,班級ID,學(xué)生ID,學(xué)生姓名”

用關(guān)系演算法的SQL查詢語句如下:

復(fù)制代碼 代碼如下:

SELECT *
FROM [Class] c
,
[Student] s
where c.ClassID=s.StudentClassID

當(dāng)然,查詢后返回的結(jié)果是不會變的:

4 
外連接
假設(shè)還是上面兩個表,學(xué)生和班級.我在學(xué)生中添加一個名為Eric的學(xué)生,但出于某種原因忘了填寫它的班級ID:
7 2

當(dāng)我想執(zhí)行這樣一條查詢:給我取得所有學(xué)生的姓名和他們所屬的班級:

相關(guān)文章

  • SQL2008 詳解直接將XML存入到SQL中

    SQL2008 詳解直接將XML存入到SQL中

    這篇文章主要介紹了SQL2008 詳解直接將XML存入到SQL中的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • SQLServer查找字符串在另一字符串的索引位置

    SQLServer查找字符串在另一字符串的索引位置

    本文主要介紹了SQLServer查找字符串在另一字符串的索引位置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • 基于Sql Server通用分頁存儲過程的解決方法

    基于Sql Server通用分頁存儲過程的解決方法

    本篇文章,小編將為大家介紹基于Sql Server通用分頁存儲過程的解決方法,有需要的朋友可以參考一下
    2013-04-04
  • mssql @@ERROR 使用

    mssql @@ERROR 使用

    @@ERROR返回一個整數(shù) 0為正常
    2009-05-05
  • SQL 查詢和刪除重復(fù)字段數(shù)據(jù)的方法

    SQL 查詢和刪除重復(fù)字段數(shù)據(jù)的方法

    這篇文章介紹了SQL 查詢和刪除重復(fù)字段數(shù)據(jù)的方法,有需要的朋友可以參考一下
    2013-08-08
  • 整理MySql常用查詢語句(23種)

    整理MySql常用查詢語句(23種)

    Mysql數(shù)據(jù)庫在程序開發(fā)中經(jīng)常會用到,基于平時做項目很忙,沒來得及整理,今天抽個給大家整理Mysql常用查詢語句,需要的朋友可以參考下
    2015-08-08
  • SQL server 2016 安裝步驟圖文教程

    SQL server 2016 安裝步驟圖文教程

    本文通過圖文并茂的形式給大家介紹了SQL server 2016 安裝步驟,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-03-03
  • SQL Server無法生成FRunCM線程的解決方法

    SQL Server無法生成FRunCM線程的解決方法

    這篇文章主要介紹了SQL Server無法生成FRunCM線程,請查看SQL Server 錯誤日志和 Windows 事件日志,解決方法就在下面
    2013-11-11
  • SQL Transcation的一些總結(jié)分享

    SQL Transcation的一些總結(jié)分享

    相信大家對于SQL Transcation再熟悉不過,它確保了數(shù)據(jù)庫的數(shù)據(jù)一致性和安全性,尤其在對數(shù)據(jù)執(zhí)行增刪時,如果發(fā)生異常和錯誤它就會觸發(fā)事務(wù)回滾,從而確保了我們數(shù)據(jù)的一致性和安全性,下面我們將通過分四部分介紹事件(Transcation)
    2012-08-08
  • sqlldr裝載數(shù)據(jù)實現(xiàn)代碼

    sqlldr裝載數(shù)據(jù)實現(xiàn)代碼

    本文將詳細(xì)介紹如何用sqlldr裝載數(shù),需要了解更多的朋友可以參考下
    2012-12-12

最新評論