基本功能

语句 语法 含义
AND / OR SELECT column_name(s) FROM table_name WHERE condition AND|OR condition AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤
ALTER TABLE (add column) ALTER TABLE table_name ADD column_name datatype 向表中添加列
ALTER TABLE (drop column) ALTER TABLE table_name DROP COLUMN column_name 表中删除列
AS (alias for column) SELECT column_name AS column_alias FROM table_name 通过使用 SQL,可以为列名称和表名称指定别名(Alias)。
AS (alias for table) SELECT column_name FROM table_name AS table_alias 通过使用 SQL,可以为列名称和表名称指定别名(Alias)
BETWEEN SELECT column_name(s) FROM table_name WHERE column_name BETWEEN value1 AND value2 BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围
CREATE DATABASE CREATE DATABASE database_name CREATE DATABASE 用于创建数据库
CREATE INDEX CREATE INDEX index_name ON table_name (column_name) CREATE INDEX 语句用于在表中创建索引。在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据
CREATE TABLE CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, ....... ) CREATE TABLE 语句用于创建数据库中的表
CREATE UNIQUE INDEX CREATE UNIQUE INDEX index_name ON table_name (column_name) UNIQUE 约束唯一标识数据库表中的每条记录
CREATE VIEW CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition 视图是可视化的表
DELETE FROM DELETE FROM table_name (Note: Deletes the entire table!!)orDELETE FROM table_name WHERE condition DELETE 语句用于删除表中的行
DROP DATABASE DROP DATABASE database_name 通过使用 DROP 语句,可以轻松地删除索引、表和数据库
DROP INDEX DROP INDEX table_name.index_name 通过使用 DROP 语句,可以轻松地删除索引、表和数据库
DROP TABLE DROP TABLE table_name 通过使用 DROP 语句,可以轻松地删除索引、表和数据库
GROUP BY SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 合计函数 (比如 SUM) 常常需要添加 GROUP BY 语句
HAVING SELECT column_name1,SUM(column_name2) FROM table_name GROUP BY column_name1 HAVING SUM(column_name2) condition value 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用
IN SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,..) IN 操作符允许我们在 WHERE 子句中规定多个值
INSERT INTO INSERT INTO table_name VALUES (value1, value2,....)orINSERT INTO table_name (column_name1, column_name2,...) VALUES (value1, value2,....) INSERT INTO 语句用于向表格中插入新的行
LIKE SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式
ORDER BY SELECT column_name(s) FROM table_name ORDER BY column_name [ASC|DESC] ORDER BY 语句用于对结果集进行排序
SELECT SELECT column_name(s) FROM table_name SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)
SELECT * SELECT * FROM table_name 取所有列
SELECT DISTINCT SELECT DISTINCT column_name(s) FROM table_name 关键词 DISTINCT 用于返回唯一不同的值
SELECT INTO (used to create backup copies of tables) SELECT * INTO new_table_name FROM original_table_nameorSELECT column_name(s) INTO new_table_name FROM original_table_name SQL SELECT INTO 语句可用于创建表的备份复件
UNION SELECT column_name(s) FROM table_name1 UNION SELECT column_name(s) FROM table_name2 UNION 操作符用于合并两个或多个 SELECT 语句的结果集
UPDATE UPDATE table_name SET column_name=new_value [, column_name=new_value] WHERE column_name=some_value Update 语句用于修改表中的数据
WHERE SELECT column_name(s) FROM table_name WHERE condition WHERE 子句用于规定选择的标准

Default

DEFAULT 约束用于向列中插入默认值。如果没有规定其他的值,那么会将默认值添加到所有的新记录。

CREATE TABLE Persons
(
Id_P int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)

ALTER TABLE Persons ALTER City SET DEFAULT 'SANDNES' – 添加default
ALTER TABLE Persons ALTER City DROP DEFAULT – 取消default

AUTO INCREMENT 字段

我们通常希望在每次插入新记录时,自动地创建主键字段的值。

我们可以在表中创建一个 auto-increment 字段。

CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=100

或者

ALTER TABLE Persons AUTO_INCREMENT=100

View

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。我们可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,我们也可以提交数据,就像这些来自于某个单一的表。

注释:数据库的设计和结构不会受到视图中的函数、where 或 join 语句的影响。

CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

通配符

在 SQL 中,可使用以下通配符:

通配符 描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符
[^charlist]或者[!charlist] 不在字符列中的任何单一字符

内连接、外连接

SQL join 用于根据两个或多个表中的列之间的关系,从这些表中查询数据

INNER JOIN 关键字
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

原始的表 (用在例子中的):

"Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

内连接(INNER JOIN)实例

现在,我们希望列出所有人的定购。

您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

INNER JOIN 关键字在表中存在至少一个匹配时返回行。如果 "Persons" 中的行在 "Orders" 中没有匹配,就不会列出这些行。

LEFT JOIN 关键字

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

LEFT JOIN 关键字语法

SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, LEFT JOIN 称为 LEFT OUTER JOIN。

"Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

左连接(LEFT JOIN)实例

现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。

您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George

LEFT JOIN 关键字会从左表 (Persons) 那里返回所有的行,即使在右表 (Orders) 中没有匹配的行。

RIGHT JOIN 关键字

RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

RIGHT JOIN 关键字语法

SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。

"Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

右连接(RIGHT JOIN)实例

现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。

您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
34764

RIGHT JOIN 关键字会从右表 (Orders) 那里返回所有的行,即使在左表 (Persons) 中没有匹配的行。

FULL JOIN

只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

FULL JOIN 关键字语法

SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2 
ON table_name1.column_name=table_name2.column_name

注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

"Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

全连接(FULL JOIN)实例

现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。

您可以使用下面的 SELECT 语句:

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName

结果集:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George
34764

FULL JOIN 关键字会从左表 (Persons) 和右表 (Orders) 那里返回所有的行。如果 "Persons" 中的行在表 "Orders" 中没有匹配,或者如果 "Orders" 中的行在表 "Persons" 中没有匹配,这些行同样会列出。