Oracle 查询–从简单到复杂
查询某表所有数据
select * from tablename;
查询某表的某些数据
select colname1,col2…… from tablename;
查询时使用like关键字
like关键字是模糊查询
_—下划线表示任意字符
%—百分号表示任意位数的任意字符
select * from tablename like ‘_A%’; 查询第二字母是A的信息
查询integer类型数据时加上一个固定值
select colname+num [as newname] from tablename;
查询结果去除重复行
select distinct colname from tablename;
查询时带where条件
select */colname from tablename where > < = != and or;
查询空和非空是=NULL和!=NULL
查询时使用关键字as
在列名后加as可以更换显示的名字
查询时使用group by语句
GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组。
select 类别,聚合函数 from tablename group by 类别;
当查询多个字段,且使用了聚合函数时需要用group by,条件关键字要用having,且条件语句在最后。
查询时使用max(),min()函数–最大和最小
分别是找到最大值和最小值
select min(colnam) as min_NUM,max(colname) as max_NUM from tablename [where];
查询时使用sum()函数–累加
将此列或某条件后临时表的某列的值的和
select sum(colname) as sum_NUM from tablename [where] [group by colname];
查询时使用count()函数–统计行个数
select count(colname) as newname from tablename [where] [group by colname];
查询时使用pivot关键字–行转列
pivot关键字行转列
例如,表a有三个字段,学号、学科、成绩
如果先要显示成学号、每个学科、成绩(高中成绩单)形式就需要把字段二转为行
select * from tablename pivot(colname1 for colname2 in(‘字段2的子集1,字段2的子集2’));
查询时使用avg()函数–平均
select avg(colname) as newname from tablename [where] [group by colname];
*多个聚合函数、group by和having的使用
表a有字段 学号、选修学科、考试成绩
求选修课程超过2门课的学生的学号、平均成绩,选修的门数。
select 学号,count(学科) as xkms,avg(成绩) as pjcj from a group by 学号 having count(学科)>2;
查询的目的是看学生的情况,而学号和每一个学生是一一对应的,所以应当以学号为类别。
查询的结果升asc 降desc 序
select * from tablename order by [字段1 asc/desc],[字段2 asc/desc];
使用order by语句,可以加入多个升降序,按先后顺序。
order by:根据指定的列对结果集进行排序,默认升序。
*多个聚合函数、group by语句、having和order by语句的联合使用
表a有字段 学号、选修学科、考试成绩
求选修课程超过2门课的学生的学号、平均成绩和选课门数,并按平均成绩降序排列
select 学号,avg(成绩) as pjcj, count(学科) as xkms from a group by 学号 having count(学科) >2 order by pjcj desc;
多表联合查询–左连接 left join
select a.x,b.xx from a left join b on a.x=b.x;
以左表为主,按照on条件从右表匹配数据,若右表没有数据右表的特有字段则以NULL替代。
多表联合查询–右连接 right join
select a.x,b.xx from a right join b on a.x=b.x;
以右表为主,按照on条件从右表匹配数据,若右表没有数据左表的特有字段则以NULL替代。
多表联合查询–完全外连接 full join
select a.x,b.xx from a full join b on a.x=b.x;
以两个表为主,按照on条件在两个表匹配数据,匹配不到数据不会被删除,缺失字段设为NULL。
多表联合查询–内连接 inner join
select a.x,b.xx from a inner join b on a.x=b.x;
内连接只返回匹配到数据行,有缺失直接忽略。
多表联合查询–交叉连接 cross join
select a.x,b.xx from a cross join b;
可以不加条件,但返回的行数是a*b。
*多表联合查询、聚合函数、group by语句、order by语句
表a有字段 学号、选修学科、考试成绩
表b有学号、系、姓名
求某系选修课程超过2门课的学生的学号、姓名、平均成绩, 并按平均成绩从高到低排序
select S.Sno,S.Sname,avg(E.Grade) as avg_grade from a E inner b S on S.Sno=E.Sno and S.Sdept=’’ group by S.Sno having count(*)>2 order by avg_grade desc;
三表联合查询
select a.x,b.xx,c.xxxx from (a [inner join] b on a.x=b.x) [inner join] c on b.xx=c.xx;
|