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

相关推荐
自传.6 小时前
B 站更新|软考架构师案例篇・数据库篇第 1-2 集上线|数据库规范化|索引视图物化视图真题精讲
数据库·软考高级·系统架构师·索引·案例分析·2026软考·软考系统架构师
jnrjian6 小时前
Oracle 没有drop any job 只需要create any job Session_Privs
数据库
+VX:Fegn089513 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·课程设计
哈__15 小时前
KES-Operator重塑Kubernetes环境下的KES数据库集群管理
数据库·kubernetes·operator·kes
IvorySQL16 小时前
IvorySQL 5.6 发布:PG 18.6 内核升级,沙盒即开即用
数据库·人工智能·postgresql
bbq粉刷匠17 小时前
触发器(下):事务与锁、binlog 一致性与替代方案
sql
CNSSIRD数据库17 小时前
中国企业环境信用数据库2003-2026
大数据·数据库·数据分析·论文笔记
fd320018 小时前
达梦数据库更新统计信息后仍走旧执行计划解决方案
数据库
华章酱18 小时前
MySQL幻读是怎么出现的
数据库·mysql·幻读