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

相关推荐
ClouGence1 小时前
2026 年 4 款数据库管理工具推荐:免费、开源、付费怎么选?
数据库·后端·开源
SelectDB1 小时前
招联金融数仓升级:Apache Doris 统一 OLAP 引擎实现降本提效实践
数据库
SelectDB1 小时前
腾讯音乐内容库 ES 替代:从 Elasticsearch 到 Apache Doris 统一搜索分析引擎实践
数据库
SelectDB1 小时前
快手湖仓一体升级:从 ClickHouse 到 Apache Doris 的湖仓分离向湖仓一体演进实践
数据库
今天AI了吗1 小时前
深度学习基础-Harness:从评估框架到工程落地
数据库·人工智能·sql·深度学习·机器学习
一叶飘零_sweeeet2 小时前
别等业务中断才补坑!RTO/RPO 核心逻辑与全场景灾备架构选型全攻略
数据库·架构·容灾备份
码农颜2 小时前
6.1.2 常⽤⽅法的问题
数据库·sql·oracle
量子炒饭大师2 小时前
MySQL 5.7 在 CentOS 7 环境安装:从清理 MariaDB 到初始化与完善配置
数据库·mysql·centos·mariadb
明志数科2 小时前
宇树科技IPO背后的产业逻辑:人形机器人从“讲故事“到“交数据“
运维·服务器·数据库
淼澄研学2 小时前
基于RAG与Milvus向量数据库的搜题长尾问题检索实操教程
数据库·milvus