1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > case when 子查询_标准SQL——子查询 分组查询 多表联查

case when 子查询_标准SQL——子查询 分组查询 多表联查

时间:2019-03-14 15:55:48

相关推荐

case when 子查询_标准SQL——子查询 分组查询 多表联查

点击上方蓝色字关注我们!❈

一、查询子句:

1.排序子句:order by 列,列.. [asc|desc] 排序,

select*fromuserorder byaccountdesc;

asc由小到大,desc由大到小,不加这个属性默认为由小到大排序

2.分页查询:limit index,count

select* from userlimit0,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('-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 * fromuser(表1)joindepart(表2) onuser.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

嗨,你还在看吗?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。