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>也是术语,他可以是一个表达式,一个值,等,或者是通过逗号分隔出来的各种表达式。

相关推荐
APItesterCris24 分钟前
构建弹性数据管道:利用淘宝商品 API 进行流式数据采集与处理
linux·数据库·windows
九河云30 分钟前
TOS + 数字孪生:集装箱码头的智能进化密码
大数据·服务器·网络·数据库·数字化转型
手握风云-1 小时前
MySQL数据库精研之旅第十九期:存储过程,数据处理的全能工具箱(二)
数据库·mysql
孟意昶1 小时前
Doris专题17- 数据导入-文件格式
大数据·数据库·分布式·sql·doris
你可以永远相信功夫熊猫1 小时前
金蝶云·星瀚 | 生产制造成本核算终极实操手册(从0到1,含两套完整案例)
数据库·erp
Thepatterraining1 小时前
MySQL零基础教程:DDL/DCL/DML详解,从建库到存储过程一篇搞定!
数据库·sql·mysql
想ai抽1 小时前
深入starrocks-怎样实现多列联合统计信息
java·数据库·数据仓库
Y4090012 小时前
MySQL中的“事务”
数据库·mysql
Raymond运维2 小时前
MySQL源码编译安装
linux·数据库·mysql
清风细雨_林木木2 小时前
MacOS本地数据库搭建
数据库·macos