多表联合查询

两种查询方式

SQL92

笛卡尔积 :多个表的数据量直接相乘

两张表合成一张表了

select *from emp,dept

在这里插入图片描述

上面的表的数据是不匹配的,都有deptno这个字段

等值连接

select *from emp,dept where emp.deptno=dept.deptno

在这里插入图片描述

select empno,ename,job,mgr,hiredate,sal,comm,emp.deptno,dname from emp,dept where emp.deptno=dept.deptno

当同一字段两个表都有,需要加上表名,可以给表使用别名

select empno,ename,job,mgr,hiredate,sal,comm,e.deptno,d.dname from emp e,dept d where e.deptno=d.deptno

在这里插入图片描述

不等值连接
例如给员工工资分等级

select *from emp e,salgrade s where e.sal>s.losal and e.sal<=s.hisal 

在这里插入图片描述

自连接
mgr是领导编号,在本章表找到对应领导,用两个一样的表进行联合

select e1.*,e2.* from emp e1,emp e2 where e1.mgr=e2.empno

在这里插入图片描述

当使用等值连接有员工没有部门时,或者有部门没有员工,这个员工或者这个部门就会被删
加括号(+) 就是不删选空着的
SQL92不能同时用两个(+) 99可以

select *from emp,dept where emp.deptno=dept.deptno(+)
select *from emp,dept where emp.deptno(+)=dept.deptno

SQL99

在这里插入图片描述

笛卡尔积

select *from emp cross join dept

自然连接

自动根据两表相同字段筛选出对应内容,和92里面等值连接是一样的效果
自然连接筛选的是字段名相同,字段值相同
如果有多个字段相同 就是 and 叠加筛选效果

select *from emp natural  join dept

如果只想按照部分字段或者某个字段进行筛选,自然连接就做不到,或者需要字段名不同,筛选字段值相同,也做不到

指定字段using

指明使用指定字段进行等值筛选,两表字段也必须同名

select *from inner join dept using(deptno)

解决字段必须同名on

提高语句的可读性,普通筛选用where,等值筛选用on
99里面进行筛选一般都用on,而不用上面两个(using和natural)

select *from emp inner join dept on emp.deptno=dept.deptno 

99简化了外连接

select *from emp e Left join dept d  on e.deptno=d.deptno 
select *from emp e Right join dept d  on e.deptno=d.deptno 
select *from emp e Full join dept d  on e.deptno=d.deptno

99自连接

select *from emp e1 join emp e2 on e1.mgr=e2.empno

三表联合查询
三表笛卡尔积,多个条件筛选
92
在这里插入图片描述

select *from emp e,dept d,city c where e.deptno=d.deptno and d.loc=c.cid

95

select *from emp e join dept d on e.deptno=d.deptno join city c on d.loc=c.cid 

99的优势是这样非常容易阅读,结构清晰

select *from emp e 
join dept d on e.deptno=d.deptno 
join city c on d.loc=c.cid 
where sal e.sal>2000 or e.comm is not null
order by sal

内连接、外连接的区别

<select id="selAll1" resultMap="stuMap1"> 
		select s.id sid,s.name sname,age age,t.id
		tid,t.name tname FROM student s left outer join teacher t on s.tid=t.id
</select>
  • Student表 属性tid(老师编号外键)
  • Teacher 属性id(老师编号)
  • 上面的SQL语句,若Student中tid数据缺失
  • 使用内连接这条数据无法联合
  • 使用外连接可以是使用,左外,或者右外也可以(SQL语句中表顺序换一下)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL多表联合查询可以通过使用JOIN关键字来实现。JOIN子句用于将两个或多个表的行连接起来。以下是一个简单的示例,展示了如何使用JOIN来连接两个表: ``` SELECT * FROM table1 JOIN table2 ON table1.column = table2.column; ``` 在上面的示例中,我们使用SELECT语句选择两个表中的所有行,并使用JOIN子句将它们连接起来。ON子句用于指定连接条件,这里我们使用`table1.column = table2.column`来指定两个表之间的连接。这将返回一个包含两个表的所有行的结果集。 除了JOIN子句之外,还有其他类型的JOIN,包括LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN等。这些JOIN类型的区别在于它们如何处理连接条件不满足时的结果。例如,LEFT JOIN将返回左表中的所有行,以及右表中与左表中的行匹配的行,而右表中没有匹配的行将返回NULL值。 下面是一个LEFT JOIN的示例: ``` SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column; ``` 在这个示例中,我们使用LEFT JOIN来连接两个表。与JOIN不同的是,它返回左表中的所有行,而右表中没有匹配的行返回NULL值。 ### 回答2: 多表联合查询是指在MySQL数据库中,通过使用JOIN关键字,将两个或多个表连接在一起,根据指定的条件从这些表中检索数据。 MySQL多表联合查询的语法如下: SELECT 列名 FROM 表1 JOIN 表2 ON 条件 [JOIN 表3 ON 条件] … 在这个语法中,需要指定要查询的列名和要连接的表名。使用ON关键字来指定连接条件,可以根据表1和表2之间的共同字段进行连接。如果有需要,还可以继续使用JOIN关键字连接更多的表,并通过指定条件进行连接。 多表联合查询的主要作用是获取来自不同表中的相关数据,并将它们组合在一起以满足特定的查询需求。通过联合查询可以避免数据冗余和重复,减少数据库的存储空间和维护成本。此外,多表联合查询还能够提高查询的效率,减少查询时间,提升数据库的性能。 在进行多表联合查询时,需要确保所连接的表之间存在关联关系,并根据实际情况选择合适的连接方式,如INNER JOIN、LEFT JOIN、RIGHT JOIN等。 总之,MySQL多表联合查询是一种非常常用和重要的数据查询技术,能够灵活地获取来自多个表中相关的数据,并满足复杂的查询需求。掌握多表联合查询的使用方法,有助于提高数据库的查询效率和性能。 ### 回答3: MySQL多表联合查询是指在查询中同时涉及到多个表,通过表之间的关联关系进行数据的筛选和获取。通过多表联合查询可以更加灵活地获取到需要的数据,实现复杂的查询需求。 在多表联合查询中,可以通过使用JOIN关键字来实现表之间的连接。常见的JOIN有INNER JOIN、LEFT JOIN、RIGHT JOIN和FULL JOIN等,它们分别表示不同的连接方式。其中,INNER JOIN表示取两个表的交集,即只返回两个表中存在匹配关系的数据;LEFT JOIN表示取左表与右表的交集以及左表中存在但右表中不存在的数据;RIGHT JOIN表示取右表与左表的交集以及右表中存在但左表中不存在的数据;FULL JOIN表示取两个表的并集,包含两个表中的所有数据。 除了JOIN关键字外,我们还可以使用WHERE条件来进一步筛选联合查询的结果。通过在WHERE条件中对表的字段进行条件筛选,可以实现更加精确的查询。同时,可以使用ORDER BY关键字对结果进行排序,使用LIMIT关键字限制返回结果的条数。 多表联合查询可以根据业务需求的不同,灵活应用各种关联方式和筛选条件,实现复杂的数据查询。掌握多表联合查询的技巧,可以提高数据查询的效率和准确性,为业务提供更好的支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值