亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > SQL Server > 正文

跟我學SQL:(三)使用SQL子選擇來合并查詢

2019-11-03 08:37:16
字體:
來源:轉載
供稿:網友
你是否曾經為了得到所需要的信息而反復查詢?子選擇,也被稱為子查詢,也許正是你在尋找的。SQL的這項功能使你可以在一組結果中查詢,創造性地給結果組加以限定,或是在向數據庫的單一調用中將結果與一個無關系的查詢做相關。這篇文章中我將給出幾個子選擇的例子并就何時使用他們進行討論。

在一個結果組中搜索
  
子選擇的理念很簡單:一個選擇查詢安置在另一個查詢內部,創建一個在單一聲明搜索中不可用的資源。子選擇允許查詢的合并,結果組比較的責任落到了數據庫中而不是應用軟件代碼中。

使用這個功能的一個途徑是對兩個表格中的可比數據專欄中的值進行定位。例如,我的一個數據庫有兩個表格,Album和Lyric。我可以很容易地通過下面的子查詢聲明來找到每一個Metallica的歌曲中包含“justice”的歌名:

SELECT song_name FROM Album
WHERE band_name = ‘Metallica’
AND song_name IN
(SELECT song_name FROM Lyric
WHERE song_lyric LIKE ‘%justice%’);

這個例子是很簡單的,我從Album表格中選擇了所有Metallica的歌曲,接著,我在lyric表格中選擇所有包含“justice”的歌曲,最后,我使用IN關鍵字來從Lyric表格結果組中顯示的Album表格中返回歌曲名稱。

我使用Lyric表格結果組來給Album表格中的結果做限定。WHERE子句中的子選擇部分是完全自包含的,因此我不需要使用例如Album.song_name和Lyric.song_name等完整的專欄名稱。我沒有從最終結果組的Lyric表格中返回任何值,如果我需要歌曲的Lyric,我會使用一個JOIN聲明。

使用NOT IN排除結果
你可以使用NOT IN關鍵字來獲得明確地不被包含在另一個結果組中的結果。例如,我想要通過下面的代碼來返回Metallica在“And Justice for All”專輯中不包含單詞“justice”的歌曲:

SELECT song_name FROM Album
WHERE album_name = ‘And Justice for All’
AND band_name = ‘Metallica’
AND song_name NOT IN
(SELECT song_name FROM Lyric
WHERE song_lyric LIKE ‘%justice%’);

在前面的SQL代碼中,我選擇了Metallica的“And Justice for All,”專輯中的所有歌曲,接著是帶有歌詞中帶有“justice”所有歌曲,最后從在Lyric結果組中沒有出現的Album結果組返回了所有歌曲。較之于返回兩個查詢并使用代碼來比較數組,你通過一個單獨的聲明就可以得到確切的結果。

使用EXISTS來相關結果
有時你可以通過多種途徑來訪問相同的數據,而且你需要對你的結果進行匹配(或相關)來得到值的交叉區。例如,我可以通過搜索Album表格來得到Metallica的歌曲列表,可是,我也可以從我的Cover表格中得到由Damage, Inc表演的Metallica的歌曲的列表,我可以在兩個表格中直接比較查詢結果來對值作相關。

SELECT Album.song_name FROM Album
WHERE Album.band_name = ‘Metallica’
AND EXISTS
(SELECT Cover.song_name FROM Cover
WHERE Cover.band_name = ‘Damage, Inc.’
AND Cover.song_name = Album.song_name);

在SQL代碼中,我使用完整的專欄名稱,這是因為我直接對兩個表格作比較,而不僅僅是將結果組作為一個被動資源來使用。我并不從Cover表格中返回結果。一些數據庫支持NOT EXISTS關鍵字來確保你并沒有匹配。

使用合計函數來比較
  
除了使用子選擇在相關的表格中檢查數據,你還可以在一個WHERE子選擇中使用合計函數來確定主結果組。例如,我想要核實每一個Metallica歌曲在Album表格中的條目。而且,我還想返回缺少歌曲的專輯的名稱。很方便地,AlbumInfo表格包含的一個專欄(album_tracks)給出了應該有多少首歌曲方面的信息。

SELECT AlbumInfo.album_name FROM AlbumInfo
WHERE AlbumInfo.band_name = ‘Metallica’
AND album_tracks <>
(SELECT COUNT(*) FROM Album
WHERE Album.album_name = AlbumInfo.album_name);

現在我已經成功地返回了所有Metallica的專輯中,應有的曲目數量與Album表格中實際的歌曲條目數量不符的專輯名稱。

返回子選擇結果
如果我還是關心每一張專輯的曲目數量并需要得到一個比較報告怎么辦?你可以將一個子選擇的結果作為最終結果組的一部分來返回。這個功能經常被合計函數所使用。通常地,對其他表格的訪問可以作為你的查詢的一部分。下一個例子將返回每一張Metallica的專輯,應該包括的曲目數量和在Album表格中包括的條目數量:

SELECT AlbumInfo.album_name, album_tracks,
(SELECT COUNT(*) FROM Album
WHERE Album.album_name = AlbumInfo.album_name)
FROM  AlbumInfo
WHERE AlbumInfo.band_name = ‘Metallica’;

另一個強有力的例子涉及了在AlbumInfo表格中將album_tracks值改變為在Album表格中實際的條目數量:

UPDATE AlbumInfo SET album_tracks =
SELECT COUNT(*) FROM Album
WHERE AlbumInfo.album_name = Album.album_name)
WHERE AlbumInfo.band_name = ‘Metallica’;

在上兩個例子中的子選擇聲明被看作一個自包含單位來執行。

子選擇比較關鍵字(ALL, SOME, ANY)
除了使用標準查詢功能,還有三個關鍵字可以使你將一個表達式值和一個單欄子選擇聲明結果組作比較,這些關鍵字返回TRUE或FALSE的Boolean值。ALL關鍵字要求子選擇中所有值都遵守比較運算符。SOME和ANY關鍵字則要求至少一對。這里是ALL關鍵字的一個簡單實例。

SELECT * FROM AlbumSales
WHERE album_gross >
ALL (SELECT album_costs FROM AlbumPRoduction);

上面的例子將從AlbumSales表格返回在AlbumProduction表格里面付出總額大于成本而生產最昂貴的專輯的所有記錄。如果用ANY替代ALL,聲明將返回所有付出總額大于最低專輯成本的專輯記錄。聲明= ANY與IN關鍵字意義是相同的。聲明<> ALL與NOT IN關鍵字是對等的。關鍵字ANY和SOME也是等同的。數據庫生產商中對這些關鍵字的支持情況是不同的,因此在出現問題時要相信查閱生產商方面的資料。

誰對標準化數據結構有疑問?
子選擇查詢句法是簡單易懂的,而懂得何時使用它卻是一個難點。如果你曾經在標準化數據結構方面出現問題,子選擇聲明將幫助你獲得更深入的了解。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲一区国产精品| 欧美日韩在线视频首页| 原创国产精品91| 日韩av在线网| 欧美理论片在线观看| 欧美一级黄色网| 久久久久久久久久av| 国产成人精品在线播放| 亚洲激情中文字幕| 亚洲一级免费视频| 中文字幕久久久av一区| 欧美日韩国产限制| 国产91精品在线播放| 精品久久久久久中文字幕一区奶水| 国产精品7m视频| 久久精品中文字幕| 日韩精品在线观看一区| 国产丝袜一区二区| 成人有码视频在线播放| 色老头一区二区三区| 国产91在线播放精品91| 亚洲精品xxxx| 亚洲xxxxx| 国产亚洲一级高清| 久久久久国产精品www| 欧美日韩国产一区中文午夜| 国产日韩欧美在线观看| 成人精品一区二区三区| 亚洲xxxx视频| 日韩欧美在线视频观看| 日韩在线观看你懂的| 综合网中文字幕| 日韩电影在线观看永久视频免费网站| 成人免费高清完整版在线观看| 97欧美精品一区二区三区| 国产原创欧美精品| 欧美成人自拍视频| 久久在精品线影院精品国产| 亚洲男人的天堂网站| 成人精品久久一区二区三区| 国产91ⅴ在线精品免费观看| 成人乱色短篇合集| 亚洲人成网站777色婷婷| 欧美成人性色生活仑片| 精品av在线播放| 国产一区二区三区在线观看网站| 色综合久综合久久综合久鬼88| 欧美黑人性生活视频| 欧美日韩国产限制| 日韩欧美有码在线| 高清欧美性猛交| 精品国产乱码久久久久久婷婷| 亚洲综合中文字幕68页| 亚洲激情电影中文字幕| 久久精品视频一| 亚洲国产精品999| 大量国产精品视频| 亚洲国产高清高潮精品美女| 日韩av在线一区| 亚洲精品98久久久久久中文字幕| 欧美一级电影在线| 色一区av在线| 国产欧美精品一区二区三区-老狼| 日韩精品视频中文在线观看| 久久久www成人免费精品| 91久久精品久久国产性色也91| 亚州av一区二区| 久久久久久久激情视频| 亚洲精品v欧美精品v日韩精品| 91精品国产综合久久久久久久久| 欧美成人精品一区二区| 午夜精品久久久久久久久久久久| 91精品中文在线| 亚洲图片制服诱惑| 久久精品一区中文字幕| 韩国一区二区电影| 亚洲最大av在线| 欧美壮男野外gaytube| 疯狂做受xxxx高潮欧美日本| 91中文字幕一区| 97视频免费在线看| 欧美放荡办公室videos4k| 久久免费国产视频| 亚洲欧洲自拍偷拍| 日韩精品在线免费观看视频| 国产精品久久久久久五月尺| 成人免费xxxxx在线观看| 国产精品视频不卡| 在线精品国产欧美| 国产丝袜一区二区三区| 国产99久久精品一区二区永久免费| 成人xxxxx| 日韩电视剧免费观看网站| 欧美激情在线一区| 国自产精品手机在线观看视频| 8090成年在线看片午夜| 欧美亚洲第一页| 久久国产精品99国产精| 欧美激情亚洲视频| 91在线无精精品一区二区| 亚洲欧美一区二区三区情侣bbw| 欧美乱大交做爰xxxⅹ性3| 91av网站在线播放| 久久网福利资源网站| 欧美日韩亚洲激情| 久久久国产精品x99av| 日韩在线观看精品| 欧美成人免费全部| 日韩中文字幕在线播放| 91精品国产高清久久久久久久久| 在线播放精品一区二区三区| 日韩成人在线电影网| 色综合视频一区中文字幕| 欧美成人在线免费视频| 少妇精69xxtheporn| 国产欧美精品日韩精品| 久久久亚洲影院你懂的| 91免费人成网站在线观看18| 粗暴蹂躏中文一区二区三区| 黄网站色欧美视频| 日韩中文字幕在线看| 亚洲直播在线一区| 91久久久精品| 国产成人精品一区| 成人有码视频在线播放| 欧美乱大交做爰xxxⅹ性3| 亚洲最大中文字幕| 久久精品青青大伊人av| 国产日韩精品在线观看| 九九热这里只有在线精品视| 久久久久久久久综合| 91牛牛免费视频| 中文欧美日本在线资源| 日本最新高清不卡中文字幕| 神马国产精品影院av| 国产一区二区三区视频在线观看| 亚洲a级在线播放观看| 97欧美精品一区二区三区| 亚洲美女激情视频| 久久久久www| 亚洲欧美国产精品| 成人乱人伦精品视频在线观看| 精品国产999| 欧美激情免费在线| 久久久最新网址| 欧美日韩国产中文字幕| 日韩av在线免费播放| 伊人久久久久久久久久久| 久久久999国产| xxav国产精品美女主播| 日本久久精品视频| 国产成人鲁鲁免费视频a| 久久久久久美女| 国产亚洲激情视频在线| 国产精品美女视频网站| 久久人人爽人人爽人人片亚洲| 欧美日韩免费观看中文| 日本国产高清不卡| 国产一区欧美二区三区| 亚洲伊人成综合成人网| 红桃视频成人在线观看| 国产福利精品av综合导导航| 亚洲一区二区在线| 国产成人精品久久亚洲高清不卡|