oracle3复杂查询

发布 2023-05-19 17:51:28 阅读 3759

第三天连接查询和多表查询

1.分组函数。

**gmax

minsum

count执行顺序:

select

wheregroup by

h**ing

order by

返回不重复的部门编号数。

sql> select count(distinct deptno) from emp;

得到每个部门的人数和最低薪水,平均薪水。

sql> select deptno,count(*)min(sal),**g(sal) from emp group by deptno;

显示每个部门的每种岗位的平均工资和最低工资。

select **g(sal),max(sal),deptno,job from emp group by deptno,job;

注意:出现在分组函数group by后面的字段可以不包含在select语句后。

sql>select **g(sal) from emp group by deptno;

出现在select语句后的非单值函数必须出现在group by 之后。

sql>select deptno,ename,**g(sal) from emp group by deptno,ename;

2.过滤。h**ing 必须是使用了分组函数之后。

h**ing 分组条件。

3、笛卡尔积。

在没有连接条件的情况下,会出现笛卡尔积的全部结果。

4、连接。连接n个表,至少需要n-1个连接条件。

【内连接】只连接匹配的行(交集)

select from a join b on

select from a,b where

■等值连接。

select ename,dname from emp,dept where

■非等值连接。

查询员工薪水的等级,姓名和工资。

select ename,sal,grade from emp,salgrade where sal between losal and hisal;

【外连接】没有+的b一侧显示全部记录,有+的a显示符合匹配条件的记录。

sql> select from emp e,dept d

2 where

■全外连接,包含左右连个表中的全部行。

select from a full outer join b on

■左外连接left outer join:包含表的全部行(不管右边表中是否匹配的行以及右边表中全部匹配的行)

select from a left outer join b on

或select from a,b where

■右外连接。

select from a right outer join b on

或select from a,b where

■自连接。对同一个采用别名的方式表进行连接(看成是两个表)

查询smith员工的上级(先查出所有员工的上级,然后在选择员工为smith的记录)

select from emp e,emp m

where and 'smith';

■交叉连接:cross join和笛卡尔积相同。

■自然连接:natural join,以相同列为条件创建等值的列,不推荐使用,没有任何相同的字段,就会差生笛卡尔积对数据库的维护产生影响。

select from emp e natural join dept d;

使用using语句,使用两个表中列相同的情况下。

select from emp e join dept d using(deptno);

on子句的应用,指定额外的连接条件。

格式: a join b on 条件。

sql> select ename,dname from emp join dept on

sql> select ename,dname,city from emp,depart,loc

2 where and

sql> select ename,dname,city from emp

2 join depart on

3 join loc on

■the ta 连接。

使用等值以外的条件来匹配左右两个表中的行。

select from a join b on

5.子查询:

单行子查询,返回一行数据的子查询。

多行子查询,返回多行数据的子查询。

大于scott薪水的用户。

sql> select ename,sal from emp where sal>(select sal from emp where ename='scott');

获得职位和scott相等的员工。

sql> select ename,job from emp where job=(select job from emp where ename='scott');

获得职位和scott相等的员工,不包括scott

select ename,job from emp

where job=(select job from emp where ename='scott')

and ename!='scott';

得到高于平均工资的人。

select * from emp where sal>(select **g(sal) from emp);

多行子查询。

查询部门编号为10的工作相同的雇员的所有信息。

sql> select * from emp where job in(

2 select distinct job from emp where deptno=10);

使用h**ing子句。

sql> select deptno,min(sal) from emp group by deptno

2 h**ing min(sal)>(select min(sal) from emp where deptno=20);

6.多表查询。

查询每个部门工资最高的人的详细资料。

>any大于最小值。

>all大于最大值。

sql> select empno,ename,sal,job

2 from emp

3 where sal 4 (select sal from emp where job='manager');

3oracle查询语句练习

实验三 查询语句的练习。一 实验目的。1.掌握select语句的基本语法 2.掌握子查询的表示 3.掌握多表查询的表示 二 实验内容及步骤。以scott登录数据库,查看scott用户已经存在的 并使用scott用户已存在的 做以下查询。注 把查询语句粘贴到相应题目下面,并保存。1 查看dept表结构...

ORACLE高级查询

本章目标 多表查询。联接查询 inner join 内联接 left outer join 左外联接 right outer join 右外联接 full join 全联接 子查询。集合操作。union 联合 union all 联合所有 intersect 交集 minus 减集 一 连接类型。o...

oracle常见查询练习

以下作业要求将每一题的执行命令脚本按顺序保存起来,并且加上适当的注释说明。均为使用pl sql完成的作业!1 编写带输入参数的过程,实现员工查询,根据雇员编号,查询雇员的姓名,职务和部门名称,如果没有找到,要提示雇员编号未找到!使用exec命令进行测试。create or replace proce...