SQL语法
基本操作
1 | SELECT <field>, DISTINCT <field> |
数据库、表、索引、视图
创建
1 | !-- 创建数据库 |
自增字段
1 | !-- MSSQL |
丢弃
1 | !-- 丢弃索引 |
修改表
1 | !-- 添加列 |
关键字
TOP
- MSSQL:
SELECT TOP <num>/<num> PERCENT * - MYSQL:
LIMIT <num> - ORACLE:
WHERE ROWNUM <= <num>
Alias
AS:指定行、列别名
Join
[INNER] JOINLEFT JOINRIGHT JOINFULL JOIN
Union
UNION:合并SELECT结果集- 要求结果集中列数量、类型必须相同
NULL
IS [NOT] NULL:比较是否为NULL值
- 比较符无法测试
NULL值
符号
运算符
=:有些方言可以使用==<>:有些方言可以使用!=><>=<=BETWEEN <value> AND <value>[NOT] IN (<value>)[NOT] LIKE <pattern>%:匹配0个、多个字符_:匹配一个字符[<char>]:字符列中任意字符^[<char>]/[!<char>]:非字符列中任意字符
逻辑运算
ANDOR
符号
':SQL中使用单引号包括文本值- 大部分方言也支持
"双引号
- 大部分方言也支持
数据类型
MySQL
| TEXT类型 | 描述 |
|---|---|
CHAR([<size>]) |
|
VARCHAR([<size>]) |
|
TINYTEXT |
|
LONGTEXT |
|
MEDIUMITEXT |
|
BLOB |
|
MEDIUMBLOB |
|
LONGBLOB |
|
ENUM(<val_list>) |
|
SET |
| NUMBER类型 | 描述 |
|---|---|
TINYINT([<size>]) |
|
SMALLINT([<size>]) |
|
MEDIUMINT([<size>]) |
|
INT([<size>]) |
|
BIGINT([<size>]) |
|
FLOAT([<size>]) |
|
DOUBLE([<size>]) |
|
DECIMAL([<size>]) |
| DATE类型 | 描述 |
|---|---|
DATE() |
|
DATETIME() |
|
TIMSTAMP() |
|
TIME() |
|
YEAR() |
MSSQL
| ASCII类型 | 描述 |
|---|---|
CHAR([<size>]) |
|
VARCHAR([<size>]) |
|
TEXT |
| UNICODE类型 | 描述 |
|---|---|
CHAR([<size>]) |
|
VARCHAR([<size>]) |
|
text |
| BINARY类型 | 描述 |
|---|---|
bit |
|
binary([<n>]) |
|
varbinary([<n>]) |
|
image |
| NUMBER类型 | 描述 |
|---|---|
TINYINT |
|
SMALLINT |
|
MEDIUMINT |
|
INT |
|
BIGINT |
|
DECIMAL(p, s) |
|
FLOAT([<n>]) |
|
REAL |
|
SMALLMONEY |
|
MONEY |
| DATE类型 | 描述 |
|---|---|
DATETIME |
|
DATETIME2 |
|
SMALLDATETIME |
|
DATE |
|
TIME |
|
DATETIMEOFFSET |
|
TIMESTAMP |
约束
建表时添加约束
- MSSQL、ORACLE:可直接在字段声明后添加约束
- MySQL:需独立指定约束
向已有表添加约束
- 可以添加匿名、具名约束
- MSSQL、ORACLE:有
COLUMN关键字
删除约束
- MySQL:使用约束关键字指定
- MSSQL、ORACLE:使用
CONSTRAINT关键字指定
NOT NULL
1 | <field> <dtype> NOT NULL |
DEFAULT
DEFAULT
1 | !-- 建表 |
UNIQUE
UNIQUE
1 | !-- 建表 |
PRIMARY KEY
PRIMARY KEY
1 | !-- 建表 |
FOREIGN KEY
FOREIGN KEY
1 | !-- 建表 |
CHECK
CHECK
1 | !-- 建表 |
内建函数
Date
MySQL
NOW()CURDATE()CURTIME()DATE()EXTRACT()DATE_ADD()DATE_SUB()DATE_DIFF()DATE_FORMAT()
MSSQL
GETDATE()DATEPART()DATEADD()DATEDIFF()CONVERT()
NULL
MSSQL
ISNULL(<field>, <replacement>)
ORACLE
NVL(<field>, <repalcement>)
MySQL
IFNULL(<field>, <replacement>)COALESCE(<field>, <replacement>)

