ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2021-06-02 22:58:05  阅读:269  来源: 互联网

标签:语句 TypeID goods JOIN MySQL 讲解 没错 连接 SELECT


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

     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

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

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

因此本文章到这里结束了

 

标签:语句,TypeID,goods,JOIN,MySQL,讲解,没错,连接,SELECT
来源: https://blog.csdn.net/wyfsg1948753316/article/details/117481617

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有