SQL Server中SELECT (Transact-SQL)语法定义和解释

语法定义:

sql 复制代码
<SELECT statement> ::=
    [ WITH { [ XMLNAMESPACES , ] [ <common_table_expression> [ , ...n ] ] } ]
    <query_expression>
    [ ORDER BY <order_by_expression> ]
    [ <FOR Clause> ]
    [ OPTION ( <query_hint> [ , ...n ] ) ]
<query_expression> ::=
    { <query_specification> | ( <query_expression> ) }
    [  { UNION [ ALL ] | EXCEPT | INTERSECT }
        <query_specification> | ( <query_expression> ) [ ...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
    [ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]
    <select_list>
    [ INTO new_table ]
    [ FROM { <table_source> } [ , ...n ] ]
    [ WHERE <search_condition> ]
    [ <GROUP BY> ]
    [ HAVING <search_condition> ]
[ ; ]

解释:

  1. <SELECT statement>、<query_expression> 、<query_specification>等,这些用尖括号括起来的,称为术语
  2. ::=后面跟随的是对术语的解释
  3. 像这种被中括号括起来的[ WHERE <search_condition> ] [ <GROUP BY> ] [ HAVING <search_condition> ]都表示为可选元素
  4. {}被这种花括号括起来的表示必选元素,如果花括号中有|这种符号,表示只能选其一,比如这种: { UNION [ ALL ] | EXCEPT | INTERSECT }
  5. [ ...n ] 表示对前面所写元素的0到多次重复
  6. [ , ...n ] 表示对前面所写元素的0到多次重复,用逗号隔开

把上面Select语法拆分成一个最简单的查询语句

上面Select语法定义是由3个术语组成,分别是:

sql 复制代码
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
    [ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]
    <select_list>
    [ INTO new_table ]
    [ FROM { <table_source> } [ , ...n ] ]
    [ WHERE <search_condition> ]
    [ <GROUP BY> ]
    [ HAVING <search_condition> ]
[ ; ]
sql 复制代码
<query_expression> ::=
    { <query_specification> | ( <query_expression> ) }
    [  { UNION [ ALL ] | EXCEPT | INTERSECT }
        <query_specification> | ( <query_expression> ) [ ...n ] ]
sql 复制代码
<SELECT statement> ::=
    [ WITH { [ XMLNAMESPACES , ] [ <common_table_expression> [ , ...n ] ] } ]
    <query_expression>
    [ ORDER BY <order_by_expression> ]
    [ <FOR Clause> ]
    [ OPTION ( <query_hint> [ , ...n ] ) ]
  1. <query_specification> 进行简化拆解,就只剩
sql 复制代码
SELECT  <select_list>
  1. <query_expression> 进行简化拆解,就只剩 { <query_specification> | ( <query_expression> ) }然后选择一个,我们把<query_specification>带入就是
sql 复制代码
SELECT  <select_list>
  1. <SELECT statement>
    进行简化拆解,就只剩<query_expression>,然后继续带入,最简查询语句就出来了
sql 复制代码
SELECT  <select_list>

由上面定义我们知道 <select_list>也是术语,他可以是一个表达式,一个值,等,或者是通过逗号分隔出来的各种表达式。

相关推荐
Yushan Bai4 分钟前
ORACLE RAC环境REDO日志量突然增加的分析
数据库·oracle
躺着听Jay5 分钟前
Oracle-相关笔记
数据库·笔记·oracle
瀚高PG实验室18 分钟前
连接指定数据库时提示not currently accepting connections
运维·数据库
运维成长记1 小时前
mysql数据库-中间件MyCat
数据库·mysql·中间件
尘客.1 小时前
DataX从Mysql导数据到Hive分区表案例
数据库·hive·mysql
TiDB 社区干货传送门2 小时前
从开发者角度看数据库架构进化史:JDBC - 中间件 - TiDB
数据库·oracle·中间件·tidb·数据库架构
虾球xz2 小时前
游戏引擎学习第280天:精简化的流式实体sim
数据库·c++·学习·游戏引擎
uwvwko3 小时前
BUUCTF——web刷题第一页题解
android·前端·数据库·php·web·ctf
扶尔魔ocy3 小时前
【Linux C/C++开发】轻量级关系型数据库SQLite开发(包含性能测试代码)
linux·数据库·c++·sqlite
旋风菠萝4 小时前
项目复习(1)
java·数据库·八股·八股文·复习·项目、