SQL 关键字参考手册(二)

目录

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


SQL 关键字

关键字 描述
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 过滤结果集以仅包含满足指定条件的记录

SQL CREATE TABLE 关键字

CREATE TABLE

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;

SQL CREATE PROCEDURE 关键字

CREATE PROCEDURE

CREATE PROCEDURE命令用于创建存储过程。

存储过程是可以保存的准备好的 SQL 代码,因此代码可以反复重用。

以下 SQL 创建一个名为"SelectAllCustomers"的存储过程,该过程从"Customers"表中选择所有记录:

【实例】

CREATE PROCEDURE SelectAllCustomers
AS
SELECT * FROM Customers
GO;

执行上面的存储过程如下:

【实例】

EXEC SelectAllCustomers;

SQL CREATE UNIQUE INDEX 关键字

CREATE UNIQUE INDEX

CREATE UNIQUE INDEX 命令在表上创建唯一索引(不允许重复值)

索引用于非常快速地从数据库中检索数据。 用户看不到索引,它们只是用来加速搜索/查询。

以下 SQL 在 "Persons" 表的 "PersonID" 列上创建一个名为 "uidx_pid" 的索引:

CREATE UNIQUE INDEX uidx_pid
ON Persons (PersonID);

注: 创建索引的语法因数据库而异。 因此:检查在数据库中创建索引的语法。 使用索引更新表比不更新表需要更多时间(因为索引也需要更新)。 因此,仅在将经常搜索的列上创建索引。

SQL CREATE VIEW 关键字

CREATE VIEW

CREATE VIEW 命令创建一个视图。

视图是基于 SQL 语句结果集的虚拟表。

以下 SQL 创建一个视图,用于选择来自巴西的所有客户:

【实例】

CREATE VIEW [Brazil Customers] AS
SELECT CustomerName, ContactName
FROM Customers
WHERE Country = "Brazil";

查询视图

我们可以这样查询上面的视图:

【实例】

SELECT * FROM [Brazil Customers];

SQL DATABASE 关键字

CREATE DATABASE

CREATE DATABASE命令用来创建一个新的SQL数据库。

以下 SQL 创建一个名为 "testDB" 的数据库:

【实例】

CREATE DATABASE testDB;

注: 在创建任何数据库之前,请确保您拥有管理员权限。 创建数据库后,您可以使用以下 SQL 命令在数据库列表中检查它:SHOW DATABASES;

删除数据库

DROP DATABASE命令用于删除已有的SQL数据库。

以下 SQL 删除了一个名为 "testDB" 的数据库:

【实例】

DROP DATABASE testDB;

注:在删除数据库之前要小心。 删除数据库将导致数据库中存储的完整信息丢失!

SQL DEFAULT 关键字

DEFAULT

DEFAULT 约束为列提供默认值。

如果没有指定其他值,默认值将添加到所有新记录中。

创建表时的 SQL 默认值

以下 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()
);

ALTER TABLE 上的 SQL 默认值

要在已创建表时在 "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;

SQL DELETE 关键字

DELETE

DELETE命令用于删除表中已有的记录。

以下 SQL 语句从"客户"表中删除客户"Alfreds Futterkiste":

【实例】

DELETE FROM Customers WHERE CustomerName='Alfreds Futterkiste';

注:删除表中的记录时要小心! 请注意 DELETE 语句中的 WHERE 子句。 WHERE 子句指定应该删除哪些记录。 如果省略 WHERE 子句,表中的所有记录都会被删除!

可以在不删除表的情况下删除表中的所有行。 这意味着表结构、属性和索引将保持不变:

以下 SQL 语句删除 "Customers" 表中的所有行,但不删除该表。 这意味着表结构、属性和索引将保持不变:

【实例】

DELETE FROM Customers;

SQL DESC 关键字

DESC

DESC命令用于对返回的数据进行降序排序。

以下 SQL 语句选择 "Customers" 表中的所有列,按 "CustomerName" 列降序排序:

【实例】

SELECT * FROM Customers
ORDER BY CustomerName DESC;

SQL SELECT DISTINCT 关键字

SELECT DISTINCT

SELECT DISTINCT 命令仅返回结果集中不同(不同)的值。

以下 SQL 语句仅从"Customers"表的"Country"列中选择 DISTINCT 值:

【实例】

SELECT DISTINCT Country FROM Customers;

SQL DROP 关键字

DROP COLUMN

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 约束

要删除 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

DROP TABLE 命令删除数据库中的一个表。

以下SQL删除表 "Shippers":

【实例】

DROP TABLE Shippers;

注:在删除表之前要小心。 删除表会导致表中存储的所有信息丢失!

TRUNCATE TABLE

TRUNCATE TABLE 命令删除表内的数据,但不删除表本身。

以下 SQL 截断表 "Categories":

【实例】

TRUNCATE TABLE Categories;

删除视图

DROP VIEW 命令删除视图。

以下 SQL 删除 "Brazil Customers" 视图:

【实例】

DROP VIEW [Brazil Customers];

SQL EXEC 关键字

EXEC

EXEC命令用于执行存储过程。

以下 SQL 执行名为"SelectAllCustomers"的存储过程:

【实例】

EXEC SelectAllCustomers;

SQL EXISTS 关键字

EXISTS

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);

SQL FOREIGN KEY 关键字

FOREIGN KEY

FOREIGN KEY 约束是用于将两个表链接在一起的键。

FOREIGN KEY 是一个表中的一个字段(或字段集合),它引用另一个表中的 PRIMARY KEY。

SQL FOREIGN KEY on CREATE TABLE

以下 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)
);

SQL FOREIGN KEY on ALTER TABLE

要在 "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);

DROP a FOREIGN KEY Constraint

要删除 FOREIGN KEY 约束,请使用以下 SQL:

【MySQL】

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

【SQL Server / Oracle / MS Access】

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;

SQL FROM 关键字

FROM

FROM 命令用于指定从哪个表中选择或删除数据。

以下 SQL 语句从"客户"表中选择"客户名称"和"城市"列:

【实例】

SELECT CustomerName, City FROM Customers;

以下 SQL 语句从"客户"表中选择所有列:

【实例】

SELECT * FROM Customers;

以下 SQL 语句从"客户"表中删除客户"Alfreds Futterkiste":

【实例】

DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste';

SQL FULL OUTER JOIN 关键字

FULL OUTER JOIN

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 关键字返回左表(客户)中的所有行,以及右表中的所有行 表(订单)。 如果"客户"中有行与"订单"不匹配,或者"订单"中有行与"客户"不匹配,这些行也会被列出。

SQL GROUP BY 关键字

GROUP BY

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;

SQL HAVING 关键字

HAVING

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;

SQL IN 关键字

IN

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);

SQL INDEX 关键字

CREATE INDEX

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;

SQL INNER JOIN 关键字

INNER JOIN

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);

你可能感兴趣的:(SQL系列教程,SQL,教程,资料,笔记)