java mysql 多表查询_MySQL必备知识多表查询

多表查询

我们在查询表格的过程中,往往要将多个表组合查询使用,并且要实现多个表之间查询数据,例如,查询成绩,再将成绩和学生表连接起来

这个时候就要用到我们的多表查询了

交叉连接

不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积,有where子句,往往会先生成两个表行数乘积的数据表,然后才根据where条件从中选择

交叉连接的语法格式

select ...,

...,

from ,

where ;

这里有涉及到一个笛卡尔积的概念,也就是多个表中所有数据都相互匹配一次

两个集合X和Y,又称直积,即将所有可以匹配的行数据都匹配上了一次

内连接

交叉连接产生的笛卡尔积的产生的额外的判断和消耗,如果要查询比较大的数据的话查,询的效率相当低下,所以需求一个更高效的一个查询范式,内连接比交叉连接更省空间,并且效率更高

使用比较运算符,根据表中匹配的属性,列出与连接条件相匹配的数据,

内连接关键字: inner join on

select [表名1.属性名1,...][表名n.属性名n,...]

from [数据库名1.表名1]

inner join [数据库名2.表名2]

on 条件表达式;

外连接

外连接就是把内连接再进行筛选再添加进来,会保留一部分的数据又分为左外连接、右外连接和全外连接

1.左外连接(左连接)

是以左表为基准,显示左表查询字段所有记录,右表只显示和左表匹配的记录,没有匹配的用NULL代替。

关键字: left join

select [表名1.属性名1,...,表名n.属性名n.]

from

left join

on 条件表达式;

2.右外连接(右连接)

是以右表为基准,显示右表查询字段所有记录,左表只显示和右表匹配的记录,没有匹配的用NULL代替。

关键字: right join

select

from

right join

on 条件表达式; 等于

select 表名1.属性名1,……, 表名n.属性名n

from 表名2

left join 表名1

on 条件表达式;

3.全外连接(全连接)

全连接的左右表不做限制,显示全部数据,没有匹配的数据用NULL代替。

关键字: full join

注意: mysql 不支持全连接

使用左连接和右连接加上 union 合并实现全连接

取别名

在查询时可以给属性取别名,使得读取出的数据更直观。

语句:as

select as from as ;

其中语句as可以省略

合并的使用

1.合并: union

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT语句会删除重复的数据。

select

from

union select

from ;

2.合并查询结果

关键字

UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

ALL: 可选,包含重复数据。

使用形式如下:

select

FROM

union (all) select

from

用于合并多个select语句的结果,要求第一个sql语句返回的列与第二个sql语句返回的列相同

3.通过查询的结果集向表中插入数据

insert into select union all

利用左连接和右链接实现全连接

select 表1.属性1,表2.属性2,..., 表n.属性n

from 表1 right join 表2

union

select 表1.属性1,表2.属性2... 表n.属性n

from left join 表2

这里有用到union连接两个查询语句来实现全连接。

多表联查

可以连接查询多个表中的数据(一般最好不要超过4个表)

一般格式:

select

from

inner join on

inner join on

left join on

right join ......

多表联查的两种格式的区别及表取别名的使用:

##将员工和部门已经薪资都查询出来

select e.e_name as 姓名,enter_date as 入职日期,d_name as 部门,

s_number as 薪资,m_name as 职位

from employee_tb as e

inner join department_tb as d on e.department_id=d.d_id

inner join salary_tb as s on s.employee_id=e.e_id

left join management_tb as m on m.employee_id=e.e_id;

总结

交叉连接

交叉连接连接的效率过低,不推荐使用(会产生n1*n2)

内连接

找到两张表相符合条件的数据,进行筛选连接

外连接

外连接会保留一张表的数据,将另外一张表的数据进行条件筛选连接,没有符合连接条件将另外一张表用null填充

多表连接

连续使用多个 inner join 进行连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值