• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    SQLServer學習筆記系列4

    來源:懂視網 責編:小采 時間:2020-11-09 07:45:17
    文檔

    SQLServer學習筆記系列4

    SQLServer學習筆記系列4:一.寫在前面的話 好多天沒有記錄sql學習筆記了,要堅持下去,堅信每一點的進步都是為在積蓄力量。今天看到一幅圖,特此分享出來。 通過這幅圖,我看到的是每人站在自己的角度看問題,感受是不一樣的,就如同學習知識一樣,總覺得自己的理解才是最獨特的,有
    推薦度:
    導讀SQLServer學習筆記系列4:一.寫在前面的話 好多天沒有記錄sql學習筆記了,要堅持下去,堅信每一點的進步都是為在積蓄力量。今天看到一幅圖,特此分享出來。 通過這幅圖,我看到的是每人站在自己的角度看問題,感受是不一樣的,就如同學習知識一樣,總覺得自己的理解才是最獨特的,有

    一.寫在前面的話 好多天沒有記錄sql學習筆記了,要堅持下去,堅信每一點的進步都是為在積蓄力量。今天看到一幅圖,特此分享出來。 通過這幅圖,我看到的是每人站在自己的角度看問題,感受是不一樣的,就如同學習知識一樣,總覺得自己的理解才是最獨特的,有

    一.寫在前面的話


    好多天沒有記錄sql學習筆記了,要堅持下去,堅信每一點的進步都是為在積蓄力量。今天看到一幅圖,特此分享出來。

    通過這幅圖,我看到的是每人站在自己的角度看問題,感受是不一樣的,就如同學習知識一樣,總覺得自己的理解才是最獨特的,有時候適當把東西分享出

    去,聽聽別人的見解,或許會讓我們理解的更加深刻。換位思考,冷靜處理,沉著淡定,不驕不躁,bug只不過生活的一部分,正因為有了bug才會讓我們進

    步,讓我們去學習,去追尋問題的答案,一起努力,做一個快樂的程序猿。這個世界唯一不變的就是變化,學習才會讓我們適應這個變化。Keep study,

    keep moving!進入今天的sql學習正題。

    二.sqlserver連接

    (1)交叉連接(cross join)即我們所說的笛卡爾積。查詢出滿足兩張表所有的記錄數,A(3條記錄),B(9條記錄),A*B(27條記錄)。

    比如:雇員表(HR.employees)和貨運公司(Sales.shippers)表做一個交叉連接。

    1 select * from hr.employees;
    2 select * from sales.shippers;

    進行交叉連接以后,則找到27條記錄。

    1 select a.empid,b.shipperid
    2 from hr.employees a cross join sales.shippers b;

    (2)內連接(inner join),即必須滿足某一條件的組合。

    例如我們要查詢產品類別表下,每種產品屬于哪一分類,就需要關聯產品分類表(production.categories)和產品明細表做一個inner join。

    1 select a.categoryid,a.categoryname,b.productid,b.productname
    2 from production.categories a inner join production.products b
    3 on a.categoryid=b.categoryid;

    結果如圖所示:

    我們可以看到產品1、都屬于產品分類1.以此類推.........,這樣就可以找出類別1下有哪些產品,以及產品分別屬于哪一分類。

    在這里我們拓展一下:假若我們要查詢有哪些顧客下單了,找出下訂單的顧客信息和訂單信息,那么就需要關聯顧客表(sales.customers)和訂單表

    (sales.orders)。

    通過查看兩張表的字段,我們可以看到兩張表可以用custid顧客的ID進行連接。找出相關的顧客信息和訂單信息。

    1 select a.custid,a.contactname,b.custid,b.orderid
    2 from sales.customers a join sales.orders b
    3 on a.custid=b.custid

    通過內連接(inner join)可以得出一些基本信息,

    但是這里我們發現一些顧客下過很多訂單,加入我們要找出該顧客下過的訂單數,并且只顯示該顧客的一條記錄,那么我們就需要用到之前學到過的

    count.....over用法,返回記錄數。如要顯示不重復的記錄,那么我們就可以用關鍵字distinct進行過濾。

    1 select distinct a.custid,a.contactname,
    2 count(*) over(partition by a.custid) as N'顧客訂單數量'
    3 from sales.customers a inner join sales.orders b
    4 on a.custid=b.custid

    就這樣我們可以得出每個顧客的訂單數量。其實這里我們還有不用over開窗函數,也能實現同樣的統計信息,那就是根據custid進行分組:

    1 select a.custid,a.contactname,
    2 count(*) as N'group-by顧客訂單數量'
    3 from sales.customers a inner join sales.orders b
    4 on a.custid=b.custid
    5 group by a.custid ,a.contactname order by a.custid;

    結果如圖:

    這里我們得出的結果跟上面用count.....over()結果一樣。所以在這里選擇哪種方式,可以根據需要,視情況而定。

    但是這里我們注意一點,我們查詢一下顧客表(sales.customers),看看里面的信息。

    1 select * from sales.customers

    我們可以看到共有91條記錄,即有91為顧客光顧過相關訂單,根據上面顧客下單信息的89條記錄,可以知道,有兩位顧客光顧過訂單,但卻未下單,可以理解,不買看看總行吧!

    但是我們卻沒有看到那兩位觀望著顧客的信息,怎樣才能將那兩位觀望著找出來,咱們送給他兩禮品,感謝他們的支持了?這就需要用到接下來說的連接left join。

    (3)left......join ,左連接,即保證左側條件全部有,右側沒有條件不足,則用null補齊。

    繼續上述未完成的任務,即找出沒有下訂單顧客的信息,也就是訂單數量為0的顧客信息,在這里就必須保證所有的顧客信息存在,即用到左連接

    (left....join)。

    1 select a.custid,b.custid,a.contactname,a.fax,
    2 count(b.orderid) as N'group-by顧客訂單數量'
    3 from sales.customers a left join sales.orders b
    4 on a.custid=b.custid 
    5 group by a.custid ,a.fax,a.contactname,b.custid 
    6 order by count(b.custid);

    結果如圖所示:

    (4)右連接(right .....join),其實右連接跟左連接相反,以右側表為基準,保證右側表滿足所有記錄,左側表不足用null補齊。如果交換兩個表位置,則就很好

    的理解左右連接。

    例如:將上述查詢用用連接,則查詢出來的是,下過訂單的所有顧客信息。

    1 select a.custid,b.custid,a.contactname,a.fax,
    2 count(b.orderid) as N'顧客訂單數量'
    3 from sales.customers a right join sales.orders b
    4 on a.custid=b.custid 
    5 group by a.custid ,a.fax,a.contactname,b.custid 
    6 order by count(b.custid);

    根據上述信息,我們知道下過訂單的顧客確實有89人,有兩人沒有下過訂單;但是在這里我們也可以通過右連接找出所有顧客的信息。

    1 select a.custid,b.custid,a.contactname,a.fax,
    2 count(b.orderid) as N'顧客訂單數量'
    3 from sales.orders b right join sales.customers a 
    4 on a.custid=b.custid 
    5 group by a.custid ,a.fax,a.contactname,b.custid 
    6 order by count(b.custid);

    可以看到找出了所有顧客信息,包括未下訂單的顧客信息。其實在這里只是交換了兩張表的位置而已。

    所以說對于左右連接來說,左連接就以左側表為基準,

    右連接就以右表為基準。

    希望各位大牛給出指導,不當之處虛心接受學習!謝謝!

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    SQLServer學習筆記系列4

    SQLServer學習筆記系列4:一.寫在前面的話 好多天沒有記錄sql學習筆記了,要堅持下去,堅信每一點的進步都是為在積蓄力量。今天看到一幅圖,特此分享出來。 通過這幅圖,我看到的是每人站在自己的角度看問題,感受是不一樣的,就如同學習知識一樣,總覺得自己的理解才是最獨特的,有
    推薦度:
    標簽: 學習 筆記 sql
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产国产成人精品久久| 伊人久久精品线影院| 99久久精品午夜一区二区 | 国产国产成人精品久久| 狠狠精品干练久久久无码中文字幕| 精品人无码一区二区三区| 午夜一级日韩精品制服诱惑我们这边 | 久久精品国产亚洲av影院| 热综合一本伊人久久精品| 国产99精品一区二区三区免费| 国产精品ⅴ无码大片在线看| 国产精品无码久久久久久| 四虎精品成人免费视频| 国产精品麻豆入口| 欧美精品在线一区二区三区| 国产AV午夜精品一区二区三区| 在线精品自拍无码| 亚洲精品偷拍视频免费观看| 久久久久久无码国产精品中文字幕 | 国产99精品久久| 精品亚洲国产成AV人片传媒| 一色屋精品视频在线观看| 香蕉99久久国产综合精品宅男自| 精品国产亚洲男女在线线电影| 国产精品污WWW一区二区三区| 999久久久国产精品| 91精品国产91久久| 91av国产精品| 国产精品麻豆VA在线播放| 国产精品久久久久乳精品爆| 国产高清在线精品一区小说 | 精品久久久久久久无码 | 国产情侣大量精品视频| 久久国产精品无码HDAV| 欧美亚洲国产精品第一页| 久久九九亚洲精品| 日韩精品在线视频| 国产高清精品在线| 精品成人av一区二区三区| 国产午夜福利精品久久| 精品国产福利尤物免费|