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不一样,至于为什么不一样,我还是直接上案例比较好,毕竟实操总比理论要容易理解一些,也让人印象深刻些
我们可以看出这里有五张表,这些表就是我们接下来作业所需要的素材
作业1:
1、查询每件商品的商品名和分类名
结果示例:
可以看到题目要求我们查询商品名并将它们分类,而我们该怎么办呢,这时候我们发现goods表里和type表里面就有我们所需要的(此图只截取了一部分)
你们肯定会好奇这里面怎么就有我们需要的呢,你们去看就会发现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:
你们有没有发现这题和上一题其实差不多,就是结果不同,没错这题就是上一题的另一种情况,而这题的结果中商品没了反而变成了数量,那么这个数量是怎么弄出来的呢?当然是用到你们所知道的可爱的聚合函数中的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:
这题我们会用到四张表,至于为什么,我一一道来,这个结果查询用到了goods表,user表,orders表和ordersdetail表
其中你会发现其中有一些表没有相同的列命,那么怎么把它们连接在一起呢,这时候你仔细观察这些表你就会发现这些表一些是可以互通的,比如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
好了看完如上代码是不是把我上面的坑给填了,因此是多张表查询的话,可以参照如上这个代码进行理解和实操(讲这么多也不如大家找题多练练,因此大家多去实操实操,才能学的更好)
本次讲解到这里就结束了,大家是不是收获颇多,如果还有什么不太懂的,请去多去网站上看看,可能别人的比我讲的更到位,更全面
因此本文章到这里结束了