基本 SQL 语言语法
说明:
方括号间的选项为可选选项;
斜杠间的选项为默认选项;
#################### select 子句 ####################
subquery ::=
SELECT [/ALL/ | DISTINCT] {* | expr [[AS] c_alias] [, expr [[AS] c_alias]...]}
FROM tableref
[WHERE search_condition]
[GROUP BY colname [, colname...]]
[HAVING search_condition]
| subquery {UNION [ALL] | INTERSECT [ALL] | EXCEPT [ALL]} subquery
select statement ::=
subquery [ORDER BY result_column [/ASC/ | DESC] [, result_column [/ASC/ | DESC]...]];
说明:
INTERSECT [ALL] 和 EXCEPT [ALL] 是高级特性,不属于基本 SQL (Entry SQL-92),但包含于 Core SQL-99
#####################################################
################# 表引用 (tableref) #################
tableref ::=
tablename [[AS] corr_name [(colname [, colname...])]]
| (subquery) [AS] corr_name [(colname [, colname...])]
| tableref [/INNER/ | {LEFT | RIGHT | FULL} [OUTER]] JOIN tableref
{ON search_condition | USING (colname [, colname...])}
from_clause ::=
FROM tableref [, tableref...]
#####################################################
####################### 谓词 ########################
比较谓词
expr θ {expr | (subquery)}
BETWEEN 谓词
expr [NOT] BETWEEN expr and expr
量化比较谓词
expr θ{SOME | ANY | All}(subquery)
IN 谓词
expr [NOT] IN {(subquery) | (val [, val...])}
EXIST 谓词
[NOT] EXIST (subquery)
IS NULL 谓词
colname IS [NOT] NULL
LIKE 谓词
colname [NOT] LIKE val [ESCAPE val]
说明:其中θ是 {<, <=, =, <>, >, >=} 中的一个
#####################################################
##################### 集合函数 ######################
set_function_name([/ALL/ | DISTINCT] colname) | COUNT(*)
其中 set_function_name 是 {COUNT, SUM, MAX, MIN, AVG} 中的一个。
#####################################################
########### 求解 select 语句的概念性步骤 ############
1. 对 from 子句中的所有表做关系乘积;
2. 删除不满足 where 子句的行;
3. 根据 group by 子句对剩余的行进行分组;
4. 删除不满足 having 子句的值;
5. 求出 select 子句选择列表中的表达式的值;
6. 若有关键字 distinct 存在,则删除重复的行;
7. 求解子查询的 union、intersect 和 except;
8. 若有 order by 子句存在,则对所有选出来的行进行排序。
#####################################################
#################### insert 子句 ####################
INSERT INTO tablename [(colname [, colname...])]
{VALUES (expr | NULL [, expr | NULL...]) | subquery};
#####################################################
#################### update 子句 ####################
UPDATE tablename
SET colname = {expr | NULL | (subquery)}
[, colname = {expr | NULL | (subquery)}...]
[WHERE search_condition];
#####################################################
#################### delete 子句 ####################
DELETE FROM tablename
[WHERE search_condition];
#####################################################
################# create table 子句 #################
CREATE TABLE [schema.]tablename
({colname datatype [DEFAULT {default_constant | /NULL/}] [col_constr [col_constr...]]
| table_constr}
[,{colname datatype [DEFAULT {default_constant | /NULL/}] [col_constr [col_col_constr...]]
| table_constr}
...]);
#####################################################
################ 列约束 (col_constr) ################
{NOT NULL |
[CONSTRAINT constraintname]
UNIQUE
| PRIMARY KEY
| CHECK (search_condition)
| REFERENCES tablename [(colname)]
[ON DELETE CASCADE]}
说明:除了 NOT NULL 之外的约束均可以起名。
#####################################################
############### 表约束 (table_constr) ###############
[CONSTRAINT constraintname]
{UNIQUE (colname [, colname...])
| PRIMARY KEY (colname [, colname...])
| CHECK (search_condition)
| FOREIGN KEY (colname [, colname...])
REFERENCES tablename [(colname [, colname...])]
[ON DELETE CASCADE]}
说明:除了 NOT NULL 之外的约束均可以起名。
#####################################################