mysql 多表混全_mysql--浅谈多表查询1

这篇博客详细介绍了MySQL中的连接查询,包括左连接、右连接和内连接的使用方法及示例,同时讲解了如何通过这些查询从多张表中获取关联数据。此外,还介绍了联合查询(UNION)的使用,包括合并结果集和去除重复行的操作。通过实例展示了如何在实际场景中应用这些查询技巧。
摘要由CSDN通过智能技术生成

这是对自己学习燕十八老师mysql教程的总结,非常感谢燕十八老师。

依赖软件:mysql5.6

系统环境:win

连接查询

在谈连接查询之前我们需要对数学上的笛卡尔积有一定的了解

现在有两个集合m和n

m = (m1,m2,.....mx)

n =(n1,n2,.....ny)

m*n得到的笛卡尔积有多少个元素?

答:m*n有x*y个元素

连接查询有以下类型

1、左连接

2、右连接

3、内连接

连接查询的作用

从2张或多张表中取出有关联的数据

3种连接查询的详细说明

1、左连接

A left join B on 条件;

这样形成了一个结果集,可以看成一张表 设为C

C表有A,B中的所有列;可以做所有表的操作

考虑到兼容问题和理解上的容易程度都推荐用左连接

# 语法Select查询项from表名left join 表名 on 表名.列名 =表名.列名

# 我是这样理解左连接的:左表不动,右表来匹配

# 示例

# 用左连接取出两表cat_id 对应的cat_nameselectgoods_id,goods.cat_id,category.cat_id,cat_name,goods_namefromgoodsleft join category on goods.cat_id=category.cat_id;

2、右连接

左右连接可以互换

A left join B <==> B right join A

A right join B on 条件;

这样形成了一个结果集,可以看成一张表 设为C

C表有A,B中的所有列;可以做所有表的操作

# 语法Select查询项from表名right join 表名 on 表名.列名 =表名.列名

# 我是这样理解右连接的:右表不动,左表来匹配

# 示例

# 用右连接取出两表cat_id 对应的cat_nameselectgoods_id,goods.cat_id,category.cat_id,cat_name,goods_namefromcategoryright join goods on category.cat_id=goods.cat_id;

3、内连接

B inner join A on 条件;

这样形成了一个结果集,可以看成一张表 设为C

C表有A,B中的所有列;可以做所有表的操作

# 语法Select查询项from表名inner join 表名 on 表名.列名 =表名.列名

# 我是这样理解内连接的:右左连接的交集

# 示例

# 用内连接取出两表cat_id 对应的cat_nameselectgoods_id,goods.cat_id,category.cat_id,cat_name,goods_namefromgoodsinner join category on category.cat_id=goods.cat_id;

小练习

要求:

Match的hostTeamID与guestTeamID都与Team中的teamID关联

查出 2006-6-1 到2006-7-1之间举行的所有比赛,并且用以下形式列出:

拜仁 2:0 不来梅 2006-6-21

建表时特别主要match是mysql的关键字

selectt1.teamName,match_Result,t2.teamName,match_Timefrommatch1left join Team ast1on match1.hostTeamID=t1.teamIDleft join Team ast2on match1.guestTeamID =t2.teamIDwhere match_Time between '2006-06-01 and'2006-07-01';

联合查询

union查询

使用条件:只要列数一样即可合并(唯一要求)

语法:

sql1 union sql2 表操作

union对重复行的处理:union会去重,union all 不去重复

# 示例1

# 用union取出第4个栏目的商品,第5个栏目的商品,并按价格升序排列select cat_id,shop_price,goods_name from goods where cat_id=4

union

select cat_id,shop_price,goods_name from goods where cat_id=5

order by shop_price asc;

内层的order by 如果没有影响结果集的结果则将被优化过滤掉

# 示例2

# 用union查出第三个栏目下价格前三高的商品,和第四个栏目下价格前2高的商品

(select cat_id,shop_price,goods_name fromgoodswhere cat_id=3 order by shop_price desc limit 3)union(select cat_id,shop_price,goods_name fromgoodswhere cat_id=4 order by shop_price desc limit 2);

小练习

要求:

将两张结构一样的表相同id的值相加,返回所有id和值

# 第一步 将两表合并成一张表,即表cselect id,num froma

union allselect id,num fromb

# 第二步对表c from型子查询操作,select id,sum(num) asnumfrom (select id,num froma

union allselect id,num from b) asc

group by id;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL的存储引擎是插件式的,其中最常用的两个存储引擎是MyISAM和InnoDB。MyISAM是MySQL中默认的存储引擎,它没有太多人关注的原因可能是因为它在一些方面的性能和功能上相对较弱。然而,决定使用哪个存储引擎是一个复杂的问题,而我们可以聚焦于MyISAM和InnoDB这两个最常见的存储引擎。 在这两个存储引擎中,InnoDB要求表必须有主键,因为它的数据文件本身按照主键聚集。而MyISAM可以没有主键。这是InnoDB与MyISAM之间的一个重要区别。 因此,当选择MySQL的存储引擎时,我们需要考虑不同存储引擎的特性和适用场景,以便根据需求选择最合适的存储引擎。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [浅谈MySQL存储引擎](https://blog.csdn.net/hanfeng529264/article/details/123352215)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [浅谈MySQL存储引擎选择 InnoDB与MyISAM的优缺点分析](https://download.csdn.net/download/weixin_38655484/12834006)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值