目录

一、Insert语句

使用细节

二、Update语句

使用细节

三、Delete语句

使用细节

四、Select语句

4.1使用细节

4.2 使用表达式对查询的列进行运算

4.3 在select语句中可使用as语句

4.4 在where子句中经常使用的运算符

4.5 使用order by子句排序查询结果

五、合计/统计函数

5.1 count

5.2 sum

5.3 avg

5.4 max/min

5.5 使用group by 子句对列进行分组

5.6 使用having子句对分组后的结果进行过滤

六、字符串相关函数

七、数学相关函数

八、时间日期相关函数

九、加密和系统函数

十、流程控制函数


数据库CRUD语句

1.Insert语句 (添加数据)

2.Update语句 (更新数据)

3.Delete语句 (删除数据)

4.Select语句 (查找数据)

一、Insert语句

INSERT INTO table_name 列名

VALUES(值);

#练习 insert 语句
-- 创建一张商品表 goods (id int , goods_name varchar(10), price double );
-- 添加 2 条记录
CREATE TABLE `goods`(id INT,goods_name VARCHAR(10),price DOUBLE);
INSERT INTO `goods`(id, goods_name, price)VALUES(10, '华为手机', 3000)
INSERT INTO `goods`(id, goods_name, price)VALUES(20, '苹果手机', 5000)SELECT * FROM `goods`

使用细节

1.插入的数据应与字段的数据类型相同

2. 数据的长度应在列的规定范围内

3. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应

4. 字符和日期型数据应包含在单引号中

5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)

6. insert into tab_name (列名..) values (),(),() 形式添加多条记录

7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称

8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错

-- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null

-- 如果我们希望指定某个列的默认值,可以在创建表时指定

#说明 insert 语句的细节
-- 1.插入的数据应与字段的数据类型相同。
-- 比如 把 'abc' 添加到 int 类型会错误
INSERT INTO `goods` (id, goods_name, price)VALUES('咕咕猫', '小米手机', 2000);-- 2. 数据的长度应在列的规定范围内,例如:不能将一个长度为80的字符串加入到长度为40的列中。
INSERT INTO `goods` (id, goods_name, price)VALUES(40, 'vovo 手机 vovo 手机 vovo 手机 vovo 手机 vovo 手机',3000);-- 3. 在 values 中列出的数据位置必须与被加入的列的排列位置相对应。
INSERT INTO `goods` (id, goods_name, price) -- 错误的VALUES('vovo 手机',40, 2000);-- 4. 字符和日期型数据应包含在单引号中。
INSERT INTO `goods` (id, goods_name, price)VALUES(40, vovo 手机, 3000); -- 错误的 vovo 手机 应该 'vovo 手机'-- 5. 列可以插入空值[前提是该字段允许为空],insert into table value(null)
INSERT INTO `goods` (id, goods_name, price)VALUES(40, 'vivo 手机', NULL);-- 6. insert into tab_name (列名..) values (),(),() 形式添加多条记录
INSERT INTO `goods` (id, goods_name,price);-- 7. 如果是给表中的所有字段添加数据,可以不写前面的字段名称
INSERT INTO `goods` VALUES(70, 'IBM 手机', 5000);-- 8. 默认值的使用,当不给某个字段值时,如果有默认值就会添加默认值,否则报错
-- 如果某个列 没有指定 not null ,那么当添加数据时,没有给定值,则会默认给 null
-- 如果我们希望指定某个列的默认值,可以在创建表时指定
INSERT INTO `goods` (id, goods_name)VALUES(80, '格力手机');

二、Update语句

UPDATE  table_name

SET 列名

WHERE where_definition

使用细节

1. UPDATE语句可以用新值更新原有表行中的各列

2. SET子句只是要修改哪些列和要给予哪些值

3. WHERE“子句指定应更新哪些行。如没有WHERE子句,则更新所有的行(记录),要谨慎使用

4. 如果需要修改多个字段,可以通过set 字段1 = 值1,字段2 = 值2......

-- 演示 update 语句
-- 要求: 在上面创建的 employee 表中修改表中的纪录
-- 1. 将所有员工薪水修改为 5000 元。[如果没带 where 条件,会修改所有的记录,因此要小心]
UPDATE employee SET salary = 5000
-- 2. 将姓名为 小妖怪 的员工薪水修改为 3000 元
UPDATE employeeSET salary = 3000WHERE user_name = '老妖怪'
-- 3. 将 老妖怪 的薪水在原有基础上增加 1000 元
UPDATE employeeSET salary = salary + 1000WHERE user_name = '老妖怪'
-- 可以修改多个列的值
UPDATE employeeSET salary = salary + 1000 , job = '出主意的' WHERE user_name = '老妖怪'SELECT * FROM employee

三、Delete语句

DELETE FROM  table_name

WHERE where_definition

使用细节

1. 如果不使用where子句,将删除表中所有数据

2. Delete语句不能删除某一列的值(可使用update设为 null 或者 ' ' )

3. 使用delete语句仅删除记录,不删除表本身。如果要删除表,使用 drop table 表名

-- delete 语句演示
-- 删除表中名称为’老妖怪’的记录。
DELETE FROM employeeWHERE user_name = '老妖怪'; -- 删除表中所有记录, 老师提醒,一定要小心
DELETE FROM employee; -- Delete 语句不能删除某一列的值(可使用 update 设为 null 或者 '')
UPDATE employee SET job = '' WHERE user_name = '老妖怪';SELECT * FROM employee-- 要删除这个表
DROP TABLE employee

四、Select语句

SELECT [DISTINCT] * 列名

FROM  table_name

4.1使用细节

1. select指定查询哪些列的数据

2. column指定列名

3. *号代表查询所有列

4. from指定查询那张表

5. distinct可选,指显示结果时,是否去掉重复数据

-- select 语句【重点 难点】
CREATE TABLE student(id INT NOT NULL DEFAULT 1, NAME VARCHAR(20) NOT NULL DEFAULT '', chinese FLOAT NOT NULL DEFAULT 0.0, english FLOAT NOT NULL DEFAULT 0.0, math FLOAT NOT NULL DEFAULT 0.0
);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(1,'韩顺平',89,78,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(2,'张飞',67,98,56);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(3,'宋江',87,78,77);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(4,'关羽',88,98,90);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(5,'赵云',82,84,67);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(6,'欧阳锋',55,85,45);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(7,'黄蓉',75,65,30);
INSERT INTO student(id,NAME,chinese,english,math) VALUES(8,'韩信',45,65,99);SELECT * FROM student;
-- 查询表中所有学生的信息。
SELECT * FROM student;
-- 查询表中所有学生的姓名和对应的英语成绩。
SELECT `name`,english FROM student
-- 过滤表中重复数据 distinct 。
SELECT DISTINCT english FROM student
-- 要查询的记录,每个字段都相同,才会去重
SELECT DISTINCT `name`,english FROM student

4.2 使用表达式对查询的列进行运算

SELECT * 列名1 FROM table_name

4.3 在select语句中可使用as语句

SELECT 列名 AS 别名 FROM 表名

-- select 语句的使用-- 统计每个学生的总分
SELECT `name`,(chinese+english+math) FROM student
-- 在所有学生总分加 10 分的情况
SELECT `name`,(chinese+english+math+10) FROM student
-- 使用别名表示学生分数。
SELECT `name`,(chinese+english+math) AS total_score FROM student

4.4 在where子句中经常使用的运算符

-- select 语句
-- 查询姓名为赵云的学生成绩
SELECT * FROM studentWHERE `name`= '赵云'
-- 查询英语成绩大于 90 分的同学
SELECT * FROM studentWHERE english>90
-- 查询总分大于 200 分的所有同学
SELECT * FROM studentWHERE (chinese+english+math)>200
-- 查询 math 大于 60 并且(and) id 大于 4 的学生成绩
SELECT * FROM studentWHERE math>60 AND id > 4
-- 查询英语成绩大于语文成绩的同学
SELECT * FROM studentWHERE english>chinese
-- 查询总分大于 200 分 并且 数学成绩小于语文成绩,的姓赵的学生.
-- 赵% 表示 名字以韩开头的就可以
SELECT * FROM studentWHERE (chinese+english+math)>200 AND math<chineseAND `name` LIKE '赵%'
-- 查询英语分数在 80-90 之间的同学。
SELECT * FROM studentWHERE english>80 AND english<90
SELECT * FROM studentWHERE english BETWEEN 80 AND 90-- 查询数学分数为 89,90,91 的同学
SELECT * FROM studentWHERE math=89 OR math=90 OR math=91
SELECT * FROM studentWHERE math IN(89,90,91)
-- 查询所有姓韩的学生成绩
SELECT * FROM studentWHERE `name` LIKE '韩%'
-- 查询数学分>80,语文分>80 的同学
SELECT * FROM studentWHERE math>80 AND chinese>80

4.5 使用order by子句排序查询结果

SELECT 列名1,列名2...

FROM table;

ORDER BY 列名 ASC|DESC

1. Order by指定排序的列,排序的列既可以是表中的列名,也可以是select语句后指定的列名

2. Asc升序[默认],Desc降序

3. ORDER BY子句应位于SELECT语句的结尾

五、合计/统计函数

5.1 count

Count返回行的总数

SELECT COUNT(*)  |  列名 FROM table_name

WHERE where_definition

5.2 sum

Sum函数返回满足where条件的行的和,一般使用在数值列

SELECT SUM(列名) {sum(列名)...} FROM table_name

WHERE where_definition

注意:1. sum仅对数值起作用,没有意义。        2. 对多列求和, “,”号不能少

5.3 avg

AVG函数返回满足where条件的一列的平均值

SELECT AVG(列名) FROM table_name

WHERE where_definition

5.4 max/min

Max/Min函数返回满足where条件的一列的最大/最小值

SELECT MAX(列名) FROM table_name

WHERE where_definition

-- 演示 mysql 的统计函数的使用
-- 统计一个班级共有多少学生?
SELECT COUNT(*) FROM student
-- 统计数学成绩大于 90的学生有多少个?
SELECT COUNT(*) FROM studentWHERE math > 90
-- 统计总分大于 250 的人数有多少?
SELECT COUNT(*) FROM studentWHERE (chinese + math + english) > 250
-- count(*) 和 count(列) 的区别
-- 解释 :count(*) 返回满足条件的记录的行数
-- count(列): 统计满足条件的某列有多少个,但是会排除 为 null
CREATE TABLE t15 (
`name` VARCHAR(20));
INSERT INTO t15 VALUES('tom');
INSERT INTO t15 VALUES('jack');
INSERT INTO t15 VALUES('mary');
INSERT INTO t15 VALUES(NULL);
SELECT * FROM t15;SELECT COUNT(*) FROM t15; -- 4
SELECT COUNT(`name`) FROM t15;-- 3-- 演示 sum 函数的使用
-- 统计一个班级数学总成绩?
SELECT SUM(math) FROM student
-- 统计一个班级语文、英语、数学各科的总成绩
SELECT SUM(math) AS math_total_score,SUM(english),SUM(chinese) FROM student
-- 统计一个班级语文、英语、数学的成绩总和
SELECT SUM(math + english + chinese) FROM student;
-- 统计一个班级语文成绩平均分
SELECT SUM(chinese)/ COUNT(*) FROM student;
SELECT SUM(`name`) FROM student;-- 演示 avg 的使用
-- 练习:
-- 求一个班级数学平均分?
SELECT AVG(math) FROM student
-- 求一个班级总分平均分
SELECT AVG(math+english+chinese) FROM student-- 演示 max 和 min 的使用
-- 求班级最高分和最低分(数值范围在统计中特别有用)
SELECT MAX(math+english+chinese),MIN(math+english+chinese)FROM student
-- 求出班级数学最高分和最低分
SELECT MAX(math) AS math_high_socre, MIN(math) AS math_low_socreFROM student;

5.5 使用group by 子句对列进行分组

SELECT 列名1,列名2... FROM table

GROUP BY 列名

5.6 使用having子句对分组后的结果进行过滤

SELECT 列名1,列名2...

        FROM table

GROUP BY 列名

  HAVING ...

CREATE TABLE dept( /*部门表*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, dname VARCHAR(20) NOT NULL DEFAULT "", loc VARCHAR(13) NOT NULL DEFAULT ""
);
INSERT INTO dept VALUES(10, 'ACCOUNTING', 'NEW YORK'),
(20, 'RESEARCH', 'DALLAS'),
(30, 'SALES', 'CHICAGO'),
(40, 'OPERATIONS', 'BOSTON');SELECT * FROM dept;-- 员工表
CREATE TABLE emp
(empno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*编号*/
ename VARCHAR(20) NOT NULL DEFAULT "", /*名字*/
job VARCHAR(9) NOT NULL DEFAULT "",/*工作*/
mgr MEDIUMINT UNSIGNED ,/*上级编号*/
hiredate DATE NOT NULL,/*入职时间*/
sal DECIMAL(7,2) NOT NULL,/*薪水*/
comm DECIMAL(7,2) ,/*红利 奖金*/
deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0 /*部门编号*/
);-- 添加测试数据
INSERT INTO emp VALUES(7369, 'SMITH', 'CLERK', 7902, '1990-12-17', 800.00,NULL , 20),
(7499, 'ALLEN', 'SALESMAN', 7698, '1991-2-20', 1600.00, 300.00, 30),
(7521, 'WARD', 'SALESMAN', 7698, '1991-2-22', 1250.00, 500.00, 30),
(7566, 'JONES', 'MANAGER', 7839, '1991-4-2', 2975.00,NULL,20),
(7654, 'MARTIN', 'SALESMAN', 7698, '1991-9-28',1250.00,1400.00,30),
(7698, 'BLAKE','MANAGER', 7839,'1991-5-1', 2850.00,NULL,30),
(7782, 'CLARK','MANAGER', 7839, '1991-6-9',2450.00,NULL,10),
(7788, 'SCOTT','ANALYST',7566, '1997-4-19',3000.00,NULL,20),
(7839, 'KING','PRESIDENT',NULL,'1991-11-17',5000.00,NULL,10),
(7844, 'TURNER', 'SALESMAN',7698, '1991-9-8', 1500.00, NULL,30),
(7900, 'JAMES','CLERK',7698, '1991-12-3',950.00,NULL,30),
(7902, 'FORD', 'ANALYST',7566,'1991-12-3',3000.00, NULL,20),
(7934,'MILLER','CLERK',7782,'1992-1-23', 1300.00, NULL,10);SELECT * FROM emp;-- 工资级别
#工资级别表
CREATE TABLE salgrade
(
grade MEDIUMINT UNSIGNED NOT NULL DEFAULT 0, /*工资级别*/
losal DECIMAL(17,2) NOT NULL, /* 该级别的最低工资 */
hisal DECIMAL(17,2) NOT NULL /* 该级别的最高工资*/
);
INSERT INTO salgrade VALUES (1,700,1200);
INSERT INTO salgrade VALUES (2,1201,1400);
INSERT INTO salgrade VALUES (3,1401,2000);
INSERT INTO salgrade VALUES (4,2001,3000);
INSERT INTO salgrade VALUES (5,3001,9999); SELECT * FROM salgrade;
SELECT * FROM dept;
SELECT * FROM emp;# 演示 group by + having
GROUP BY 用于对查询的结果分组统计, (示意图)
-- having 子句用于限制分组显示结果. -- ?如何显示每个部门的平均工资和最高工资
-- 分析: avg(sal) max(sal)
-- 按照部门来分组查询
SELECT AVG(sal),MAX(sal),deptnoFROM emp GROUP BY deptno
-- 使用数学方法,对小数点进行处理
SELECT FORMAT(AVG(sal),2), MAX(sal) , deptnoFROM emp GROUP BY deptno
-- ?显示每个部门的每种岗位的平均工资和最低工资
-- 分析 1. 显示每个部门的平均工资和最低工资
--  2. 显示每个部门的每种岗位的平均工资和最低工资
SELECT AVG(sal),MAX(sal),deptno,jobFROM emp GROUP BY deptno,job-- ?显示平均工资低于 2000 的部门号和它的平均工资 // 别名-- 分析 [写 sql 语句的思路是化繁为简,各个击破]
-- 1. 显示各个部门的平均工资和部门号
-- 2. 在 1 的结果基础上,进行过滤,保留 AVG(sal) < 2000
-- 3. 使用别名进行过滤
SELECT AVG(sal) AS agv_sal,deptnoFROM emp GROUP BY deptnoHAVING AVG(sal) < 2000

六、字符串相关函数

-- 演示字符串相关函数的使用 , 使用 emp 表来演示
-- CHARSET(str) 返回字串字符集
SELECT CHARSET(ename) FROM emp;-- CONCAT (string2 [,... ]) 连接字串, 将多个列拼接成一列
SELECT CONCAT(ename, ' 工作是 ', job) FROM emp;-- INSTR (string ,substring ) 返回 substring 在 string 中出现的位置,没有返回 0
-- dual 亚元表, 系统表 可以作为测试表使用
SELECT INSTR('gugumao','mao') FROM DUAL;-- UCASE (string2 ) 转换成大写
SELECT UCASE(ename) FROM emp-- LCASE (string2 ) 转换成小写
SELECT LCASE(ename) FROM emp-- LEFT (string2 ,length )从 string2 中的左边起取 length 个字符
-- RIGHT (string2 ,length ) 从 string2 中的右边起取 length 个字符
SELECT LEFT(ename,2) FROM emp-- LENGTH (string )string 长度[按照字节]
SELECT LENGTH(ename) FROM emp-- REPLACE (str ,search_str ,replace_str )
-- 在 str 中用 replace_str 替换 search_str
-- 如果是 manager 就替换成 经理
SELECT REPLACE(job, 'MANAGER', '经理') FROM emp-- STRCMP (string1 ,string2 ) 逐字符比较两字串大小
SELECT STRCMP('ggm', 'agm') FROM DUAL-- SUBSTRING (str , position [,length ])
-- 从 str 的 position 开始【从 1 开始计算】,取 length 个字符
-- 从 ename 列的第一个位置开始取出 2 个字符
SELECT SUBSTRING(ename, 1, 2) FROM emp-- LTRIM (string2 ) RTRIM (string2 ) TRIM(string)
SELECT LTRIM('  咕咕猫') FROM DUAL
SELECT RTRIM('咕咕猫  ') FROM DUAL
SELECT LTRIM('  咕咕猫  ') FROM DUAL-- 练习: 以首字母小写的方式显示所有员工 emp 表的姓名
-- 方法 1
-- 思路先取出 ename 的第一个字符,转成小写的
-- 把他和后面的字符串进行拼接输出即可
SELECT CONCAT(LCASE(SUBSTRING(ename, 1, 1)), SUBSTRING(ename,2)) AS new_nameFROM emp;SELECT CONCAT(LCASE(LEFT(ename,1)), SUBSTRING(ename,2)) AS new_nameFROM emp;

七、数学相关函数

-- 演示数学相关函数
-- ABS(num) 绝对值
SELECT ABS(-10) FROM DUAL;-- BIN (decimal_number )十进制转二进制
SELECT BIN(10) FROM DUAL;-- CEILING (number2 ) 向上取整, 得到比 num2 大的最小整数
SELECT CEILING(-1.1) FROM DUAL;-- CONV(number2,from_base,to_base) 进制转换
-- 下面的含义是 8 是十进制的 8, 转成 2 进制输出
SELECT CONV(8,10,2) FROM DUAL;-- FLOOR (number2 ) 向下取整,得到比 num2 小的最大整数
SELECT FLOOR(-1.1) FROM DUAL;-- FORMAT (number,decimal_places ) 保留小数位数(四舍五入)
SELECT FORMAT(78.12556,2) FROM DUAL;-- HEX (DecimalNumber ) 转十六进制-- LEAST (number , number2 [,..]) 求最小值
SELECT LEAST(0,1,-10,4) FROM DUAL;-- MOD (numerator ,denominator ) 求余
SELECT MOD(10, 3) FROM DUAL;-- RAND([seed]) RAND([seed]) 返回随机数 其范围为 0 ≤ v ≤ 1.0
-- 说明
-- 1. 如果使用 rand() 每次返回不同的随机数 ,在 0 ≤ v ≤ 1.0
-- 2. 如果使用 rand(seed) 返回随机数, 范围 0 ≤ v ≤ 1.0, 如果 seed 不变,
-- 该随机数也不变了
SELECT RAND() FROM DUAL;

八、时间日期相关函数

 

-- 日期时间相关函数-- CURRENT_DATE ( )当前日期
SELECT CURRENT_DATE() FROM DUAL;
-- CURRENT_TIME ( )当前时间
SELECT CURRENT_TIME() FROM DUAL;
-- CURRENT_TIMESTAMP ( ) 当前时间戳
SELECT CURRENT_TIMESTAMP() FROM DUAL;-- 创建测试表 信息表
CREATE TABLE mes(id INT,content VARCHAR(30),send_time DATETIME);-- 添加一条记录
INSERT INTO mesVALUES(1, '北京新闻', CURRENT_TIMESTAMP());
INSERT INTO mesVALUES(2, '南京新闻', NOW());
INSERT INTO mesVALUES(3, '上海新闻', NOW());SELECT * FROM mes;
SELECT NOW() FROM DUAL;-- 应用实例
-- 显示所有新闻信息,发布日期只显示 日期,不用显示时间
SELECT id, content, DATE(send_time) FROM mes;
-- 请查询在 10 分钟内发布的新闻, 思路一定要梳理一下
SELECT * FROM mesWHERE DATE_ADD(send_time, INTERVAL 10 MINUTE) >= NOW();SELECT * FROM mesWHERE DATE_SUB(NOW(), INTERVAL 10 MINUTE) <= send_time;
-- 请在 mysql 的 sql 语句中求出 2011-11-11 和 1990-1-1 相差多少天
SELECT DATEDIFF(NOW(),'2011-11-11') FROM DUAL;
-- 请用 mysql 的 sql 语句求出你活了多少天? [练习]
SELECT DATEDIFF(NOW(),'2001-01-29') FROM DUAL;
-- 如果你能活 80 岁,求出你还能活多少天.[练习]
-- 先求出活 80 岁 时, 是什么日期 X
-- 然后在使用 datediff(x, now()); 1986-11-11->datetime
-- INTERVAL 80 YEAR : YEAR 可以是 年月日,时分秒
-- '1986-11-11' 可以 date,datetime timestamp
SELECT DATEDIFF(DATE_ADD('2001-01-29', INTERVAL 80 YEAR), NOW()) FROM DUAL;SELECT TIMEDIFF('10:11:11', '06:10:10') FROM DUAL;-- YEAR|Month|DAY| DATE (datetime)
SELECT YEAR(NOW()) FROM DUAL;
SELECT MONTH(NOW()) FROM DUAL;
SELECT DAY(NOW()) FROM DUAL;
SELECT MONTH('2013-11-10') FROM DUAL
-- unix_timestamp() : 返回的是 1970-1-1到现在的秒数
SELECT UNIX_TIMESTAMP() FROM DUAL;
-- FROM_UNIXTIME() : 可以把一个 unix_timestamp 秒数[时间戳],转成指定格式的日期
-- %Y-%m-%d 格式是规定好的,表示年月日
-- 意义:在开发中,可以存放一个整数,然后表示时间,通过 FROM_UNIXTIME 转换
SELECT FROM_UNIXTIME(1651289374, '%Y-%m-%d')FROM DUAL;
SELECT FROM_UNIXTIME(1651289374, '%Y-%m-%d %H:%i:%s')FROM DUAL;

九、加密和系统函数

-- 演示加密函数和系统函数
-- USER() 查询用户
-- 可以查看登录到 mysql 的有哪些用户,以及登录的 IPSELECT USER() FROM DUAL; -- 用户@ip地址-- DATABASE()查询当前使用数据库名称
SELECT DATABASE()-- MD5(str) 为字符串算出一个 MD5 32 的字符串,常用(用户密码)加密
-- root 密码是 hsp -> 加密 md5 -> 在数据库中存放的是加密后的密码
SELECT MD5('ggm') FROM DUAL;
SELECT LENGTH(MD5('ggm')) FROM DUAL;-- 演示用户表,存放密码时,是 md5
CREATE TABLE users(id INT,`name` VARCHAR(32) NOT NULL DEFAULT '',pwd CHAR(32) NOT NULL DEFAULT '');
INSERT INTO usersVALUES(100, '咕咕猫', MD5('ggm'));
SELECT * FROM users;SELECT * FROM users -- SQL注入问题WHERE `name` = '咕咕猫' AND pwd = MD5('ggm');-- PASSWORD(str) -- 加密函数, MySQL 数据库的用户密码就是 PASSWORD 函数加密
SELECT PASSWORD('ggm') FROM DUAL;-- select * from mysql.user \G 从原文密码 str 计算并返回密码字符串
-- 通常用于对 mysql 数据库的用户密码加密
-- mysql.user 表示 数据库.表
SELECT * FROM mysql.user

十、流程控制函数

​​​​​​​

#演示流程控制语句
# IF(expr1,expr2,expr3) 如果 expr1 为 True ,则返回 expr2 否则返回expr3
SELECT IF(TRUE,'北京','上海') FROM DUAL;
# IFNULL(expr1,expr2) 如果 expr1 不为空 NULL,则返回 expr1,否则返回 expr2
SELECT IFNULL(NULL,'咕咕猫你好') FROM DUAL;
# SELECT CASE WHEN expr1 THEN expr2 WHEN expr3 THEN expr4 ELSE expr5 END; [类似多重分支.]
# 如果 expr1 为 TRUE,则返回 expr2,如果 expr2 为 t, 返回 expr4, 否则返回 expr5
SELECT CASEWHEN TRUE THEN 'jack' -- 返回jackWHEN FALSE THEN 'tom'ELSE 'mary' END; -- 1. 查询 emp 表, 如果 comm 是 null , 则显示 0.0
-- 说明:判断是否为 null 要使用 is null, 判断不为空 使用 is not
SELECT ename,IF(comm IS NULL, 0.0,comm)FROM emp;SELECT ename,IFNULL(comm,0.0)FROM emp;-- 2. 如果 emp 表的 job 是 CLERK 则显示 职员, 如果是 MANAGER 则显示经理
-- 如果是 SALESMAN 则显示 销售人员,其它正常显示
SELECT ename,(SELECT CASEWHEN job = 'CLERK' THEN '职员'WHEN job = 'MANAGER' THEN '经理'WHEN job = 'SALESMAN' THEN '销售人员'ELSE job END) AS 'job'FROM emp;

MySQL攻略(2)相关推荐

  1. MySQL攻略(1)

    目录 一.使用命令行窗口连接MySQL数据库 操作示意图 二.数据库三层结构 三.数据在数据库中的存储方式 四.SQL语句分类 五.创建数据库 六.查看.删除数据库 七.备份恢复数据库 八.创建表 九 ...

  2. MySQL攻略 -DAO和增删改查通用方法-BasicDAO的认知与实现、案例练习

    文章目录 DAO和增删改查通用方法-BasicDao 分析问题 图形介绍 基本说明 应用实例 utils包 domain包 DAO包 test包 案例练习 DAO包 domain包 test包 DAO ...

  3. MySQL攻略 - JDBC程序SQL注入,PreparedStatement接口详解与案例练习,JDBC相关API小结

    文章目录 SQL注入 Statement详解 基本介绍 Navicat演示SQL注入 JDBC演示SQL注入 PreparedStatement详解 基本介绍 预处理好处 预处理案例(selete语句 ...

  4. MySQL攻略 - 函数篇(各类函数统计、练习、细节、表格)

    文章目录 合计/统计函数 count 案例练习 sum 案例练习 avg 案例练习 Max/Min 案例练习 分组查询 group by having 部门表源码 案例练习 字符串相关函数 函数表格 ...

  5. MySQL与优化有关的命令_MySQL优化全攻略-相关数据库命令

    MySQL优化全攻略-相关数据库命令 更新时间:2006年11月25日 00:00:00   作者: 接下来我们要讨论的是数据库性能优化的另一方面,即运用数据库服务器内建的工具辅助性能分析和优化. ▲ ...

  6. mysql数据库导出最大值_4.6 MySQL数据库导入与导出攻略

    4.6 MySQL数据库导入与导出攻略 4.6.1 Linux下MySQL数据库导入与导出 1. MySQL数据库的导出命令参数 主要是通过两个mysql和mysqldump命令来执行 (1) MyS ...

  7. apache php mysql配置详解,详细介绍:Apache+PHP+MySQL配置攻略_php基础

    一.系统要求: 本系统在REDHAT7.2版本测试通过 二.服务器端软件要求: 1:到APACHE的网络站下载APACHE WEB SERVER http://www.apache.org/ 2. 到 ...

  8. linux下安装配置apache+php,linux下安装apache与php;Apache+PHP+MySQL配置攻略

    linux下安装apache与php;Apache+PHP+MySQL配置攻略 时间:2019-10-09 20:04 1.apache 在如下页面下载apache的for Linux 的源码包 ht ...

  9. 超级菜菜鸟全程架站攻略(Mysql+Apche+PHP+Phpmyadmin+Zend,含本机安装)

    作者:蚂蚁啃骨头 时间:2005年5月1日 欢迎访问蚂蚁啃骨头社区:http://bbs.mykgt.com --本文是我5月份刚学PW一个来月时写的攻略,因自己对语言一窍不通,只好自己琢磨+摸索,用 ...

最新文章

  1. Vue.js最佳实践
  2. 7-3 寻找大富翁 (25 分)
  3. android+fastboot+命令,Android手机fastboot刷机命令
  4. redis批量删除键的操作
  5. HTML:学习笔记之meta标签详解
  6. 实现一个闹钟_iOS 14 闹钟:为啥这么难用?
  7. 190720每日一句
  8. 关于QT报C:\Program Files (x86)\sogoupinyin\Components\的错误
  9. IDEA炫酷主题推荐!非常好看!
  10. 皮尔逊相关系数(Pearson Correlation Coefficient)
  11. 更改Servlet需要重启Tomcat
  12. ms17010批量扫描备忘
  13. java jmail_jmail和javamail的区别
  14. MapReduce程序之Index串联案例
  15. python打印数字对应的星号_python打印表格式数据-星号或注释
  16. rename命令批量改名字
  17. Kotlin学习(4):编码规范
  18. 阿里来往转型SNS:聚焦兴趣社交 扎堆可分享至微信
  19. 笔记本 windows10使用耳机看视频 刚开始会有几秒的无声
  20. 多普达s1装了无驱U盘后往手机复制文件提示路径太深(附解决办法)

热门文章

  1. HDU-6447-YJJ's Salesman(离散化+01dp,线段树维护)
  2. 连续分配存储的四种管理方式
  3. 《要么读书,要么旅行,身体和灵魂总有一个在路上》读后感
  4. html如何设置网页的背景图片,使放大或缩小浏览器时,页面排版和背景可以随浏览器放大缩小而排版不会改变,
  5. SketchUp 2019 建筑透视剖面图教程
  6. 复选框至少选择一项_如果没有设计师,您至少要选98种材料,学会35项工艺!...
  7. Apache Zookeeper基本介绍
  8. Dbg2Excel_Word
  9. HAL库配置STM32F1系列定时器驱动步进电机(三)
  10. 举个栗子!Tableau 技巧(93):用 热图标记 地图或散点图