sql语句
1.select 查询语句中,where 和 order by 在语句中哪个先执行?
—— 答案:where先执行,order by 在语句中最后执行。
举例: select name,age,phone from user where phone is not null order by age desc;
select name,(age + 1) as older,phone from user where phone is not null order by older desc;
分析: 通过第二条中对原始字段取别名的sql能成功执行可测出,order by 是在对前面的查询出来的结果进行排序的。
2.distinct 去重 distinct 在sql语句中,必须放在要查询的所有字段的第一个位置。 并且,如果 distinct 后面有多个字段,它是将所有字段都算上一起,联合去重。
3.substr 截取字符串 select name, age from user where substr(name, 1, 2) = 'ab';
substr(截取字段,截取的起始位置,一共截取的位数) substr(截取字段,截取的起始位置) —— 不加截取个数,表示一直截取到最后。
截取的位置: 正数——表示从字符串的左边开始数,第几个位置起,截取方向往右走进行截取。 负数——表示从字符串的右边开始往左边数第几个位置开始,截取方向也是往右走,开始截取几位。
select substr('abcdef', 2, 2); —— bc
select substr('abcdef', -1, 1); —— f select substr('abcdef', -1, 2); —— f
select substr('abcdef', -2, 1); —— e select substr('abcdef', -2, 2); —— ef
4.获取当前日期和时间 年-月-日 时:分:秒 now() -获取当前时间,获取当前这个sql语句开始执行的时间点。 sysdate() -获取当前时间,获取当前这个函数的开始执行的时间点,函数执行的时间有可能晚于sql语句开始执行的时间的。
select now(), sleep(2), sysdate(); -前后两个时间不一致,now()获取的时间早,sysdate()获取的时间比now()晚了sleep()的这几秒。 select sysdate(), sleep(2), now(); -前后两个时间一致。
年-月-日 current_date(); curdate(); current_date;
时:分:秒 current_time(); curtime(); current_time;
获取单独的 年、月、日、时、分、秒 year(某一个日期类型的数据) month(某一个日期类型的数据) day(某一个日期类型的数据) hour(某一个日期类型的数据) minute(某一个日期类型的数据) second(某一个日期类型的数据)
5.统计函数 count()
面试提问: count(*)和count(具体某个表的属性/字段/列)的区别是什么?
count(字段)-统计的是这个表的数据中,该字段不为空的数据个数 count(*)-统计的是这张表中所有数据的行数,也就是多少行记录
单表查询(DQL)语句总结 一个完整的查询语句的执行顺序 select... 5 from... 1 where... 2 group by... 3 having... 4 order by... 6