博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql left join 左连接查询关联n多张表
阅读量:6195 次
发布时间:2019-06-21

本文共 3032 字,大约阅读时间需要 10 分钟。

left join 左连接即以左表为基准,显示坐标所有的行,右表与左表关联的数据会显示,不关联的则不显示。关键字为left join on。 

**基本用法如下: 

select table a left join table b on a.id = b.ta_id**

注意:

其中on后面关联的字段应该是同一字段(两表关联的外键) 
由于以左表为基准,左表一条记录如果对应右表多条记录,那查出的数据中右表的数据也只显示一条,如果要都显示,可以用group_contact()将字段用逗号隔开显示在一条记录上。所以右表不管有几张,如果和左表都是一对一关系,则没问题,存在一对多关系时,需要一定的处理。


 

1、内连接:将两个表中存在连结关系的字段符合连接条件的记录形成记录集

SELECT    A. NAME,    B. NAMEFROM    AINNER JOIN B ON A.id = B.id

SELECT    A. NAME,    B. NAMEFROM    A,    BWHERE    A.id = B.id

结果是一样的(内连接的inner关键字可省略);

2、外连接:分为左外连接和右外连接

左连接A、B表结果包括A的全部记录和符合条件的B的记录。

右联结A、B表的结果和左联结B、A的结果是一样的,也就是说:

SELECT    A. NAME,    B. NAMEFROM    ALEFT JOIN B ON A.id = B.id

SELECT    A. NAME,    B. NAMEFROM    BRIGHT JOIN A ON B.id - A.id

 

执行后的结果是一样的。

3、全联结

4、无联结

5、三表联结查询

SELECT    username,    psw,    gname,    telFROM    (        t1        LEFT JOIN t2 ON t1.t1_id = t2.t1_id    )LEFT JOIN t3 ON t1.t1_id = t3.t1_id

 

6、终极的三表联结查询

items:商品表,item_visit_stats:商品访问表,item_trade_stats:商品销售表

/*Source Server         : localhostSource Server Version : 50505Source Host           : localhost:3306Source Database       : testTarget Server Type    : MYSQLTarget Server Version : 50505File Encoding         : 65001Date: 2018-09-14 19:00:46*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for items-- ----------------------------DROP TABLE IF EXISTS `items`;CREATE TABLE `items` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  `title` varchar(255) DEFAULT '',  `price` varchar(255) DEFAULT '',  `nick` varchar(255) DEFAULT '',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品表';-- ------------------------------ Table structure for item_trade_stats-- ----------------------------DROP TABLE IF EXISTS `item_trade_stats`;CREATE TABLE `item_trade_stats` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  `buyer_num` int(11) unsigned DEFAULT '0',  `item_num` int(11) unsigned DEFAULT '0',  `seller_nick` varchar(255) DEFAULT '',  `business_day` datetime DEFAULT CURRENT_TIMESTAMP,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品销售表';-- ------------------------------ Table structure for item_visit_stats-- ----------------------------DROP TABLE IF EXISTS `item_visit_stats`;CREATE TABLE `item_visit_stats` (  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,  `user_visits` varchar(255) NOT NULL,  `business_day` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='商品访问表';

 

 

SELECT    i.id,    i.title,    SUM(ivs.user_visits) AS uv,    its.item_num * i.price AS turnoverFROM    (        items AS i        RIGHT JOIN item_visit_stats AS ivs ON i.id = ivs.id    )LEFT JOIN (    SELECT        id,        SUM(item_num) AS item_num    FROM        item_trade_stats    WHERE        seller_nick = "XXXX"    GROUP BY        id) AS its ON its.id = ivs.idWHERE    i.nick = "XXXX"GROUP BY    i.idORDER BY    uv DESC

 

 

https://blog.csdn.net/chentaocba/article/details/7697825

写的时候从外层往里写,一层一层left join,才不容易出错。

http://www.cnblogs.com/amyStart/p/5965472.html

你可能感兴趣的文章
Wine里的中文程序出现方块字的解决方法以及Wine快捷方式的命令格式
查看>>
Citrix XenDesktop虚拟化桌面定期重启命令
查看>>
Android Checkbox在对话框中显示
查看>>
解决JfreeChart在linux系统下乱码问题
查看>>
ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 BINARY
查看>>
YMP开发框架快速上手(一)
查看>>
Oracle11g RAC下ASM 的管理与维护
查看>>
centos 安装ftp
查看>>
android 简单的 左右上下手势 判断
查看>>
成为JavaGC专家Part I — 深入浅出Java垃圾回收机制
查看>>
如何对system.img和userdata.img解包,再重新打包
查看>>
zookeepr集群环境搭建
查看>>
java.util.concurrent.CountDownLatch用方法
查看>>
linux中时间设置date、hwclock、clock
查看>>
jenkins 安装
查看>>
什么是Code Review(转)
查看>>
Linux下安装Nginx详细图解教程
查看>>
日志管理
查看>>
我的友情链接
查看>>
《JAVA程序设计与实例》记录与归纳--继承与多态
查看>>