赞
踩
select 列1 别名,…,列n 别名 from 表名1,…,表名n
[where 条件语句]
[group by 分组列1,…,列n] [having 筛选分组条件]
[order by 排序列1,…,列n]
以下所有的举例都基于下方的表student和course(只是为了举例,无实际意义)
<, >, =, >=, <=, !=或者<>(不等于), !>(不大于), !<(不小于)
and, or, not
//查询年龄小于18,大于22的学生姓名
select name from student where age<18 or age>22;
//查询选修了英语课程并且成绩大于60的学生姓名,科目和成绩
select s.name,c.c_name,c.grade from student s,course c
where c.sno=s.sno and c_name='大学英语' and grade>=60;
//查询年龄在18-22之间(包括18和22)的学生姓名
select name from student where between 18 and 22;
//查询年龄 不 在18-22之间的学生姓名
select name from student where not between 18 and 22;
//查询年龄为18,22,24的学生姓名
select name from student where in(18,22,24);
//查询年龄 不 为18,22,24的学生姓名
select name from student where not in(18,22,24);
//查询姓张的学生的信息
select * from student like '张%';
//查询姓张,且名字为两个字的学生的信息
select * from student like '张_';
//查询没有选课的学生姓名
select s.name from student s,course c
where c.sno=s.sno and course is null;
//查询课程成绩已经出来的学生姓名,课程和成绩
select s.name,c.c_name,c.grade from student s,course c
where c.sno=s.sno and grade is not null;
聚集函数:
注意:聚集函数只能用于select子句和group by中的having子句
//查询每个学生选修的课程数量,总学分,最高成绩,最低成绩,平均成绩
select s.name,count(c.c_name),sum(c.credit),
max(c.grade),min(c.grade),avg(c.grade)
from student s,course c where c.sno=s.sno
group by s.name;
注意:having 子句只能和group by 子句一起出现,不能单独出现
//查询张三这个学生选修的课程数量,总学分,最高成绩,最低成绩,平均成绩
select s.name,count(c.c_name),sum(c.credit),
max(c.grade),min(c.grade),avg(c.grade)
from student s,course c where c.sno=s.sno
group by s.name having name='张三';
升序使用asc,降序使用desc,默认值是升序
//查询张三这个学生的课程和成绩,并将成绩按照升序排列
select c_name,grade from course order by grade;
//查询张三这个学生的课程和成绩,并将成绩按照降序排列
select c_name,grade from course order by grade desc;
规律总结:
select top 每页显示条数 要查询的列表 from 表名 where 编号 not in(
select top (当前页码 - 1) * 每页显示条数 编号 from 表名 );
//每页显示3条数据,显示第3页的数据
select top 3 * from course where num not in(
select top 6 num from course
);
规律总结:
selct 列表 from 表名 limit (当前页码-1)*每页条数,每页显示条数;
//每页显示3条数据,显示第3页的数据
select * from course limit 6,3;
//每页显示3条数据,显示第3页的数据
select rowid,* from course;//n=1
select rowid,* from course where rowid between 7 and 9;
//每页显示3条数据,显示第3页的数据
select * from (
select rownum,* from (
select * from course
)where rownum <= 9
)t where t.rownum>6;
//查询course表中的"高级路由技术"字符串的长度
select length(c_name) from (
select c_name from course where c_name ='高级路由技术');
//将学号sno和姓名name两个字符串用_连在一起
select concat(sno,'_',name) from student;
//将course表中的课程名"database"字符串的首字母变成大写
select initcap(c_name) from (
select c_name from course where c_name ='database');
//将course表中的课程名"高级路由技术"变成"高级交换技术"
select insert(c_name,3,2,'交换') from (
select c_name from course where c_name ='高级路由技术');
//将course表中的课程名"English"改为全小写字母
select lower(c_name) from (
select c_name from course where c_name ='English');
//将course表中的课程名"database"改为全大写字母
select upper(c_name) from (
select c_name from course where c_name ='database');
//将course表中的课程名" 高等数学"前面的空格去掉
select trim(c_name) from (
select c_name from course where c_name =' 高等数学');
//将course表中的课程名"高级路由技术"截取显示"高级路由"
select left(c_name,4) from (
select c_name from course where c_name ='高级路由技术');
//将course表中的课程名"高级路由技术"截取显示"路由技术"
select right(c_name,4) from (
select c_name from course where c_name ='高级路由技术');
//将course表中的课程名"高级路由技术"截取显示"路由"
select substring(c_name,3,2) from (
select c_name from course where c_name ='高级路由技术');
//将course表中的课程名"高级路由技术"中的"路由"变成"交换"
select replace(c_name,substring(c_name,3,2),'交换') from (
select c_name from course where c_name ='高级路由技术');
//查看圆周率
select pi();
//生成100-999之间的一个随机数
select (900*rand()+100);
//生成一个随机的三位数(100-999)
select floor(900*rand()+100);
//生成一个随机的三位数(100-999)
select ceil(901*rand()+99);
//将course表中的成绩grade四舍五入都显示成整数
select round(grade,0) from (
select grade from course );
//将course表中的成绩grade截断到个位
select round(grade,-1) from (
select grade from course );
//求8/5的余数
select mod(8,5);
//求26的平方根(以小数5.0990195135927845显示结果)
select sqrt(26);
//求24.5的5次方(以小数8827351.53125显示结果)
select power(24.5,5);
//获取当前年月日
select curdate();
//获取当前精确的纳秒的时间
select curtime();
//获取当前年月日及其精确到纳秒的时间
select now();
//从course表中获取最近十天录入的成绩详情
select * from course
where grade_input_date between add_days(now(),-10) and now();
//查询六个月后是哪天
select add_months(now(),6);
//查询68天后是几月几日
select dateadd(DD,68,now());
//计算距离大年初一还有多少小时
select datediff(HH,now(),'2021-02-12');
//获取现在是19点13分多少秒
select datepart(S,now());
//查看今天是一周中的第几天(从周日开始算)
select dayofweek(now());
//查看今天是一年中的第几天
select dayofyear(now());
datepart取值 | datepart意义 |
---|---|
YEAR,YYYY,YY,SQL_TSI_YEAR | 年 |
MONTH,MM,M,SQL_TSI_MONTH | 月 |
DAY,DD,D,SQL_TSI_DAY | 日 |
HOUR,HH,SQL_TSI_HOUR | 时 |
MINUTE,MI,N,SQL_TSI_MINUTE | 分 |
SECOND,S,SQL_TSI_SECOND | 秒 |
MILLISECOND,MS,SQL_TSI_FRAC_SECOND | 毫秒 |
QUARTER,QQ,Q,SQL_TSI_QUARTER | 所在的季度 |
DAYOFYEAR,DY,Y | 在年份中所处的天数 |
WEEK,WK,WW,SQL_TSI_WEEK | 在年份中所处的周数 |
WEEKDAY,DW | 在一周中所处的天数 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。