目录
SQL 关键字
SQL ADD 关键字
ADD
SQL ADD CONSTRAINT 关键字
ADD CONSTRAINT
SQL ALTER 关键字
ALTER TABLE
ALTER COLUMN
SQL ALTER COLUMN 关键字
ALTER COLUMN
SQL ALTER TABLE 关键字
ALTER TABLE
SQL ALL 关键字
ALL
SQL AND 关键字
AND
SQL ANY 关键字
ANY
SQL AS 关键字
AS
列的别名
表格别名
SQL ASC 关键字
ASC
SQL BACKUP DATABASE 关键字
BACKUP DATABASE
SQL BETWEEN 关键字
BETWEEN
SQL CASE 关键字
CASE
SQL CHECK 关键字
CHECK
SQL CHECK on CREATE TABLE
SQL CHECK on ALTER TABLE
DROP a CHECK Constraint
SQL COLUMN 关键字
ALTER COLUMN
DROP COLUMN
SQL CONSTRAINT 关键字
ADD CONSTRAINT
DROP CONSTRAINT
删除唯一约束
删除主键约束
删除外键约束
删除一个检查约束
SQL CREATE 关键字
CREATE DATABASE
CREATE TABLE
使用另一个表创建表
CREATE INDEX
CREATE UNIQUE INDEX
CREATE VIEW
CREATE OR REPLACE VIEW
查询视图
CREATE PROCEDURE
SQL CREATE DATABASE 关键字
CREATE DATABASE
SQL CREATE INDEX 关键字
CREATE INDEX
SQL CREATE OR REPLACE VIEW 关键字
CREATE OR REPLACE VIEW
查询视图
关键字 | 描述 |
---|---|
ADD | 在现有表中添加一列 |
ADD CONSTRAINT | 在创建表后添加约束 |
ALTER | 添加、删除或修改表中的列,或更改表中列的数据类型 |
ALTER COLUMN | 更改表中列的数据类型 |
ALTER TABLE | 添加、删除或修改表中的列 |
ALL | 如果所有子查询值都满足条件,则返回true |
AND | 仅包含两个条件都为真的行 |
ANY | 如果任何子查询值满足条件,则返回true |
AS | 用别名重命名列或表 |
ASC | 对结果集进行升序排序 |
BACKUP DATABASE | 创建现有数据库的备份 |
BETWEEN | 选择给定范围内的值 |
CASE | 根据条件创建不同的输出 |
CHECK | 限制可以放在列中的值的约束 |
COLUMN | 更改列的数据类型或删除表中的列 |
CONSTRAINT | 添加或删除约束 |
CREATE | 创建数据库、索引、视图、表或过程 |
CREATE DATABASE | 创建一个新的 SQL 数据库 |
CREATE INDEX | 在表上创建索引(允许重复值) |
CREATE OR REPLACE VIEW | 更新视图 |
CREATE TABLE | 在数据库中创建一个新表 |
CREATE PROCEDURE | 创建一个存储过程 |
CREATE UNIQUE INDEX | 在表上创建唯一索引(无重复值) |
CREATE VIEW | 根据 SELECT 语句的结果集创建视图 |
DATABASE | 创建或删除 SQL 数据库 |
DEFAULT | 创建或删除 SQL 数据库 |
DELETE | 从表中删除行 |
DESC | 对结果集进行降序排序 |
DISTINCT | 只选择不同的(不同的)值 |
DROP | 删除列、约束、数据库、索引、表或视图 |
DROP COLUMN | 删除表中的一列 |
DROP CONSTRAINT | 删除 UNIQUE、PRIMARY KEY、FOREIGN KEY 或 CHECK 约束 |
DROP DATABASE | 删除现有的 SQL 数据库 |
DROP DEFAULT | 删除一个 DEFAULT 约束 |
DROP INDEX | 删除表中的索引 |
DROP TABLE | 删除数据库中的现有表 |
DROP VIEW | 删除视图 |
EXEC | 执行存储过程 |
EXISTS | 测试子查询中是否存在任何记录 |
FOREIGN KEY | 用于将两个表链接在一起的键的约束 |
FROM | 指定从哪个表中选择或删除数据 |
FULL OUTER JOIN | 当左表或右表匹配时返回所有行 |
GROUP BY | 对结果集进行分组(与聚合函数一起使用:COUNT、MAX、MIN、SUM、AVG) |
HAVING | 用聚合函数代替 WHERE |
IN | 允许您在 WHERE 子句中指定多个值 |
INDEX | 在表中创建或删除索引 |
INNER JOIN | 返回两个表中具有匹配值的行 |
INSERT INTO | 在表格中插入新行 |
INSERT INTO SELECT | 将数据从一个表复制到另一个表中 |
IS NULL | 空值测试 |
IS NOT NULL | 测试非空值 |
JOIN | 连接表格 |
LEFT JOIN | 返回左表中的所有行,以及右表中匹配的行 |
LIKE | 在列中搜索指定模式 |
LIMIT | 指定要在结果集中返回的记录数 |
NOT | 仅包含条件不成立的行 |
NOT NULL | 强制列不接受 NULL 值的约束 |
OR | 包括任一条件为真的行 |
ORDER BY | 按升序或降序对结果集进行排序 |
OUTER JOIN | 当左表或右表匹配时返回所有行 |
PRIMARY KEY | 唯一标识数据库表中每条记录的约束 |
PROCEDURE | 一个存储过程 |
RIGHT JOIN | 返回右表中的所有行,以及左表中匹配的行 |
ROWNUM | 指定要在结果集中返回的记录数 |
SELECT | 从数据库中选择数据 |
SELECT DISTINCT | 只选择不同的(不同的)值 |
SELECT INTO | 将数据从一个表复制到一个新表中 |
SELECT TOP | 指定要在结果集中返回的记录数 |
SET | 指定应该在表中更新哪些列和值 |
TABLE | 创建表,或添加、删除、修改表中的列,或删除表或表中的数据 |
TOP | 指定要在结果集中返回的记录数 |
TRUNCATE TABLE | 删除表内的数据,但不删除表本身 |
UNION | 组合两个或多个 SELECT 语句的结果集(仅不同的值) |
UNION ALL | 组合两个或多个 SELECT 语句的结果集(允许重复值) |
UNIQUE | 确保列中所有值唯一的约束 |
UPDATE | 更新表中的现有行 |
VALUES | 指定 INSERT INTO 语句的值 |
VIEW | 创建、更新或删除视图 |
WHERE | 过滤结果集以仅包含满足指定条件的记录 |
ADD 命令用于在现有表中添加列。
以下 SQL 将 "Email" 列添加到 "Customers" 表中:
【实例】
ALTER TABLE Customers
ADD Email varchar(255);
ADD CONSTRAINT命令用于在表已经创建后创建约束。
下面的 SQL 添加了一个名为"PK_Person"的约束。 这是对多个列(ID 和 LastName)的 PRIMARY KEY 约束:
【实例】
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
ALTER TABLE 命令添加、删除或修改表中的列。
ALTER TABLE 命令还可以添加和删除表中的各种约束。
以下 SQL 将 "Email" 列添加到 "Customers" 表:
【实例】
ALTER TABLE Customers
ADD Email varchar(255);
以下 SQL 从 "Customers" 表中删除 "Email" 列:
【实例】
ALTER TABLE Customers
DROP COLUMN Email;
ALTER COLUMN 命令用于更改表中列的数据类型。
下面的 SQL 将 "BirthDate" 表中名为 "Employees" 的列的数据类型更改为类型 year:
【实例】
ALTER TABLE Employees
ALTER COLUMN BirthDate year;
ALTER COLUMN命令用于改变表中某列的数据类型。
下面的SQL将"BirthDate"表中"BirthDate"列的数据类型改为年份:
【实例】
ALTER TABLE Employees
ALTER COLUMN BirthDate year;
ALTER TABLE 命令添加、删除或修改表中的列。
ALTER TABLE 命令还可以添加和删除表中的各种约束。
以下 SQL 将 "Email" 列添加到 "Customers" 表中:
【实例】
ALTER TABLE Customers
ADD Email varchar(255);
以下 SQL 从 "Customers" 表中删除 "Email" 列:
【实例】
ALTER TABLE Customers
DROP COLUMN Email;
ALL 如果所有子查询值都满足条件,则返回 true。
如果 OrderDetails 表中所有记录的数量 = 10,则以下 SQL 语句返回 TRUE 并列出产品名称:
【实例】
SELECT ProductName
FROM Products
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
AND 命令与 WHERE 一起使用,仅包含两个条件都为真的行。
以下 SQL 语句从"Customers"中选择国家为"Germany"且城市为"Berlin"的所有字段:
【实例】
SELECT * FROM Customers
WHERE Country='Germany' AND City='Berlin';
ANY 如果任何子查询值满足条件,则返回 true。
如果在 OrderDetails 表中找到 quantity = 10 的任何记录,则以下 SQL 语句返回 TRUE 并列出产品名称:
【实例】
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);
如果在 OrderDetails 表中找到数量为 > 99 的任何记录,则以下 SQL 语句返回 TRUE 并列出产品名称:
【实例】
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity > 99);
AS 命令用于用别名重命名列或表。
别名仅在查询期间存在。
以下 SQL 语句创建两个别名,一个用于 CustomerID 列,一个用于 CustomerName 列:
【实例】
SELECT CustomerID AS ID, CustomerName AS Customer
FROM Customers;
以下 SQL 语句创建两个别名。 请注意,如果别名包含空格,则需要双引号或方括号:
【实例】
SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;
以下 SQL 语句创建一个名为"Address"的别名,该别名组合了四列(Address、PostalCode、City 和 Country):
【实例】
SELECT CustomerName, Address + ', ' + PostalCode + ' ' + City + ', ' + Country AS Address
FROM Customers;
注:要让上面的 SQL 语句在 MySQL 中工作,请使用以下命令:
SELECT CustomerName, CONCAT(Address,', ',PostalCode,', ',City,', ',Country) AS Address
FROM Customers;
以下 SQL 语句选择来自 CustomerID=4 的客户的所有订单(Around the Horn)。 我们使用"Customers"和"Orders"表,并分别赋予它们"c"和"o"的表别名(这里我们使用别名使SQL更短):
【实例】
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName="Around the Horn" AND c.CustomerID=o.CustomerID;
ASC命令用于对返回的数据进行升序排序。
下面的 SQL 语句选择 "Customers" 表中的所有列,按 "CustomerName" 列排序:
【实例】
SELECT * FROM Customers
ORDER BY CustomerName ASC;
BACKUP DATABASE 命令在 SQL Server 中用于创建现有 SQL 数据库的完整备份。
以下SQL语句将现有数据库 "testDB" 完整备份到D盘:
【实例】
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak';
注: 始终将数据库备份到与实际数据库不同的驱动器。 如果您遇到磁盘崩溃,您的备份文件不会与数据库一起丢失。
差异备份仅备份自上次完整数据库备份以来已更改的数据库部分。
以下 SQL 语句创建数据库 "testDB" 的差异备份:
【实例】
BACKUP DATABASE testDB
TO DISK = 'D:\backups\testDB.bak'
WITH DIFFERENTIAL;
注:差异备份减少了备份时间(因为只备份了更改)。
BETWEEN 命令用于选择给定范围内的值。 这些值可以是数字、文本或日期。
BETWEEN 命令是包容性的:包括开始值和结束值。
以下 SQL 语句选择价格在 10 到 20 之间的所有产品:
【实例】
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
要显示上例范围之外的产品,请使用 NOT BETWEEN:
【实例】
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
以下 SQL 语句选择 ProductName BETWEEN 'Carnarvon Tigers' 和 'Mozzarella di Giovanni' 的所有产品:
【实例】
SELECT * FROM Products
WHERE ProductName BETWEEN 'Carnarvon Tigers' AND 'Mozzarella di Giovanni'
ORDER BY ProductName;
CASE命令用于根据条件创建不同的输出。
下面的SQL会遍历几个条件,当满足指定条件时返回一个值:
【实例】
SELECT OrderID, Quantity,
CASE
WHEN Quantity > 30 THEN "The quantity is greater than 30"
WHEN Quantity = 30 THEN "The quantity is 30"
ELSE "The quantity is under 30"
END
FROM OrderDetails;
以下 SQL 将按城市对客户进行排序。 但是,如果 City 为 NULL,则按 Country 排序:
【实例】
SELECT CustomerName, City, Country
FROM Customers
ORDER BY
(CASE
WHEN City IS NULL THEN Country
ELSE City
END);
CHECK 约束限制了可以放在列中的值。
下面的 SQL 在 "Age" 列上创建一个 CHECK 约束,当"Persons" 表已创建。 CHECK 约束确保您不能有任何低于 18 岁的人:
【MySQL】
CREATE TABLE Persons (
Age int,
CHECK (Age>=18)
);
【SQL Server / Oracle / MS Access】
CREATE TABLE Persons (
Age int CHECK (Age>=18)
);
要允许命名 CHECK 约束,并在多个列上定义 CHECK 约束,请使用以下 SQL 语法:
【MySQL / SQL Server / Oracle / MS Access】
CREATE TABLE Persons (
Age int,
City varchar(255),
CONSTRAINT CHK_Person CHECK (Age>=18 AND City='Sandnes')
);
要在表已创建时在 "Age" 列上创建 CHECK 约束,请使用以下 SQL:
【MySQL / SQL Server / Oracle / MS Access】
ALTER TABLE Persons
ADD CHECK (Age>=18);
要允许命名 CHECK 约束,并在多个列上定义 CHECK 约束,请使用以下 SQL 语法:
【MySQL / SQL Server / Oracle / MS Access】
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City='Sandnes');
要删除 CHECK 约束,请使用以下 SQL:
【SQL Server / Oracle / MS Access】
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
【MySQL】
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
ALTER COLUMN命令用于改变表中某列的数据类型。
下面的SQL将 "Employees" 表中 "BirthDate" 列的数据类型改为年份:
【实例】
ALTER TABLE Employees
ALTER COLUMN BirthDate year;
DROP COLUMN 命令用于删除现有表中的列。
以下 SQL 从 "Customers" 表中删除 "ContactName" 列:
【实例】
ALTER TABLE Customers
DROP COLUMN ContactName;
ADD CONSTRAINT命令用于在表已经创建后创建约束。
以下 SQL 添加了一个名为 "PK_Person" 的约束,它是对多个列(ID 和 LastName)的 PRIMARY KEY 约束:
【实例】
ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);
DROP CONSTRAINT 命令用于删除 UNIQUE、PRIMARY KEY、FOREIGN KEY 或 CHECK 约束。
要删除 UNIQUE 约束,请使用以下 SQL:
【SQL Server / Oracle / MS Access】
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;
【MySQL】
ALTER TABLE Persons
DROP INDEX UC_Person;
要删除 PRIMARY KEY 约束,请使用以下 SQL:
【SQL Server / Oracle / MS Access】
ALTER TABLE Persons
DROP CONSTRAINT PK_Person;
【MySQL】
ALTER TABLE Persons
DROP PRIMARY KEY;
要删除 FOREIGN KEY 约束,请使用以下 SQL:
【SQL Server / Oracle / MS Access】
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
【MySQL】
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
要删除 CHECK 约束,请使用以下 SQL:
【SQL Server / Oracle / MS Access】
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
【MySQL】
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
CREATE DATABASE命令用来创建一个新的SQL数据库。
以下 SQL 创建一个名为"testDB"的数据库:
【实例】
CREATE DATABASE testDB;
注:在创建任何数据库之前,请确保您拥有管理员权限。 创建数据库后,您可以使用以下 SQL 命令在数据库列表中检查它:SHOW DATABASES;
CREATE TABLE 命令在数据库中创建一个新表。
以下 SQL 创建一个名为"Persons"的表。 包含五列:PersonID、LastName、FirstName、Address 和 City:
【实例】
CREATE TABLE Persons (
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
以下 SQL 创建一个名为 "TestTables" 的新表(它是 "Customers" 表的两列的副本):
【实例】
CREATE TABLE TestTable AS
SELECT customername, contactname
FROM customers;
CREATE INDEX 命令用于在表中创建索引(允许重复值)。
索引用于非常快速地从数据库中检索数据。 用户看不到索引,它们只是用来加速搜索/查询。
下面的 SQL 在 "Persons" 表的 "LastName" 列上创建一个名为 "idx_lastname" 的索引:
CREATE INDEX idx_lastname
ON Persons (LastName);
如果您想为列组合创建索引,可以在括号内列出列名,用逗号分隔:
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
注: 创建索引的语法因数据库而异。 因此:检查在数据库中创建索引的语法。使用索引更新表比不更新表需要更多时间(因为索引也需要更新)。 因此,仅在将经常搜索的列上创建索引。
CREATE UNIQUE INDEX 命令在表上创建唯一索引(不允许重复值)
以下 SQL 在 "Persons" 表的 "PersonID" 列上创建一个名为 "uidx_pid" 的索引:
CREATE UNIQUE INDEX uidx_pid
ON Persons (PersonID);
CREATE VIEW 命令创建一个视图。
视图是基于 SQL 语句结果集的虚拟表。
以下 SQL 创建一个视图,用于选择来自巴西的所有客户:
【实例】
CREATE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName
FROM Customers
WHERE Country = "Brazil";
CREATE OR REPLACE VIEW 命令更新视图。
以下 SQL 将 "City" 列添加到 "Brazil Customers" 视图:
【实例】
CREATE OR REPLACE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName, City
FROM Customers
WHERE Country = "Brazil";
我们可以这样查询上面的视图:
【实例】
SELECT * FROM [Brazil Customers];
CREATE PROCEDURE命令用于创建存储过程。
存储过程是可以保存的准备好的 SQL 代码,因此代码可以反复重用。
以下 SQL 创建一个名为"SelectAllCustomers"的存储过程,该过程从"Customers"表中选择所有记录:
【实例】
CREATE PROCEDURE SelectAllCustomers
AS
SELECT * FROM Customers
GO;
执行上面的存储过程如下:
【实例】
EXEC SelectAllCustomers;
CREATE DATABASE命令用来创建一个新的SQL数据库。
以下 SQL 创建一个名为"testDB"的数据库:
【实例】
CREATE DATABASE testDB;
注:在创建任何数据库之前,请确保您拥有管理员权限。 创建数据库后,您可以使用以下 SQL 命令在数据库列表中检查它:SHOW DATABASES;
CREATE INDEX 命令用于在表中创建索引(允许重复值)。
索引用于非常快速地从数据库中检索数据。 用户看不到索引,它们只是用来加速搜索/查询。
下面的 SQL 在 "Persons" 表的 "LastName" 列上创建一个名为 "idx_lastname" 的索引:
CREATE INDEX idx_lastname
ON Persons (LastName);
如果您想为列组合创建索引,可以在括号内列出列名,用逗号分隔:
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
注: 创建索引的语法因数据库而异。 因此:检查在数据库中创建索引的语法。 使用索引更新表比不更新表需要更多时间(因为索引也需要更新)。 因此,仅在将经常搜索的列上创建索引。
CREATE OR REPLACE VIEW 命令更新视图。
以下 SQL 将 "City" 列添加到 "Brazil Customers" 视图:
【实例】
CREATE OR REPLACE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName, City
FROM Customers
WHERE Country = "Brazil";
我们可以这样查询上面的视图:
【实例】
SELECT * FROM [Brazil Customers];