```mysql
# mysql select 可以查询常量,函数, 表达式
select 100;
select "xiaomo";
select 100 * 100;
select version()
```
```mysql
# mysql 起别名
select "xiaomo" as name;
select new_name as 姓名 from xxm;
# 默认为空格也可以
select new_name 姓名 from xxm;
# 其别名 如果为 all name 这样的 可以使用 '' 来表示。
select new_name 'all name' from xxm;
```
```mysql
# 去重 distinct
select distinct new_name from xxm;
```
```mysql
# concat 拼接
# 注意 null 和 任何字段拼接,结果都为null
# 如果为 null 的一列有数据 有 null 或者有值 可以使用ifnull 判断是否有值 ifnull(字段名,"默认值") : 例如: select concat(new_name, ifnull(age,0)) from xxm;
select concat(new_name,age) from xxm;
/*
运行结果:
zhangsan22 |
| tom22
| xiaohong22
*/
```
```mysql
# between and 在什么什么之间。
SELECT
new_name,
age
FROM
xxm
WHERE
age BETWEEN 5
AND 20
# 运行结果:
nice 18
nice 18
nice 18
nice 18
```
```mysql
# in 的使用
SELECT id,age,new_name FROM xxm WHERE age in (520,22)
```
```mysql
# is NULL 筛选出为空的数据。
SELECT id,new_name FROM xxm WHERE new_name is NULL
# 运行结果:
12 null
```
```mysql
# is not null 筛选出不为空的数据
SELECT id,new_name FROM xxm WHERE new_name is NOT NULL
# 运行结果:
1 zhangsan
2 tom
...
11 moyan
```
```mysql
# 安全等于 <> 不等于 != 或者 <>
1. 可以作为普通的运算符为 =
# 例如:
SELECT new_name FROM xxm WHERE new_name <=> 'zhangsan'
# 运行结果:
# zhangsan
```
```mysql
# order by 排序
# DESC 降序 , 从大到小
SELECT new_name,age FROM xxm WHERE age >= 22 ORDER BY age DESC
```
```mysql
# LENGTH 获取字符串长度
# 获取字符串长度按照降序来排序
SELECT LENGTH(new_name),new_name FROM xxm ORDER BY LENGTH(new_name) DESC
/*
运行结果:
8 zhangsan
8 xiaohong
5 moyan
*/
```
```mysql
# 字符函数
# LENGTH 获取字符串的字节数
# concat 字符拼接
# UPPER SELECT UPPER(new_name) FROM xxm # 将小写字母变成大写字母
# lower SELECT LOWER(new_name) FROM xxm # 将大写字母变成小写字母
# SUBSTR SELECT SUBSTR(new_name,1,2) FROM xxm # 截取字符长度,索引为一开始 这个是截取俩个字符
# SUBSTR SELECT SUBSTR(new_name,1) FROM xxm # 获取字符一后面所有的字符
# INSTR 返回字符第一次出现的索引,如果找不到返回0
SELECT INSTR(new_name,'san'),new_name FROM xxm
/*
运行结果:
6 zhangsan
0 tom
0 xiaohong
*/
# trim 去除左右俩边的空格
SELECT TRIM(new_name) FROM xxm
# lpad 左填充 如果不够10 位 * 号 填充
SELECT LPAD(new_name,10,"*") FROM xxm
# rpad 右填充
SELECT RPAD(new_name,10,"*") FROM xxm
# replace 将 xxm 中张三 替换成 lisi
SELECT REPLACE(new_name,'zhangsan','lisi') FROM xxm
```
```mysql
# round 四舍五入
SELECT ROUND(age) FROM xxm
# 小数点保留后俩位
SELECT ROUND(age,2) FROM xxm
# CEIL # 返回 >= 最少整数
SELECT CEIL(age) FROM xxm
# floor 返回该<= 最大整数
SELECT CEIL(age) FROM xxm
# TRUNCATE 截断, 只保留小数点1位数
SELECT TRUNCATE(age,1) FROM xxm
# MOD 取余
SELECT MOD(age,2) FROM xxm
```
```mysql
# now 返回年月日, 时分秒
SELECT NOW()
/*
运行结果:
2020-09-17 10:00:41
*/
# 只返回年月日
SELECT CURDATE()
/*
结果:
2020-09-17
*/
# 只返回时分秒
SELECT CURTIME()
/*
运行结果:
10:55:34
*/
# 获取 年月日 时分秒
SELECT YEAR(NOW()) # 年
SELECT MONTH(NOW()) # 月
SELECT MONTHNAME(NOW()) # 英文显示
SELECT DAY(NOW()) # 日
SELECT HOUR(NOW()) # 时
SELECT MINUTE(NOW()) # 分
SELECT SECOND(NOW()) # 秒
/*
运行结果:
2020
9
September
17
11
1
14
*/
/*
%Y 四位年份
%y 2位年份
%m 月份 补0 01 02
%c 月份不补 0 1 2 3
%d 日 01 02 03 ...
%H 时 24 小时
%h 时 12 小时
%i 分 00 01
%s 秒 00 ..
*/
# STR_TO_DATE 将 字符转换成 日期类型
SELECT STR_TO_DATE('2020-09-17','%Y-%m-%d')
# DATE_FORMAT 将日期转换成字符
SELECT DATE_FORMAT(NOW(),"%Y")
/*
运行结果:
2020年
*/
```
```mysql
# IF 相当于 if else
# 有没有年龄大于或者等于520的 ,如果有返回有,如果没有返回没有
SELECT IF(age>=520,'有','没有') FROM xxm
/*
运行结果:
没有
有
*/
```
```mysql
# CASE
SELECT id, new_name, CASE id
WHEN 1 THEN age * 2
WHEN 2 THEN age / 2
# 还可以继续写 你的条件
ELSE
age * 10
END FROM xxm
/*
运行结果:
1 zhangsan 44
2 tom 11.0000
3 xiaohong 220
4 nice 180
*/
```
```mysql
/*
sum 求和
avg 平均值
max 最大值
min 最小值
count 计算个数
*/
# 所有 年龄的 和
SELECT SUM(age) FROM xxm
# 所有 年龄的 平均值
SELECT avg(age) FROM xxm
# 最小值
SELECT min(age) FROM xxm
# 最大值
SELECT max(age) FROM xxm
# 计算个数
SELECT count(age) FROM xxm
# 聚合函数支持 distnct
SELECT count(DISTINCT age) FROM xxm
# 日期相差值
SELECT DATEDIFF('2020-10-01','2020-09-17')
/*
运行结果:
14
*/
```
```MYSQL
# group by 分组
# 每个年龄 的 平均年龄
SELECT AVG(age) FROM xxm GROUP BY age
# having 在group by 后面使用 having [聚合函数]
SELECT age FROM xxm GROUP BY age HAVING AVG(age)
```
```mysql
# 内连接
SELECT * FROM teacher,xxm WHERE xxm.t_id = teacher.id
# 内连接 语法 select 字段名, 字段名 FROM 表1 INNER JOIN 表2 ON 表1.外键id = 表2.id
SELECT t_name, new_name FROM xxm INNER JOIN teacher ON xxm.t_id = teacher.id
/*
运行结果:
toms zhangsan
toms tom
*/
# 左连接, 查询出所有没有老师交的学生
SELECT xxm.id, t_id, new_name FROM xxm LEFT JOIN teacher ON teacher.id = xxm.t_id WHERE xxm.t_id = 0
/*
运行结果:
3 0 xiaohong
6 0 nice
7 0 nice
*/
# 右连接
SELECT xxm.id, new_name,t_id FROM teacher RIGHT JOIN xxm ON xxm.t_id = teacher.id WHERE xxm.t_id = 0
```