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(数据类型,表达式,风格)。

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