MySQL表连接查询讲解来我这——准没错

    表连接分为内连接和外连接,而这篇文章主要讲解内连接,好了不多讲直接上正文

     1.内连接基于连接谓词(连接谓词也就是所谓的内连接的关键词,至于关键词是啥不知道,没关系下面会讲)它将两张表(现在我们假设有两张表,如A表和B表,这样方便理解)的列组合在一起,产生新的结果表。则具体过程是将A表的每一行和B表抵挡每一行进行比较,并找出满足连接谓词的组合,当连接谓词被满足,A和B中匹配的行会按列组合(并排组合)成结果集中的一行 

      2.内连接分为三种,分别是交叉连接,相等连接和自然连接,当然这些你们知道就行,没什么要多讲的

      3.内连接的关键词是 [INNER] JOIN ON(中括号的那个可写可不写)在 MySQL FROM 子句中使用关键字 INNER JOIN 连接两张表,并使用 ON 子句来设置连接条件

 内连接的语句格式如下:

SELECT <列名1,列命2,....> FROM <表名1> 【INNER】JOIN <表名2> 
ON table1.colunm1 = table2.column2 
当然你也可以不用这么写(语句如下)
SELECT <列名1,列名2 …> FROM <表名1,表名2,...> 
WHERE table1.colunm1 = table2.column2 
(tabled等于表名,column等于列命) 

     当然上面的语句肯定不能解决所以问题,比如说很多张表怎么办,当然聪明的人已经知道怎么办了我上面的语句中出行了table1和table2那么是不是可以继续接下去,比如加上table3和table4,当然可以了,我们只需要在table2后面加上JOIN table3 ON 就可以了当然table4也是如此,至于ON字句怎么写,你可以找它们之中是否有一样的列命,至于我为什么这么说其实column1其实与column2是一样的列命,当然where条件语句也差不多

     其实where语句和ON语句还是不一样的,ON语句后面要接条件,每一个ON语句后面都要接一个条件,而where不一样,至于为什么不一样,我还是直接上案例比较好,毕竟实操总比理论要容易理解一些,也让人印象深刻些

 

案列:

MySQL表连接查询讲解来我这——准没错

我们可以看出这里有五张表,这些表就是我们接下来作业所需要的素材

作业1:

1、查询每件商品的商品名和分类名

结果示例:

MySQL表连接查询讲解来我这——准没错

    可以看到题目要求我们查询商品名并将它们分类,而我们该怎么办呢,这时候我们发现goods表里和type表里面就有我们所需要的(此图只截取了一部分)

MySQL表连接查询讲解来我这——准没错

MySQL表连接查询讲解来我这——准没错

      你们肯定会好奇这里面怎么就有我们需要的呢,你们去看就会发现goods表和type表里面都有TypeID,而且TypeID中数字一样的type表的TypeName正好是goods表的GoodsName(GoodsName就是商品名)所需的分类,因此我们可以用内连接的语句进行查询

代码如下: 

SELECT GoodsName 商品名,TypeName 分类 FROM goods g JOIN type t ON g.TypeID = t.TypeID
另一种写法则是
SELECT GoodsName 商品名,TypeName 分类 FROM goods g,type t WHERE g.TypeID = t.TypeID

     肯定有人问了为什么goods后面为什么要接一个g这么做当然是为了后面的ON语句可以更方便,剩下更多时间,也起到了简化字段列表的显示

     还有上面的语句中的逗号是英文的,请不要搞错了

     当然一个例子是不够的,下面还有两个例子,分别代表了不同情况(还有代码是不可以复制的,请手打代码,这样更有利于学习和加深印象)

作业2:

MySQL表连接查询讲解来我这——准没错

       你们有没有发现这题和上一题其实差不多,就是结果不同,没错这题就是上一题的另一种情况,而这题的结果中商品没了反而变成了数量,那么这个数量是怎么弄出来的呢?当然是用到你们所知道的可爱的聚合函数中的COUNT了,还有分组查询中的GROUP BY了,你们是不是一瞬间茅塞顿开,思路清晰,哈哈哈,好吧我也不卖关子了

代码如下:

SELECT TypeName 分类,COUNT(*) FROM goods g JOIN type t ON g.TypeID = t.TypeID 
GROUP BY TypeName
另一种写的则是
SELECT TypeName 分类,COUNT(*) FROM goods g,type t WHERE g.TypeID = t.TypeID
GROUP BY TypeName

接下来就是三题中最难的了,请看往下看

作业3:

MySQL表连接查询讲解来我这——准没错

    这题我们会用到四张表,至于为什么,我一一道来,这个结果查询用到了goods表,user表,orders表和ordersdetail表

MySQL表连接查询讲解来我这——准没错

MySQL表连接查询讲解来我这——准没错

MySQL表连接查询讲解来我这——准没错

    其中你会发现其中有一些表没有相同的列命,那么怎么把它们连接在一起呢,这时候你仔细观察这些表你就会发现这些表一些是可以互通的,比如ordersdteail表和goods表还有orders表有相同的列命,而user表没有与ordersdetail表有相同的列命,这时候你发现只有orders表有user表相同的列命,而你可以通过这些环环相扣,将这些表连接在一起(goods表在上面)

代码如下:

SELECT Name 客户,OrdersDate 日期,GoodsName 商品,Quantity 数量,PurchasePrice 金额 
FROM user u JOIN orders o ON u.UserID=orders.userId 
JOIN ordersdetail od ON o.OrdersID=od.OrdersID 
JOIN goods g ON od.GoodsID=g.goodsID
另一种写法则是
SELECT Name 客户,OrdersDate 日期,GoodsName 商品,Quantity 数量,PurchasePrice 金额
FROM user u,orders o,ordersdetail od,goods g
WHERE u.UserID=orders.userId AND o.OrdersID=od.OrdersID AND od.GoodsID=g.goodsID

好了看完如上代码是不是把我上面的坑给填了,因此是多张表查询的话,可以参照如上这个代码进行理解和实操(讲这么多也不如大家找题多练练,因此大家多去实操实操,才能学的更好)

本次讲解到这里就结束了,大家是不是收获颇多,如果还有什么不太懂的,请去多去网站上看看,可能别人的比我讲的更到位,更全面

因此本文章到这里结束了

MySQL表连接查询讲解来我这——准没错

 

上一篇:微信小程序中的收藏功能(包含用户需求,数据库设计,后台功能,微信小程序功能,效果截图等)


下一篇:Day029 Java比较器