数据库字段拼接_MySQL数据库笔记

本文详细介绍了MySQL数据库中的执行顺序、命令行操作、正则表达式及重要知识点,包括SELECT语句的执行流程,命令行的常用操作,正则表达式的使用,以及各种函数和操作符的应用,如模糊查询、文本处理、时间处理和数值处理函数,还涵盖了聚集函数和数据分组的概念。
摘要由CSDN通过智能技术生成

执行顺序

71df3f6ffb90b9c0bc16152b23f3b831.png
yscl博主的博文

mysql好文推荐:执行顺序中每一个步骤都为下一个步骤创建一个虚拟表

  • mysql执行顺序与join连接
  • 关于sql和MySQL的语句执行顺序(必看!!!)

命令行

  1. 查看所有的数据库
SHOW DATABASES

2. 选择一个名字叫database的数据库

USE database

3. 查看数据库中所有可用表

SHOW TABLES

4. 查看用户表user的字段

SHOW COLUMNS FROM user
或者
DESCRIBE user

5. SHOW 还可以直接接其他sql语句

SHOW CREATE DATABASE 创建数据库过程的状态

SHOW CREATE TABLE 创建表过程中的状态

SHOW STATUS  显示服务器状态的信息

SHOW ERRORS 显示服务器错误信息

SHOW WARNINGS 显示服务器警告信息 

SHOW GRANTS 显示用户的权限

6. SELECT语句的应用

SELECT DISTINCT age , name FROM user  // 检索出来的数据必须满足age不一致,一致的age会留下一条

SELECT * FROM user LIMIT 6 , 5   // 从行6开始,检索条数为5 。其中,第1行为行0

SELECT user.name FROM database.user //这情况的名字为完全限定名

SELECT * FROM  user ORDER BY id  DESC// 根据id进行降序排序  默认是升序ASC
ORDER BY 后面可以接 LIMIT

7. 接下来就写WHERE的用法

  • 若同时出现ORDER BY 和 WHERE 时,WHERE 位于ORDER BY之前
  • 操作符[= 、<>、!=、<、>=、>、=>、BETWEEN]
SELECT * FROM user WHERE name = 'cznczai'  //在数据库表中,不区分大小写。字符串查询还有like
而且是单引号!!! 

SELECT  * FROM user WHERE age BETWEEN 1 AND 5; // 字段 BETWEEN 值 AND 值

SELECT * FROM user WHERE email IS NULL // NULL 不等于 0 和 '' 
另外还需要注意 NULL 跟 不匹配返回空行是不一样的

SELECT * FROM user WHERE age = 1 AND name = 'cznczai' // sql同时有AND OR时,优先执行AND 
另外,通过括号可以改变AND的执行优先级

SELECT * FROM user WHERE age IN (1,2,3) ORDER BY name // OR也可以实现 但是麻烦 
NOT 可以加在 IN 的前面表示取反;NOT还支持BETWEEN 跟 EXISTS  

8. 模糊查询的代表LIKE操作符

  • 跟WHERE 结合 ,使用方便但性能较低
  • 通配符 %:任何字符任意次
  • 通配符_ : 一个字符一次
SELECT * FROM user WHERE name LIKE 'cznczai%'  //区分大小写 跟WHERE的字符串查询有区别

正则表达式

  1. REGEXP 关键字
  • 检索一个含'1000'的数据
  • 一点.表示匹配任意一个字符
  • 不区分大小写,若要区分大小写可以用BINARY
SELECT * FROM user WHERE name REGEXP '1000'  // 类似于 LIKE '%1000%' 
不同于 LIKE '1000'

SELECT * FROM user WHERE name REGEXP '.000' // 类似于LIKE '_000'

SELECT * FROM user WHERE name REGEXP BINARY 'CHENZHINAN'// 区分大小写

2. 通过OR进行匹配

SELECT * FROM user WHERE name REGEXP 'chenzhinan | cznczai' // 筛选出含两个字符串的行

3. []匹配特定字符字符其中的一个

SELECT * FROM user WHERE name REGEXP '[123] Ton' // 匹配1或2或3  跟[1|2|3] Ton 同理 
其中 '[123] Ton' != '1|2|3 Ton' ,后者是1, 2, 3Ton

另外[^123]的意思是取 非1 或 2 或 3的所有字符 
  • 一般都会跟 - 进行结合,就有范围定义匹配
SELECT * FROM user WHERE name REGEXP '[1-3] [a-z]'

4. 为了匹配特殊字符,必须用 一个给m ysql解析,另外一个给正则表达式解析

  • - —sql—> -
  • . —sql—> .
  • —sql—>
  • f —sql—> 换页
  • n —sql—> 换行
  • r —sql—> 回车
  • t —sql—> 制表
  • v —sql—> 纵向制表
SELECT * FROM user WHERE name REGEXP '.'     

另外有经过包装的字符类 [:alnum:] [:lower:] [:upper:]...

SELECT * FROM user WHERE name REGEXP '[[:digit:]]{4}' ORDER BY id  //将整个[:digit:]外面还有[]
等价于
SELECT * FROM user WHERE name REGEXP '[0-9][0-9][0-9][0-9]' ORDER BY id

5. 重复元字符

下面要求它们前面的字符或者数字出现的次数。

  • * : 0个或多个匹配
  • +: 1个或多个匹配 {1,}
  • {n} : 指定数目的匹配
  • {n, } : 不少于指定数目的匹配
  • {n, m} : 匹配数目的范围,其中m小于等于255
SELECT * FROM user WHERE name REGEXP '[4]{2}'   // ≈ [4][4]

6. 可以确定匹配位置的定位元字符

  • ^ 文本的开始 【注意这个^跟之前[^1]完全不同,后者是取反】
  • $ 文本的结尾
  • [[:<:]] 词的开始
  • [[:>:]] 词的结尾
SELECT * FROM user WHERE name REGEXP '^[0-9]'  name以0到9开头的数据

SELECT * FROM user WHERE name REGEXP '$[0-9]'

重要知识点

  1. 计算字段:不存在表中的生成字段
SELECT Concat(name,':',age) AS attr FROM user // 拼接成较长的串 且字段名为attr

SELECT Concat(RTrim(name),':',Trim(id),'-',LTrim(age)) AS attr FROM user // 函数去掉空格 

SELECT columnA+columnB*2 AS price FROM user // 算术计算

2. 文本处理函数

  • Upper() 字符串大写 、Lower() 字符串小写
  • Left() 返回串左边的字符 、 Right() 返回串右边的字符
  • Locate() 找出串的一个子串
  • Soundex() 返回串的SOUNDEX的值
  • SubString() 返回子串

3. 时间处理函数

  • CurDate() 返回当前日期 、 CurTime() 返回当前时间
  • Date() 返回日期时间的日期部分
  • DateDiff() 计算两个日期之差
  • Date_Add() 高度灵活的日期运算函数
  • Date_Format() 返回 一个格式化的日期或者时间串
  • Year、Time、Now、Hour.... 获取对应的数据
SELECT * FROM user WHERE orderDate = 2020-11-07' // 普通字符串匹配需要yyyy-mm-dd格式

SELECT * FROM user WHERE Date(orderDate) = '2020-11-07' // orderDate提取日期 舍弃秒

检索九月份的所有数据
笨方法:
SELECT * FROM user WHERE Date(orderDate) BETWEEN '2020-9-1' AND '2020-9-30'
聪明方法:
SELECT * FROM user WHERE Year(orderDate) = '2020' AND Month(orderDate)='9' 

4. 数值处理函数

  • Abs() 返回一个数的绝对值
  • Cos() 余弦 、Sin()正弦 、Tan() 正切、
  • Rand() 随机数
  • Sqrt() 平方

5. 聚集函数

  • AVG() 返回某列的平均值
  • COUNT() 返回某列的行数
  • MAX() 返回某列的最大值 、MIN() 返回某列的最小值
  • SUM() 返回某列值之和

用以上的函数要结合计算字段

  • 还有DISTINCT(不重复) 的使用 ,默认是ALL(包含重复)
SELECT AVG(DISTINCT price) as avg_price FROM products //只会根据不同的价格求平均值

6. 数据分组 非常强大一个功能,能实现归类【这一点WHERE不能很好实现】

SELECT COUNT(*) FROM user GROUP BY age
  • where 和having的不一样吗?对!完全不一样: 分组查询以及where和having的区别 【WHERE筛选出数据再进行分组 ;HAVING从分组的结果中筛选行】
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值