日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

      歡迎訪問 生活随笔!

      生活随笔

      當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

      编程问答

      sql server高级查询,看这篇文章就够了

      發布時間:2023/12/3 编程问答 30 豆豆
      生活随笔 收集整理的這篇文章主要介紹了 sql server高级查询,看这篇文章就够了 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

      先選擇一個數據庫

      use jobtest go

      引入:該數據庫jobtest里面有兩張表,Student學生表和Grade年級表,表中的數據如下所示:

      學生表Student:

      年級Grade表:

      接下來我們來看看sql server中的子查詢:

      子查詢

      1.查詢編號比李太白大的學生信息

      --先獲取李太白的編號 declare @sid int ; select @sid = sid from student where sname = '李太白' --再查詢編號比@sid大的信息 select * from student where sid>@sid

      當然我們也可以改成子查詢:

      —可以改成子查詢(將@sid替換成獲取李太白編號的sql語句)

      select * from student where sid>(select sid from student where sname = '李太白')

      其運行結果都是:

      以上就是一個最簡單的子查詢。

      習慣上,外面的查詢稱為父查詢,括號里面的則是子查詢,返回結果集。因為子查詢作為where條件的一部分,所以還可以和update、insert以及delete一起使用,語法和select的類似。

      注意:將子查詢和比較運算符聯合使用,必須保證子查詢返回的值不多于一個。

      還有一個就是:

      select * from student不如select sid,sname,sphone,spass,sgid from student的效率高,可維護性也比不上,所以一般使用后者。

      下面我們再來一個子查詢的案例

      需求:查詢青鳥一班的學生信息

      我們可以看到思路是這樣的:

      (1)先根據年級名稱查詢出年級編號

      (2)學生表里面的年級編號讓和查詢出來的年級編號對應起來就可以了

      select * from student where sgid = (select gid from grade where gname = '青鳥一班')

      運行結果:

      in和not in查詢

      前面我們說過,將子查詢和比較運算符聯合使用,必須保證子查詢返回的值不多于一個。

      如果返回多個值的話會怎么樣呢?我們不妨來試試、

      查詢學生表中,年級編號是1的年級名稱

      select gname from grade where gid =(select sgid from student where sgid = 1)

      運行結果:

      可見,程序給我報異常了,表示子查詢返回了多個結果。

      正確寫法應該是這樣的:

      select gname from grade where gid in(select sgid from student where sgid = 1)

      in子查詢適合用在子查詢結果集返回多條記錄的情況下。

      反過來not in就是正好與in取反,還是同樣上面給出的例子,我們換成not in看看結果是什么樣的?

      select gname from grade where gid not in(select sgid from student where sgid = 1)

      結果:

      很明顯,除了青鳥一班,其余年級名稱均已輸出。

      exists和no exists

      exists,只注重子查詢是否有返回行,如查有返回行結果為真,否則為假,并不適用子查詢的結果,僅使用測試子查詢是否有返回結果

      下面來舉例說明一下:

      查詢是否有編號為6的學生信息,如果有,則輸出‘有編號是6的學生’

      if exists(select * from student where sid = 6) print '有編號是6的學生'

      運行結果為:

      因為表中并沒有編號是6的學生信息。

      而not exists正好與exists相反,還是利用上面的案例

      if not exists(select * from student where sid = 6) print '有編號是6的學生'

      運行結果為:

      總結

      以上是生活随笔為你收集整理的sql server高级查询,看这篇文章就够了的全部內容,希望文章能夠幫你解決所遇到的問題。

      如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。