常用命令
- 查看所有数据库
show databases
- 打开指定的库
use 库名
- 查看当前库的所有表
show tables
- 查看其它库的所有表
show tables from 库名
- 创建表
create table 表名{name type, name type...}
- 查看表结构
desc 表名
- 查看服务器版本
select Version()
单行函数
字符函数
长度:length
获取参数的字节个数
UTF-8:汉字三字节
GBK:汉字两字节
SELECT LENGTH("柒拾柒Web");
返回12
拼接:concat
拼接字符串
SELECT CONCAT("2","_","33");
返回”2_33”
大小写:upper|lower
前者变大写,后者小写
SELECT UPPER("webgray");
返回”WEBGRAY”
裁剪:substr
裁剪字符串,字符串首个索引从 1 开始
(str,索引起始)
(str,索引起始,步长)
SELECT SUBSTR("阿珍爱上了阿强",3,3);
返回”爱上了”
索引instr
**查找第一次起始索引,无则返回 0 **
(源数据,查找值)
select instr(13145556,4);
select instr("阿珍爱上了阿强","爱");
去空:trim
默认去前后空格,可指定内容
(元数据)
(指定内容 FROM 源数据)
select trim(" 阿珍 ");
select trim("-" FROM "------阿珍---");
select trim(1 FROM 11122211);
填充:lpad|rpad
左右填充补齐
(源数据,长度,填充内容)
SELECT LPAD("阿强",10,"珍");
替换:replace
替换
(源数据,旧数据,新数据)
SELECT REPLACE("111靓仔111",1,"");
字符例题
- 查询员工姓名,工资,以及工资提高20%的结果
SELECT e_name , e_salary , e_salary*1.2 "new salary" FROM employees;
- 将员工的姓名以首字母排序,并写出姓名长度
SELECT LENGTH(e_name) 长度, SUBSTR(e_name,1,1) 首字符, e_name FROM employees;
数学函数
四舍五入:round
四舍五入
(源数据,保留小数点位数)
select round(3.1415926535 , 7);
取整:ceil|floor
向上向下取整
小数:truncate
截断小数
(数据,截断位数)
取余:mod
取余: a-a/b*b
(被除数,除数)
日期函数
now
当前sql语句的 日期+时间
例如: 2022-09-10 17:29:54
sysdate
当前函数的耗时 日期+时间
(时间精度参数 0~6)
例如: 2022-09-10 17:29:54
curdate
日期
例如: 2022-09-10
curtime
时间
例如: 17:29:54
时间比较
时间输入合法即可比较
DATE_FORMAT
将数据库中的date数据格式化为String类型(常用)
(date,format)
STR_TO_DATE
将指定的时间格式的字符串按照格式转换为 DATETIME 类型的值。str要与format的格式保持一致,否则会报错。
(string,format)
流程控制
如果:if
类似三元运算符,只能if else
(条件 , 成立 , 不成立)
选择:case
类似 switch case
语境一: 处理等值 当switch case
CASE 条件
WHEN 常量1 THEN 语句
….
END语境二: 处理区间 当多重if
CASE
WHEN 条件1 THEN 语句
….
END
其它函数
常量
SELECT 100;
SELECT 'Web Gray';
运算表达式
SELECT 3*4;
版本
SELECT VERSION();
取别名
便于理解 便于区分重复字段
SELECT first_name FORM user AS 姓名;
SELECT first_name 姓名,gender "性 别" FROM user;
去重
SELECT DISTINCT class_id from user;
加号
SELECT '123'+4;
若强转成功作加法,失败为零
SELECT null+4;
有null为null
判断Null
IFNULL 函数判断并赋予默认值
SELECT IFNULL(class_id,1903) AS 班级,student_id FROM student;
转义
默认脏转义符为 ‘\‘ 可通过 ESCAPE 自定义
SELECT name_id FROM user WHERE full_name LIKE '$_柒%' ESCAPE '$';
转义符变为’$’
分组聚合函数
简单使用
SELECT SUM(salary) 求和, AVG(salary) 平均, MAX(salary) 最高, MIN(salary) 最低, COUNT(DISTINCT salary) 个数 FROM employees;
参数支持
- SUM , AVG
- 数值类型
- MAX , MIN , COUNT
- 任何类型
- 都忽略 null
- 都支持 DISTINCT 去重
分组函数详情
count
- 统计行数 :
SELECT COUNT(*) FROM table_name;
SELECT COUNT(1) FORM table_name;
SELECT COUNT(字段名) FROM table_name;
- 统计效率 :
- MYISAM 存储引擎下 ,
COUNT(*)
最优, 引擎有对应计数器. - INNODB 存储引擎下 ,
COUNT(*)
|COUNT(1)
都差不多. 比COUNT(字段名)
效率高.
- MYISAM 存储引擎下 ,
group by
位于语句末尾,因为分组函数查询的值为一行,协同查询的字段是
group by
后的字段例: 查找男女同学中各自的最大年龄
SELECT MIN(brithday),gender FROM student_test GROUP BY gender;
having
能分组前筛选就尽量用,相比having
性能差
分组后筛选时使用,位于
group by
语句末尾,筛选的数据源是分组.
分组案例
例: 查找男女同学中各自的最大年龄
SELECT MIN(brithday),gender FROM student_test GROUP BY gender;
例: 查找姓”唐”男女同学中各自的最大年龄
SELECT MIN(brithday),gender FROM student_test WHERE student_name LIKE "唐%" GROUP BY gender;
例: 统计名字字数大于1的其余各字数的人数
SELECT COUNT(*) 人数,LENGTH(student_name) 名字长度 FROM student_test GROUP BY LENGTH(student_name) HAVING 名字长度 > 3;