3.SQL 语法
2020-03-01 本文已影响0人
d9e7e8498548
-
语法规则
- SQL语句总是以关键字开始。
- SQL语句以分号结尾。
- SQL不区分大小写,意味着update与UPDATE相同
- WHERE 中的运算符
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于。某些版本的SQL,可能写成!= |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
IN | 为列指定多个可能的值 |
- INSERT INTO
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
- 空值
SELECT column_names
FROM table_name
WHERE column_name IS NOT NULL;
SELECT column_names
FROM table_name
WHERE column_name IS NULL;
- UPDATE
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
- DELETE
DELETE FROM table_name
WHERE condition;
-
LIKE运算符
- % 百分号表示零个,一个或多个字符
- _ 下划线表示单个字符
- 通用数据类型
数据类型 | 描述 |
---|---|
CHARACTER(n) | 字符/字符串。固定长度 n。 |
VARCHAR(n) 或CHARACTER VARYING(n) | 字符/字符串。可变长度。最大长度 n。 |
BINARY(n) | 二进制串。固定长度 n。 |
BOOLEAN | 存储 TRUE 或 FALSE 值 |
VARBINARY(n) 或 BINARY VARYING(n) | 二进制串。可变长度。最大长度 n。 |
INTEGER(p) | 整数值(没有小数点)。精度 p。 |
SMALLINT | 整数值(没有小数点)。精度 5。 |
INTEGER | 整数值(没有小数点)。精度 10。 |
BIGINT | 整数值(没有小数点)。精度 19。 |
DECIMAL(p,s) | 精确数值,精度 p,小数点后位数 s。例如:decimal(5,2) 是一个小数点前有 3 位数小数点后有 2 位数的数字。 |
NUMERIC(p,s) | 精确数值,精度 p,小数点后位数 s。(与 DECIMAL 相同) |
FLOAT(p) | 近似数值,尾数精度 p。一个采用以 10 为基数的指数计数法的浮点数。该类型的 size 参数由一个指定最小精度的单一数字组成。 |
REAL | 近似数值,尾数精度 7。 |
FLOAT | 近似数值,尾数精度 16。 |
DOUBLE PRECISION | 近似数值,尾数精度 16。 |
DATE | 存储年、月、日的值。 |
TIME | 存储小时、分、秒的值。 |
TIMESTAMP | 存储年、月、日、小时、分、秒的值。 |
INTERVAL | 由一些整数字段组成,代表一段时间,取决于区间的类型。 |
ARRAY | 元素的固定长度的有序集合 |
MULTISET | 元素的可变长度的无序集合 |
XML | 存储 XML 数据 |
-
HAVING 子句
HAVING 子句可指定过滤条件,从而控制查询结果中哪些组可以出现在最终结果里面。
WHERE 子句对被选择的列施加条件,而 HAVING 子句则对 GROUP BY 子句所产生的组施加条件。
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
-
JOIN
- 内连接(INNER JOIN):当两个表中都存在匹配时,才返回行。
- 左连接(LEFT JOIN):返回左表中的所有行,即使右表中没有匹配的行。
- 右连接(RIGHT JOIN):返回右表中的所有行,即使左表中没有匹配的行。
- 全连接(FULL JOIN):只要某一个表存在匹配,就返回行。
- 笛卡尔连接(CARTESIAN JOIN):返回两个或者更多的表中记录集的笛卡尔积。
SELECT table1.column1, table2.column2...
FROM table1
INNER JOIN table2
ON table1.common_field = table2.common_field
-
UNION
- UNION 子句/运算符用于将两个或者更多的 SELECT 语句的运算结果组合起来
- 每个 SELECT 语句必须有相同数量的选中列、相同数量的列表达式、相同的数据类型,并且它们出现的次序要一致,不过长度不一定要相同
- UNION ALL 运算符用于将两个 SELECT 语句的结果组合在一起,重复行也包含在内。
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
UNION
SELECT column1 [, column2 ]
FROM table1 [, table2 ]
[WHERE condition]
- CREATE TABLE
CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);
- column_name 参数规定表中列的名称。
- data_type 参数规定列的数据类型(例如 varchar、integer、decimal、date 等等)。
- size 参数规定表中列的最大长度。
- ALTER TABLE
ALTER TABLE table_name
ADD column_name datatype
ALTER TABLE table_name
DROP COLUMN column_name
ALTER TABLE table_name
MODIFY/ALTER COLUMN column_name datatype
- SQL约束
-
NOT NULL 约束:保证列中数据不能有 NULL 值
NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
NIQUE 约束唯一标识数据库表中的每条记录。 -
DEFAULT 约束:提供该列数据未指定时所采用的默认值
-
UNIQUE 约束:保证列中的所有数据各不相同
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 -
主键约束:唯一标识数据表中的行/记录
PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。 -
外键约束:唯一标识其他表中的一条行/记录
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的行为。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。 -
CHECK 约束:此约束保证列中的所有值满足某一条件
CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。 -
索引:用于在数据库中快速创建或检索数据
约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。
SQL语句快速参考
SQL语句 | 语法 | |
---|---|---|
AND / OR | SELECT column_name(s) FROM table_name WHERE condition AND/OR condition |
|
ALTER TABLE | ALTER TABLE table_name ADD column_name datatype or ALTER TABLE table_name DROP COLUMN column_name |
|
AS (alias) | SELECT column_name AS column_alias FROM table_name or SELECT column_name FROM table_name AS table_alias |
|
BETWEEN | SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 |
|
CREATE DATABASE | CREATE DATABASE database_name | |
CREATE TABLE | CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, column_name3 data_type, ... ) |
|
CREATE INDEX | CREATE INDEX index_name ON table_name (column_name) or CREATE UNIQUE INDEX index_name ON table_name (column_name) |
|
CREATE VIEW | CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition |
|
DELETE | DELETE FROM table_name WHERE some_column=some_value or DELETE FROM table_name (Note: Deletes the entire table!!) DELETE * FROM table_name (Note: Deletes the entire table!!) |
|
DROP DATABASE | DROP DATABASE database_name | |
DROP INDEX | DROP INDEX table_name.index_name (SQL Server) DROP INDEX index_name ON table_name (MS Access) DROP INDEX index_name (DB2/Oracle) ALTER TABLE table_name DROP INDEX index_name (MySQL) |
|
DROP TABLE | DROP TABLE table_name | |
GROUP BY | SELECT column_name,aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name |
|
HAVING | SELECT column_name,aggregate_function(column_name) FROM table_name WHERE column_name operator value GROUP BY column_name HAVING aggregate_function(column_name) operator value |
|
IN | SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..) |
|
INSERT INTO | INSERT INTO table_name VALUES (value1, value2, value3,....) or INSERT INTO table_name(column1, column2, column3,...) VALUES (value1, value2, value3,....) |
|
INNER JOIN | SELECT column_name(s) FROM table_name1 INNER JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
|
LEFT JOIN | SELECT column_name(s) FROM table_name1 LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
|
RIGHT JOIN | SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
|
FULL JOIN | SELECT column_name(s) FROM table_name1 FULL JOIN table_name2 ON table_name1.column_name=table_name2.column_name |
|
LIKE | SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern |
|
ORDER BY | SELECT column_name(s) FROM table_name ORDER BY column_name [ASC |
DESC] |
SELECT | SELECT column_name(s) FROM table_name |
|
SELECT * | SELECT * FROM table_name |
|
SELECT DISTINCT | SELECT DISTINCT column_name(s) FROM table_name |
|
SELECT INTO | SELECT * INTO new_table_name [IN externaldatabase] FROM old_table_name or SELECT column_name(s) INTO new_table_name [IN externaldatabase] FROM old_table_name |
|
SELECT TOP | SELECT TOP number/percent column_name(s) FROM table_name |
|
TRUNCATE TABLE | TRUNCATE TABLE table_name | |
UNION | SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 |
|
UNION ALL | SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2 |
|
UPDATE | UPDATE table_name SET column1=value, column2=value,... WHERE some_column=some_value |
|
WHERE | SELECT column_name(s) FROM table_name WHERE column_name operator value |