目录
SQL 关键字
SQL CREATE TABLE 关键字
CREATE TABLE
使用另一个表创建表
SQL CREATE PROCEDURE 关键字
CREATE PROCEDURE
SQL CREATE UNIQUE INDEX 关键字
CREATE UNIQUE INDEX
SQL CREATE VIEW 关键字
CREATE VIEW
查询视图
SQL DATABASE 关键字
CREATE DATABASE
删除数据库
SQL DEFAULT 关键字
DEFAULT
创建表时的 SQL 默认值
ALTER TABLE 上的 SQL 默认值
删除默认约束
SQL DELETE 关键字
DELETE
SQL DESC 关键字
DESC
SQL SELECT DISTINCT 关键字
SELECT DISTINCT
SQL DROP 关键字
DROP COLUMN
删除唯一约束
删除主键约束
删除外键约束
删除一个 CHECK 约束
删除默认值
删除索引
删除数据库
DROP TABLE
TRUNCATE TABLE
删除视图
SQL EXEC 关键字
EXEC
SQL EXISTS 关键字
EXISTS
SQL FOREIGN KEY 关键字
FOREIGN KEY
SQL FOREIGN KEY on CREATE TABLE
SQL FOREIGN KEY on ALTER TABLE
DROP a FOREIGN KEY Constraint
SQL FROM 关键字
FROM
SQL FULL OUTER JOIN 关键字
FULL OUTER JOIN
SQL GROUP BY 关键字
GROUP BY
SQL HAVING 关键字
HAVING
SQL IN 关键字
IN
SQL INDEX 关键字
CREATE INDEX
删除索引
SQL INNER JOIN 关键字
INNER JOIN
关键字 | 描述 |
---|---|
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 | 过滤结果集以仅包含满足指定条件的记录 |
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 PROCEDURE命令用于创建存储过程。
存储过程是可以保存的准备好的 SQL 代码,因此代码可以反复重用。
以下 SQL 创建一个名为"SelectAllCustomers"的存储过程,该过程从"Customers"表中选择所有记录:
【实例】
CREATE PROCEDURE SelectAllCustomers
AS
SELECT * FROM Customers
GO;
执行上面的存储过程如下:
【实例】
EXEC SelectAllCustomers;
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";
我们可以这样查询上面的视图:
【实例】
SELECT * FROM [Brazil Customers];
CREATE DATABASE命令用来创建一个新的SQL数据库。
以下 SQL 创建一个名为 "testDB" 的数据库:
【实例】
CREATE DATABASE testDB;
注: 在创建任何数据库之前,请确保您拥有管理员权限。 创建数据库后,您可以使用以下 SQL 命令在数据库列表中检查它:SHOW DATABASES;
DROP DATABASE命令用于删除已有的SQL数据库。
以下 SQL 删除了一个名为 "testDB" 的数据库:
【实例】
DROP DATABASE testDB;
注:在删除数据库之前要小心。 删除数据库将导致数据库中存储的完整信息丢失!
DEFAULT 约束为列提供默认值。
如果没有指定其他值,默认值将添加到所有新记录中。
以下 SQL 在创建 "Persons" 表时为 "City" 列设置一个 DEFAULT 值:
【My SQL / SQL Server / Oracle / MS Access】
CREATE TABLE Persons (
City varchar(255) DEFAULT 'Sandnes'
);
DEFAULT 约束也可用于插入系统值,通过使用诸如 GETDATE() 之类的函数:
CREATE TABLE Orders (
OrderDate date DEFAULT GETDATE()
);
要在已创建表时在 "City" 列上创建 DEFAULT 约束,请使用以下 SQL:
【MySQL】
ALTER TABLE Persons
ALTER City SET DEFAULT 'Sandnes';
【SQL Server】
ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'Sandnes' FOR City;
【MS Access】
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'Sandnes';
【Oracle】
ALTER TABLE Persons
MODIFY City DEFAULT 'Sandnes';
要删除 DEFAULT 约束,请使用以下 SQL:
【MySQL】
ALTER TABLE Persons
ALTER City DROP DEFAULT;
【SQL Server / Oracle / MS Access】
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
DELETE命令用于删除表中已有的记录。
以下 SQL 语句从"客户"表中删除客户"Alfreds Futterkiste":
【实例】
DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';
注:删除表中的记录时要小心! 请注意 DELETE 语句中的 WHERE 子句。 WHERE 子句指定应该删除哪些记录。 如果省略 WHERE 子句,表中的所有记录都会被删除!
可以在不删除表的情况下删除表中的所有行。 这意味着表结构、属性和索引将保持不变:
以下 SQL 语句删除 "Customers" 表中的所有行,但不删除该表。 这意味着表结构、属性和索引将保持不变:
【实例】
DELETE FROM Customers;
DESC命令用于对返回的数据进行降序排序。
以下 SQL 语句选择 "Customers" 表中的所有列,按 "CustomerName" 列降序排序:
【实例】
SELECT * FROM Customers
ORDER BY CustomerName DESC;
SELECT DISTINCT 命令仅返回结果集中不同(不同)的值。
以下 SQL 语句仅从"Customers"表的"Country"列中选择 DISTINCT 值:
【实例】
SELECT DISTINCT Country FROM Customers;
DROP COLUMN 命令用于删除现有表中的列。
以下 SQL 从 "Customers" 表中删除 "ContactName" 列:
【实例】
ALTER TABLE Customers
DROP COLUMN ContactName;
要删除 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;
DROP DEFAULT命令用于删除一个DEFAULT约束。
要删除 DEFAULT 约束,请使用以下 SQL:
【SQL Server / Oracle / MS Access】
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
【MySQL】
ALTER TABLE Persons
ALTER City DROP DEFAULT;
DROP INDEX命令用于删除表中的索引。
【MS Access】
DROP INDEX index_name ON table_name;
【SQL Server】
DROP INDEX table_name.index_name;
【DB2/Oracle】
DROP INDEX index_name;
【MySQL】
ALTER TABLE table_name
DROP INDEX index_name;
DROP DATABASE命令用于删除已有的SQL数据库。
以下 SQL 删除了一个名为 "testDB" 的数据库:
【实例】
DROP DATABASE testDB;
注:在删除数据库之前要小心。 删除数据库将导致数据库中存储的完整信息丢失!
DROP TABLE 命令删除数据库中的一个表。
以下SQL删除表 "Shippers":
【实例】
DROP TABLE Shippers;
注:在删除表之前要小心。 删除表会导致表中存储的所有信息丢失!
TRUNCATE TABLE 命令删除表内的数据,但不删除表本身。
以下 SQL 截断表 "Categories":
【实例】
TRUNCATE TABLE Categories;
DROP VIEW 命令删除视图。
以下 SQL 删除 "Brazil Customers" 视图:
【实例】
DROP VIEW [Brazil Customers];
EXEC命令用于执行存储过程。
以下 SQL 执行名为"SelectAllCustomers"的存储过程:
【实例】
EXEC SelectAllCustomers;
EXISTS 命令测试子查询中是否存在任何记录,如果子查询返回一条或多条记录,则返回 true。
以下 SQL 列出了产品价格低于 20 的供应商:
【实例】
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE SupplierId = Suppliers.supplierId AND Price < 20);
以下 SQL 列出了产品价格等于 22 的供应商:
【实例】
SELECT SupplierName
FROM Suppliers
WHERE EXISTS (SELECT ProductName FROM Products WHERE SupplierId = Suppliers.supplierId AND Price = 22);
FOREIGN KEY 约束是用于将两个表链接在一起的键。
FOREIGN KEY 是一个表中的一个字段(或字段集合),它引用另一个表中的 PRIMARY KEY。
以下 SQL 在创建 "Orders" 表时在 "PersonID" 列上创建 FOREIGN KEY:
【MySQL】
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
【SQL Server / Oracle / MS Access】
CREATE TABLE Orders (
OrderID int NOT NULL PRIMARY KEY,
OrderNumber int NOT NULL,
PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);
要允许命名 FOREIGN KEY 约束,并在多个列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:
【MySQL / SQL Server / Oracle / MS Access】
CREATE TABLE Orders (
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
要在 "Orders" 表已创建时在 "PersonID" 列上创建 FOREIGN KEY 约束,请使用以下 SQL:
【MySQL / SQL Server / Oracle / MS Access】
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
要允许命名 FOREIGN KEY 约束,并在多个列上定义 FOREIGN KEY 约束,请使用以下 SQL 语法:
【MySQL / SQL Server / Oracle / MS Access】
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);
要删除 FOREIGN KEY 约束,请使用以下 SQL:
【MySQL】
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
【SQL Server / Oracle / MS Access】
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
FROM 命令用于指定从哪个表中选择或删除数据。
以下 SQL 语句从"客户"表中选择"客户名称"和"城市"列:
【实例】
SELECT CustomerName, City FROM Customers;
以下 SQL 语句从"客户"表中选择所有列:
【实例】
SELECT * FROM Customers;
以下 SQL 语句从"客户"表中删除客户"Alfreds Futterkiste":
【实例】
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';
FULL OUTER JOIN 命令在左表或右表中存在匹配时返回所有行。
以下 SQL 语句选择所有客户和所有订单:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
注: FULL OUTER JOIN
关键字返回左表(客户)中的所有行,以及右表中的所有行 表(订单)。 如果"客户"中有行与"订单"不匹配,或者"订单"中有行与"客户"不匹配,这些行也会被列出。
GROUP BY 命令用于对结果集进行分组(与聚合函数一起使用:COUNT、MAX、MIN、SUM、AVG)。
下面的 SQL 列出了每个国家的客户数量:
【实例】
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country;
以下 SQL 列出了每个国家/地区的客户数量,从高到低排序:
【实例】
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
ORDER BY COUNT(CustomerID) DESC;
HAVING 命令用于代替 WHERE 聚合函数。
以下 SQL 列出了每个国家/地区的客户数量。 仅包括拥有 5 个以上客户的国家/地区:
【实例】
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5;
以下 SQL 列出了每个国家/地区的客户数量,从高到低排序(仅包括客户超过 5 个的国家/地区):
【实例】
SELECT COUNT(CustomerID), Country
FROM Customers
GROUP BY Country
HAVING COUNT(CustomerID) > 5
ORDER BY COUNT(CustomerID) DESC;
IN 命令允许您在 WHERE 子句中指定多个值。
IN 运算符是多个 OR 条件的简写。
以下 SQL 选择位于"Germany"、"France"和"UK"的所有客户:
【实例】
SELECT * FROM Customers
WHERE Country IN ('Germany', 'France', 'UK');
以下 SQL 选择所有不在"Germany"、"France"或"UK"的客户:
【实例】
SELECT * FROM Customers
WHERE Country NOT IN ('Germany', 'France', 'UK');
以下 SQL 选择与供应商来自同一国家的所有客户:
【实例】
SELECT * FROM Customers
WHERE Country IN (SELECT Country FROM Suppliers);
CREATE INDEX 命令用于在表中创建索引(允许重复值)。
索引用于非常快速地从数据库中检索数据。 用户看不到索引,它们只是用来加速搜索/查询。
下面的 SQL 在 "Persons" 表的 "LastName" 列上创建一个名为 "idx_lastname" 的索引:
CREATE INDEX idx_lastname
ON Persons (LastName);
如果您想为列组合创建索引,可以在括号内列出列名,用逗号分隔:
CREATE INDEX idx_pname
ON Persons (LastName, FirstName);
注: 创建索引的语法因数据库而异。 因此:检查在数据库中创建索引的语法。使用索引更新表比不更新表需要更多时间(因为索引也需要更新)。 因此,仅在将经常搜索的列上创建索引。
DROP INDEX命令用于删除表中的索引。
【MS Access】
DROP INDEX index_name ON table_name;
【SQL Server】
DROP INDEX table_name.index_name;
【DB2/Oracle】
DROP INDEX index_name;
【MySQL】
ALTER TABLE table_name
DROP INDEX index_name;
INNER JOIN 命令返回两个表中具有匹配值的行。
以下 SQL 选择所有带有客户信息的订单:
【实例】
SELECT Orders.OrderID, Customers.CustomerName
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID;
注: 只要列之间存在匹配项,INNER JOIN 关键字就会从两个表中选择所有行。 如果"Orders"表中存在与"Customers"不匹配的记录,这些订单将不会显示!
以下 SQL 语句选择包含客户和发货人信息的所有订单:
【实例】
SELECT Orders.OrderID, Customers.CustomerName, Shippers.ShipperName
FROM ((Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID)
INNER JOIN Shippers ON Orders.ShipperID = Shippers.ShipperID);