MySQL总结
# MySQL总结
# 前言
MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提供了灵活性。
MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发者都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
为了效果的直观显示,这里创建几个数据库表格作为示例
users表
# 检索数据
- 检索所有列
select * from users;
- 检索单个列
select user_id from users;
- 检索多个列
select user_id,username from users;
- 检索不同行
select user_id from users;
- 限制结果
检索的结果不超过5
select user_id from user limit 5;
从第6行开始检索 user_id ,检索5行,也就是 6-11
行的数据
select user_id from users limit 5,5;
- 完全限定的表名
select * from webdatabase.users;
等同于
select * from users;
# 排序检索数据
- 排序数据
select coin from users;
上面这条 mysql 语句是没有特定的顺序排序的
使用 order by(默认从小到大) 按照coin顺序排序
select coin from users order by coin;
- 按多个列排序
使用 order by
按照 coin user_id
多个列排序
select user_id,coin from users order by user_id,coin;
- 按指定排序方向
desc
:降序排序
select user_id from users by user_id desc;
# 过滤数据
使用where子句
查找 user_id=4
的匹配结果
select * from users where user_id = 4;
where子句操作符
运算符 | 描述 |
---|---|
= | 等于 |
<> | 不等于。**注释:**在 SQL 的一些版本中,该操作符可被写成 != |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
BETWEEN | 在某个范围内 |
LIKE | 搜索某种模式 |
IN | 指定针对某个列的多个可能值 |
- 检查单个值
select * from users where username='yuadh';
select * from users where user_id>4;
2
- 不匹配检查
select * from users where user_id != 4;
select * from users where user_id <> 4;
- 范围值检查
检测 coin
范围在 0-999
之间的所有数据
select * from users where coin between 0 and 999;
- 空值检查
select * from users where user_pic is null;
数据过滤
and
操作符
select * from users where id = 4 and coin > 999;
or
操作符
当 or 和 and 一起的时候,优先处理 and 操作符
select * from users where user_id =4 or user_id = 8 and coin >999;
相当于执行的操作是
select * from users where user_id =4 or (user_id = 8 and coin >999);
想要正确赛选 ,正确的 mysql 语句是
select * from users where (user_id =4 or user_id = 8) and coin >999;
in
操作符
找出 users
的coin
访问在括号中值所匹配的结果
select * from users where coin in (0,999) order by user_id;
not
操作符
找出 users
的 coin
不在 >1000
的匹配结果
select * from users where not (coin>1000)
# 通配符过滤
- 百分号
%
通配符
找出所有 yuadh
开头的用户
select * from users where username like 'yuadh%'
找出包含 1
的用户
select * from users where username like '%1%'
- 下划线
_
通配符
select * from users where username like '_yuadh'
思考
为什么使用_
和 %
返回的结果不一样?少了部分结果?
解答:因为下划线(_)只可以匹配一个字符,不能多,也不能少!而百分号(%)就不一样了,它没有限制!
# 正则表达式
选项 | 说明 | 例子 | 示例 |
---|---|---|---|
^ | 匹配文本的开始字符 | ^b 匹配以字母 b 开头的字符串 | book、big、banana、bike |
$ | 匹配文本的结束字符 | st$ 匹配以 st 结尾的字符串 | test、resist、persist |
. | 匹配任意单个字符 | b.t 匹配任意b和t之间有一个字符 | bit、bat、but、bite |
* | 匹配零个或多个在它前面的字符 | f*n 匹配字符n前面有任意字符f | fan、fn、faan、abcn |
+ | 匹配前面的字符1次或多次 | ba+ 匹配b后面至少一个 a | ba、bay、bare、battle |
<字符串> | 匹配包含指定的字符串的文本 | 'fa' | fan、afa、faad |
[字符集合] | 匹配字符集合中的任意一个字符 | [xz] 匹配 x 或者 z | dizzy,zebra,x-ray,extra |
[^] | 匹配不在括号中的任何字符 | [^abc] 匹配任意不包含 a、b、c 的字符串 | desk, fox, f8ke |
字符串{n,} | 匹配前面的字符串至少 n 次 | b{2 }匹配2个或者更多的b | bbb,bbbb,bbbbb |
字符串{n,m} | 匹配前面的字符串至少 n 次,至多 m 次 | b{2, 4} 匹配最少2个,最多4个b | bb,bbb,bbbb |
- 匹配检索
.000
的字符,000前有一个字符的数据
select * from users where username regexp '.ua'
- 进行 or 匹配
select * from users where coin regexp '1000|2000'
- 匹配几个字符之一
select * from users where coin regexp '[123]'
- 匹配范围
select * from users where coin regexp '[0-1000]'
- 匹配特殊字符
select * from users where username regexp '\.'
- 匹配多个实例
匹配包含 0-9 的任意数字、yuadhs的s可选
select * from users where username regexp '\[0-9]yuadhs?\'
//value-start
1yuadh
2yuadh
3yuadhs
4yuadh
//value-end
2
3
4
5
6
7
8
- 匹配指定的多个数字
select * from users where username regexp '\[:digit:]{4}\'
说明:
[:digit:]匹配任意数字,因而它为数字的一个集合。
{4}确切地要求它前面的字符(任意数字)出现四次。
所以,[[:digit:]]{4}匹配连在一起的任意四位数字。
# 定位符
- 找出所有以一个数或小数点开头的username
select * from users where username regexp '^[0-9\.]';
# 计算字段
普通拼接
concat()
select concat(vend_name,'(',vend_country,')') from vendors order by vend_name;
1查询结果
ACME(USA) Y X(CHINA)
1
2rtrim()
去掉右边的所有空格
select concat(rtrim(vend_name), '(', rtrim(vend_country), ')') as vend_title from vendors order by vend_name;
1查询结果
vend_title ACME (USA) Anvils R Us (USA) Furball Inc. (USA) Jet Set (England) Jouets Et Ours (France) LT Supplies (USA)
1
2
3
4
5
6
7
# 算术运算
select prod_id,
quantity,
item_price,
quantity*item_price as expanded_price
from orderitems
where order_num = 2005;
2
3
4
5
6
# 使用数据处理函数
名称 | 调用示例 | 示例结果 | 描述 |
---|---|---|---|
left | left('abc123',3) | abc | 返回从左边取指定长度的子串 |
right | right('abc123',3) | 123 | 回从右边取指定长度的子串 |
length | length('abc') | 3 | 返回字符串的长度 |
lower | lower('ABC') | abc | 返回小写格式字符串 |
upper | upper('abc') | ABC | 返回大写格式字符串 |
ltrim | ltrim(' abc') | abc | 将字符串左边空格去除后返回 |
rtrim | rtrim('abc ') | abc | 将字符串右边空格去除后返回 |
substring | substring('abc123',2,3) | bc1 | 从字符串第2位开始截取3位字符 |
concat | concat('abc','123','xyz') | abc123xyz | 将各个字符串参数拼接成一个新字符串 |