SQL的简介
介绍
最近选修了一门 “数据库技术应用”,遂入门了数据库。下面大部分的内容摘自《MySQL 必知必会》,这本书很好,推荐大家去看看,我只讲部分重点内容:
- 创建数据库
- 检索数据
- 排序检索数据
- 过滤数据
- 正则表达式
- 插入数据
我是在 Linux 上安装 MySQL 来学习的,所以下面都是命令行的形式。
创建数据库
|
|
创建一个数据库。
|
|
创建数据库,该命令的作用:
- 如果数据库不存在则创建,存在则不创建。
- 创建RUNOOB数据库,并设定编码集为utf8
删除数据库
|
|
删除数据库。
选择数据库
|
|
选择数据库(即打开数据库)
创建数据表
|
|
创建数据表,括号里面可以指定多个列名(必需)、数据类型(必需)和约束条件,还可以指定主值、处理引擎、字符集等。比如:
|
|
删除数据表
|
|
检索数据
SELECT 语句
检索列
|
|
检索所有列
|
|
*
是通配符,可以匹配多个名字
如果后面有多个表,则结果是表相乘
|
|
检索不同行
如果要删除列中的重复行,可以用:
|
|
这要就会删去 “列1,列2” 这两个属性相同的重复行
DISTINCE
只能放在列名的前面,并且要应用于列出的所有列。
限定表名
如果列在多个表内,则在同时检索这两个表时,需要在列名前面加上限制表名:
|
|
LIKE 语句
如果要搜索特定特征的文本,可以使用 LIKE 语句:
|
|
注:特殊的是,如果匹配文本中没有统配符,则即使列中的值完全等于匹配文本,也不会有输出
通配符
MySQL 中有三种通配符:
%
匹配 0~n 个任意字符_
匹配 1 个任意字符
正则表达式
正则表达式和 LIKE
语句相类似:
|
|
排序数据
ORDER BY 语句
在 SELECT ... FROM ... WHERE ...
后面加上 ORDER BY
,可以将数据按一定顺序输出:
|
|
多个列排序
排序方向
过滤数据
WHERE 语句
使用 SELECT
会检索所有行,如果要提取特定的行,可以用 WHERE
:
|
|
操作符
操作符 | 说明 |
---|---|
= | 等于 |
<> 或 != | 不等于 |
<,<= ,>,>= | 小于,小于或等于,大于,大于或等于 |
BETWEEN value1 AND value2 | 在指定值之间(包括两端) |
IS NULL | 是空值 |
逻辑符
操作符 | 说明 |
---|---|
AND | 与 |
OR | 或 |
NOT | 非 |
注:在 MySQL 中,NOT 只能对 IN, BETWEEN, EXISTS 取反,但在 SQL Server 中,NOT 可以对各种条件取反。
示例:
|
|
|
|
|
|
优先级:(和大多数 SQL 语言一样)在 MySQL 中,AND 的优先级大于 OR 的优先级。可以通过括号改变优先级。
汇总数据
用于计算数据的和、平均值等。
聚集函数
聚集函数作用在一个 行组 上,计算并返回一个值,包括:
函数 | 说明 |
---|---|
AVG( ) | 平均值 |
COUNT( ) | 行数 |
MAX( ) | 最大值 |
MIN( ) | 最小值 |
SUM( ) | 和 |
注:
AVG( )
只能用于单列,要用于多列,要用多个AVG( )
COUNT(*)
会包括空行,但COUNT(column)
则不包括空行MAX( )
会返回数字或日期的最大值,对于文本,返回最后一行。
示例:
|
|
|
|
插入数据
插入行
插入可以使用 INSERT
语句,它要求指定表明和插入的行的值:
|
|
INSERT
语句不会产生输出,如果列没有值,则要使用 NULL 值,上面的值的顺序取决于表中定义的列的顺序,因此这种 INSERT
语句很不安全,推荐使用更安全的方法:
|
|
这样 VALUES 中的值的顺序对应前面的列名顺序。
但无论上面哪种语法,都必须给出 VALUES 的正确数目,对于某些列,如果满足以下一个条件,则可以省略:
- 该列允许为空值
- 在表定义中给出默认值
如果要插入多个行,只需将每组值用圆括号括起来,用逗号分隔,统一放在 VALUES 后面:
|
|
复制行
我们可以用 SELECT 代替 VALUES,将其他表的行复制到选中的表:
|
|
使用游标
前面说过,SELECT
操作返回的是结果的集合,如果要选中其中一行,则需要用游标(相当于鼠标点击),游标可以在数据中滚动,这个主要用于于交互式应用。
使用游标的步骤:
- 声明游标
- 打开游标
- 读取游标
- 关闭游标
声明游标
语句如下:
|
|
打开/关闭游标
|
|
|
|
使用游标
游标打开后,位于 -1 行,即位于第一条数据的前面。我们用 FETCH
语句读取下一行:
|
|