0|0 什么是 SQL?

  • SQL 指结构化查询语言
  • SQL 使我们有能力访问数据库
  • SQL 是用于访问和处理数据库的标准的计算机语言。

SQL 是一种标准 - 但是…不幸地是,存在着很多不同版本的 SQL 语言

比如 MS SQL Server、Oracle 以及其他数据库系统为了与 ANSI 标准相兼容,它们必须以相似的方式共同地来支持一些主要的关键词(比如 SELECT、UPDATE、DELETE、INSERT、WHERE 等等)大多拥有它们自己的私有扩展!


在您的网站中使用 SQL

要创建发布数据库中数据的网站,您需要以下要素:

  • RDBMS 数据库程序(比如 SQL Server, MySQL)
  • 服务器端脚本语言(比如 PHP 或 ASP)
  • SQL
  • HTML / CSS

RDBMS

RDBMS 指的是关系型数据库管理系统。

RDBMS 是 SQL 的基础,同样也是所有现代数据库系统的基础,比如 MS SQL Server, IBM DB2, Oracle, MySQL 以及 Microsoft Access。

RDBMS 中的数据存储在被称为(tables)的数据库对象中。

表是相关的数据项的集合,它由组成。


数据库表

一个数据库通常包含一个个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录()。

下面的例子是一个名为 “Persons“的表:

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

上面的表包含三条记录(每一条对应一个人)和五个列(Id、姓、名、地址和城市)。


SQL 语句

在数据库上执行的大部分工作都由 SQL 语句完成。

下面的语句从表中选取 LastName 列的数据:

SELECT LastName FROM Persons 

结果集类似这样:

LastName
Adams
Bush
Carter

在本教程中,我们将为您讲解各种不同的 SQL 语句。


重要事项

一定要记住,SQL 对大小写不敏感

SQL 语句后面的分号?

如果您使用的是 MS Access 和 SQL Server 2000,则不必在每条 SQL 语句之后使用分号,不过某些数据库软件要求必须使用分号。


0|1 SQL DML 和 DDL

可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

1|1 SQL (结构化查询语言)是用于执行查询的语法。

但是 SQL 语言也包含用于更新、插入和删除记录的语法。

查询和更新指令构成了 SQL 的 DML 部分:

  • SELECT - 从数据库表中获取数据
  • UPDATE - 更新数据库表中的数据
  • DELETE - 从数据库表中删除数据
  • INSERT INTO - 向数据库表中插入数据

2|0 SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。

我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

2|1

  • CREATE DATABASE - 创建新数据库

例如我要创建一个名为 “my_db“ 的数据库:

1
CREATE DATABASE my_db;

2|2

  • ALTER DATABASE - 修改数据库

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

表中添加列,请使用下面的语法:

1
2
ALTER TABLE table_name
ADD column_name datatype

如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):

1
2
ALTER TABLE table_name
DROP COLUMN column_name

要改变表中列的数据类型,请使用下面的语法:

SQL Server / MS Access:

1
2
ALTER TABLE table_name
ALTER COLUMN column_name datatype

My SQL / Oracle:

1
2
ALTER TABLE table_name
MODIFY COLUMN column_name datatype

Oracle 10G 之后版本:

1
2
ALTER TABLE table_name
MODIFY column_name datatype;

SQL ALTER TABLE 实例

请看 “Persons“ 表:

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

现在,我们想在 “Persons“ 表中添加一个名为 “DateOfBirth” 的列。

我们使用下面的 SQL 语句:

1
2
ALTER TABLE Persons
ADD DateOfBirth date

请注意,新列 “DateOfBirth” 的类型是 date,可以存放日期。数据类型规定列中可以存放的数据的类型。

现在,”Persons“ 表将如下所示:

P_Id LastName FirstName Address City DateOfBirth
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

改变数据类型实例

现在,我们想要改变 “Persons“ 表中 “DateOfBirth” 列的数据类型。

可以使用下面的 SQL 语句:

1
2
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year

请注意,现在 “DateOfBirth” 列的类型是 year,可以存放 2 位或 4 位格式的年份。


DROP COLUMN 实例

接下来,我们想要删除 “Person“ 表中的 “DateOfBirth” 列。

我们使用下面的 SQL 语句:

1
2
ALTER TABLE Persons
DROP COLUMN DateOfBirth

现在,”Persons“ 表将如下所示:

P_Id LastName FirstName Address City
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
  • CREATE TABLE - 创建新表

2|3

SQL CREATE TABLE 语法

1
2
3
4
5
6
7
CREATE TABLE 表名称
(
列名称1 数据类型,
列名称2 数据类型,
列名称3 数据类型,
....
)

数据类型(data_type)规定了列可容纳何种数据类型。下面的表格包含了SQL中最常用的数据类型:

数据类型 描述

  • integer(size)

  • int(size)

  • smallint(size)

  • tinyint(size)

仅容纳整数。在括号内规定数字的最大位数。

  • decimal(size,d)

  • numeric(size,d)

容纳带有小数的数字。


“size” 规定数字的最大位数。”d” 规定小数点右侧的最大位数。
char(size) 容纳固定长度的字符串(可容纳字母、数字以及特殊字符)。


在括号中规定字符串的长度。
varchar(size) 容纳可变长度的字符串(可容纳字母、数字以及特殊的字符)。


在括号中规定字符串的最大长度。
date(yyyymmdd) 容纳日期。

SQL CREATE TABLE 实例

本例演示如何创建名为 “Person“ 的表。

该表包含 5 个列,列名分别是:”Id_P”、”LastName”、”FirstName”、”Address” 以及 “City”:

1
2
3
4
5
6
7
8
CREATE TABLE Persons
(
Id_P int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

Id_P 列的数据类型是 int,包含整数。其余 4 列的数据类型是 varchar,最大长度为 255 个字符。

空的 “Persons“ 表类似这样:

Id_P LastName FirstName Address City

可使用 INSERT INTO 语句向空表写入数据。

2|4

  • ALTER TABLE - 变更(改变)数据库表

2|5

  • DROP TABLE - 删除表

2|6

  • CREATE INDEX - 创建索引(搜索键)

在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。

索引

您可以在表中创建索引,以便更加快速高效地查询数据。

用户无法看到索引,它们只能被用来加速搜索/查询。

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

SQL CREATE INDEX 语法

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

1
2
CREATE INDEX index_name
ON table_name (column_name)

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

SQL CREATE UNIQUE INDEX 语法

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

1
2
CREATE UNIQUE INDEX index_name
ON table_name (column_name)

CREATE INDEX 实例

本例会创建一个简单的索引,名为 “Index_Pers”,在 Person 表的 LastName 列:

1
2
CREATE INDEX Index_Pers
ON Person (LastName)

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

1
2
CREATE INDEX Index_Pers
ON Person (LastName DESC)

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

1
2
CREATE INDEX Index_Pers
ON Person (LastName, FirstName)

2|7

  • DROP INDEX - 删除索引

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


通过使用 DROP 语句,可以轻松地删除索引、表和数据库。


DROP INDEX 语句

DROP INDEX 语句用于删除表中的索引。

用于 MS Access 的 DROP INDEX 语法:

1
DROP INDEX index_name ON table_name

用于 MS SQL Server 的 DROP INDEX 语法:

1
DROP INDEX table_name.index_name

用于 DB2/Oracle 的 DROP INDEX 语法:

1
DROP INDEX index_name

用于 MySQL 的 DROP INDEX 语法:

1
ALTER TABLE table_name DROP INDEX index_name

DROP TABLE 语句

DROP TABLE 语句用于删除表。

1
DROP TABLE table_name

DROP DATABASE 语句

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

1
DROP DATABASE database_name

TRUNCATE TABLE 语句

如果我们仅仅需要删除表内的数据,但并不删除表本身,那么我们该如何做呢?

请使用 TRUNCATE TABLE 语句:

1
TRUNCATE TABLE table_name