JSD-2204-连接查询-JDBC-Day10

1.连接查询

1.1综合练习(之前学习的小练习)

  • 查询工资在1000到2000之间有领导的员工信息
    • select * from emp where sal between 1000 and 2000 and manager is not null;
  • 查询有领导的员工工资按照降序排序取前三条数据
    • select * from emp where manager is not null order by sal desc limit 0,3;
  • 查询1号和3号部门出现了哪几种不同的工作
    • select distinct job from emp where dept_id in(1,3);
  • 查询出只有一个人的工作名称
    • select job from emp group by job having count(*)=1;
  • 查询每种工作的人数按照人数降序排序
    • select job,count(*) from emp group by job order by count(*) desc;
  • 查询人数最多的工作名称
    • select job from emp group by job order by count(*) desc limit 0,1;
  • 查询唐僧领导的信息
    • select * from emp where id=(select manager from emp where name='唐僧');
  • 查询比名字中包含飞员工工资高的员工信息
    • select * from emp where sal>(select sal from emp where name like "%飞%");

1.2关联关系

  • 指创建表时,表和表之间存在的业务关系.
  • 包含以下几种关系:
  • 一对一: 有AB两张表, A表中的一条数据对应B表中的一条数据,同时B表中的一条数据也是对应A表中的一条数据
  • JSD-2204-连接查询-JDBC-Day10_第1张图片
  • 一对多:有AB两张表, A表中的一条数据对应B表中的多条数据,同时B表中的一条数据对应A表中的一条数据
  • JSD-2204-连接查询-JDBC-Day10_第2张图片

 

  • 多对多:有AB两张表, A表中的一条数据对应B表中的多条数据,同时B表中的一条数据也对应A表中的多条数据
  • JSD-2204-连接查询-JDBC-Day10_第3张图片
  • 如果两张表之间存在业务关系,如何建立关系?
    • 一对一: 在两张表中的任意一张表里面添加建立关系的字段,指向另外一张表的主键
    • 一对多: 一对多的两张表, 在"多"的表里面添加建立关系的字段,指向另外一张表的主键
    • 多对多: 需要创建一个单独的关系表,表里面至少两个字段指向另外两张表的主键 .

1.3关联查询

  • 同时查询存在管理关系的多张表的数据时使用的查询方式
  • 包含三种查询方式:
    • 等值连接
    • 内连接
    • 外连接

1.3.1关联查询之等值连接

  • 格式: select * from A,B where A.x=B.x
  • 查询每个员工的姓名和对应的部门名
    • select e.name,d.name
    • from emp e,dept d where e.dept_id=d.id;
  • 查询工资高于2000的员工姓名,工资和对应的部门名和地址
    • select e.name,sal,d.name,loc
    • from emp e,dept d where e.dept_id=d.id and sal>2000;

1.3.2关联查询之内连接

  • 等值连接和内连接查询到的数据是一样的都是两个表的交集数据,只是书写格式不一样
  • 格式: select * from A join B on A.x=B.x
  • 查询每个员工的姓名和对应的部门名
    • select e.name,d.name
    • from emp e join dept d on e.dept_id=d.id;
  • 查询工资高于2000的员工姓名,工资和对应的部门名和地址
    • select e.name,sal,d.name,loc
    • from emp e join dept d on e.dept_id=d.id where sal>2000;

1.3.3关联查询之外连接

  • 外连接查询到的是一张表的全部和另外一张表的交集
  • 格式: select * from A left/right join B on A.x=B.x
  • 查询所有员工姓名和对应的部门信息
    • insert into emp(name,sal) values('灭霸',5);
    • select e.name,d.*
    • from emp e left join dept d on e.dept_id=d.id;
  • 查询所有部门名,部门地址和对应的员工姓名
    • select d.name,loc,e.name
    • from emp e right join dept d on e.dept_id=d.id;

1.3.4关联查询总结:

  • 如果查询的数据是来自多张表,则需要使用关联查询

你可能感兴趣的:(sql,数据库)