SQL Server 2008編程入門經典筆記:更復雜的查詢

嵌套子查詢

1)構建嵌套子查詢
語法:
SELECT <列名>
FROM <表名>
WHERE <列名> <=|IN> (SELECT 語句)
1.1)使用返回單個值的SELECT語句的嵌套查詢(見書代碼)
1.2)使用返回多個值的子查詢的嵌套查詢
和使用表連接的效果差不多,書上推薦使用連接。
1.3)使用嵌套的SELECT發現孤立的記錄
在嵌套查詢中使用NOT來代替外連接,發現孤立記錄。

例子:使用嵌套子查詢出孤立的數據

    if Exists(select * from sysobjects where id=object_id(N'Carl2'))
    drop Table Carl2
    if Exists(select * from sysobjects where id=object_id(N'Carl1'))
    drop Table Carl1

    Create Table Carl1
    (
    InCarlID int Primary Key Identity(1,1),
    CarlName varchar(50)
    )
    Create Table Carl2
    (
    InCarlID int Foreign Key References Carl1 (InCarlID),
    CarlName varchar(50)
    )

    insert into Carl1 values('Carl')
    insert into Carl1 values('CarlOne')--這個數據在子表中沒有和主表有關聯
    insert into Carl2 values(1,'Carl')

    --使用子嵌套查詢出孤立的數據
    select * from Carl1 where 
    InCarlID not in (select InCarlID from Carl2)

關聯子查詢

關聯子查詢可以使許多不可能的事變成可能。
1、關聯子查詢的工作原理
和嵌套子查詢不同,是雙向的,執行順序是:外->內->外。

2、在WHERE子句中的關聯子查詢
不使用關聯子查詢的話,書中例子使用臨時表和2個單獨的查詢解決。
使用關聯子查詢就是在基於2個查詢的情況下,用表的別名,在一條語句裏實現2個查詢。
1)在SELECT列表中的關聯子查詢
在使用聚合結果的使用,不希望數據影響其他返回的字段。
3、處理NULL數據——ISNULL函數
如果列值是NULL的話就替換掉。
語法:
ISNULL(列名,替換的值)。
輔助函數:CAST()用以類型不符時進行轉換。

派生表

一、將生成結果集的查詢用小括號括起來
二、給查詢結果取別名,這樣它可以作爲表被引用。
語法:
SELECT <列名>
FROM <表名>
JOIN

EXISTS運算符

提高查詢性能使用,表示查詢返回的值是否爲NULL,如果EXISTS爲TRUE那麼停止查詢。
1)以其他方式使用EXISTS
通常用於在判斷表是否存在,執行創建表語句或別的語句。

混合數據類型:CAST和CONVERT

CONVERT提供日期轉換功能,而CAST沒有。
語法:
CAST (表達式 AS 數據類型)。
CONVERT(數據類型,表達式,風格)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章