sqlserver 數(shù)據(jù)庫學習筆記
更新時間:2011年11月15日 23:28:24 作者:
sqlserver 數(shù)據(jù)庫學習筆記,學習sqlserver的朋友可以參考下。
1,exists和in的理解(參考http://chabaoo.cn/article/28922.htm)
exists:如果子查詢中包括某一行,那么就為TRUE
in:如果操作數(shù)為TRUE等于表達式列表中的一個,那么就為TRUE
exists總是搞得不太明白
select 。。。from。。。where 。。。
where就相當于一個判斷條件,只有where后面的表達式運算結果為TRUE,前面的才能select出來
EXISTS用于檢查子查詢是否至少會返回一行數(shù)據(jù),該子查詢實際上并不返回任何數(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什么根本不重要,因為子查詢只是檢查這個表中有沒有滿足WHERE后條件的行, 有就返回TRUE,沒有就FALSE,所以很多EXISTS后都是SELECT的*
一行行的去判定,EXISTS返回的是TRUE,就是存在,則把這行的相關信息輸出
1: select distinct 姓名 from xs 2: where not exists ( 3: select * from kc 4: where not exists ( 5: select * from xs_kc 6: where 學號=xs.學號 and 課程號=kc.課程號 )
分析下上面的查詢語句:
把最外層的xs表里的記錄一行一行的同中層一行一的笛卡爾乘積后拿到里面去檢驗
在最里層,如果xs_kc表里的某行有拿來檢驗的這行的學號,同時有中層拿來檢驗的課程號
就返回TRUE,說明這個這個學生選了這門課
中層如果某門課程沒有收到返回的TRUE信息,說明這個名字和課程的搭配在xs_kc表中沒有,或者說中層select出來的是沒有被這個學生選擇的課程信息,如果有這樣的課程,就向最外層返回個TRUE
最外層在返回信息上加了not,即最外層找的是這樣的一種學生:
他選擇了所有的課程
最外層一行行的去檢測,如果他滿足這個條件,就輸出他的姓名且只輸出一次
我這是一層層的分析,還有么有什么別的辦法?
2,select。。。into @。。。
和select @。。。 = 。。。應該是相同的吧
3,用AS為列重命名似乎比=更好點,和賦值區(qū)分開
4,用compute匯總的時候,如果是根據(jù)某列匯總的,先要order by此列,然后在compute相應信息,最后by此列
group或者compute的時候,如果by了某列,select里都要出現(xiàn)相同的列
區(qū)別是group的聚合函數(shù)在select行中(稱為選擇列表),而compute的聚合函數(shù)在compute行中,同時compute可以不帶by,對所有行匯總
exists:如果子查詢中包括某一行,那么就為TRUE
in:如果操作數(shù)為TRUE等于表達式列表中的一個,那么就為TRUE
exists總是搞得不太明白
select 。。。from。。。where 。。。
where就相當于一個判斷條件,只有where后面的表達式運算結果為TRUE,前面的才能select出來
EXISTS用于檢查子查詢是否至少會返回一行數(shù)據(jù),該子查詢實際上并不返回任何數(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什么根本不重要,因為子查詢只是檢查這個表中有沒有滿足WHERE后條件的行, 有就返回TRUE,沒有就FALSE,所以很多EXISTS后都是SELECT的*
一行行的去判定,EXISTS返回的是TRUE,就是存在,則把這行的相關信息輸出
1: select distinct 姓名 from xs 2: where not exists ( 3: select * from kc 4: where not exists ( 5: select * from xs_kc 6: where 學號=xs.學號 and 課程號=kc.課程號 )
分析下上面的查詢語句:
把最外層的xs表里的記錄一行一行的同中層一行一的笛卡爾乘積后拿到里面去檢驗
在最里層,如果xs_kc表里的某行有拿來檢驗的這行的學號,同時有中層拿來檢驗的課程號
就返回TRUE,說明這個這個學生選了這門課
中層如果某門課程沒有收到返回的TRUE信息,說明這個名字和課程的搭配在xs_kc表中沒有,或者說中層select出來的是沒有被這個學生選擇的課程信息,如果有這樣的課程,就向最外層返回個TRUE
最外層在返回信息上加了not,即最外層找的是這樣的一種學生:
他選擇了所有的課程
最外層一行行的去檢測,如果他滿足這個條件,就輸出他的姓名且只輸出一次
我這是一層層的分析,還有么有什么別的辦法?
2,select。。。into @。。。
和select @。。。 = 。。。應該是相同的吧
3,用AS為列重命名似乎比=更好點,和賦值區(qū)分開
4,用compute匯總的時候,如果是根據(jù)某列匯總的,先要order by此列,然后在compute相應信息,最后by此列
group或者compute的時候,如果by了某列,select里都要出現(xiàn)相同的列
區(qū)別是group的聚合函數(shù)在select行中(稱為選擇列表),而compute的聚合函數(shù)在compute行中,同時compute可以不帶by,對所有行匯總
相關文章
MSSQL MySQL 數(shù)據(jù)庫分頁(存儲過程)
有關分頁 SQL 的資料很多,有的使用存儲過程,有的使用游標。本人不喜歡使用游標,我覺得它耗資、效率低;使用存儲過程是個不錯的選擇,因為存儲過程是經(jīng)過預編譯的,執(zhí)行效率高,也更靈活2012-01-01SQL恢復master數(shù)據(jù)庫方法 只有mdf文件的數(shù)據(jù)庫如何恢復
這篇文章主要為大家詳細介紹了SQL恢復master數(shù)據(jù)庫方法,還分析了只有mdf文件的數(shù)據(jù)庫如何進行恢復的情況,也就是沒有l(wèi)og文件的數(shù)據(jù)庫文件恢復方法,感興趣的小伙伴們可以參考一下2016-05-05如何在 SQL SERVER 中快速有條件刪除海量數(shù)據(jù)
如何在 SQL SERVER 中快速有條件刪除海量數(shù)據(jù)...2006-12-12SQL學習筆記八 索引,表連接,子查詢,ROW_NUMBER
SQL學習筆記八 索引,表連接,子查詢,ROW_NUMBER,學習sqlserver的朋友可以看下。2011-08-08sqlserver數(shù)據(jù)庫導入數(shù)據(jù)操作詳解(圖)
本文主要介紹的是怎么使用Microsoft SQL Server Management Studio導入數(shù)據(jù),大家參考使用吧2014-01-01