子查询
子查询:把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_开头命名
函数中不能产生查询结果集