第9讲——MySQL数据类型和运算4

146 阅读4分钟

❤️持续创作,加速成长!开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情

🎨 个人介绍

👉大家好,我是:旺仔不是程序员

👉认真分享技术,记录学习过程的点滴,如果我的分享能为你带来帮助,请支持我奥🍻

👉你的支持,是我每天更新的动力。

👉赞点:👍 留言:✍ 收藏:⭐

👉个人格言:想法一步一步的落实,才是你我前进最佳选择。

my.jpeg

1. 条件判断函数

1. IF(expr,v1,v2)函数

  1. 说明:IF(expr, v1, v2):如果表达式expr是TRUE,则返回值为v1;否则返回值为v2
 # 使用IF()函数进行条件判断,输入语句如下:
 SELECT IF(12,2,3),
 SELECT IF(1<2,'yes ','no')
 #如果是0,判断为false ,非零为true
 SELECT IF(STRCMP('test','test1'),'no','yes')

2. IFNULL(v1,v2)函数

  1. 说明:

    1. IFNULL(v1,v2):假如v1不为NULL,则IFNULL()的返回值为v1;否则其返回值为v2
    2. 如果报错,显示报错信息
 # 使用IFNULL()函数进行条件判断,输入语句如下:
 SELECT IFNULL(1,2), IFNULL(NULL,10), IFNULL(1/0, 'wrong');

3. CASE函数

 # 使用CASE value WHEN语句执行分支操作,输入语句如下:
 SELECT CASE 2 
     WHEN 1 THEN 'one' 
     WHEN 2 THEN 'two' 
     ELSE 'more' 
 END;
 # 使用CASE WHEN语句执行分支操作,
 # 当CASE 没有条件时,他会执行执行到第一个结果为ture的语句
 # 输入语句如下:
 SELECT CASE 
     WHEN 0<1 THEN 'true' 
     WHEN 1<2 THEN 'true1' 
     ELSE 'false' 
 END;

2. 系统信息函数

1. 获取MySQL版本号、连接数和数据库名的函数

SHOW PROCESSLIST的参数说明

  1. Id列,用户登录MySQL时,系统分配的是“connection id”
  2. User列,显示当前用户。如果不是root,这个命令就只显示用户权限范围内的SQL语句
  3. Host列,显示这个语句是从哪个IP的哪个端口上发出的,可以用来追踪出现问题语句的用户
  4. db列,显示这个进程目前连接的是哪个数据库
  5. Command列,显示当前连接执行的命令,一般取值为休眠(Sleep)、查询(Query)、连接(Connect)
  6. Time列,显示这个状态持续的时间,单位是秒
  7. State列,显示使用当前连接的SQL语句的状态,很重要的列。后续会有所有状态的描述,State只是语句执行中的某一个状态。一个SQL语句,以查询为例,可能需要经过Copying to tmp table、Sorting result、Sending data等状态才可以完成
  8. Info列,显示这个SQL语句,是判断问题语句的一个重要依据。
 # 查看当前MySQL版本号,输入语句如下:
 SELECT VERSION();
 # 查看当前用户的连接数,输入语句如下:
 SELECT CONNECTION_ID();
 # 使用SHOW PROCESSLIST命令输出当前用户的连接信息,输入语句如下:
 SHOW PROCESSLIST;
 # 查看当前使用的数据库,输入语句如下:
 SELECT DATABASE(),SCHEMA();

1.png

2. 获取用户名的函数

 # 获取当前登录用户名称,输入语句如下:
 # SYSTEM_USER(), SESSION_USER() 和 USER()返回的结果一样
 SELECT USER(), CURRENT_USER, CURRENT_USER(), SYSTEM_USER(), SESSION_USER()

3. 获取字符串的字符集和排序方式的函数

 # 使用CHARSET()函数返回字符串使用的字符集,输入语句如下:
 SELECT CHARSET('abc')
 SELECT CHARSET(CONVERT('abc' USING latin1))
 SELECT CHARSET(VERSION())
 # 使用COLLATION()函数返回字符串排列方式,输入语句如下:
 SELECT COLLATION('abc'),COLLATION(CONVERT('abc' USING utf8))

4. 获取最后一个自动生成的ID值的函数

 # 使用SELECT LAST_INSERT_ID查看最后一个自动生成的列值,执行过程如下:
 # 1.一次插入一条记录
 # 首先创建表worker,其Id字段带有AUTO_INCREMENT约束,输入语句如下:
  CREATE TABLE worker (
  Id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
  Name VARCHAR(30)
  );
  
 # 分别单独向表worker中插入2条记录:
 INSERT INTO worker VALUES(NULL, 'jimy');
 INSERT INTO worker VALUES(NULL, 'Tom');
 SELECT * FROM worker;
 SELECT LAST_INSERT_ID();
 # 2.一次同时插入多条记录
 接下来,向表中插入多条记录,输入语句如下:
 INSERT INTO worker VALUES (NULL, 'Kevin'),(NULL,'Michal'),(NULL,'Nick');
 # 查询已经插入的的记录,
 SELECT * FROM worker;
 # 这里是记录INSERT INTO 的执行次数
 # INSERT INTO worker VALUES (NULL, 'Kevin'),(NULL,'Michal'),(NULL,'Nick');这条语句INSERT INTO执行了一次
 #所以最后的结果为3
 SELECT LAST_INSERT_ID();
 ​

3. MySQL 8.0的新特性

1. 加密函数

 # 使用MD5函数加密字符串,输入语句如下:
 SELECT MD5 ('mypwd');
 # 使用加密函数SHA2(str, hash_length)
 SELECT SHA('tom12346')
 # 使用加密函数SHA2(str, hash_length)
 # hash_length支持的值为224、256、384、512和0。其中,0等同于256
 # 不使用以上数字加密,返回null
 SELECT SHA2('tom12346',384)
 # 使用ENCODE加密字符串,输入语句如下:
 # 在具体字段上加密,需要表的存在
 SELECT ENCODE('secret','cry')
 SELECT LENGTH(ENCODE('secret','cry'));

2. 窗口函数

 # 创建公司部门表branch,包含部门的名称和部门人数两个字段,创建语句如下:
 CREATE TABLE branch
 (
  name VARCHAR(128) NOT NULL,
  brcount INT NOT NULL
 )
 # 插入数据
 INSERT INTO branch(name,brcount) VALUES
 ('branch1',5),
 ('branch2',10),
 ('branch3',8),
 ('branch4',20),
 ('branch5',9)
 # 查看数据
 SELECT * FROM branch
 #创建了名称为w1的窗口函数,规定对brcount字段进行排序
 # 然后在SELECT子句中对窗口函数w1执行rank()方法,将结果输出为rank字段
 SELECT *,RANK() OVER w1 AS 'rank' FROM branch window w1 AS (ORDER BY brcount)
 # 查询部门总人数
 SELECT *,SUM(brcount) over() as total_count FROM branch
 # 可以一次性查询出每个部门的员工人数占总人数的百分比
 SELECT *, (brcount)/(SUM(brcount) over()) AS rate FROM branch