SQL学习

152 阅读6分钟

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 关键字。

CompanyOrderNumber
IBM3532
Apple4698

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

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 语句用于修改表中的数据。

更新某一行中的一个列

UPDATESET 列 = 新值 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'