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 ...
随机推荐
- windows linux—unix 跨平台通信集成控制系统----文件搜索
跨平台的网络通信,跟设备的集成控制,牵扯到在各种平台下的文件搜索问题,windows下面的已经有了. 地址如下: http://blog.csdn.net/wangyaninglm/article/d ...
- SpriteBuilder中物理对象能否被缩放
我前面早些时候提到物理形状不能被缩放. 现在我却说可以缩放它们,这是为啥呢? 好吧,拥有物理物体节点的缩放属性真心不能被动画化或改变在运行的时候; 但是你可以在SpriteBuilder中设置启用物理 ...
- PS 图像调整算法——自动对比度 (Auto Contrast)
PS 给出的定义: Enhance Monochromatic Contrast: Clips all channels identically. This preserves the overall ...
- GraphCuts算法解析,Graphcuts算法求最大流,最小割实例
图割论文大合集下载: http://download.csdn.net/detail/wangyaninglm/8292305 代码: /* graph.h */ /* Vladimir Kolmog ...
- SharePoint 2010 之寻找页面布局
习惯了2007的页面布局,虽然感觉不是太好用,尤其以开始接触时非常不理解页面布局和页面的关系,但是后来理清了,感觉还是很好用的,尤其对于相同格式的网站,修改布局而不改页面的情况,还是非常有效的,好了, ...
- nodejs--(一)http模板篇
Nodejs http模块可以创建服务器应用实例,也能发送http请求 1.http.get(options[, callback]) 发送简单Get请求,并响应 var http=require(' ...
- spring-cloud-config安全问题
配置服务的安全问题会很重要,其中的内容是我自己学习的,由于学习时间不长,有可能不是很完备,如果有更好的方案,烦请评论中留言或私信,谢谢! 1. 首先访问配置服务需要设置密码: 使用spring-sec ...
- 【个人学习笔记】走近H5
一.HTML5概述 1.HTML5新特性 兼容性(ie9+).合理性.效率.安全性.分离.简化.通用性.无插件 2.HTML5构成 主要包括下面这些功能:Canvas(2D和3D).Channel消息 ...
- java并发包小结(一)
java.util.concurrent 包含许多线程安全.高性能的并发构建块.换句话讲,创建 java.util.concurrent 的目的就是要实现 Collection 框架对数据结构所执行的 ...
- STL容器的基本特性和特征
1. STL有6种序列容器类型(1)vector它提供对元素的随即访问,在尾部添加和删除元素的时间是固定的,在头部或中部插入和删除元素的复杂度为线性时间.(2)deque在文件中声明.是双端队列,支持 ...