连表查询的介绍_连接表
1、连表查询的原因
(1)如果查询结果不在一个表中,在多个表中,那就需要将表关联,进行连表查询。
(2)连表查询大多数都作用在外键得基础上。—表与表之间有关联。
2.1表与表之间存在的关系
(1)一对多:在多的一方添加外键列
(2)多对多:需要创建一个中间表,该表中至少有两个外键列
2.2连表查询
2.3内连接
内连接演示—结果都是一样,只是语法不同。看个人习惯用哪个? 1.查询每一个员工的姓名,及关联的部门的名称〔隐式内连接实现)
2.查询每一个员工的姓名,及关联的部门的名称〔显式内连接实现)
-- 隐式查询 select 列名.... from 表1,表2 where 连表得条件。
-- 连表查询时,如果不使用连表条件则出现笛卡尔集。
-- 所谓笛卡尔集 就是A表中每一条记录关联B中中得每条记录
1.查询每一个员工的姓名,及关联的部门的名称〔隐式内连接实现)
select * from tb_emp,tb_dept where tb_emp.dept_id=tb_dept.id;
-- 如果表的名字很长 可以为表起别名
select * from tb_emp e, tb_dept d where e.dept_id=d.id;
-- 显示连接: 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.4、外连接
外连接演示 –1.查询emp表的所有数据, 和对应的部门信息(左外连接) –2.查询dept表的所有数据,和对应的员工信息(右外连接)
-- 语法: 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表的所有数据,和对应的员工信息(右外连接)
select * from tb_emp e right join tb_dept d on e.dept_id=d.id;
2.5、自联查询
自己和自己相连接查询。 select * from A表 join A表 on 连表条件。
自连接 (1)查询员工及其所属领导的名字。 (2)查询所有员工 emp及其领导的名字emp ,如果员工没有领导,也需要查询出来
-- 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;
3、子查询—嵌套查询
一个查询的结果 作为另一个查询的条件 或者 临时表。
-- 查询市场部的员工信息-----
-- 子查询返回的结果一列一条记录。 这个时候可以用=
-- “=”后只能跟一个where条件,in后可以跟多个
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('市场部','研发部'))
-- 查询在“方东白”入职之后的员工信息
select * from tb_emp where entrydate>(select entrydate from tb_emp where name='方东白')
-- -- 查询比财务部所有人工资都高的员工信息。
a)求出财务部中最高的工资。
select max(salary) from tb_emp e join tb_dept d on e.dept_id=d.id where d.name='财务部'
b) 根据财务部最高工资查询其他员工信息
select * from tb_emp where salary>( select max(salary) from tb_emp e join tb_dept d on e.dept_id=d.id where d.name='财务部')
4、组合查询
多个查询的结果 组合到一起。 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;
总结:
1.内连接—inner join on 2.外连接—left join on right join on 3.自连接— 4.子查询 5.组合查询—sql union sql union all
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
相关文章
- mysql左连接查询慢[通俗易懂]
- 连接查询和子查询哪个效率高
- arduino连接ps2手柄控制智能小车实践记录
- Science Advances:胶质细胞功能障碍导致抑郁症静息态fMRI功能连接异常
- SQL Server 2012 多表连接查询功能实例代码
- hibernate09–连接查询详解编程语言
- 查 Oracle 全连接查询:取得全部数据的选择方式(oracle全连接)
- MySQL INNER JOIN:内连接查询
- MySQL查询:获取当前连接信息(mysql查询当前连接)
- MySQL:从连接查询获取精彩结果(mysql连接查询结果)
- 查询驾驭SQL Server外联查询:实现数据连接自如(sqlserver外联)
- 连接轻松搞定远程MySQL服务器连接(远程mysql服务器)
- 驱动Linux服务器:建立串口连接.(linux串口服务器)
- 解决Oracle网络通信问题:IP连接(oracleip连接)
- MSSQL连接与查询:聪明的智能解决方案(mssql 连接查询)
- MSSQL自动断开连接:谨防数据丢失(mssql自动断掉连接)
- Oracle左外连接技术极大提升数据库查询效率(oracle左外连接)
- 利用Oracle内连接实现数据查询(oracle 内连接用法)
- ASP连接MySQL实现优雅的数据查询(asp连接查询mysql)
- MySQL揭示4张表连接查询之谜(4表连表查询 mysql)
- MySQL自连接学会使用这个神奇的SQL操作(mysql z自连接)
- Oracle中全连接实现数据交叉查询的方法(oracle中全连语法)
- 使用Redis连接非传统端口的探索(redis连接非常规端口)
- Redis连接密码保护安全(redis连接需要密码)
- 安全连接Redis远程设置密码(redis远程密码)
- php使用pdo连接并查询sql数据库的方法