SELECT语句基本语法简介
  从 SQL Server 数据库中提取所需的数据,这是⽤户⽇常的重要操作。
  SELECT语句是 T-SQL 中最重要的查询语句。SELECT 语句可能返回⼀⾏记录(record),也可能返回⼀个结果集(result set)。
  SELECT语句可以包含多个⼦句,从⽽构成复杂的查询。常⽤的基本⼦句有以下⼏个:
1. SELECT ⼦句,定义返回哪些列。
2. FROM ⼦句,定义查询哪些表。
3. WHERE ⼦句,使⽤谓词对⾏进⾏过滤。
4. GROUP BY ⼦句,对⾏进⾏分组。
5. HAVING ⼦句,使⽤谓词对分组后的⾏进⾏过滤。
6. ORDER BY ⼦句,对输出进⾏排序。
⼀、SELECT ⼦句
1. 语法解释
  SELECT ⼦句与其它⼦句(⾄少包含 FROM ⼦句)组成⼀个查询,SELECT ⼦句⽤于筛选需要输出的列或者表达式。最多可以返回4096列,列名(或表达式)之间⽤逗号分隔。
(1)返回指定的列
  例如,从 table1 表中仅返回 ColumnA、ColumnB 列的结果:
SELECT ColumnA, ColumnB  FROM table1
(2)使⽤通配符,返回所有的列
  例如,从 table1 表中返回所有结果:
SELECT *  FROM table1
(3)使⽤表达式
  可以使⽤表达式,例如,返回 ColumnA 与ColumnB 列之和。
SELECT ColumnA + ColumnB FROM table1
(4)使⽤别名
  返回的列可以使⽤别名,例如:
SELECT ColumnA + ColumnB AS ColumnAB  FROM table1
2. 参数
  还可以选⽤以下两组参数来过滤返回的记录⾏。
(1) ALL 或 DISTINCT
  ALL ⽤于指定在结果集中返回所有⾏,因此可以包含重复⾏。两者只能任选其⼀,ALL 是默认值。
  DISTINCT ⽤于指定在结果集中删除重复的数据,对于重复的记录⾏,返回的结果只能包含唯⼀⾏。
注意:由于 Null 不能进⾏相互⽐较,所以对于 DISTINCT 来说,Null 值是相等的。
(2) TOP
  TOP⽤于指⽰从查询结果集返回指定数⽬的⾏。
3. 其它事项
  SELECT ⼦句可以直接列出常量、变量或者算术表达式,从⽽返回⼀个运算结果。
  例如,下⾯的语句返回整数值为14。
SELECT 7 * LOG(20 + 80 , 10)
⼆、FROM ⼦句
1. 语法解释
  FROM⼦句⽤于指定SELECT语句中使⽤的表源。
(1)表源
  表源可以是⼀个或多个表、视图、表变量、派⽣表、联接表等,⼀个SELECT语句中最多可以使⽤256个表源。如果引⽤了太多的表源,查询性能会受到影响。
  表源在FROM⼦句中的顺序不影响返回的结果集。
(2)别名
  如果多次引⽤同⼀个表源,此时将出现重复的名称,SQL Server 会报错,例如:“FROM ⼦句中的对象 "table1" 和 "table1" 具有相同的表现名称。请使⽤相关名称来区分它们。”
  此时,可以为表源使⽤别名。⽰例:
SELECT * FROM table1, table1 as t1
2. 参数
  为了提升查询性能,可以使⽤优化器提⽰,⽤于指定查询优化器对此表和此语句使⽤优化或锁定策略。例如,放置⼀个显式共享表锁,并且该锁将在整个事务中被持有。⽰例:
SELECT * FROM table1 WITH (TABLOCK, HOLDLOCK)
三、WHERE ⼦句
1. 语法解释
  WHERE ⼦句⽤于指定⾏的搜索条件,从⽽限制 SELECT 语句返回的⾏数。
2. 参数
  搜索条件可以是 AND、OR 和 NOT 的⼀个或多个谓词的组合。可以使⽤括号来指定其组合的顺序。例如:
SELECT * FROM table1 WHERE ( ColumnA = 'ABCD' OR ColumnB = 'EFGH' )  AND ColumnC > 0
其中:
  AND ⽤于组合两个条件,并在两个条件都为 TRUE 时取值为 TRUE。
  OR ⽤于组合两个条件,并在任何⼀个条件为 TRUE 时取值为 TRUE。
  NOT 对谓词指定的布尔表达式求反。
  谓词是指返回 TRUE、FALSE 或 UNKNOWN 的表达式。
四、GROUP BY ⼦句
1. 语法解释
  GROUP BY ⼦句⽤于将⼀个或多个列(或表达式)按照某⼀组选定⾏进⾏组合,然后针对每⼀组返回⼀⾏。例如:
SELECT ColumnA, ColumnB FROM T GROUP BY ColumnA, ColumnB
2. 其它事项
  执⾏任何分组操作之前,不满⾜ WHERE ⼦句中条件的⾏将被删除。执⾏分组之后,不满⾜ HAVING ⼦句中条件的⾏将被删除。  如果组合列包含 Null 值,则所有的 Null 值都将被视为相等,并会置⼊⼀个组中。
五、HAVING ⼦句
1. 语法解释
  HAVING ⼦句⽤于指定组或聚合的搜索条件。HAVING 只能与 SELECT 语句⼀起使⽤。例如:
SELECT ColumnA, ColumnB, SUM(ColumnC) AS SubTotal FROM T
WHERE ColumnC > 100
GROUP BY ColumnA, ColumnB
HAVING COUNT(*) > 1
  从上例中可以看出,WHERE ⼦句对单个⾏进⾏筛选(上例中,筛选条件为 ColumnC > 100),最后 HAVING ⼦句再次对分组后的结果进⾏筛选(上例中,筛选条件为:COUNT(*) > 1,即分组后的结果中⾏数⼤于1的组)。
  由于 HAVING ⼦句是在⾏分组后被处理,所以可以在 HAVING ⼦句中的表达式中使⽤聚合函数等。例如:
SELECT ColumnA, SUM(ColumnB) AS SubTotal FROM T
GROUP BY ColumnA
HAVING SUM(ColumnB) > 100
2. 其它事项
  HAVING 通常在 GROUP BY ⼦句中使⽤。 如果不使⽤ GROUP BY ⼦句,则 HAVING 的⾏为与 WHERE ⼦句⼀样。
sql中select是什么意思
  在 HAVING ⼦句中不能使⽤ text、image 和 ntext 数据类型。
六、ORDER BY ⼦句
1. 语法解释
  ORDER BY ⼦句⽤于指定在 SELECT 语句返回的列中所使⽤的排序顺序。在处理 SELECT 语句时,ORDER BY ⼦句是被最后处理的⼦句,因此可以在 ORDER BY ⼦句中引⽤ SELECT ⼦句中的列别名。
2. 参数
  ORDER BY⼦句有两组参数:
(1)COLLATE
  ⽤于指定排序规则,仅适⽤于字符类型的列。例如:
SELECT * FROM table1 ORDER BY ColumnA COLLATE Latin1_General_CI_AS ASC
(2)ASC 或 DESC
  ASC 指定按升序,从最低值到最⾼值对指定列中的值进⾏排序。DESC 指定按降序,从最⾼值到最低值对指定列中的值进⾏排序。例如:
SELECT * FROM table1 ORDER BY ColumnA ASC, ColumnB DESC
  对于每⼀个列的排序,两者只能任选其⼀。ASC 是默认排序。
3. 其它事项
  空值(NULL)被视为最低的可能值。
  对 ORDER BY ⼦句中的列数没有限制。但是,排序操作所需的中间⼯作表的⾏⼤⼩限制为 8060 个字节。这限制了在 ORDER BY ⼦句中指定的列的总⼤⼩。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。