大家好,我是-爱敲代码的奥特曼
今天将教大家关于MySQL连接查询的知识!
=========================================
整体教程分为两部分:1.介绍MySQL的连接查询.
2.进行MySQL连接查询的实际操作.
=========================================
教程开始,首先为大家介绍下MySQL的连接查询的概念
什么是MySQL的连接查询?
笼统的说法:是将MySQL中的表和表连接起来变成一个表,然后进行查询。
(注:往下看到内连接会进行一个补充方便大家理解连接的含义)。
今天我们来讲MySQL的两种查询方法:内连接查询,外连接查询
=========================================
一,内连接查询
内连接概念:内连接是用比较运算符比较要连接列(字段名)的值的进行连接,当符合规则时就会按列组合成结果集中的一行。
内连接关键词:join on
语法:SELECT fieldlist FROM table1 JOIN table2 ON table.columnl=table2.column2
select 列名字(字段名) FROM 表名1 JOIN 表名2 ON 表名1.字段名 = 表名2.字段名
补充:其实将连接换一种方式表达出来,大家应该理解的更快~
-- 使用join on
select * from line join vehicle on line.lineID = vehicle.lineID
-- 等价于
sselect * from line,vehicle where line.lineID = vehicle.lineID
--以上两个的结果是一样的,将两个表合并为一个表
=========================================
二,外连接查询
外连接概念:外连接是连接表和表的时候不管满不满足连接条件也会合成一个表在查询结果中出现,同时外连接也包括左向外连接、右向外连接。
-------------------------------------------------------------------
左向外连接关键词:left join 或 left outer join
语法:SELECT fieldlist FROM table1 LEFT JOIN table2 ON table.columnl=table2.column2
select 字段名 FROM 表名1 LEFT [OUTER] JOIN 表名2 ON 表名1.字段名1=表名2.字段名2
--OUTER可以省略
左外连接说明:左向外连接的结果集包括 LEFT 子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。【左(外)连接,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。】
实列图:
右连接关键词:right join 或 right outer join
语法:SELECT fieldlist FROM table1 RIGHT JOIN table2 ON table.columnl=table2.column2
select 字段名 FROM 表名1 RIGHT [OUTER] JOIN 表名2 ON 表名1.字段名1=表名2.字段名2
--OUTER可以省略
右外连接说明:右向外连接是左向外连接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值(null)。【与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。】
实列图:
============实列思路说明=========
第一题:运用内连接查询每件商品的商品名和分类名;
构思说明:商品名在goods表中,分类名在type表中,观查他们两个表中会发现有相对应的一个字段名为typeid的字段名,对比会发现里面的数据是相关联的,即可使用内连接将他们连接起来变成一个表(就是将goods表和type表和成一张新的表,包含了goods和type的内容),然后就可以在这个合成的表,根据题目的要求查寻 goodsname 商品列 和 typename 分类列,就可以得到结果。
实现代码如下图:
SELECT goodsname 商品,typename 分类 from goods JOIN type ON type.typeid=goods.typeid
运行结果如下图:
--------------------------------------------------------
第二题:外连接左向外连接left join或右向外连接right join。
左外连接思路:
左外连接,会以左边的表A为主表,返回所有行,即使右表B中没有匹配的行。
如果左边的表A在右表B中找不到一条记录,则返回表A所有记录并且表B相应的字段设为null。
如果左边的表A在右表B中找到多条记录,则以相同表A记录和不同表B记录多条显示在结果集中。
实列代码:
select * from a left join b on a.id = b.a_id;
运行结果:
右外连接思路:
右外连接其实跟左外连接一样,区别在于对主表的确定,两者之间可以相互转换。
实列代码:
select * from a right join b on a.id = b.a_id;
运行结果:
==============总结===============
内连接:指连接结果仅包含符合连接条件的行,参与连接的两个表都应该符合连接条件。
外连接:连接结果不仅包含符合连接条件的行同时也包含自身不符合条件的行。包括左外连接、右外连接和全外连接。
左外连接:左边表数据行全部保留,右边表保留符合连接条件的行。
右外连接:右边表数据行全部保留,左边表保留符合连接条件的行。
最后,内连接查询,外连接查询,都是很常用的连接查询方式,你可以根据你的要求做出选择~
本人初学,如有不全的地方希望大佬提出来~