基础语法

default

SQL 基础语法

Basic Syntax

Case-When

Case 具有两种格式。简单 Case 函数和 Case 搜索函数。

--简单Case函数
CASE sex
WHEN '1' THEN '男'
WHEN '2' THEN '女'
ELSE '其他' END
--Case搜索函数
CASE WHEN sex = '1' THEN '男'
WHEN sex = '2' THEN '女'
ELSE '其他' END sex_description

这两种方式,可以实现相同的功能。简单 Case 函数的写法相对比较简洁,但是和 Case 搜索函数相比,功能方面会有些限制,比如写判断式。 还有一个需要注意的问题,Case 函数只返回第一个符合条件的值,剩下的 Case 部分将会被自动忽略。

--比如说,下面这段SQL,你永远无法得到“第二类”这个结果
CASE WHEN col_1 IN ( 'a', 'b') THEN '第一类'
WHEN col_1 IN ('a') THEN '第二类'
ELSE'其他' END

Basic Select Statements

DDL

Table

Table Variables & Set Operators

Join Operators

Inner Join

Inner Join 是最常用的 Join 类型,基于一个或多个公共字段把记录匹配到一起。Inner Join 只返回进行联结字段上匹配的记录。 如:

select * from Products inner join Categories on Products.categoryID=Categories.CategoryID

以上语句,只返回物品表中的种类 ID 与种类表中的 ID 相匹配的记录数。这样的语句就相当于:

select * from Products, Categories where Products.CategoryID=Categories.CategoryID

Inner Join 是在做排除操作,任一行在两个表中不匹配,注定将从结果集中除掉。(我想,相当于两个集合中取其两者的交集,这个交集的条件就是 on 后面的限定)还要注意的是,不仅能对两个表作联结,可以把一个表与其自身进行联结。

Outer Join

Outer Join 包含了 Left Outer Join 与 Right Outer Join. 其实简写可以写成 Left Join 与 Right Join。left join,right join 要理解并区分左表和右表的概念,A 可以看成左表,B 可以看成右表。left join 是以左表为准的.,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).B 表记录不足的地方均为 NULL。 right join 和 left join 的结果刚好相反,这次是以右表(B)为基础的,A 表不足的地方用 NULL 填充。

Left Outer Join

Right Outer Join

Full Join

Full Join 相当于把 Left 和 Right 联结到一起,告诉 SQL Server 要全部包含左右两侧所有的行,相当于做集合中的并集操作。

Cross Join

与其它的 JOIN 不同在于,它没有 ON 操作符,它将 JOIN 一侧的表中每一条记录与另一侧表中的所有记录联结起来,得到的是两侧表中所有记录的笛卡儿积。

Select

Aggregation

Group By

Case 条件分组