MYSQL 基础(2)
```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 ```