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

MySQL存储函数 - 使用CREATE FUNCTION语句创建存储的函数。