目录

背景

使用的景场

代码及演示


背景

最近时不时都要去弄MySQL数据库,不仅仅工作要用到,接的私活里面,也有很多时候要使用MySQL数据库。

在此记录下这个left join的功能,因为十分有用。

使用的景场

在数据库里面,因为某些表存在外键的关联,比如一个人住了某个房子,这个房子里面还有很多信息,这个时候。

如果要查询,某个这个人的信息,以及他所居住的房子的信息,以一列来显示,那么使用left join将会是一个很好的查询方式;

代码及演示

如下的数据库结构,代码将在本文的末尾给出:

这里面每一个表都有一个id,是主键。

其中borrow表如下:

他的studentID是外键,内容为student的主键

他的bookID是外键,内容为books的主键

下面来看下role和student中的内容:

这里为什么要把stauts管理role的外键呢?如果role要进行增加,并且还有其他表要使用,那么这种方式,只需增加或修改role表,其他的表将不会收到什么影响;

如果现在有这样的功能,查询所有的学生,并且把他们的职位也显示上去,如果是这样的SQL将会有个问题:

SELECT student.id, student.name, student.sex, role.name FROM student, role

从中可以看到,student表中所有数据,和role表中的所有数据对应了,造成了出现了7*4=28个结果;

这样是不对的,应该使用左链接,顾名思义,使用左链接就可以把status换成指定职位,SQL如下:

SELECT student.id, student.name, student.sex, role.name FROM student LEFT JOIN role ON role.id=student.status

这种才是想要的结果;

比如现在再来个例子,这里有个借书表,内容如下:

其中studentID为student的主键,bookID为books的主键。

其中books内容如下:

这里在刚刚sql语句的基础上,提出一个新的需求,显示出学生的信息和职位,以及接过书的信息

SQL如下:

SELECT student.id, student.name, student.sex, role.name, borrow.id FROM student LEFT JOIN role ON role.id=student.status LEFT JOIN borrow ON borrow.studentID=student.id

运行截图如下:

这里因为books和student是通过borrow表链接的,并不是直接左相连。所以并不能直接用左链接!

可能也和自己的水平有关;

【注意,此处可以使用左链接进行查询,本人已经弄出来了,在另外一篇博文中有说明:2019-05-20 14:01:41】

如果要查询小红借的书的信息;

SELECT student.id, student.name, student.sex, role.name, borrow.id FROM student LEFT JOIN role ON role.id=student.status LEFT JOIN borrow ON borrow.studentID=student.id WHERE student.id=3;

运行截图如下:

SQL代码如下:

/*
SQLyog Ultimate v11.24 (32 bit)
MySQL - 5.5.47 : Database - leftjointest
*********************************************************************
*//*!40101 SET NAMES utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`leftjointest` /*!40100 DEFAULT CHARACTER SET gbk */;USE `leftjointest`;/*Table structure for table `books` */DROP TABLE IF EXISTS `books`;CREATE TABLE `books` (`id` int(11) NOT NULL,`bookName` varchar(50) NOT NULL,`author` varchar(50) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;/*Data for the table `books` */insert  into `books`(`id`,`bookName`,`author`) values (0,'十万个为什么','嘉良传媒'),(1,'淘气包马小跳漫画版','杨红樱'),(2,'丁丁历险记','本书编写组'),(3,'不可思议的事件簿6','雷欧幻像'),(4,'神奇校车桥梁书版','乔安娜·柯尔');/*Table structure for table `borrow` */DROP TABLE IF EXISTS `borrow`;CREATE TABLE `borrow` (`id` int(11) NOT NULL,`studentID` int(11) NOT NULL,`bookID` int(11) NOT NULL,PRIMARY KEY (`id`),KEY `studentID` (`studentID`),KEY `bookID` (`bookID`),CONSTRAINT `borrow_ibfk_1` FOREIGN KEY (`studentID`) REFERENCES `student` (`id`),CONSTRAINT `borrow_ibfk_2` FOREIGN KEY (`bookID`) REFERENCES `books` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;/*Data for the table `borrow` */insert  into `borrow`(`id`,`studentID`,`bookID`) values (0,3,0),(1,3,1),(2,3,4),(3,1,4),(4,1,2);/*Table structure for table `role` */DROP TABLE IF EXISTS `role`;CREATE TABLE `role` (`id` int(11) NOT NULL,`name` varchar(50) NOT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;/*Data for the table `role` */insert  into `role`(`id`,`name`) values (1,'普通学生'),(2,'三好学生'),(3,'扛把子'),(4,'总扛把子');/*Table structure for table `student` */DROP TABLE IF EXISTS `student`;CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(50) NOT NULL,`sex` varchar(8) NOT NULL,`status` int(11) NOT NULL,PRIMARY KEY (`id`),KEY `status` (`status`),CONSTRAINT `student_ibfk_1` FOREIGN KEY (`status`) REFERENCES `role` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=gbk;/*Data for the table `student` */insert  into `student`(`id`,`name`,`sex`,`status`) values (1,'小明','男',1),(3,'小红','女',2),(4,'小黄','男',1),(5,'小刚','男',3),(6,'小丁','男',1),(7,'小紫','女',1),(8,'大刚','男',4);/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

MySQL笔记-左连接的使用(left join有关联的多表查询)相关推荐

  1. MySQL的左连接、右连接、内连接

    一. 写法: 1.左连接:   SELECT student.Sno,Sname,Ssex,Sbirth,Sclass,Cno,Grade FROM student LEFT OUTER JOIN s ...

  2. MySQL数据库左连接查询left join ... on

    1. 左连接查询 以左表为主根据条件查询右表数据,如果根据条件查询右表数据不存在使用null值填充 左连接查询效果图: 左连接查询语法格式: select 字段 from 表1 left join 表 ...

  3. mysql连续左连接(left join)和多层从属子表的查询

    left join 在做报表查询的时候很常用. 学连接查询的时候,感觉很简单,并且印象不深刻. 实际使用过程中,才遇到了困难. 在网上查询的过程中,了解到 问题1:是否可以连续left join,可以 ...

  4. mysql之左连接与右连接

    左连接: select 列1,列2,列N from tableA left join tableB on tableA.列 = tableB.列(正常是一个外键列) [此处表连接成一张大表,完全当成一 ...

  5. mysql的左连接应用

    如果两个表存在外键连接,可根据外键对两个表进行左连接,这时候外键相对应的其他列如果有NULL值,代表这两个表可能存在不同步的现象,可删除相应的值使2个表同步. 操作实例: mysql> desc ...

  6. 【mysql】左连接 连表查询 去重

    1.直接上代码 mysql: select DISTINCT a.* FROM user a LEFT JOIN user_login_log b ON a.id = b.userid where 1 ...

  7. mysql自左连接最大值_mysql左连接自连接例子

    连接就是将两个表按照某个公共字段来拼成一个大表. 左连接就是在做连接是以左边这个表为标准,来遍历右边的表. 1.引子 左连接,自连接 SELECT * FROM test_visit t1 LEFT ...

  8. mysql update 左连接_使用左连接的MySQL更新查询

    表格式 表名:file_manager_folder Rows:id,parentId,name 我的查询模拟将文件夹移动到另一个文件夹,并使用IN(?)接受数组. 如果没有相同的parentId和n ...

  9. left join on用法_MySQL 多表查询 quot;Joinquot;+“case when”语句总结

    本部分讲述:join系列全部总结和case when语句用法 join系列:表加法.Cross join .inner join.left join.right join.full outer joi ...

最新文章

  1. 距离和相似性度量方法
  2. python散点图拟合曲线-python散点图拟合
  3. python函数整理
  4. ip以及端口转发数据、根据端口转发显示内网的web的方法介绍
  5. C++ 抛出异常与传递参数的区别
  6. html设置背景图片自动适应屏幕大小,css适应屏幕 CSS背景图片自适应屏幕大小
  7. vue 3 引入百度地图api
  8. java 远程文件操作_java远程文件操作 - osc_88djj30s的个人空间 - OSCHINA - 中文开源技术交流社区...
  9. TJA1044---具有待机模式的高速CAN收发器
  10. Java jcmd内存远大于top_Java堆外内存排查小结
  11. 网络设备(交换机、路由器、集线器)
  12. 通讯录——java课程设计
  13. ffmpeg图片格式转换
  14. 数据库层次模型的优缺点
  15. 敏捷开发项目管理流程
  16. LeetCode: 871. Minimum Number of Refueling Stops
  17. 钡铼智能楼宇控制BACnet 接入Modbus TCP Server云平台
  18. 值得收藏的十个C/C++学习网站
  19. MAVEN下载与安装
  20. HBuilder的安装与试用

热门文章

  1. 全栈程序员这个月写了啥代码?
  2. C++效率在此笔者不想通过反汇编来实验
  3. 技术面试的《飞鸽传书2007绿色版下载》
  4. Pragma是什么?
  5. 如何实现开关CD-ROM
  6. 如何从初级程序员变成高级程序员?赶紧看一看
  7. 零基础编程入门基础语句!小白必点,大牛绕道!
  8. 除了要求app随手机壳颜色变之外,产品还要求....
  9. 第五节:video标签的特性,你全都掌握了吗?
  10. 未检测到其他显示器_同维工控机显示器显示器没反应维修技术精湛