Oracle 查询--从简单到复杂

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;

Guess you like

Origin blog.csdn.net/rfdjds/article/details/121914403