SQL:修订间差异
无编辑摘要 |
无编辑摘要 |
||
第90行: | 第90行: | ||
{| class="wikitable" style="width: 100%; | {| class="wikitable" style="width: 100%; | ||
! 选取数据 | ! 选取数据 | ||
! | ! 语句 | ||
! 描述 | ! 描述 | ||
|- | |- | ||
| 选取单表所有数据 | | 选取单表所有数据 | ||
| SELECT * FROM 表名; | | '''SELECT * FROM''' 表名; | ||
| <code>*</code> 号为通配符 | | <code>*</code> 号为通配符 | ||
|- | |- | ||
| 选取单列数据 | | 选取单列数据 | ||
| SELECT 列名 FROM 表名; | | '''SELECT''' 列名 '''FROM''' 表名; | ||
| | | | ||
|- | |- | ||
| 选取多列数据 | | 选取多列数据 | ||
| SELECT 列名1, 列名2, 列名3 FROM 表名; | | '''SELECT''' 列名1, 列名2, 列名3 '''FROM''' 表名; | ||
| 列名用逗号隔开,最后一个列名不加逗号。 | | 列名用逗号隔开,最后一个列名不加逗号。 | ||
|- | |- | ||
| 别名 | | 别名 | ||
| SELECT 列名 as 别名 FROM 表名; | | '''SELECT''' 列名 '''as''' 别名 '''FROM''' 表名; | ||
| 将列名显示为其他名称 | | 将列名显示为其他名称 | ||
|- | |||
| 去除重复值 | |||
| '''SELECT DISTINCT''' 列名 '''FROM''' 表名; | |||
| 将该列中重复值去除 | |||
|- | |||
| 选取部分行 | |||
|'''SELECT * FROM''' 表名 '''LIMIT''' 开始行数,结束行数;<br \>'''SELECT * FROM''' 表名 '''LIMIT''' 行数; | |||
| LIMIT接收2个整数参数,其中开始行数默认为0,第二个语句是选取前几行的简写。 | |||
|- | |- | ||
|} | |} | ||
===排序=== | ===排序=== | ||
'''ORDER BY'''子句用于对一列或多列进行排序,两种排序方式: | |||
*升序,使用<code>ASC</code>关键字,默认方式,关键字可以省略 | |||
*降序,使用<code>DESC</code>关键字 | |||
== | {| class="wikitable" style="width: 100%; | ||
=== | ! 选取数据 | ||
! 语句 | |||
! 描述 | |||
|- | |||
| 升序排序 | |||
| '''SELECT * FROM''' 表名 '''ORDER BY''' 列名; | |||
| 选取所有数据,按某列升序排序显示。 | |||
|- | |||
| 降序排序 | |||
| '''SELECT * FROM''' 表名 '''ORDER BY''' 列名 '''DESC'''; | |||
| 选取所有数据,按某列降序排序显示。 | |||
|- | |||
| 多列排序 | |||
| '''SELECT * FROM''' 表名 '''ORDER BY''' 列名1 '''DESC ''', 列名2; | |||
| 选取所有数据,先按列名1的列降序排序,再按列名2的列升序排序。 | |||
|- | |||
|} | |||
===条件筛选=== | |||
'''WHERER'''子句用于按条件筛选数据。 | |||
==== | {| class="wikitable" | ||
! 运算符 !! 描述 !! 示例 | |||
|- | |||
| = || 相等 || '''SELECT''' * '''FROM''' 表名 '''WHERE''' 列名 '''=''' 值; | |||
|- | |||
| <> || 不相等,这个是ISO标准写法,大部分也支持<code>!=</code>表示不相等|| '''SELECT''' 列名1,列名2 '''FROM''' 表名 '''WHERE''' 列名1 '''<>''' 值; | |||
|- | |||
| > || 大于 || '''SELECT''' * '''FROM''' 表名 '''WHERE''' 列名 '''>''' 值; | |||
|- | |||
| < || 小于 || '''SELECT''' * '''FROM''' 表名 '''WHERE''' 列名 '''<''' 值; | |||
|- | |||
| >= || 大于等于 || '''SELECT''' * '''FROM''' 表名 '''WHERE''' 列名 '''>=''' 值; | |||
|- | |||
| <= || 小于等于 || '''SELECT''' * '''FROM''' 表名 '''WHERE''' 列名 '''<=''' 值; | |||
|- | |||
| BETWEEN AND || 在某个范围内 || '''SELECT''' * '''FROM''' 表名 '''WHERE''' 列名 '''BETWEEN''' 值1 '''AND''' 值2; | |||
|- | |||
| LIKE || 使用通配符匹配 <br \>通配符<code>'''%'''</code>表示0个或多个字符 <br \>通配符<code>'''_'''</code>表示单个字符 || '''SELECT''' * '''FROM''' 表名 '''WHERE''' 列名 '''LIKE ''' 'CF%'; <br \>筛选该列中以CF开头的值 | |||
|- | |||
| IN || 与一组值进行比较|| '''SELECT''' * '''FROM''' 表名 '''WHERE''' 列名 '''IN''' (值1, 值2, 值3); | |||
|} | |||
注意:值为字符串需要使用<code>'</code>或<code>"</code>包裹。 | |||
'''WHERER'''子句可以使用3个逻辑运算符:<code>NOT</code>、<code>AND</code> 和 <code>OR</code>。其中<code>AND</code>和<code>OR</code>可用于连接多个“筛选条件”。 | |||
{| class="wikitable" style="width: 100%; | |||
! 逻辑运算符 | |||
! 描述 | |||
! 示例 | |||
|- | |||
| AND | |||
| 与,所有结果都为真才是真。 | |||
| | |||
|- | |||
| OR | |||
| 或,有一个结果为真便是真。 | |||
|- | |||
| NOT | |||
| 取反,取与结果相反的值。 | |||
| | |||
|- | |||
|} | |||
===查询并处理数据=== | ===查询并处理数据=== | ||
====生成计算字段==== | ====生成计算字段==== |
2020年10月22日 (四) 07:15的版本
SQL(Structured Query Language,结构化查询语言),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL基于关系代数和元组关系演算。SQL的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。
简介
时间轴
- 1970年代初,由IBM公司San Jose,California研究实验室的埃德加·科德发表将数据组成表格的应用原则(Codd's Relational Algebra)。
- 1974年,同一实验室的D.D.Chamberlin和R.F. Boyce对Codd's Relational Algebra在研制关系数据库管理系统System R中,研制出一套规范语言-SEQUEL(Structured English Query Language)
- 1976年11月,IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)
- 1979年,ORACLE公司首先提供商用的SQL,IBM公司在DB2和SQL/DS数据库系统中也实现了SQL。
- 1980年,改名为SQL。
- 1986年10月,美国国家标准学会(ANSI)采用SQL作为关系数据库管理系统的标准语言(ANSI X3. 135-1986)。
- 1987年,国际标准化组织(ISO)采纳这一标准为国际标准。
- 1989年,美国ANSI采纳在ANSI X3.135-1989报告中定义的关系数据库管理系统的SQL标准语言,称为ANSI SQL 89,该标准替代ANSI X3.135-1986版本。
SQL优点
- 几乎所有重要的DBMS如:MySQL、SQLite、PostgreSQL及Microsoft SQL Server等都支持SQL。
- SQL简单易学
基础知识
数据库基本概念
名称 | 英文 | 描述 |
---|---|---|
数据库管理系统 | Database Management System | 简称DBMS,管理数据库的软件,常见有:MySQL、SQLite、PostgreSQL及Microsoft SQL Server等。 |
关系型数据库管理系统 | Relational Database Management System | 简称RDBMS ,管理关系型数据库的软件,常见有:MySQL、SQLite、PostgreSQL及Microsoft SQL Server等。 |
数据库 | database | |
表 | table | |
列或字段 | column | 属性Attribute |
行 | row | |
主键 | ||
外键 |
SQL语法
SQL语句以关键字开始,如SELECT
、DELETE
或CREATE
,并以分号;
结束。它们不区分大小写,除了固定的字符串值,如'Mr. Brown'
了解更多 >> 维基教科书:SQL - 语言元素
数据查询
SQL中最常见的操作是查询,它是通过SELECT
语句执行的。SELECT
使用一个或多个表或表达式来检索数据。标准的SELECT
语句不会对数据库有持久影响。SELECT
的一些非标准的实现可以有持久影响,如一些数据库中有SELECT INTO
语法。
SELECT
语句从一个或多个的表或视图中检索数据。 它通常由下列语言元素构成:
SELECT 显示内容 -- 大部分是列名的列表
FROM 表名 -- 表或视图名称及其别名
WHERE 筛选条件
GROUP BY <group_by_clause>
HAVING <having_clause>
ORDER BY <order_by_clause>
OFFSET <offset_clause>
FETCH <fetch_first_or_next_clause>;
除了SELECT
和FROM
元素的其他都是可选的。 语言元素的顺序是强制性的。 SELECT
语句可以嵌套,以递归方式查询。
了解更多 >> 维基教科书:SQL - SELECT 基本知识
基本查询
选取数据 | 语句 | 描述 |
---|---|---|
选取单表所有数据 | SELECT * FROM 表名; | * 号为通配符
|
选取单列数据 | SELECT 列名 FROM 表名; | |
选取多列数据 | SELECT 列名1, 列名2, 列名3 FROM 表名; | 列名用逗号隔开,最后一个列名不加逗号。 |
别名 | SELECT 列名 as 别名 FROM 表名; | 将列名显示为其他名称 |
去除重复值 | SELECT DISTINCT 列名 FROM 表名; | 将该列中重复值去除 |
选取部分行 | SELECT * FROM 表名 LIMIT 开始行数,结束行数; SELECT * FROM 表名 LIMIT 行数; |
LIMIT接收2个整数参数,其中开始行数默认为0,第二个语句是选取前几行的简写。 |
排序
ORDER BY子句用于对一列或多列进行排序,两种排序方式:
- 升序,使用
ASC
关键字,默认方式,关键字可以省略 - 降序,使用
DESC
关键字
选取数据 | 语句 | 描述 |
---|---|---|
升序排序 | SELECT * FROM 表名 ORDER BY 列名; | 选取所有数据,按某列升序排序显示。 |
降序排序 | SELECT * FROM 表名 ORDER BY 列名 DESC; | 选取所有数据,按某列降序排序显示。 |
多列排序 | SELECT * FROM 表名 ORDER BY 列名1 DESC , 列名2; | 选取所有数据,先按列名1的列降序排序,再按列名2的列升序排序。 |
条件筛选
WHERER子句用于按条件筛选数据。
运算符 | 描述 | 示例 |
---|---|---|
= | 相等 | SELECT * FROM 表名 WHERE 列名 = 值; |
<> | 不相等,这个是ISO标准写法,大部分也支持!= 表示不相等 |
SELECT 列名1,列名2 FROM 表名 WHERE 列名1 <> 值; |
> | 大于 | SELECT * FROM 表名 WHERE 列名 > 值; |
< | 小于 | SELECT * FROM 表名 WHERE 列名 < 值; |
>= | 大于等于 | SELECT * FROM 表名 WHERE 列名 >= 值; |
<= | 小于等于 | SELECT * FROM 表名 WHERE 列名 <= 值; |
BETWEEN AND | 在某个范围内 | SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2; |
LIKE | 使用通配符匹配 通配符 % 表示0个或多个字符 通配符 _ 表示单个字符 |
SELECT * FROM 表名 WHERE 列名 LIKE 'CF%'; 筛选该列中以CF开头的值 |
IN | 与一组值进行比较 | SELECT * FROM 表名 WHERE 列名 IN (值1, 值2, 值3); |
注意:值为字符串需要使用'
或"
包裹。
WHERER子句可以使用3个逻辑运算符:NOT
、AND
和 OR
。其中AND
和OR
可用于连接多个“筛选条件”。
逻辑运算符 | 描述 | 示例 |
---|---|---|
AND | 与,所有结果都为真才是真。 | |
OR | 或,有一个结果为真便是真。 | |
NOT | 取反,取与结果相反的值。 |
查询并处理数据
生成计算字段
汇总数据
使用函数处理
数据操作
插入数据
更新数据
删除数据
数据定义
数据控制
资源
网站
- ISO:ISO/IEC 9075-1:2016 或SQL:2016,是ISO发布的第八版标准SQL。
相关网站
书籍
- 《SQL必知必会》第四版-Ben Forta