MySQL连表查询的实现

 更新时间:2023年06月07日 14:48:12   作者:不是很帅@  
在Mysql数据库中,表的连接操作是非常重要的,能够将不同的表结合在一起,实现更加丰富和复杂的查询操作,本文主要介绍了MySQL连表查询的实现,感兴趣的可以了解一下

1.连接查询—内连接

1.1隐式内连接

笛卡尔乘积,错误示范

select student.id ,teacher.t_id from student,teacher ;

 正确示范

 后面要加上条件证明两表有相同的字段

select s.id, t.t_id from student s,teacher t where s.teacher_id= t.t_id;

1.1.1等值连接和非等值连接

等值连接指的多表查询语句中的连接条件使用的是等号。

非等值连接指的是多表查询语句中的连接条件使用的不是等号而是>,>=,<,<=,!=以及使用between进行范围判断的称之为非等值连接。

1.2.显示内连接—inner join

-- 显示连接: A表 inner join B表 on 连表条件。 
2.查询每一个员工的姓名,及关联的部门的名称〔显式内连接实现)

select * from tb_emp  inner join tb_dept on tb_emp.dept_id=tb_dept.id;
select * from tb_emp e inner join tb_dept d on e.dept_id=d.id;

-- 上面的 inner可以省略。

select * from tb_emp e  join tb_dept d on e.dept_id=d.id;

2.连接查询—外连接

2.1 左外连接

-- 语法: select 查询列集 from A表 left join B表 on 连表条件
-- 1.查询emp表的所有数据, 和对应的部门信息(左外连接)

select * from tb_emp e left outer join tb_dept d on e.dept_id = d.id;
select * from tb_emp e left join tb_dept d on e.dept_id=d.id;

-- 2.查询dept表的所有数据,和对应的员工信息(右外连接)

2.2右外连接

select * from tb_emp e right join tb_dept d on e.dept_id=d.id;

3.自连查询

自己和自己相连接查询。
select * from A表 join A表 on 连表条件。

-- 1.查询员工及其所属领导的名字。你要查询的结果再一张表中,但是还不能使用单表查询得到结果。

select a.name,b.name from tb_emp a join tb_emp b on a.managerid=b.id;

-- 2.查询所有员工 emp及其领导的名字emp ,如果员工没有领导,也需要查询出来

select a.name,b.name from tb_emp a left join tb_emp b on a.managerid=b.id;

4.子查询

一个查询的结果 作为另一个查询的条件 或者 临时表。
-- 查询市场部的员工信息-----
-- 子查询返回的结果一列一条记录。 这个时候可以用

 select * from tb_emp where dept_id=(select id from tb_dept where name='市场部')

-- 查询市场部和研发部员工的信息。in
-- -- 查询市场部和研发部员工的信息。
-- a) 查询市场部和研发部的编号

select id from tb_dept where name in('市场部','研发部')

-- b) 再员工表中根据部门编号查询员工信息

select * from tb_emp where dept_id in (select id from tb_dept where name in('市场部','研发部'))

5.组合查询

多个查询的结果 组合到一起。
sql union sql --->把这两条sql查询的结果组合到一起。如果有重复记录则合并成一条。
sql union all sql--->把这两条sql查询的结果组合到一起。如果有重复记录,不合并。

注意: 这两条sql返回的字段必须一样。

select name from tb_emp where salary>8000
UNION 
select * from tb_emp where age>40;

6.注意事项

如果查询语句中出现了多个表中都存在的字段,则必须指明是哪个表中的字段

建议:从sql 优化的角度,建议多表查询时,每个字段前都指明其所在的表。

正确代码

select s.id, t.t_id from student s,teacher t where s.teacher_id= t.t_id;

可以给表起别名,在 SELECT 和 WHERE 中使用表的别名。

如果给表起了别名,一旦在 SELECT 或 WHERE 中使用表名的话,则必须使用表的别名,而不能再使用表的原名。

错误示范

select s.id, t.t_id from student s,teacher t where student.teacher_id= teacher.t_id;

到此这篇关于MySQL连表查询的实现的文章就介绍到这了,更多相关MySQL连表查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL数据库和Redis缓存一致性的更新策略

    MySQL数据库和Redis缓存一致性的更新策略

    本文主要介绍了MySQL数据库和Redis缓存一致性的更新策略问题,文中有详细的代码示例,有需要的朋友可以参考一下
    2023-04-04
  • MySQL产生死锁原因分析讲解

    MySQL产生死锁原因分析讲解

    死锁指的是在两个或两个以上不同的进程或线程中,由于存在共同资源的竞争或进程(或线程)间的通讯而导致各个线程间相互挂起等待,如果没有外力作用,最终会引发整个系统崩溃
    2022-12-12
  • 关于mysql 8.0.13zip包安装方法

    关于mysql 8.0.13zip包安装方法

    这篇文章主要介绍了关于mysql 8.0.13zip包安装方法,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-11-11
  • mysql之连接超时wait_timeout问题及解决方案

    mysql之连接超时wait_timeout问题及解决方案

    这篇文章主要介绍了mysql之连接超时wait_timeout问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Mysql8.0压缩包安装方法(详细教程一步步安装)

    Mysql8.0压缩包安装方法(详细教程一步步安装)

    这篇文章主要给大家介绍了关于Mysql8.0压缩包安装方法,文中介绍的非常详细,Mysql安装的时候可以有msi安装和zip解压缩两种安装方式,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • mysql如何修改表中某个数据

    mysql如何修改表中某个数据

    这篇文章主要介绍了mysql如何修改表中某个数据的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • mysql中一个普通ERROR 1135 (HY000)错误引发的血案

    mysql中一个普通ERROR 1135 (HY000)错误引发的血案

    ERROR 1135 (HY000): Can’t create a new thread (errno 11);if you are not out of available memory,you can consult the manual for a possible OS-dependent bug
    2015-08-08
  • mysql数据库如何转移到oracle

    mysql数据库如何转移到oracle

    这篇文章主要介绍了mysql数据库如何转移到oracle,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • MySQL数据库优化技术之索引使用技巧总结

    MySQL数据库优化技术之索引使用技巧总结

    这篇文章主要介绍了MySQL数据库优化技术之索引使用方法,结合实例形式总结分析了MySQL表的优化、索引设置、SQL优化等相关技巧,非常具有实用价值,需要的朋友可以参考下
    2016-07-07
  • 虚拟机linux端mysql数据库无法远程访问的解决办法

    虚拟机linux端mysql数据库无法远程访问的解决办法

    最近在项目搭建过程中遇到一问题,有关虚拟机linux端mysql数据库无法远程访问,通过查阅相关数据库资料问题解决,下面把具体的解决办法分享给大家,有需要的朋友可以参考下
    2015-08-08

最新评论