两表连接查询 mysql_MySQL 中两表连接查询总结

在之前的学习中,筛选出来的列都是一张表中的,本篇开始是对连表查询的学习内容。先从以下场景开始:

生成一张报价单,报价单包含商品名称,栏目名称,商品库存,商品价格,栏目名称和商品信息放在两张表中。

传统 1+N 方式查询

按照之前单表查询的方式,应该先查出所有商品信息和栏目的 id (cat_id)然后用(cat_id)在栏目表 category 中查出栏目名称 cat_name,即:

查出所有商品信息

select goods_name,cat_id,goods_number,shop_price from goods;

查询出所有 cat_id 对应的 cat_name :

select cat_id,cat_name from category;

将步骤 1 中查出的 N 条商品的 cat_id 到 category 中查出对应的 cat_name,即`where cat_id = 步骤1中每个商品的cat_id。最终步骤 1 中 1 条语句查出了 N 条数据,步骤 2 中对每条数据执行一次查询,则总共需要执行 1+ N 条语句。(如果使用子查询则步骤 1 中只能查询 cat_id 列,不然报错)

全连接查询

而使用连接查询就不需要那么麻烦了。在学习连接查询之前,需要先知道集合的两个特点:无序性与唯一性。即{2, 3, 4} 与 {2, 4, 3} 是一样的,{2, 3, 3, 4} 是错误的。集合可以求交集、并集、补集,笛卡尔积运算等。笛卡尔积即表示集合中的元素两两组合。例如集合 {2, 3, 4} 和 {5, 6} 的笛卡尔积后包括的元素为:(2, 5)、(2, 6)、(3,5)、(3, 6)、(4, 5)、(4, 6)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL两表连接查询是通过JOIN关键字实现的。连接查询可以分为内连接、左连接、右连接和全连接。其,内连接是指只返回两个表匹配的行,左连接是指返回左表所有行和右表匹配的行,右连接是指返回右表所有行和左表匹配的行,而全连接则是返回两个表所有的行。连接查询的语法格式如下: SELECT <select_list> FROM <left_table> <join_type> JOIN <right_table> ON <join_condition> WHERE <where_condition> GROUP BY <group_by_list> HAVING <having_condition> ORDER BY <order_by_condition> LIMIT <limit_number> 其,<join_type>可以是INNER、LEFT、RIGHT或FULL,分别对应内连接、左连接、右连接和全连接。而<join_condition>则是连接条件,用于指定两个表之间的关联关系。 举个例子,如果我们要查询表A和表Bdept_no相同的行,可以使用以下SQL语句: SELECT A.*, B.* FROM A INNER JOIN B ON A.dept_no = B.dept_no; 这条语句使用了内连接,只返回了两个表dept_no相同的行。如果我们要返回左表A所有的行和右表Bdept_no相同的行,可以使用左连接: SELECT A.*, B.* FROM A LEFT JOIN B ON A.dept_no = B.dept_no; 这条语句使用了左连接,返回了左表A所有的行和右表Bdept_no相同的行。如果我们要返回右表B所有的行和左表Adept_no相同的行,可以使用右连接: SELECT A.*, B.* FROM A RIGHT JOIN B ON A.dept_no = B.dept_no; 这条语句使用了右连接,返回了右表B所有的行和左表Adept_no相同的行。如果我们要返回两个表所有的行,可以使用全连接: SELECT A.*, B.* FROM A FULL JOIN B ON A.dept_no = B.dept_no; 这条语句使用了全连接,返回了两个表所有的行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值