MYSQL入门 - 基础语法

SQL 是用于访问和处理数据库的标准的计算机语言。

如果需要在网站或 APP 中创建或使用数据库,需要具备以下几点:

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

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 语句完成。SQL 包括两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。

SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。

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

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

SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。

SQL 中最重要的 DDL 语句:

  • CREATE DATABASE - 创建新数据库
  • ALTER DATABASE - 修改数据库
  • CREATE TABLE - 创建新表
  • ALTER TABLE - 变更(改变)数据库表
  • DROP TABLE - 删除表
  • CREATE INDEX - 创建索引(搜索键)
  • DROP INDEX - 删除索引

SQL SELECT 语句

SELECT 语句用于从表中选取数据。结果被存储在一个结果表中(称为结果集)。它的语法如下:

1
SELECT 列名称 FROM 表名称
1
SELECT * FROM 表名称

示例如下:

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

获取名为 “LastName” 和 “FirstName” 的列的内容:

1
SELECT LastName,FirstName FROM Persons

结果如下:

LastName FirstName
Adams John
Bush George
Carter Thomas

选取表中所有的列,可使用符号 * 取代列的名称:

1
SELECT * FROM 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

SQL SELECT DISTINCT 语句

在表中,可能会包含重复值。如果希望仅仅列出不同(distinct)的值。可以使用关键词 DISTINCT ,它用于返回唯一不同的值。其语法如下:

1
SELECT DISTINCT 列名称 FROM 表名称

示例如下:

Orders 表:

Company OrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953

如需从 Company” 列中仅选取唯一不同的值:

1
SELECT DISTINCT Company FROM Orders

结果如下:

Company
IBM
W3School
Apple

现在,在结果集中,”W3School” 仅被列出了一次。

SQL WHERE 子句

WHERE 子句用于规定选择的标准,如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。其语法如下:

1
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值

WHERE 子句中支持的运算符有:

运算符 描述
= 等于
<> OR != 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式

示例如下:

Persons 表

LastName FirstName Address City Year
Adams John Oxford Street London 1970
Bush George Fifth Avenue New York 1975
Carter Thomas Changan Street Beijing 1980
Gates Bill Xuanwumen 10 Beijing 1985

如果希望选取居住在城市 “Beijing” 中的人,那么需要向 SELECT 语句添加 WHERE 子句:

1
SELECT * FROM Persons WHERE City='Beijing'

结果如下:

LastName FirstName Address City Year
Carter Thomas Changan Street Beijing 1980
Gates Bill Xuanwumen 10 Beijing 1985

SQL AND & OR 运算符

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
如果第一个条件和第二个条件都成立,则 AND 运算符显示一条记录。
如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示一条记录。

示例如下:

Persons 表

LastName FirstName Address City
Adams John Oxford Street London
Bush George Fifth Avenue New York
Carter Thomas Changan Street Beijing
Carter William Xuanwumen 10 Beijing

使用 AND 来显示所有姓为 “Carter” 并且名为 “Thomas” 的人:

1
SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'

结果如下:

LastName FirstName Address City
Carter Thomas Changan Street Beijing

使用 OR 来显示所有姓为 “Carter” 或者名为 “Thomas” 的人:

1
SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'

结果如下:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Carter William Xuanwumen 10 Beijing

综合使用 AND 和 OR,显示所有名为 “Thomas” 或者名为 “William” ,并且的姓为 “Carter” 的人:

1
2
SELECT * FROM Persons WHERE (FirstName='Thomas' OR FirstName='William')
AND LastName='Carter'

结果如下:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Carter William Xuanwumen 10 Beijing

SQL ORDER BY 子句

ORDER BY 语句用于根据指定的列对结果集进行排序。默认的排序方式是升序。如果希望按照降序对记录进行排序,可以使用 DESC 关键字。

示例如下:

Orders 表:

Company OrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953

以字母顺序显示公司名称:

1
SELECT Company, OrderNumber FROM Orders ORDER BY Company

结果如下:

Company OrderNumber
Apple 4698
IBM 3532
W3School 6953
W3School 2356

以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):

1
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

结果如下:

Company OrderNumber
Apple 4698
IBM 3532
W3School 2356
W3School 6953

以逆字母顺序显示公司名称:

1
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

结果如下:

Company OrderNumber
W3School 6953
W3School 2356
IBM 3532
Apple 4698

以逆字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):

1
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC

结果如下:

Company OrderNumber
W3School 2356
W3School 6953
IBM 3532
Apple 4698

SQL INSERT INTO 语句

INSERT INTO 语句用于向表格中插入新的行,它的语法如下:

1
INSERT INTO 表名称 VALUES (值1, 值2,....)
1
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)

示例如下:

Persons 表:

LastName FirstName Address City
Carter Thomas Changan Street Beijing

插入一行数据:

1
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen', 'Beijing')

结果如下:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen Beijing

在指定的列中插入数据:

1
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

结果如下:

LastName FirstName Address City
Carter Thomas Changan Street Beijing
Gates Bill Xuanwumen 10 Beijing
Wilson Champs-Elysees

UPDATE 语句

Update 语句用于修改表中的数据,它的语法如下:

1
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

示例如下:

Person 表:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Champs-Elysees

更新某一行中的一个列,为 “Wilson” 行添加 “firstname” 列的值:

1
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'

结果如下:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Fred Champs-Elysees

更新某一行中的若干列,为 “Wilson” 行更新地址(address),并添加城市名称(city):

1
2
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing'
WHERE LastName = 'Wilson'

结果如下:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Fred Zhongshan 23 Nanjing

SQL DELETE 语句

DELETE 语句用于删除表中的行,它的语法如下:

1
DELETE FROM 表名称 WHERE 列名称 = 值

Person 表:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing
Wilson Fred Zhongshan 23 Nanjing

删除 “Wilson” 行:

1
DELETE FROM Person WHERE LastName = 'Wilson'

结果如下:

LastName FirstName Address City
Gates Bill Xuanwumen 10 Beijing

在不删除表的前提下删除所有的行,这时表的结构、属性和索引都是完整的:

1
2
DELETE FROM Person
DELETE * FROM Person