一.SELECT的基本语法结构:
SELECT [DISTINCT|ALL][TOP(<expression>)[PERCENT][WITH THIS]][[colmn_name[AS 列名]],[.......]]|* FROM table_name
[OUTER|LEFT|RIGHT|FULL|CROSS JOIN table1_name ON condition ]
[.........]
WHERE condition
GROUP BY column_name
HAVING condition
ORDER BY column_name [ASC|DESC]
- 在默认情况下,记录为ALL,即保留重复数据;
- 在默认情况下,记录按升序排序的,即关键字默认为ASC;
- 对于表的连接来说,如果只写INNER关键字,那么表示内连接,即INNER JOIN;
二.三值逻辑
在SQL 中的逻辑表达式可能的值包括TRUE、FALSE和UNKNOWN,这就是所谓三值逻辑。其中UNKNOWN逻辑值通常出现在包含NULL值的逻辑表达式中。在不同的地方,UNKNOWN或NULL会有不同的效果。
- 在所有的查询筛选器(ON、WHERE和HAVING)都把UNKNOWN当成FALSE处理。
- 在CHECK约束中,UNKNOWN会被当成TRUE处理。
- 在UNIQUE约束、GROUP BY子句和ORDER BY子句会把两个NULL值会被当成相等。
三.表连接
1).表连接有:INNER JOIN、LEFT/RIGHT JOIN、CROSS JOIN(笛卡尔积)和FULL JOIN。
2).联合:UNION和UNION ALL
UNION操作符将一个查询的结果集附加到另一个查询的结果集末尾。使用UNION关键字有几点注意:
- UNOIN操作符两边的查询结果集要有相同的列数;
- UNION返回的结果集的列名从第一个查询获得;
- 查询的对应列的数据类型必须隐式一致;
- 对于UNION 操作默认是去重复的也就是DISTINCT的;要想保留重复项,使用UNION ALL;
- UNION默认是排序的,排序的方式是依据第一个查询SELECT的列表的第一个列;UNION ALL是不排序的;
- 可以在最后一个SELECT添加ORDER BY来显示排序结果集;
四.高级查询
子查询通常用于满足下列操作:1)将一个查询分解为一系列的逻辑步骤;2)提供一个列表给WHERE子句和作为(IN/ALL/SOME/ANY/EXISTS)的目标;3)为父查询的每个记录提供一个查询表。
1.嵌套子查询
嵌套子查询只在一个方向上嵌套:用于返回在外部查询中药使用的单个值(使用运算符‘=’),或者与IN运算符一起使用的一个完整的值列表。语法基本格式如下:
SELECT select_list
FROM some_table
WHERE somecolumn=(
SELECT single_column FROM some_table
WHERE condition that results in only one row returned)
或者
SELECT select_list
FROM some_table
WHERE somecolumn IN (
SELECT single_column FROM some_table
WHERE condition)
2.关联子查询
关联子查询是双向的。其处理过程如下:
- 1)外部查询获得一个记录,将这个记录传递给内部查询;
- 2)内部查询根据这个传递过来的记录的值执行;
- 3)内部查询将查询结果返回给外部查询,外部查询根据这些值完成处理操作。
1.WHERE子句中的关联查询
2.查询列表中的关联查询