SQL语法
词法
SQL输入由一系列命令(command)组成;一个命令由多个由空白(空白、制表符、换行符)分隔的符号(token)组成,并以;
结束(换行不代表命令结束)。符号可能是关键字(keyword)、标识符(identifier)、引用标识符(quoted identifier)、字面值(literal)或特殊字符(special character symbol)。
关键字和标识符
SQL关键字和标识符以字符或下划线开头,其他字符还可以是数字或$
。根据SQL标准,
- 标识符不允许使用
$
, - 关键字不包含数字或以下划线开头或结尾。
关键字与非引用标识符是==大小写不敏感==的,惯例是关键字使用大写字母,标识符使用小写字母,==解释器会统一转换为小写字母==。
在SQL语句中引用数据库名、表名、列名等标识符,如果标识符的定义包含大写字母、特殊字符或关键字,应该使用引用标识符(使用引号转义),==解释器将保留标识符的输入格式,不做转换==。
PostgreSQL
使用""
表示引用标识符;MySQL
使用`
表示。
select "Column A" from "Users";
在PostgreSQL数据库中,模式名称和表名称需要分开使用引用标识符,否则会将其视为单个引用标识符。
select * from "public"."Users";
--
或/**/
:注释。
字面值
字符串
字符串常量使用''
(引用标识符使用""
)。可使用C语言风格转义和Unicode转义。
'This is a string'
E'This is\ta string\\' -- "This is a string\"
U&'\0441\043B\043E\043D'
PostgresSQL的原始字符串:
$$Dianne's horse$$ --非转义字符串
$TAG$Dianne's horse$TAG$ --添加TAG保证字符串中不出现引用标识
Binary String
B'1010
:比特序列;
X'1FF'
:半字节序列;
数值常量
运算符
+ - * / < > = ~ ! @ # % ^ & | ` ?
下标运算符:[]
字段选择:xxx.fieldname
变量
DECLARE variable_name datatype(size) DEFAULT default_value;
[数据库定义](SQL DDL.md)
[数据操作](SQL DML.md)
流程控制
SELECT IF(var<1000, "YES", "NO");
BEGIN
declare stu_grade float;
select grade into stu_grade from grade where student_no=stu_no;
IF stu_grade > 90 THEN
statement_list;
ELSEIF stu_grade > 80 THEN
statement_list;
ELSE
statement_list;
END IF;
END
MySQL存储过程循环 - MySQL教程™ (yiibai.com)
存储过程是存储在数据库目录中的一段声明性SQL语句。
MySQL游标 - 使用MySQL游标来遍历SELECT
语句返回的结果集。
CREATE PROCEDURE