13
2020
10

SQL语句

SQL 是用于访问和处理数据库的标准的计算机语言,这类数据库包括:Oracle, Sybase, SQL Server, DB2, Access 等

SQL 指结构化查询语言,访问数据库,面向数据库执行查询从数据库取回数据,数据库中插入新的记录,更新数据库中的数据从数据库删除记录,创建新数据库,在数据库中创建新表,在数据库中创建存储过程,在数据库中创建视图,设置表、存储过程和视图的权限

RDBMS 指的是关系型数据库管理系统,RDBMS 中的数据存储在被称为表(tables)的数据库对象中

数据库表是相关的数据项的集合,它由列和行组成一个数据库通常包含一个或多个表。每个表由一个名字标识(例如“客户”或者“订单”)。表包含带有数据的记录(行)

blob.png

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

SQL语句

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

语句:SELECT LastName FROM Persons查获上表 LastName 列的数据

SQL语句后的分号:分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就

可以在对服务器的相同请求中执行一条以上的语句

SQL DML和DDL

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

SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、

插入和删除记录的语法

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

SELECT - 从数据库表中获取数据

UPDATE - 更新数据库表中的数据

DELETE - 从数据库表中删除数据

INSERT INTO - 向数据库表中插入数据

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

SQL 中最重要的 DDL 语句:

CREATE DATABASE - 创建新数据库

ALTER DATABASE - 修改数据库

u - 创建新表

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

DROP TABLE - 删除表u

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

DROP INDEX - 删除索引

SQL SELECT 语句和 SELECT * 语句

SELECT 语句用于从表中选取数据,结果被存储在一个结果表中(称为结果集)

SELECT 列名称 FROM 表名称或者 SELECT * FROM 表名称

SQL 语句对大小写不敏感。SELECT 等效于 select

实例:在上表中获取名为"LastName" 和 "FirstName" 的列的内容从

名为“persons”的数据库表:

SELECT LastName,FirstName FROM Persons

获取 persons表中LastName,FirstName 两列的内容

如果要从persons表中获取所有的列,使用*号代替:SELECT * FROM Persons

*是选取所有列的快捷方式

SQL SELECT DISTINCT 语句

关键词 DISTINCT 用于返回唯一不同的值   语法:SELECT DISTINCT 列名称 FROM 表名称;

blob.png

我们将上表取名为orders表

如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句:

SELECT DISTINCT Company FROM Orders  从orders表中获取company列中前三个值

blob.png

SQL WHERE子句

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句

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


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

上面的运算符可在 WHERE 子句中使用:


使用WHERE 子句    SELECT * FROM Persons WHERE City='Beijing'

blob.png

选取"Persons" 表中city列带有Beijing的那一行

结果为:blob.png

使用WHERE句子中条件值周围使用的是单引号

SQL 使用单引号来环绕文本值(大部分数据库系统也接受双引号)。如果是数值,不要使用引号

文本值:SELECT * FROM Persons WHERE FirstName='Bush'  //正确的

SELECT * FROM Persons WHERE FirstName=Bush   //错误的

数值:SELECT * FROM Persons WHERE Year>1965  //正确的

SELECT * FROM Persons WHERE Year>'1965'    //错误的

SQL AND 和 OR 运算符

AND 和 OR 可在 WHERE 子语句中把两个或多个条件结合起来,如果第一个条件和第二个条件都成立,

则 AND 运算符显示一条记录,如果第一个条件和第二个条件中只要有一个成立,则 OR 运算符显示

一条记录。

原始表:

blob.png

在上述原始表中使用 AND 来显示所有姓为 "Carter" 并且名为 "Thomas" 的人

使用:sELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'

blob.png

使用OR运算符实例:使用 OR 来显示所有姓为 "Carter" 或者名为 "Thomas" 的人:

使用:SELECT * FROM Persons WHERE firstname='Thomas' OR lastname='Carter'

blob.png

结合 AND 和 OR 运算符

把 AND 和 OR 结合起来(使用圆括号来组成复杂的表达式):

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

blob.png

SQL ORDER 子句

先建立一个表,取名为orders

blob.png

ORDER BY 语句用于对结果集进行排序

1.以字母顺序显示公司名称:SELECT Company, OrderNumber FROM Orders ORDER BY Company

结果为:blob.png

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

SELECT Company, OrderNumber FROM Orders ORDER BY Company, OrderNumber

结果为:blob.png

3.以逆字母顺序显示公司名称:SELECT Company, OrderNumber FROM Orders ORDER BY Company DESC

结果:blob.png

4.以逆字母顺序显示公司名称,并以数字顺序显示顺序号:

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

blob.png

SQL INSERT INTO 语句

INSERT INTO 语句用于向表格中插入新的行

语法:INSERT INTO 表名称 VALUES (值1, 值2,....)

也可以指定所要插入数据的列:

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

blob.png

想上表中插入行:INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')

结果:blob.png

在指定的列中插入数据:INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')

blob.png

SQL  Update 语句

Update 语句用于修改表中的数据

语法:UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

建立一个表:

blob.png

更新某一行中的一个列,为上表中的为 lastname 是 "Wilson" 的人添加 firstname:

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

结果为: blob.png

更新某一行的若干列,修改地址(address),并添加城市名称(city):

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

结果:blob.png

SQL  DELETE 语句

DELETE 语句用于删除表中的行

语法:DELETE FROM 表名称 WHERE 列名称 = 值

删除上表中的”wilson“行

DELETE FROM Person WHERE LastName = 'Wilson'

结果为:

blob.png

删除所有行

可以在不删除表的情况下删除所有的行。可以使表的结构、属性和索引都是完整的:

DELETE FROM table_name或者DELETE * FROM table_name

SQL TOP子句

TOP 子句用于规定要返回的记录的数目对于拥有数千条记录的大型表来说,TOP 子句是非常有用的

但是并非所有的数据库系统都支持 TOP 子句

TOP 子句在SQL Server中的语法:SELECT TOP number|percent column_name(s) FROM table_name

在mysql的oracle中的 SQL SELECT TOP 是等价的

MySQL 语法:SELECT column_name(s) FROM table_name  LIMIT number

Oracle的语法:SELECT column_name(s) FROM table_name  WHERE ROWNUM <= number

建立一个persons表(用在例子中)

blob.png

通过SQL TOP来实现获取表中的头两条记录

使用SELECT 语句:SELECT TOP 2 * FROM Persons来获取表格的前两项

或者从表中选取50%的记录:SELECT TOP 50 PERCENT * FROM Persons

SQL LIKN操作符用于在 WHERE 子句中搜索列中的指定模式

语法:SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern

从上面的 "Persons" 表中选取居住在以 "N" 开始的城市里的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City LIKE 'N%'

语句中的"%" 可用于定义通配符(模式中缺少的字母)

结果集:blob.png

从 "Persons" 表中选取居住在以 "g" 结尾的城市里的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City LIKE '%g'

结果集:blob.png

从 "Persons" 表中选取居住在包含 "lon" 的城市里的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City LIKE '%lon%'

结果集:blob.png

以从 "Persons" 表中选取居住在不包含 "lon" 的城市里的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City NOT LIKE '%lon%'

结果集:blob.png

SQL 通配符

在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符,SQL 通配符必须与 LIKE 运算符一起使用。

使用 _ 通配符

从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE FirstName LIKE '_eorge'

结果集:blob.png

上面的 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er":

使用SELECT 语句:SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'

结果集:blob.png

使用 [charlist] 通配符

从上面的 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人:

使用SELECT 语句:SELECT * FROM Persons  WHERE City LIKE '[ALN]%'

结果集:blob.png

或者从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人:

使用SELECT 语句:SELECT * FROM Persons WHERE City LIKE '[!ALN]%'

SQL IN 操作符

IN 操作符允许我们在 WHERE 子句中规定多个值

SQL IN 语法:SELECT column_name(s) FROM table_name  WHERE column_name IN (value1,value2,...)

以上面的persons表为例,从上表中选取姓氏为 Adams 和 Carter 的人:

使用SELECT 语句:SELECSQL BETWEEN 语法T * FROM Persons  WHERE LastName IN ('Adams','Carter')

结果集:blob.png

SQL BETWEEN 操作符

BETWEEN 操作符在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围,这些值可以是数值、文本或者日期

SQL BETWEEN 语法:SELECT column_name(s)  FROM table_name WHERE column_name BETWEEN value1 AND value2

以上个Persons 表为例:想要以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人:

使用SELECT 语句:SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'

结果集:blob.png

注意:在例子中要求是以字母顺序显示介于 "Adams"和 "Carter"之间的人,但表中也显示了"Adams"

因为不同的数据库对 BETWEEN...AND 操作符的处理方式是有差异的。某些数据库会列出介于 "Adams" 和 "Carter" 之间的人,

但不包括 "Adams" 和 "Carter" ;某些数据库会列出介于 "Adams" 和 "Carter" 之间并包括 "Adams" 和 "Carter" 的人;

而另一些数据库会列出介于 "Adams" 和 "Carter" 之间的人,包括 "Adams" ,但不包括 "Carter"

以上个Persons 表为例:想要显示范围之外的人,使用 NOT 操作符:

使用SELECT 语句:SELECT * FROM Persons WHERE LastName   NOT BETWEEN 'Adams' AND 'Carter'

结果集为:blob.png

显示 'Adams' AND 'Carter'范围之外的人,但是在结果集中也包括'carter'

SQL Alias(别名)

通过使用 SQL,可以为列名称和表名称指定别名(Alias)

表的 SQL Alias 语法:SELECT column_name(s)  FROM table_name  AS alias_name

列的 SQL Alias 语法:SELECT column_name AS alias_name FROM table_name

以上个Persons 表为例:想要改变'LastName'为'Family' ,改'FirstName'为' Name'

使用SELECT 语句:SELECT LastName AS Family, FirstName AS NameFROM Persons

结果集:blob.png

« 上一篇

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。