SQL世界之命令语句Ⅴ

目录

一、SQL CREATE INDEX 语句

1.SQL CREATE INDEX 语句

2.SQL CREATE INDEX 语法

3.SQL CREATE UNIQUE INDEX 语法

4.SQL CREATE INDEX 实例

二、SQL 撤销索引、表以及数据库

1.SQL DROP INDEX 语句

2.SQL DROP TABLE 语句

3.SQL DROP DATABASE 语句

4.SQL TRUNCATE TABLE 语句

三、SQL ALTER TABLE 语句

1.ALTER TABLE 语句

2.SQL ALTER TABLE 语法

3.SQL ALTER TABLE 实例

4.DROP COLUMN 实例

四、SQL AUTO INCREMENT 字段

1.AUTO INCREMENT 字段

2.用于 MySQL 的语法

3.用于 SQL Server 的语法

4.用于 Access 的语法

5.用于 Oracle 的语法

五、SQL VIEW(视图)

1.SQL CREATE VIEW 语句

2.SQL CREATE VIEW 语法

3.SQL CREATE VIEW 实例

4.SQL 更新视图

5.SQL 撤销视图

六、SQL NULL 值

1.SQL NULL 值

2.SQL 的 NULL 值处理

1.SQL IS NULL

2.SQL IS NOT NULL


一、SQL CREATE INDEX 语句

1.SQL CREATE INDEX 语句

CREATE INDEX 语句用于在表中创建索引,在不读取整个表的情况下,使数据库应用程序可以更快地查找数据。

索引只能被用来加速搜索/查询,不能被用户看到。

注:更新一个包含索引的表需要比更新一个没有索引的表更多的时间,这是由于索引本身也需要更新。理想的做法是仅在常被搜索的列(以及表)上面创建索引。

2.SQL CREATE INDEX 语法

在表上创建一个简单的索引(允许使用重复的值):

CREATE INDEX index_name

ON table_name (column_name)

注:"column_name" 规定需要索引的列。

3.SQL CREATE UNIQUE INDEX 语法

在表上创建一个唯一的索引(唯一的索引意味着两个行不能拥有相同的索引值):

CREATE UNIQUE INDEX index_name

ON table_name (column_name)

4.SQL CREATE INDEX 实例

创建一个简单的索引,名为 "Index_Pers",在 Person 表的 LastName 列:

CREATE INDEX Index_Pers

ON Person (LastName)

以降序索引某个列中的值,可以在列名称之后添加保留字 DESC:

CREATE INDEX Index_Pers

ON Person (LastName DESC)

索引不止一个列,可以在括号中列出这些列的名称,并用逗号隔开:

CREATE INDEX Index_Pers

ON Person (LastName, FirstName)

二、SQL 撤销索引、表以及数据库

1.SQL DROP INDEX 语句

使用 DROP INDEX 命令删除表格中的索引。

①用于 Microsoft SQLJet (以及 Microsoft Access) 的语法:

DROP INDEX index_name ON table_name

②用于 MS SQL Server 的语法:

DROP INDEX table_name.index_name

③用于 IBM DB2 和 Oracle 语法:

DROP INDEX index_name

④用于 MySQL 的语法:

ALTER TABLE table_name DROP INDEX index_name

2.SQL DROP TABLE 语句

DROP TABLE 语句用于删除表(表的结构、属性以及索引也会被删除):

DROP TABLE 表名称

3.SQL DROP DATABASE 语句

DROP DATABASE 语句用于删除数据库:

DROP DATABASE 数据库名称

4.SQL TRUNCATE TABLE 语句

使用 TRUNCATE TABLE 命令仅删除表格中的数据,但并不删除表本身:

TRUNCATE TABLE 表名称

三、SQL ALTER TABLE 语句

1.ALTER TABLE 语句

ALTER TABLE 语句用于在已有的表中添加、修改或删除列。

2.SQL ALTER TABLE 语法

在表中添加列:

ALTER TABLE table_name

ADD column_name datatype

删除表中的列:

ALTER TABLE table_name

DROP COLUMN column_name

注:某些数据库系统不允许这种在数据库表中删除列的方式 (DROP COLUMN column_name)。

改变表中列的数据类型:

ALTER TABLE table_name

ALTER COLUMN column_name datatype

Persons 表:

Id

LastName

FirstName

Address

City

001

Aam

Joh

Oxd Street

London

002

Buh

Grge

Fifth Aue

New York

003

Car

Tmas

Can Street

Beijing

3.SQL ALTER TABLE 实例

在表 "Persons" 中添加一个名为 "Birthday" 的新列:

ALTER TABLE Persons

ADD Birthday date

注:新列 "Birthday" 的类型是 date,可以存放日期。

新"Persons" 表:

Id

LastName

FirstName

Address

City

Birthday

001

Aam

Joh

Oxd Street

London

002

Buh

Grge

Fifth Aue

New York

003

Car

Tmas

Can Street

Beijing

改变 "Persons" 表中 "Birthday" 列的数据类型:

ALTER TABLE Persons

ALTER COLUMN Birthday year

注:"Birthday" 列的数据类型是 year,可以存放 2 位或 4 位格式的年份。

4.DROP COLUMN 实例

删除 "Person" 表中的 "Birthday" 列:

ALTER TABLE Person

DROP COLUMN Birthday

Persons 表:

Id

LastName

FirstName

Address

City

001

Aam

Joh

Oxd Street

London

002

Buh

Grge

Fifth Aue

New York

003

Car

Tmas

Can Street

Beijing

四、SQL AUTO INCREMENT 字段

1.AUTO INCREMENT 字段

Auto-increment 会在新记录插入表中时生成一个唯一的数字。

2.用于 MySQL 的语法

把 "Persons" 表中的 "P_Id" 列定义为 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)

)

MySQL 使用 AUTO_INCREMENT 关键字来执行 auto-increment 任务。

默认地,AUTO_INCREMENT 的开始值是 1,每条新记录递增 1。

AUTO_INCREMENT 序列以其他的值起始:

ALTER TABLE Persons AUTO_INCREMENT=100

在 "Persons" 表中插入新记录,不必为 "P_Id" 列规定值(会自动添加一个唯一的值):

INSERT INTO Persons (FirstName,LastName)

VALUES ('Bill','Gates')

上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 会被赋予一个唯一的值。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。

3.用于 SQL Server 的语法

把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:

CREATE TABLE Persons

(

P_Id int PRIMARY KEY IDENTITY,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

MS SQL 使用 IDENTITY 关键字来执行 auto-increment 任务。

默认地,IDENTITY 的开始值是 1,每条新记录递增 1。

要规定 "P_Id" 列以 10 起始且递增 1,请把 identity 改为 IDENTITY(10,1)

在 "Persons" 表中插入新记录,不必为 "P_Id" 列规定值(会自动添加一个唯一的值):

INSERT INTO Persons (FirstName,LastName)

VALUES ('Bill','Gates')

上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 会被赋予一个唯一的值。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。

4.用于 Access 的语法

把 "Persons" 表中的 "P_Id" 列定义为 auto-increment 主键:

CREATE TABLE Persons

(

P_Id int PRIMARY KEY AUTOINCREMENT,

LastName varchar(255) NOT NULL,

FirstName varchar(255),

Address varchar(255),

City varchar(255)

)

MS Access 使用 AUTOINCREMENT 关键字来执行 auto-increment 任务。

默认地,AUTOINCREMENT 的开始值是 1,每条新记录递增 1。

要规定 "P_Id" 列以 10 起始且递增 1,请把 autoincrement 改为 AUTOINCREMENT(10,1)

在 "Persons" 表中插入新记录,不必为 "P_Id" 列规定值(会自动添加一个唯一的值):

INSERT INTO Persons (FirstName,LastName)

VALUES ('Bill','Gates')

上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 会被赋予一个唯一的值。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。

5.用于 Oracle 的语法

在 Oracle 中,代码稍微复杂一点。通过 sequence 对创建 auto-increment 字段(该对象生成数字序列)。

使用 CREATE SEQUENCE 语法:

CREATE SEQUENCE seq_person

MINVALUE 1

START WITH 1

INCREMENT BY 1

CACHE 10

上面的代码创建名为 seq_person 的序列对象,它以 1 起始且以 1 递增。该对象缓存 10 个值以提高性能。CACHE 选项规定了为了提高访问速度要存储多少个序列值。

在 "Persons" 表中插入新记录,必须使用 nextval 函数(该函数从 seq_person 序列中取回下一个值):

INSERT INTO Persons (P_Id,FirstName,LastName)

VALUES (seq_person.nextval,'Lars','Monsen')

上面的 SQL 语句会在 "Persons" 表中插入一条新记录。"P_Id" 的赋值是来自 seq_person 序列的下一个数字。"FirstName" 会被设置为 "Bill","LastName" 列会被设置为 "Gates"。

五、SQL VIEW(视图)

1.SQL CREATE VIEW 语句

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

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

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

2.SQL CREATE VIEW 语法

CREATE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE condition

注:视图总是显示最近的数据。每当用户查询视图时,数据库引擎通过使用 SQL 语句来重建数据。

3.SQL CREATE VIEW 实例

可以从某个查询内部、某个存储过程内部,或者从另一个视图内部来使用视图。

通过向视图添加函数、join 等,可以向用户精确地提交希望提交的数据。

样本数据库 Northwind 拥有一些被默认安装的视图。视图 "Current Product List" 会从 Products 表列出所有正在使用的产品:

CREATE VIEW [Current Product List] AS

SELECT ProductID,ProductName

FROM Products

WHERE Discontinued=No

查询上面这个视图:

SELECT * FROM [Current Product List]

Northwind 样本数据库的另一个视图会选取 Products 表中所有单位价格高于平均单位价格的产品:

CREATE VIEW [Products Above Average Price] AS

SELECT ProductName,UnitPrice

FROM Products

WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)

查询上面这个视图:

SELECT * FROM [Products Above Average Price]

另一个来自 Northwind 数据库的视图实例会计算在 1997 年每个种类的销售总数。请注意,这个视图会从另一个名为 "Product Sales for 1997" 的视图那里选取数据:

CREATE VIEW [Category Sales For 1997] AS

SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales

FROM [Product Sales for 1997]

GROUP BY CategoryName

查询上面这个视图:

SELECT * FROM [Category Sales For 1997]

可以向查询添加条件。仅需要查看 "Beverages" 类的全部销量:

SELECT * FROM [Category Sales For 1997]

WHERE CategoryName='Beverages'

4.SQL 更新视图

更新视图:

SQL CREATE OR REPLACE VIEW Syntax

CREATE OR REPLACE VIEW view_name AS

SELECT column_name(s)

FROM table_name

WHERE condition

向 "Current Product List" 视图添加 "Category" 列:

CREATE VIEW [Current Product List] AS

SELECT ProductID,ProductName,Category

FROM Products

WHERE Discontinued=No

5.SQL 撤销视图

通过 DROP VIEW 命令来删除视图。

DROP VIEW view_name

六、SQL NULL 值

1.SQL NULL 值

如果表中的某个列是可选的,那么可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。

注:无法比较 NULL 和 0,因为它们是不等价的。

默认地,表的列可以存放 NULL 值。

NULL 值是遗漏的未知数据。

NULL 值的处理方式与其他值不同。

NULL 用作未知的或不适用的值的占位符。

2.SQL 的 NULL 值处理

"Persons" 表:

Id

LastName

FirstName

Address

City

001

Aam

Joh

London

002

Buh

Grge

Fifth Aue

New York

003

Car

Tmas

Beijing

假如 "Persons" 表中的 "Address" 列是可选的。这意味着如果在 "Address" 列插入一条不带值的记录,"Address" 列会使用 NULL 值保存。

使用 IS NULL 和 IS NOT NULL 操作符来测试 NULL 值,不能使用比较运算符来测试 NULL 值,比如 =, <, 或者 <>。

1.SQL IS NULL

仅选取在 "Address" 列中带有 NULL 值的记录,必须使用 IS NULL 操作符:

SELECT LastName,FirstName,Address FROM Persons

WHERE Address IS NULL

结果集:

LastName

FirstName

Address

Aam

Joh

Car

Tmas

注:请始终使用 IS NULL 来查找 NULL 值。

2.SQL IS NOT NULL

在 "Address" 列中不带有 NULL 值的记录,必须使用 IS NOT NULL 操作符:

SELECT LastName,FirstName,Address FROM Persons

WHERE Address IS NOT NULL

结果集:

LastName

FirstName

Address

Buh

Grge

Fifth Aue

你可能感兴趣的:(SQL,sql,数据库,笔记,经验分享)