mysql第三章

子查询

​ 子查询:把A的查询结果给B做参考(A子 B 父)
多级子查询

select * from orderdetail where Ordernum in

(select Ordernum from orders where CusID =

(select CusID from customers order by

Cuspoint desc limit 1))

语句解释
​ – 1.查询积分最高的客户的 id 号
​ – 2.通过子句查询id号来查询出订单号
​ – 3.通过子句查询出订单号来查询出对应订单的详情

子查询的结果是单行单列 ,条件可以使用 = > < >= <= !=

SELECT * FROM orders WHERE CusID =
(SELECT CusID FROM customers
ORDER BY CusPoint DESC LIMIT 1)

子查询的结果是多值 ,条件可以使用 in 、 not in
案例
select * from customers where cusid not in

(select distinct cusid from orders)

语句解释
– 1.查询所有下过单的客户id
– 2.通过这个子查询得到客户id号作为条件 ,来筛选出未下过单的客户

函数

系统函数

聚合函数:

​ max()
​ min()
​ count()
​ sum()
​ avg()

日期函数:

​ 1.SELECT NOW()
​ 获取当前的系统时间
​ 2.SELECT CURDATE()
​ 获取当前日期
​ 3.SELECT CURTIME()
​ 获取当前的时分秒

获取日期或时间中某个单位的整数:

​ 1.SELECT YEAR( d )
​ 获取指定时间的年
​ 2.month(d):月份
​ 3. dayofmonth(d):日
​ 4.hour(d):小时
​ 5.minute(d):分钟
​ 6.second(d):秒
​ 7.weekday(d) 获取这是一周的第几天
​ 周一为0
​ 8.week(d):一年中的第几周
​ 9.SELECT DAYOFYEAR(NOW()) :获取一年当中的第第多少天

日期运算:

1.datediff(d1,d2):计算d1-d2相差的天数
SELECT DATEDIFF(NOW(),’2001-2-6 08:59:33’);
单位:天
2.adddate(d,n):在d日期的基础上增加n天
SELECT ADDDATE(NOW(),5)
3.SUBdate(d,n):在d日期的基础上减少n天
SELECT SUBDATE(NOW(),50)
4.SELECT DATE_ADD(d,INTERVAL n type)
d:表示一个日期
INTERVAL:固定的关键字
n:数值
为正数:增加
为负数:减少
type:表示时间单位
year
month
day
week

日期格式的转换:

​ 用的函数:
​ date_format(时间,格式字符)
​ 案例
​ SELECT DATE_FORMAT(NOW(), ‘%Y年%m月%d日’);
​ 获取当前时间的年月日进行组合
​ 格式字符参考
​ %Y:表示四月年份
​ %m表示两位的月份
​ %d:表示两位日数
​ …可以参考课后资料表

数字函数:

​ SELECT ROUND(‘3.1465926’,2);
​ 四舍五入保留2位小数
​ SELECT ROUND(3.54)
​ 四舍五入保留整数
​ truncate(x,y):保留y位小数的值,只舍不入
​ ceil(x):返回大于等于x的最小整数(向上取整)
​ floor(x):与ceil相反,返回小于等于x的最大整数(向下取整)
​ rand():产生一个0~1的小数

字符串函数:

​ 1.concat(s1,s2,…):将多个字符串拼接
​ SELECT CONCAT(CusLogin,CusNick) FROM customers
​ 2.concat_ws(s,s1,s2,….):将多个字符串使用s进行拼接
​ SELECT CONCAT_WS(‘-‘,CusLogin,CusNick) FROM customers
​ 注意:在MySQL中不能使用+号来实现字符串拼接
​ 3.char_length(s):获取字符串字符长度
​ SELECT CHAR_LENGTH(‘A112班’)
​ 4.length(s):获取字符串字节长度
​ 5.right(x,n):截取x字符串的后面n个字符
​ 6.left(x,n):截取x字符串的前面n个字符
​ 7.substring(x,start,length):对x字符串进行截取,从start位置开始截取length个
​ SELECT SUBSTRING(‘这是一段字符串’,1,4);
​ 8.Upper(s):转化为大写
​ 9.Lower(s):转化为小写
​ 10.replace(s1,s2,s3):在s1的字符串中查找s2字符串并替换成s3字符串
​ locate(substr,str) 查找substr在str中第一次出现的位置
​ locate(substr,str,pos) 查找substr在str中pos后第一次出现的位置
​ 注意:mysql的索引从1开始
​ md5转换
​ 目的
​ 将字符串s转化为md5编码

字符串转换

​ 格式:
​ convert(x,type): 将x转换为type类型并返回
​ type的取值:
​ 字符类型:char(length)
​ 日期类型:date、time,datetime
​ 浮点型:decimal
​ 整数:signed
​ 案例:
​ SELECT CONVERT(‘123a’,SIGNED)+45;

二、自定义函数

语法格式

​ 创建
​ DROP FUNCTION IF EXISTS fn_test;
​ CREATE FUNCTION 函数名(参数 数据类型) returns 返回值类型
​ 没得花括号
​ return 返回值;
​ 调用
​ SELECT 函数名(传参)

注意事项

​ 必须有返回类型
​ 函数名使用fn_开头命名
​ 函数中不能产生查询结果集

删除函数 :drop function 函数名
© 2021 Hero All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero