WEB——06.MySQL(3)

本文详细介绍了MySQL中的子查询和关联查询。子查询包括了查询工资高于最高工资员工、最高工资员工信息以及与特定员工相同工作的人。关联查询则涵盖了一对一、一对多和多对多的关系建立,以及等值连接、内连接和外连接的使用。通过实例展示了如何查询工资高于2000的员工及其部门信息,以及查询特定员工的学生。总结指出,等值连接和内连接用于查询交集数据,外连接用于获取全集和交集数据。
摘要由CSDN通过智能技术生成

WEB——06.MySQL(3)

子查询(嵌套查询)

  • 查询工资高于程序员最高工资的员工信息

    select * from emp where sal>(select max(sal) from emp where job=“程序员”);

  • 查询工资最高的员工信息

    select * from emp where sal=(select max(sal) from emp);

  • 查询和孙悟空相同工作的员工信息

    select * from emp where job=(select job from emp where name=“孙悟空”) and name!=“孙悟空”;

  • 查询拿最低工资员工的同事们的信息(同事指同一部门)

​ select * from emp where dept_id=( select dept_id from emp where sal = (select min(sal) from emp)) and sal != (select min(sal) from emp ;

关联关系

  • 只一个项目中创建的表和表之间存在的业务关系
  • 关系如下:
    • 一对一:有AB两张表,A表中一条数据对应B表的一条数据,B表中一条数据对应A表的一条数据。
    • 一对多:有AB两张表,A表中一条数据对应B表的多条数据,B表中一条数据对应A表的一条数据。
    • 多对多:有AB两张表,A表中一条数据对应B表的多条数据,B表中一条数据对应A表的多条数据。

表和表之间如何建立关系?

  • 一对一:在AB任意一张表里添加一个建立关系的字段 指向另外一张表的主键

  • 一对多:在一对多的两张表中,在“多”的表里面添加建立关系的字段 指向另外一张表的主键

  • 多对多:创建一个单独的关系表,表里面有两个字段指向另外两个表的主键

  • 多对多举例: 苍老师: 小红,小花,小绿 传奇哥: 小花,小绿
    create table t(id int primary key auto_increment,name varchar(20));
    create table s(id int primary key auto_increment,name varchar(20));
    create table t_s(tid int ,sid int);
    insert into t values(null,‘苍老师’),(null,‘传奇哥’);
    insert into s values(null,‘小红’),(null,‘小花’),(null,‘小绿’);
    insert into t_s values(1,1),(1,2),(1,3),(2,2),(2,3);

​ 老师表:t
​ 学生表:s
​ 关系表:t_s

  • 查询每个老师名字和对应的学生姓名

    select t.name,s.name
    from t join t_s ts on t.id=ts.tid join s on s.id=ts.sid;

  • 查询苍老师的学生姓名

select s.name from t join t_s ts on t.id=ts.tid join s on s.id=ts.sid where t.name=“苍老师”;

关联查询

  • 查询存在关联关系的表的查询方式称为关联查询

  • 关联查询的方式包括:等值连接,内连接,外连接

等值连接

  • 格式:select * from A,B where 关联关系 and 其他条件;
  • 查询工资高于2000的员工的姓名和对应的部门名

​ select e.name ,d.name from emp e, dept d where e.dept_id = d.id and sal>2000;

  • 查询程序员的姓名,工资,部门名,部门地点

    select e.name,e.sal,d.name,d.loc from emp e,dept d where e.dept_id = d.id and job = “程序员”;

内连接

  • 等值连接和内连接查询到的是一样的数据,推荐使用内连接

  • 格式:select * from A join B on 关联关系 where 其他条件;

  • 查询工资高于2000的员工姓名和对应的部门名

    ​ select e.name ,d.name from emp e inner join dept d on e.dept_id = d.id where sal>2000;

  • 查询程序员的姓名,工资,部门名,部门地点

    select e.name,e.sal,d.name,d.loc fom emp e join dept d on e.dept_id=d.id where job=“程序员”;

外连接

  • 等值连接和内连接查询到的是两个表的交际数据

  • 外连接查询到的是一张表的全部和另外一张表的交集

  • 格式:select * from A left/rigth join B on 关联关系 where 其他条件;

  • 查询所有员工姓名和对应的部门名

    select e.name d.name from emp e left join dept d on e.dept_t=d.id;

  • 查询所有部门的名字,地址,和对应的员工姓名,工资

    select d.name d.loc e.name,e,sal from emp e right join dept d on e.dept_id=d.id;

关联查询总结

  • 如果查询的数据是两个表的交际数据,使用等值连接或内连接(推荐)
  • 如果查询的是一张表的全部和另外一张表的交际则使用外连接
    pt d on e.dept_id=d.id;

关联查询总结

  • 如果查询的数据是两个表的交际数据,使用等值连接或内连接(推荐)
  • 如果查询的是一张表的全部和另外一张表的交际则使用外连接
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值