数据库练习3之多表查询

这篇博客详细介绍了在数据库操作中进行多表查询的各种情况,包括查询员工的部门信息、查找没有员工的部门、部门的平均工资、以及复杂的多表连接和条件筛选等实际问题,帮助读者掌握SQL中的高级查询技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

多表查询

– 1. 查询员⼯的姓名及其所在部⻔的名字和城市

select ename,dname,loc 
from emp,dept 
where emp.deptno = dept.deptno;

– 2. 查询员⼯的姓名和他的管理者的姓名

select e1.ename,e2.ename 
from emp e1,emp e2 
where e1.mgr = e2.empno;

– 3. 查询员⼯的编号、姓名、部⻔编码、部⻔名称以及部⻔所在城市。要求:把没有部⻔的员⼯也查出来
select empno,ename,emp.deptno,dname,loc
from dept,emp
where emp.deptno = dept.deptno;
– 4. 查询员⼯的信息及其所在部⻔的信息。要求:把没有员⼯的部⻔也查出来

select emp.*,dept.* 
from dept left join emp 
on emp.deptno = dept.deptno;

– 5. 查询员⼯的信息及其所在部⻔的信息。要求:只查询没有员⼯的部⻔

select emp.*,dept.* 
from dept left join emp 
on emp.deptno = dept.deptno 
where ename is null;

– 6. 查询并显示SALES部⻔的职位

select distinct job 
from dept,emp 
where emp.deptno = dept.deptno 
and dname = 'sales';

– 7. 查询所有部⻔的名称、所在地、员⼯数量以及平均⼯资

select dname,loc,count(*),avg(sal) 
from dept,emp 
where emp.deptno = dept.deptno 
group by dept.deptno;

– 8. 执⾏下⾯两条查询语句,并⽐较查询结果

select e1.ename, e2.ename 
from emp e1, emp e2 
where e1.mgr = e2.empno;

select e1.ename, e2.ename 
from emp e1, emp e2 
where e1.empno = e2.mgr;
-- 显示顺序不同

– 9. 假设员⼯表中,员⼯和管理者中间只有⼀个层级,也就是说,每个员⼯最多只有⼀个上级,作为管理者的员⼯不再有上级管理者,并且,上级管理者相同的员⼯,他们属于同⼀个部⻔。找出EMP中那些⼯资⾼于他们所在部⻔的管理者⼯资的员⼯。

select e1.ename 
from emp e1,emp e2 
where e1.mgr = e2.empno 
and e1.sal > e2.sal;

– 10. 有USERLIST表如图所示:
在这里插入图片描述
有CHAEGE表如图所示:在这里插入图片描述
请⽤最少的SQL语句,产⽣如下表所示的查询结果:在这里插入图片描述
其中,数据是经过USERLIST、CHAEGE表进⾏合适的连接,并以ACCOUNT字段为关键字分组求和得
到。
特别注意:电话号码421004在USERLIST表中有⼀条记录,在CHAEGE表中并没有纪录。但是,在查
询结果中,合同CCCC具有⼀条记录。

select account,count(account) users,sunm(rent) rent,sum(fee01) 	fee01,sum(fee02) fee02,sum(fee03) fee03,sum(fee04) fee04 
from userlist u left join chaege c 
on u.telephone = c.telephone 
group by account;

– 11.有学员表student,⽤于记录学员、姓名下、性别、年龄、组织部⻔;有课程表course,⽤于记录课程编号、课程名称;还有选课表sc,⽤于记录学号、课程编号、成绩。三表的结构以及关联如图所示:在这里插入图片描述
完成如下要求的SQL语句:

  1. 查询选修了“计算机原理”的学⽣学号和姓名

  2. 查询“周星驰”同学选修了的课程名字

     select student.Sno,sname 
     from student,sc,course 
     where student.sno = sc.no 
     and sc.cno = course.cno 
     and cname = '计算机原理';
     
     select cname 
     from student,sc,course 
     where student.sno = sc.no 
     and sc.cno = course.cno 
     and sname = '周星驰';
    

– 12.有表test,结构如下:在这里插入图片描述
编写SQL语句,查询所有年龄⽐所属主管年龄⼤的⼈的ID和NAME。

select t1.name,t1.id 
from test t1,test t2 
where t1.manager = t2.id 
and t1.age > t2.age;

– 13。有表city记录城市信息。在这里插入图片描述
有表state,记录省份信息。在这里插入图片描述
想要得到下表所示查询结果:在这里插入图片描述
编写相应的SQL语句。

select cityno ,cityname,c.stateno,statename 
from city c left outer join state s 
on c.stateno = s.stateno;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值