程序员书籍笔记 程序员书籍笔记
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • Linux

  • MySQL

    • MySQL总结
      • 前言
      • 检索数据
      • 排序检索数据
      • 过滤数据
      • 通配符过滤
      • 正则表达式
      • 定位符
      • 计算字段
      • 算术运算
      • 使用数据处理函数
      • 创建和操作表
    • 快速开始
  • 51单片机

  • exam

  • 系统和硬件
  • MySQL
yuadh
2022-09-13
目录

MySQL总结

# MySQL总结

# 前言

MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。

MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提供了灵活性。

MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发者都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。

为了效果的直观显示,这里创建几个数据库表格作为示例

users表

1663031323819.png

# 检索数据

  1. 检索所有列
select * from users;
1
  1. 检索单个列
select user_id from users;
1
  1. 检索多个列
select user_id,username from users;
1
  1. 检索不同行
select user_id from users;
1
  1. 限制结果

检索的结果不超过5

select user_id from user limit 5;
1

从第6行开始检索 user_id ,检索5行,也就是 6-11 行的数据

select user_id from users limit 5,5;
1
  1. 完全限定的表名
select * from webdatabase.users;
1

等同于

select * from users;
1

# 排序检索数据

  1. 排序数据
select coin from users;
1

上面这条 mysql 语句是没有特定的顺序排序的

使用 order by(默认从小到大) 按照coin顺序排序

select coin from users order by coin;
1
  1. 按多个列排序

使用 order by 按照 coin user_id 多个列排序

select user_id,coin from users order by user_id,coin;
1
  1. 按指定排序方向

desc :降序排序

select user_id from users by user_id desc;
1

# 过滤数据

使用where子句

查找 user_id=4 的匹配结果

select * from users where user_id = 4;
1

where子句操作符

运算符 描述
= 等于
<> 不等于。**注释:**在 SQL 的一些版本中,该操作符可被写成 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在某个范围内
LIKE 搜索某种模式
IN 指定针对某个列的多个可能值
  1. 检查单个值
select * from users where username='yuadh';
select * from users where user_id>4;
1
2
  1. 不匹配检查
select * from users where user_id != 4;
1
select * from users where user_id <> 4;
1
  1. 范围值检查

检测 coin 范围在 0-999 之间的所有数据

select * from users where coin between 0 and 999;
1
  1. 空值检查
select * from users where user_pic is null;
1

数据过滤

  1. and 操作符
select * from users where id = 4 and coin > 999;
1
  1. or 操作符

当 or 和 and 一起的时候,优先处理 and 操作符

select * from users where user_id =4 or user_id = 8 and coin >999;
1

相当于执行的操作是

select * from users where user_id =4 or (user_id = 8 and coin >999);
1

想要正确赛选 ,正确的 mysql 语句是

select * from users where (user_id =4 or user_id = 8) and coin >999;
1
  1. in 操作符

找出 users 的coin 访问在括号中值所匹配的结果

select * from users where coin in (0,999) order by user_id;
1
  1. not 操作符

找出 users 的 coin 不在 >1000 的匹配结果

select * from users where not (coin>1000)
1

# 通配符过滤

  1. 百分号 % 通配符

找出所有 yuadh 开头的用户

select * from users where username like 'yuadh%'
1

找出包含 1 的用户

select * from users where username like '%1%'
1
  1. 下划线 _ 通配符
select * from users where username like '_yuadh'
1

思考

为什么使用_ 和 % 返回的结果不一样?少了部分结果?

解答:因为下划线(_)只可以匹配一个字符,不能多,也不能少!而百分号(%)就不一样了,它没有限制!

# 正则表达式

选项 说明 例子 示例
^ 匹配文本的开始字符 ^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
  1. 匹配检索 .000 的字符,000前有一个字符的数据
select * from users where username regexp '.ua'
1
  1. 进行 or 匹配
select * from users where coin regexp '1000|2000'
1
  1. 匹配几个字符之一
select * from users where coin regexp '[123]'
1
  1. 匹配范围
select * from users where coin regexp '[0-1000]'
1
  1. 匹配特殊字符
select * from users where username regexp '\.'
1
  1. 匹配多个实例

匹配包含 0-9 的任意数字、yuadhs的s可选

select * from users where username regexp '\[0-9]yuadhs?\'

//value-start
1yuadh
2yuadh
3yuadhs
4yuadh
//value-end
1
2
3
4
5
6
7
8
  1. 匹配指定的多个数字
select * from users where username regexp '\[:digit:]{4}\'
1

说明:

[:digit:]匹配任意数字,因而它为数字的一个集合。

{4}确切地要求它前面的字符(任意数字)出现四次。

所以,[[:digit:]]{4}匹配连在一起的任意四位数字。

# 定位符

  1. 找出所有以一个数或小数点开头的username
select * from users where username regexp '^[0-9\.]';
1

# 计算字段

  1. 普通拼接 concat()

    select concat(vend_name,'(',vend_country,')') from vendors order by vend_name;
    
    1

    查询结果

    ACME(USA)
    Y X(CHINA)
    
    1
    2
  2. rtrim()

    去掉右边的所有空格

    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;
1
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 将各个字符串参数拼接成一个新字符串

# 创建和操作表

编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
bash
快速开始

← bash 快速开始→

Theme by Vdoing | Copyright © 2021-2023 yuadh
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×