mysql left join 左连接查询关联n多张表
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. NAME
FROM
A
INNER JOIN B ON A.id = B.id
和
SELECT
A. NAME,
B. NAME
FROM
A,
B
WHERE
A.id = B.id
结果是一样的(内连接的inner关键字可省略);
2、外连接:分为左外连接和右外连接
左连接A、B表结果包括A的全部记录和符合条件的B的记录。
右联结A、B表的结果和左联结B、A的结果是一样的,也就是说:
SELECT
A. NAME,
B. NAME
FROM
A
LEFT JOIN B ON A.id = B.id
和
SELECT
A. NAME,
B. NAME
FROM
B
RIGHT JOIN A ON B.id - A.id
执行后的结果是一样的。
3、全联结
4、无联结
5、三表联结查询
SELECT
username,
psw,
gname,
tel
FROM
(
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 : localhost
Source Server Version : 50505
Source Host : localhost:3306
Source Database : test Target Server Type : MYSQL
Target Server Version : 50505
File Encoding : 65001 Date: 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 '',
`item_num` int(11) unsigned DEFAULT '',
`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 turnover
FROM
(
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.id
WHERE
i.nick = "XXXX"
GROUP BY
i.id
ORDER BY
uv DESC
https://blog.csdn.net/chentaocba/article/details/7697825
写的时候从外层往里写,一层一层left join,才不容易出错。
http://www.cnblogs.com/amyStart/p/5965472.html
mysql left join 左连接查询关联n多张表的更多相关文章
- 掌握MySQL连接查询到底什么是驱动表
准备我们需要的表结构和数据 两张表 studnet(学生)表和score(成绩)表, 创建表的SQL语句如下 CREATE TABLE `student` ( `id` int(11) NOT NUL ...
- MySQL (五)--连接查询简介、 交叉连接、 内连接、外连接、自然连接、温馨小提示
1 连接查询简介 将多张表(可以大于2)进行记录的连接(按照某个指定的条件进行数据拼接). 最终结果:记录数可能会有变化,字段书一定会增加(至少两张表的合并). 连接查询:join,使用方式:左表 j ...
- SQL左连接查询 left join ... on
左连接查询 保留左边主表的所有行(即使在右表没有匹配的行),右表输出满足 on 条件的行,不满足的输出null 示例:组合两个表 - 力扣 表1: Person +--------------+- ...
- 深入学习之mysql(五)连接查询
深入学习Mysql(五)连接查询 1.准备数据库: CREATE DATABASE IF NOT EXISTS `db_book2` DEFAULT CHARACTER SET UTF8; USE ` ...
- mysql连接查询:3个数据表操作研究
首先,新建数据表aaa.bbb以及他们相关联的数据表avb:字段名如下图 填充点数据,如下: 上面设计表的时候,故意在两个表中有相同字段con,如果不做处理的话,在php程序中,看看什么情况?得到的结 ...
- mysql分区功能(三个文件储存一张表)(分区作用)(分区方式)
mysql分区功能(三个文件储存一张表)(分区作用)(分区方式) 一.总结 1.mysql数据表的存储方式(三个文件储存一张表): 一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放 ...
- mysql/mariadb学习记录——连接查询(JOIN)
//本文使用的数据表格//persons表中id_p为主键//orders表中id_o为主键,id_p为外键参考persons表中的id_p mysql> select * from perso ...
- MySql的join(连接)查询 (三表 left join 写法)
1.内连接:将两个表中存在连结关系的字段符合连接条件的记录形成记录集 Select A.name,B.name from A inner join B on A.id=B.id和 Select A.n ...
- mysql左连接查询结果不准确
现有四张表 表(1)res_resource_catalog 表(2)res_catalog_classify 表(3)res_resource_classify 表(4)res_resource_m ...
随机推荐
- FPGrowth
在挖掘关联规则的过程中,无可避免要处理海量的数据,也就是事务数据库如此之大,如果采用Apriori算法来挖掘,每次生成频繁k-项集的时候,可能都需要扫描事务数据库一遍,这是非常耗时的操作.那么,可以想 ...
- linux服务搭建----NFS服务搭建
nfs 服务 //配置脚本 /etc/exports //服务器 发布目录 1> 确定需要发布的目录(想要共享的目录) 例如: 想发 ...
- Leetcode_198_House Robber
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/47680663 You are a professional ...
- PS 图像调整算法——亮度调整
这个算法是参考自 阿发伯 的博客,在此对 阿发伯 表示感谢, http://blog.csdn.net/maozefa 亮度调整 非线性亮度调整: 对于R,G,B三个通道,每个通道增加相同的增量. 线 ...
- Android开发技巧——自定义控件之组合控件
Android开发技巧--自定义控件之组合控件 我准备在接下来一段时间,写一系列有关Android自定义控件的博客,包括如何进行各种自定义,并分享一下我所知道的其中的技巧,注意点等. 还是那句老话,尽 ...
- obj-c编程01:第一个类和对象的范例
这是obj-c学习过程中的第一篇博文,接下来还会有未知的N篇内容(关键是不知道obj-c有多难搞啊!),而且在以后不断的学习中,还会不断的在以前写的博文中修改和添加新的内容.在遇到暂时无法解决的问题时 ...
- Android布局优化:include 、merge、ViewStub的详细总结
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本篇博客主要是对上篇博客的补充Android性能优化之UI渲染性能优化, 没有什么新东西,觉得应该是都掌握的玩意,写出来也只是自己做个小小的总结. ...
- java——多态
多态定义:某一类事物的多种存在形态.对象的多态性.猫这类事物即具备猫的形态,又具备着动物的形态,这就是对象的多态性.简单说:就是一个对象对应着不同类型.多态在代码中的体现:父类或者接口的引用指向其子类 ...
- linux下面调试C、C++
(1)写好makefile文件(支持debug) objects = Main.o Satellite.o TimeSystem.o SRPPara:$(objects) g++ -g -o SRP ...
- 分布式任务调度——quartz + spring + 数据库
项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻 ...