SQL学习总结

SQL学习总结
SQL学习总结

Select

From

Where

Group by

Having

Order by

Null

Like

ESCAPE 'escape_ character'

允许在字符串中搜索通配符,而不是将其作为通配符使用。escape_character 是放在通配符前表示此特殊用法的字符。

例:

select*from course

where cname like'cssa_%'escape'a'

会得到’css_’打头的所有行

Cube

Case

In

Insert

Update

Delete

Create

Alter

Drop

子查询 in、any、all、exists

联合查询 union、join

查询语句的性能优化

搜索条件 not/and/or

谓词 between/contains/exists/freetext/in/is [not] null/like

一、select子句

语法:

SELECT [ ALL | DISTINCT ]

[ TOP n [ PERCENT ] [ WITH TIES ] ]

< select_list >

< select_list > ::=

{* | { table_name | view_name | table_alias }.*

| { column_name | expression | IDENTITYCOL | ROWGUIDCOL }

[ [ AS ] column_alias ]| column_alias = expression } [ ,...n ]

参数:

ALL 指定结果集中可以显示重复行。是默认设置

DISTINCT 指定在结果集中只能显示唯一行。空值被认为是相等的

TOP n [PERCENT] 指定从结果集中输出前n行。n是介于 0 和 4294967295 之间的整数。如果还指定了 PERCENT,则只从结果集中输出前百分之n行。当指定时带 PERCENT 时,n必须是介于 0 和 100 之间的整数。

如果查询包含 ORDER BY 子句,将输出由 ORDER BY 子句排序的前n行(或前百分之n

行)。如果查询没有 ORDER BY 子句,行的顺序将任意。

WITH TIES 指定从基本结果集中返回附加的行,这些行包含与出现在 TOP n(PERCENT) 行最后的ORDER BY 列中的值相同的值。如果指定了ORDER BY 子句,则只能指定TOP ...WITH TIES。

为结果集选择的列。

::= 选择列表是以逗号分割的一系列表达式。

* 指定在FRPM子句中内返回的所有表和视图内的所有列。列按FROM子句所指定的由表或视图返回,并按它们在表或视图内的顺序返回

Table_name | view_name | table_alias 将 * 的作用限制为指定的表或视图。

Cloumn_name 要返回的列名。要限定列名,以避免二义性引用。参照FROM子句

Expression 是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。

IDENTITYCOL 返回标识列。如果FROM子句中的多个表内包含标识列,那么就要避免二义性引用来对标识列加以限定。具体方法参照ROWGUIDCOL。

ROWGUIDCOL 返回行全局唯一标识列。如果在From子句中多个表包含ROWGUIDCOL属性列,则必须通过特定的表名来限定(例如:T1.ROWGUIDCOL)ROWGUIDCOL。

Column_alias 是查询结果集内替换列名的可选名。例如:可以为名为‘sanme’指定别名,如‘姓名’。

别名还可以为表达式的结果指定名称,例如:

select AVG(grade)as'平均分'from sc

备注:column_alias 可用于ORDER BY子句。但是不能用于WHERE、GROUP BY或HAVING子句。如果查询表达式是DECLARE CURSOR语句一部分,则column_alias不能用在FOR UPDATE 子句中。

Select子句是select语句的开始部分,它限定了查询结果返回的列

通常情况下不要使用 * 关键字来返回所有列,除非有明确的需求要查询所有字段,因为 * 关键字会大大降低查询的效率,一般应指名具体的查询列。

当输入的字段名包括空格和标点符号时,用方括号把它括起来

例如:要查询表student中前5条记录,要求返回两列数据:学生姓名和所在系

select top 5 sname as'姓名',sdept as'所在系'from student WHERE、GROUP BY 和 HAVING 子句的处理顺序

以下步骤显示带 WHERE 子句、GROUP BY 子句和 HAVING 子句的 SELECT 语句的处理顺序:

1、FROM 子句返回初始结果集。

2、WHERE 子句排除不满足搜索条件的行。

3、GROUP BY 子句将选定的行收集到 GROUP BY 子句中各个唯一值的组中。

4、选择列表中指定的聚合函数可以计算各组的汇总值。

5、此外,HAVING 子句排除不满足搜索条件的行。

二、from子句

语法:

From

参数

指定要在 Transact-SQL 语句中使用的表、视图或派生表源(有无别名均可)。虽然语句中可用的表源个数的限值根据可用内存和查询中其他表达式的复杂性而有所不同,但一个语句中最多可使用 256 个表源。单个查询可能不支持最多有 256 个表源。可将 table 变

量指定为表源。

注意:

如果查询中引用了许多表,查询性能会受到影响。编译和优化时间也受到其他因素的影响。这些因素包括:每个 是否有索引和索引视图,以及 SELECT 语句中 的大小。

表源在 FROM 关键字后的顺序不影响返回的结果集。如果 FROM 子句中出现重复的名称,SQL Server 会返回错误。

From子句跟在SELECT语句后面,指定要从中查询数据的表,可以是一个表,也可以是视图、派生表或是多个表的联合

当From子句中的两个表中包含重复名的列时,要对列名加上限定。例如,在表sc和course表内都有名为课程号cno列。如果在查询中连接两个表,可以在选择列表中将课程号指定为https://www.360docs.net/doc/888918819.html,o

例如:查询每门课的平均成绩,要求返回课程名与平均分

select cname,AVG(grade)as'平均分'from sc

left join course on https://www.360docs.net/doc/888918819.html,o=https://www.360docs.net/doc/888918819.html,o group by https://www.360docs.net/doc/888918819.html,ame

备注:有诸如sum、avg等聚合函数时候一般要有GROUP BY

三、where子句

语法

[ WHERE ]

参数

< search_condition >

定义要返回的行应满足的条件。对搜索条件中可以包含的谓词数量没有限制。

WHERE是可选的,但是在使用时必须放在FROM之后,用来限定查询结果,只有符合条件的记录才会显示出来。WHERE子句可以是单一条件,也可以是组合而成的复杂条件。

备注: WHERE子句中可以嵌套子查询

四、group by子句

语法

ISO-Compliant Syntax

GROUP BY

::=

[ ,...n ]

::=

|

|

|

|

::=

::=

ROLLUP ( )

::=

CUBE ( )

::=

[ ,...n ]

::=

| ( )

::=

[ ,...n ]

::=

GROUPING SETS ( )

::=

[ ,...n ]

::=

|

| ( )

::=

( )

::=

|

|

::=

[ ,...n ]

Non-ISO-Compliant Syntax

[ GROUP BY [ ALL ] group_by_expression [ ,...n ]

[ WITH { CUBE | ROLLUP } ]

]

参数

ROLLUP ( )

生成简单的 GROUP BY 聚合行以及小计行或超聚合行,还生成一个总计行。

返回的分组数等于 中的表达式数加一。例如,下面的语句。

SELECT a,b,c,SUM()

FROM T

GROUP BY ROLLUP (a,b,c)

会为 (a, b, c)、(a, b) 和 (a) 值的每个唯一组合生成一个带有小计的行。还将计算一个总计行。

列是按照从右到左的顺序汇总的。列的顺序会影响 ROLLUP 的输出分组,而且可能会影响结果集内的行数。

CUBE ( )

生成简单的 GROUP BY 聚合行、ROLLUP 超聚合行和交叉表格行。

CUBE 针对 中表达式的所有排列输出一个分组。

生成的分组数等于 (2n),其中 n = 中的表达式数。例如,下面的语句。

SELECT a,b,c,SUM()

FROM T

GROUP BY CUBE (a,b,c)

会为 (a, b, c)、(a, b)、(a, c)、(b, c)、(a)、(b) 和 (c) 值的每个唯一组合生成一个带有小计的行,还会生成一个总计行。

列的顺序不影响 CUBE 的输出。

GROUPING SETS ( )

在一个查询中指定数据的多个分组。仅聚合指定组,而不聚合由 CUBE 或 ROLLUP 生成的整组聚合。其结果与针对指定的组执行 UNION ALL 运算等效。GROUPING SETS 可以包含单个元素或元素列表。GROUPING SETS 可以指定与 ROLLUP 或 CUBE 返回的内容等效的分组。 可以包含 ROLLUP 或 CUBE。

( )

空组生成总计。

WITH CUBE

后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。指定结果集内不仅包含由 GROUP BY 提供的行,同时还包含汇总行。GROUP BY 汇总行针对每个可能的组和子组组合在结果集内返回。使用 GROUPING 函数可确定结果集内的空值是否为 GROUP BY 汇总值。

结果集内的汇总行数取决于 GROUP BY 子句内包含的列数。由于 CUBE 返回每个可能的组和子组组合,因此不论在列分组时指定使用什么顺序,行数都相同。

WITH ROLLUP

后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。指定结果集内不仅包含由 GROUP BY 提供的行,同时还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于列分组时指定使用的顺序。更改列分组的顺序会影响在结果集内生成的行数。

group by子句按一个或多个列或表达式的值将一组选定行组合成一个摘要行集。针对每一组返回一行。SELECT 子句 列表中。