sqlserver 數(shù)據(jù)庫學(xué)習(xí)筆記
更新時(shí)間:2011年11月15日 23:28:24 作者:
sqlserver 數(shù)據(jù)庫學(xué)習(xí)筆記,學(xué)習(xí)sqlserver的朋友可以參考下。
1,exists和in的理解(參考http://www.fzitv.net/article/28922.htm)
exists:如果子查詢中包括某一行,那么就為TRUE
in:如果操作數(shù)為TRUE等于表達(dá)式列表中的一個(gè),那么就為TRUE
exists總是搞得不太明白
select 。。。from。。。where 。。。
where就相當(dāng)于一個(gè)判斷條件,只有where后面的表達(dá)式運(yùn)算結(jié)果為TRUE,前面的才能select出來
EXISTS用于檢查子查詢是否至少會(huì)返回一行數(shù)據(jù),該子查詢實(shí)際上并不返回任何數(shù)據(jù),而是返回值True或False
1: SELECT c.CustomerId, CompanyName 2: FROM Customers c 3: WHERE EXISTS( 4: SELECT OrderID FROM Orders o 5: WHERE o.CustomerID = cu.CustomerID)
像這樣的EXISTS子查詢中的SELECT什么根本不重要,因?yàn)樽硬樵冎皇菣z查這個(gè)表中有沒有滿足WHERE后條件的行, 有就返回TRUE,沒有就FALSE,所以很多EXISTS后都是SELECT的*
一行行的去判定,EXISTS返回的是TRUE,就是存在,則把這行的相關(guān)信息輸出
1: select distinct 姓名 from xs 2: where not exists ( 3: select * from kc 4: where not exists ( 5: select * from xs_kc 6: where 學(xué)號(hào)=xs.學(xué)號(hào) and 課程號(hào)=kc.課程號(hào) )
分析下上面的查詢語句:
把最外層的xs表里的記錄一行一行的同中層一行一的笛卡爾乘積后拿到里面去檢驗(yàn)
在最里層,如果xs_kc表里的某行有拿來檢驗(yàn)的這行的學(xué)號(hào),同時(shí)有中層拿來檢驗(yàn)的課程號(hào)
就返回TRUE,說明這個(gè)這個(gè)學(xué)生選了這門課
中層如果某門課程沒有收到返回的TRUE信息,說明這個(gè)名字和課程的搭配在xs_kc表中沒有,或者說中層select出來的是沒有被這個(gè)學(xué)生選擇的課程信息,如果有這樣的課程,就向最外層返回個(gè)TRUE
最外層在返回信息上加了not,即最外層找的是這樣的一種學(xué)生:
他選擇了所有的課程
最外層一行行的去檢測(cè),如果他滿足這個(gè)條件,就輸出他的姓名且只輸出一次
我這是一層層的分析,還有么有什么別的辦法?
2,select。。。into @。。。
和select @。。。 = 。。。應(yīng)該是相同的吧
3,用AS為列重命名似乎比=更好點(diǎn),和賦值區(qū)分開
4,用compute匯總的時(shí)候,如果是根據(jù)某列匯總的,先要order by此列,然后在compute相應(yīng)信息,最后by此列
group或者compute的時(shí)候,如果by了某列,select里都要出現(xiàn)相同的列
區(qū)別是group的聚合函數(shù)在select行中(稱為選擇列表),而compute的聚合函數(shù)在compute行中,同時(shí)compute可以不帶by,對(duì)所有行匯總
exists:如果子查詢中包括某一行,那么就為TRUE
in:如果操作數(shù)為TRUE等于表達(dá)式列表中的一個(gè),那么就為TRUE
exists總是搞得不太明白
select 。。。from。。。where 。。。
where就相當(dāng)于一個(gè)判斷條件,只有where后面的表達(dá)式運(yùn)算結(jié)果為TRUE,前面的才能select出來
EXISTS用于檢查子查詢是否至少會(huì)返回一行數(shù)據(jù),該子查詢實(shí)際上并不返回任何數(shù)據(jù),而是返回值True或False
1: SELECT c.CustomerId, CompanyName 2: FROM Customers c 3: WHERE EXISTS( 4: SELECT OrderID FROM Orders o 5: WHERE o.CustomerID = cu.CustomerID)
像這樣的EXISTS子查詢中的SELECT什么根本不重要,因?yàn)樽硬樵冎皇菣z查這個(gè)表中有沒有滿足WHERE后條件的行, 有就返回TRUE,沒有就FALSE,所以很多EXISTS后都是SELECT的*
一行行的去判定,EXISTS返回的是TRUE,就是存在,則把這行的相關(guān)信息輸出
1: select distinct 姓名 from xs 2: where not exists ( 3: select * from kc 4: where not exists ( 5: select * from xs_kc 6: where 學(xué)號(hào)=xs.學(xué)號(hào) and 課程號(hào)=kc.課程號(hào) )
分析下上面的查詢語句:
把最外層的xs表里的記錄一行一行的同中層一行一的笛卡爾乘積后拿到里面去檢驗(yàn)
在最里層,如果xs_kc表里的某行有拿來檢驗(yàn)的這行的學(xué)號(hào),同時(shí)有中層拿來檢驗(yàn)的課程號(hào)
就返回TRUE,說明這個(gè)這個(gè)學(xué)生選了這門課
中層如果某門課程沒有收到返回的TRUE信息,說明這個(gè)名字和課程的搭配在xs_kc表中沒有,或者說中層select出來的是沒有被這個(gè)學(xué)生選擇的課程信息,如果有這樣的課程,就向最外層返回個(gè)TRUE
最外層在返回信息上加了not,即最外層找的是這樣的一種學(xué)生:
他選擇了所有的課程
最外層一行行的去檢測(cè),如果他滿足這個(gè)條件,就輸出他的姓名且只輸出一次
我這是一層層的分析,還有么有什么別的辦法?
2,select。。。into @。。。
和select @。。。 = 。。。應(yīng)該是相同的吧
3,用AS為列重命名似乎比=更好點(diǎn),和賦值區(qū)分開
4,用compute匯總的時(shí)候,如果是根據(jù)某列匯總的,先要order by此列,然后在compute相應(yīng)信息,最后by此列
group或者compute的時(shí)候,如果by了某列,select里都要出現(xiàn)相同的列
區(qū)別是group的聚合函數(shù)在select行中(稱為選擇列表),而compute的聚合函數(shù)在compute行中,同時(shí)compute可以不帶by,對(duì)所有行匯總
相關(guān)文章
SQL實(shí)現(xiàn)遞歸及存儲(chǔ)過程中In()參數(shù)傳遞解決方案詳解
這篇文章詳細(xì)介紹了SQL實(shí)現(xiàn)遞歸及存儲(chǔ)過程中In()參數(shù)傳遞解決方案,有需要的朋友可以參考一下2013-09-09
SQL?Server2019安裝后出現(xiàn)連接失敗的解決方法
在開發(fā)中我們經(jīng)常會(huì)用到SQL?Server,下面這篇文章主要給大家介紹了關(guān)于SQL?Server2019安裝后出現(xiàn)連接失敗的解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Sql學(xué)習(xí)第一天——SQL 練習(xí)題(建表/sql語句)
來自Madrid且訂單數(shù)少于3的消費(fèi)者,針對(duì)這個(gè)要求作出以下:建表 做題分析以及sql語句的寫法,感興趣的朋友可以參考下哈,希望可以幫助到你2013-03-03
sqlserver 字段值拼接的實(shí)現(xiàn)示例
拼接字段可以通過多種方法實(shí)現(xiàn),本文主要介紹了sqlserver字段值拼接的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07

