一、查询子句:
1.排序子句:order by 列,列.. [asc|desc] 排序,
select * from user order by account desc;
asc由小到大,desc由大到小,不加这个属性默认为由小到大排序
2.分页查询:limit index,count
select * from user limit 0,5; 从第0索引开始取出前五条显示
常用函数
❈
1.数学类
ABS(x):返回x的绝对值;
SQRT(x):返回非负数x的平方根;
PI():返回圆周率;
MOD(x,y)或%:返回x被y除的余数;
CEIL(x)、CEILING(x):返回大于或者等于x的最小整数值;
FLOOR(x):返回小于或者等于x的最大整数值;
ROUND(x,y):返回保留小数点后面y位,四舍五入的整数;
TRUNCATE(x,y):返回被舍弃的小数点后y位的数字x;
RAND():每次产生不同的随机数;
SIGN(x):返回参数的符号;
POW(x,y)和POWER(x,y):返回x的y次乘方的结果值;
EXP(x):返回以e为底的x乘方后的值;
LOG(x):返回x的自然对数,x相对于基数e的对数;
LOG10(x):返回x的基数为10的对数;
RADIANS(x):将参数x由角度转化为弧度;
DEGREES(x):将参数x由弧度转化为度。
SIN(x):返回x正弦,其中x为弧度值;
ASIN(x)返回x的反正弦,即正弦为x的值;
COS(x):返回x的余弦;
ACOS(x):返回x反余弦
TAN(x):返回x的正切;
ATAN(x)返回x的反正切;
❈
2.字符串
CHAR_LENGTH(str):返回字符串str的所包含字符个数;
LENGTH(str):返回字符串str的长度;
CONCAT(s1,s2,...):字符串连接;
CONCAT_WS(x,s1,s2,…):字符串连接, x是其它参数的分隔符;
INSERT(s1,x,len,s2) :返回字符串s1,s1中插入字符串s2;
LOWER (str)|LCASE (str):将字符串全部转换成小写字母;
UPPER(str)|UCASE(str):将字符串全部转换成大写字母;
LEFT(s,n):返回最左边指定长度的字符;
RIGHT(s,n):返回最右边指定长度的字符;
LPAD(s1,len,s2)| RPAD(s1,len,s2) :填充字符串函数;
TRIM(s1 FROM s)|LTRIM(s)|RTRIM(s):删除空格函数;
REPEAT(s,n):重复生成字符串函数;
SPACE(n):返回一个由n个空格组成的字符串;
REPLACE(s,s1,s2):字符串替换函数;
STRCMP(s1,s2):比较字符串大小函数;
SUBSTRING(s,n,len):获取子串函数;
LOCATE(str1,str)|POSITION(str1 IN str)|INSTR(str, str1):匹配子串开始位置函数;
REVERSE(s):将字符串s反转;
ELT(N,字符串1,字符串2,字符串3,…):返回指定位置函数;
❈
3.日期和时间
CURDATE()和CURRENT_DATE() :获取当前日期函数;
NOW():返回服务器的当前日期和时间;
CURTIME():返回当前时间,只包含时分秒;
UTC_DATE():返回世界标准时间日期函数;
UTC_TIME():返回世界标准时间函数;
TIMEDIFF(expr1, expr2):返回两个日期相减相差的时间数;
DATEDIFF(expr1, expr2):返回两个日期相减相差的天数;
DATE_ADD(date,INTERVAL expr type):日期加上一个时间间隔值;
DATE_SUB(date,INTERVAL expr type):日期减去一个时间间隔值;
DATE(date)、TIME(date)、YEAR(date):选取日期时间的各个部分:
EXTRACT(unit FROM date):从日期中抽取出某个单独的部分或组合;
DAYOFWEEK(date) 、DAYOFMONTH(date) 、DAYOFYEAR(date):返回日期在一周、一月、一年中是第几天
DAYNAME、MONTHNAME:返回日期的星期和月份名称;
DATE_FORMAT(date,format):格式化日期;
TIME_FORMATE(time,formate):格式化时间;
❈
4.流程控制
1)CASE 语句
case 列
when 条件1 then 值1
when 条件2 then 值2
when 条件3 then 值3
.......
else 值n end
实例:
select
case when account<=3 then -1
when account >3 and account <10 then 0
else 1 END result //result 为这个列的别名
from user;
2)IF
if(exp,exp1,exp2)
exp为true,则返回exp1
exp为false,则返回exp2
实例:
select
if(account>=10,'大于10','小于10') result
from user;
3)IFNULL
ifnull(exp1,exp2)
exp1为null,返回exp2
否则,返回exp1
select ifnull(born,date('2020-11-11')) from user;
4)NULLIF:与ifnull等同
分组查询
❈
5.分组查询:
分组函数
MIN最小值
MAX最大值
SUM求和
AVG求平均
COUNT计数
group by分组,根据指定的列分组,非分组列使用分组函数处理
select avg(cj) 平均分,banji from user group by banji;
分组条件筛选
having 条件
SELECT MAX(cj)最高分,MIN(cj)最低分,AVG( cj)平均分
,SUM(cj)总分,banji FROM `学生成绩表`GROUP BY
banji HAVING MAX(cj)>5
子查询:非相关子查询(查询嵌套)
SELECT * from (SELECT MAX(cj)最高分,MIN(cj)最低分,AVG( cj)平均分
,SUM(cj)总分,banji FROM `学生成绩表`GROUP BY
banji HAVING MAX(cj)>2) tmp ///一定要对所查询到的临时表起一个别名
WHERE 总分>6
多表联查
❈
第一种,逗号方式
select * from user,depart(两个表做笛卡尔积)
where user.depart = depart.departId;
第二种:
join on (内连接)
select * from user(表1)join depart(表2) on user.depart = depart.departId(条件)
与上述连接方式相同,都是先做笛卡尔积。
left join on(左连接)保留左表所有内容去匹配右表
select * from user
left join depart on user.depart = depart.departId
right join on(右连接)保留右表所有内容去匹配左表
select * from user
right join depart on user.depart = depart.departId