文章目录
0. 语法规范
- 不区分大小写 - 建议:关键字大写,其他小写
- 每条命令需分号结尾,没遇到分号前SQL语句都没结束
- 注释
3.1 单行注释:#注释 或者 --注释
3.2 多行注释:/* 注释 */
- 防冲突 - 可能有时候列名跟关键字重合。故需要字符提示不是关键字
# 使用 `列名` 标明不是关键字
select `name` from book;
1. 常用命令 - 启动 - 必须掌握
- 查看MySQL版本号
# 登录MySQL服务器后
select version();
# 没有登录仅命令行模式
mysql --version
或
mysql -V
- 登录、退出
# 登录
mysql [-h 主机名 -p 端口号] -u 用户名 -p密码
# 退出
exit 或者 Ctrl + C
- 查看当前所有数据库
show databases;
- 打开指定库
use 库名;
- 查看当前使用库所有表
show tables;
- 查看表结构
desc 表名;
- 更改库的字符集
alter database 库名 character set 字符集
- 查看表中的 主键、外键、唯一键
# 列名竖向排列
show index from 表名
# 列名横向排列
show index from 表名\G
- 查看MySQL支持的引擎 - innodb支持事务
show engines;
- 清屏命令
# Linux中
system mysql
2. 关键命令
2.1 常量输出 - 不查询表
普通表达式使用
# 常量
SELECT 100;
SELECT '你哄啊';
# 表达式
SELECT 100%98;
# 函数
SELECT version();
+号使用 - 只有算术运算功能,没有字符拼接
# 输出198
select 100+98
# 输出 98 -- 字符相加永远为0
select 'aaa' + 98
# 输出 Null
select NULL + 98
2.2 表输出格式命令
- 表别名
# 方式1
select 列名 as '别名' from 表名
# 方式2
select 列名 '别名' from 表名
- 去重 - 比较显示列拼接起来是否相同,相同则去除
select distinct 列名 from 表名
3. 条件表达式
3.0 判断NULL值
两者效果一样
select 列名 from 表名 where 列名 <=> null;
select 列名 from 表名 where 列名 is null;
3.1 简单条件运算符 - 不可用来判断NULL值
> < =
!=
<>
>=
<=
特殊
<=> 相当于=的作用。可用来判断null值
3.2 逻辑表达式
&& and
|| or
! not
3.3 模糊、范围查询表达式 - 这里有专门判断NULL值表达式
like
between and
in
is null
is not null
# _ 这是关键字,需要进行转义
# 默认转义字符为 \
SELECT name FROM book WHERE name like '%\%';
# 修改转义字符
SELECT name FROM book WHERE name like '%$_%' ESCAPE '$';
4. 常用内置函数
4.1 字符函数
大小写转换、字符拼接、截取字符、寻找字符、去除头尾字符、替换字符、计算字符字节
# 大小写转换
SELECT LOWER/UPPER( 列 ) FROM 表
# 字符拼接 - 因为mysql的+号无拼接功能
SELECT CONCAT(字符, 字符, 字符......) FROM 表
# 截取字符串 - 起始序号为1,不是0
# 从序号为2的位置,截取到最后
SELECT SUBSTR(列, 2) FROM 表名;
# 从序号为2的位置,截取两个字符
SELECT SUBSTR(列, 2, 2) FROM 表名;
# 找子字符在主字符的序号位置,找不到则返回0,找到则返回子字符第一个字符在主字符的位置序号,从1开始
SELECT INSTR(列, '子字符') from book;
# 去除头尾指定字符,默认去除空格
# 去字符串头尾空格
SELECT TRIM( 列名 ) FROM 表
# 去字符串头尾指定字符
SELECT TRIM( 'b' from 列名 ) FROM 表
# 替换字符
SELECT REPLACE(列名, '被替换的字符', '替换字符') FROM 表;
# 输出字节长度
SELECT LENGTH( 列名 ) FROM 表
# 填充字符
# 左填充
SELECT LPAD(列名, 字符串字符数,'需要左填充的字符')
# 右填充
SELECT RPAD(列名, 字符串字符数,'需要左填充的字符')
# 截取有分割符的字符
SELECT SUBSTRING_INDEX('字符串', '分隔符', 前n个字符组)
#截取字符 - 从第一个或最后一个开始截取
SELECT LEFT/RIGHT( '字符串', 截取字符个数 )
4.2 数学函数
# 四舍五入
SELECT ROUND( 列名, 保留小数位数 ) FROM 表
# 取余
SELECT MOD(5,2);
# 截取小数位数
SELECT TRUNCATE( 列, 小数位数 ) FROM 表
# 向上取整数 >=该数的最小整数
SELECT CEIL( 列 );
# 向下取整数 <=该数的最大整数
SELECT FLOOR( 列, 小数位数 );
# 0-1之间的随机小数
SELECT RAND();
4.3 日期函数
获取系统日期、时间,截取年月日时分秒、字符转日期、日期转字符、比较日期
# 获取系统日期+时间
SELECT NOW();
# 获取系统日期,不包时间
SELECT CURDATE()
# 获取时间,不包日期
SELECT CURTIME();
# 根据实参日期,获取年份
select year(now())
select year('1998-01-23')
# 根据实参日期,获取月份,前者数字,后者英文
SELECT MONTH(now());
SELECT MONTHNAME('1998-05-25');
# 根据实参日期,获取日
SELECT DAY(now());
# 根据实参日期,获取24小时制的时、分、秒
SELECT HOUR(now());
SELECT MINUTE(now());
SELECT SECOND(now());
#日期添加年、月、日
//减日期
SELECT DATE_SUB( 日期, INTERVAL n Year/Month/Day )
//添加日期
SELECT DATE_ADD( 日期, INTERVAL n Year/Month/Day )
# 字符串格式 转 日期格式
SELECT STR_TO_DATE('9-13-2020','%m-%d-%Y')
# 日期格式 转 指定字符格式
SELECT DATE_FORMAT( NOW(),'%Y年%m月%d日' )
SELECT DATE_FORMAT( '2018-6-5','%Y年%m月%d日' )
4.4 其他函数
# 如果第一个参数为NULL值,则转为输出第二个参数值,否则输出原值
select IFNULL(列名, 数值) FROM 表;
# 判断值是否为NULL,如果是则返回1,不是则返回0
SELECT ISNULL(列名) FROM 表
4.5 流程控制函数
if、case语句
# if关键字 - 如果列值大于5,则输出 '大',否处输出 '小'
SELECT (列名 > 5, '大', '小') FROM book;
# case关键字
select 其他列名,
case 判断的字段、表达式、列名
when 常量1 then 显示值1
when 常量2 then 显示值2
else 显示值3
end as '列别名'
from 表名;
-----------
select 其他列名,
case 判断的字段、表达式、列名
when 逻辑判断 then 显示值1
when 逻辑判断 then 显示值2
else 显示值3
end as '列别名'
from 表名;
4.6 分组函数
# 忽略NULL
sum 求和
avg 平均值
max 最大值
min 最小值
# 不忽略NULL
count 计算行数