SQL 是用于访问和处理数据库的标准的计算机语言。
简介
什么是 SQL?
- SQL 指结构化查询语言
- SQL 使我们有能力访问数据库
- SQL 是一种 ANSI 的标准计算机语言
SQL 能做什么?
- SQL 面向数据库执行查询
- SQL 可从数据库取回数据
- SQL 可在数据库中插入新的记录
- SQL 可更新数据库中的数据
- SQL 可从数据库删除记录
- SQL 可创建新数据库
- SQL 可在数据库中创建新表
- SQL 可在数据库中创建存储过程
- SQL 可在数据库中创建视图
- SQL 可以设置表、存储过程和视图的权限
语句
SQL 对大小写不敏感 !
SQL (结构化查询语言)是用于执行查询的语法,但是 SQL 语言也包含用于更新、插入和删除记录的语法。
结构化查询语言 (DML)。
SQL的数据操作语言 (DML)
查询和更新指令构成了 SQL 的 DML 部分:
- SELECT - 从数据库表中获取数据
- UPDATE - 更新数据库表中的数据
- DELETE - 从数据库表中删除数据
- INSERT INTO - 向数据库表中插入数据
数据定义语言 (DDL)。
SQL 的数据定义语言 (DDL) 部分使我们有能力创建或删除表格。我们也可以定义索引(键),规定表之间的链接,以及施加表间的约束。
- CREATE DATABASE - 创建新数据库
- ALTER DATABASE - 修改数据库
- CREATE TABLE - 创建新表
- ALTER TABLE - 变更(改变)数据库表
- DROP TABLE - 删除表
- CREATE INDEX - 创建索引(搜索键)
- DROP INDEX - 删除索引
SELECT 语句
SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)。
SELECT 列 FROM 表
例:
如需获取名为 "LastName" 和 "FirstName" 的列的内容(从名为 "Persons" 的数据库表),请使用类似这样的 SELECT 语句:
SELECT LastName,FirstName FROM Persons
SELECT * FROM 表
现在我们希望从 "Persons" 表中选取所有的列。
请使用符号 * 取代列的名称,就像这样: 星号(*)是选取所有列的快捷方式。
SELECT * FROM Persons
SELECT DISTINCT 语句
在表中,可能会包含重复值。
关键词 DISTINCT 用于返回唯一不同的值。
SELECT DISTINCT 列 FROM 表
WHERE 子句
如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句。
SELECT 列 FROM 表 WHERE 列 运算符 值
下面的运算符可在 WHERE 子句中使用:
| 操作符 | 描述 |
|---|---|
| = | 等于 |
| <> | 不等于 |
| 大于 | |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
| BETWEEN | 在某个范围内 |
| LIKE | 搜索某种模式 |
如果只希望选取居住在城市 "Beijing" 中的人,我们需要向 SELECT 语句添加 WHERE 子句:
SELECT * FROM Persons WHERE City='Beijing'
引号
文本值:
使用单引号来环绕文本值, (大部分数据库系统也接受双引号)。
这是正确的: SELECT * FROM Persons WHERE FirstName='Bush'
这是错误的: SELECT * FROM Persons WHERE FirstName=Bush
数值:
数值,不要使用引号。
这是正确的: SELECT * FROM Persons WHERE Year>1965
这是错误的: SELECT * FROM Persons WHERE Year>'1965'
AND & OR 运算符
AND 和 OR 运算符用于基于一个以上的条件对记录进行过滤。
AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来。
ORDER BY 子句
ORDER BY 语句用于对结果集进行排序, 根据指定的列对结果集进行排序。
ORDER BY 语句默认按照升序对记录进行排序。
如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。
| Company | OrderNumber |
|---|---|
| IBM | 3532 |
| Apple | 4698 |
以字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company
以字母顺序显示公司名称(Company),并以数字顺序显示顺序号(OrderNumber):
SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber
以逆字母顺序显示公司名称:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC
以逆字母顺序显示公司名称,并以数字顺序显示顺序号:
SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC, OrderNumber ASC
INSERT INTO 语句
INSERT INTO 语句用于向表格中插入新的行。
INSERT INTO 表 VALUES (值1, 值2,....)
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
我们也可以指定所要插入数据的列:
INSERT INTO 表(列1,列2) VALUES (值1, 值2,....)
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
UPDATE 语句
Update 语句用于修改表中的数据。
更新某一行中的一个列
UPDATE 表 SET 列 = 新值 WHERE 另一列 = 某值
我们为 lastname 是 "Wilson" 的人添加 firstname:
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
更新某一行中的若干列
我们会修改地址(address),并添加城市名称(city):
UPDATE Person SET Address = 'Zhongshan 23', City = 'Nanjing' WHERE LastName = 'Wilson'
DELETE 语句
DELETE 语句用于删除表中的行。
DELETE FROM 表 WHERE 列 = 值
DELETE FROM table_nameDELETE * FROM table_name
删除所有行
可以在不删除表的情况下删除所有的行。这意味着表的结构、属性和索引都是完整的:
DELETE FROM 表
或者:
DELETE * FROM 表
TOP 子句
SQL Server 语法:
TOP 子句用于规定要返回的记录的数目,对于大型表来说,TOP 子句是非常有用的。
注释:并非所有的数据库系统都支持 TOP 子句。
number
SELECT TOP number 列(s) FROM 表
例:
SELECT TOP 2 * FROM Persons
percent
SELECT TOP percent 列(s) FROM 表
例:
SELECT TOP 50 PERCENT * FROM Persons
MySQL 语法
SELECT column_name(s)
FROM 表
LIMIT number
例:
SELECT *
FROM Persons
LIMIT 5
Oracle 语法
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number
例子
SELECT *
FROM Persons
WHERE ROWNUM <= 5
LIKE
LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。
SELECT 列(s)
FROM 表
WHERE 列 LIKE pattern
SELECT * FROM Persons
WHERE City LIKE 'N%'
提示:"%" 可用于定义通配符(模式中缺少的字母)。
通配符
在搜索数据库中的数据时,可以使用 SQL 通配符,替代一个或多个字符。
SQL 通配符必须与 LIKE 运算符一起使用。
在 SQL 中,可使用以下通配符:
| 通配符 | 描述 |
|---|---|
| % | 代表零个或多个字符 |
| _ | 仅替代一个字符 |
| [charlist] | 字符列中的任何单一字符 |
| [^charlist]或者[!charlist] | 不在字符列中的任何 |
从 "Persons" 表中选取居住在包含 "lond" 的城市里的人:
SELECT * FROM Persons WHERE City LIKE '%lond%'
从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:
SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons WHERE City LIKE '[ALN]%'
我们希望从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
IN
IN 操作符允许我们在 WHERE 子句中规定多个值。
选取姓氏为 Adams 和 Carter 的人:
SELECT * FROM Persons WHERE LastName IN ('Adams','Carter')
BETWEEN
BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围。
操作符 BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。
SELECT 列(s)
FROM 表
WHERE 列
BETWEEN value1 AND value2
如需以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人,请使用下面的 SQL:
SELECT * FROM Persons
WHERE LastName
BETWEEN 'Adams' AND 'Carter'
如需使用上面的例子显示范围之外的人,请使用 NOT 操作符:
SELECT * FROM Persons
WHERE LastName
NOT BETWEEN 'Adams' AND 'Carter'
重要事项: 不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter" 。
Alias(别名)
通过使用 SQL,可以为列名称和表名称指定别名(Alias)。
表的 SQL Alias 语法
SELECT 列(s)
FROM 表
AS 别名
列的 SQL Alias 语法
SELECT column_name AS alias_name
FROM table_name
假设我们有两个表分别是:"Persons" 和 "Product_Orders"。我们分别为它们指定别名 "p" 和 "po"。
现在,我们希望列出 "John Adams" 的所有定单。
我们可以使用下面的 SELECT 语句:
SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'