MySQL查询---联合查询

16 篇文章 1 订阅

目录

1. 内连接

2. 外连接

1. 左(外)连接

2. 右(外)连接

3. 自连接

4. 子查询(嵌套查询)

5. 合并查询


1. 内连接

select * from table_name1 join table_name2 [on 条件] [where 表达式];
select * from table_name1 inner join table_name2[on 条件][where 表达式];
select * from table_name1 cross join table_name2[on 条件][where 表达式];
select * from table_name1 , table_name2[where 条件];
(on是过滤笛卡尔积中的无效数据)

内连接实现1:要求查询张三的成绩

步骤:1. 进行内连接查询(笛卡尔积) 2. 去掉无效的数据  3. 查询张三的成绩(where过滤条件)

1. 进行内连接查询(笛卡尔积):

 2. 去掉无效的数据:

 3. 查询张三的成绩(where过滤条件):

或者

 不强制要求起别名,但是建议加上别名可以简化程序并且以免相同字段过多而报错。

内连接实现2:查询每个人成绩、科目名、个人信息

步骤:1. 连表查询(3张表)select * from t1 join t2 join t3;    2. 过滤无意义数据

2. 外连接

1. 左(外)连接

select * from t1 left join t2 [on 连接条件][where 条件查询];   

(on是过滤笛卡尔积中的无效数据)

(t1是主表,t2是次表)

  

2. 右(外)连接

select * from t1 right join t2 [on 连接条件][where 条件查询];   

(on是过滤笛卡尔积中的无效数据)

(t2是主表,t1是次表)

将右连接用左连接来实现:

select * from t2 left join t1 [on 连接条件][where查询条件];

(t2是主表,t1是次表)

联表查询中,on与where的区别:

        1. 内连接on是可以省略的,而外连接on不能省略。

        2. on在内连接中的执行效果和外连接中的执行效果是不一样的。

        3. 在外连接中on和where是不一样的。

     

 

 外连接中on不能过滤掉主表中的数据,而内连接on可以过滤掉全局数据。

 外连接查询时,如果有多个查询条件,是将查询条件的表达式全部写在where表达式中,而非on中,在on中一般情况下只需要写一个笛卡尔积无效数据的过滤条件即可。

3. 自连接

自连接是指在同一张表上连接自身进行查询。

自连接实现:查询英语成绩小于计算机程序的数据(自己和自己进行连表查询)

步骤:1.先根据科目名称查询出科目id    2. 子查询(笛卡尔积)   3. 取出笛卡尔集中无效数据    4. 设置where条件,让表1只查询英语成绩,表2查询计算机程序     5. 设置where 多条件查询,让英语成绩大于计算机成绩

4. 子查询(嵌套查询)

子查询实现1:查询张三的同班同学

步骤:1. 查询张三的班级id   2. 学生表里面根据上一条查询的班级id查询出所有的列表,找出张三的同班同学

子查询实现2:查询计算机或英语成绩

步骤:1. 计算机或者英语的科目id     2. 查询成绩表where科目id等于计算机id或者是英语id

in 和 = 的区别:

=  查询需要一个具体确定的值

in  查询可以使一个或多个值,并且满足任意一个将返回true 

5. 合并查询

在实际应用中,为了合并多个 select 的执行结果,可以使用集合操作符 union union all 。使用 UNION 和UNION ALL 时,前后查询的结果集中,字段需要一致。
union
查询 id 小于 3 ,或者名字为 英文 的课程:
select * from course where id< 3
union
select * from course where name= ' 英文 ' ;
-- 或者使用 or 来实现
select * from course where id< 3 or name= ' 英文 ' ;
union all
查询 id 小于 3 ,或者名字为 “Java” 的课程
select * from course where id< 3
union all
select * from course where name= ' 英文';

 

union 和 union all 区别:

union会将合并的结果集中的重复数据去重,只保留重复数据中的一条,而union all 是即将结果集全部合并,即使有重复的数据结果也不会进行合并操作。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值