mysql各种join连接查询
最近项目用到了几次sql join查询 来满足银行变态的需求;正好晚上自学时,看到了相关视频,所以记录下相关知识,下次再用时,根据如下图片,便可知道 怎么写sql;
注意点: 在join操作中的 on ... where ... 应该放哪些条件;目前理解 on 后放2表关联部分;where后放最终数据筛选部分;
1.下图为各种join操作的图表解释及sql语句

2.自测
- 建表:分别为 分数表(sc),及学生表(student);关系为 student.student_id=sc.id ;语句如下:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- ----------------------------
-- Table structure for sc
-- ----------------------------
DROP TABLE IF EXISTS `sc`;
CREATE TABLE `sc` (
`id` int(11) NOT NULL,
`score` int(255) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Records of sc
-- ----------------------------
INSERT INTO `sc` VALUES (10, 40);
INSERT INTO `sc` VALUES (11, 20);
INSERT INTO `sc` VALUES (12, 30); SET FOREIGN_KEY_CHECKS = 1;DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL,
`student_id` int(11) NULL DEFAULT NULL,
`name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (0, 12, 'b');
INSERT INTO `student` VALUES (1, 11, 'a');
INSERT INTO `student` VALUES (3, 13, 'c'); SET FOREIGN_KEY_CHECKS = 1;
- 建表数据结果如下:


可以根据图表中的sql 语句进行相关join查询测试;
3.简单测试2个结果:
测试第一个join 语句如下:
select student.student_id,sc.score from student LEFT JOIN sc on student.student_id=sc.id
结果为:
测试第二个join 语句如下:
select student.student_id,sc.score from student LEFT JOIN sc on student.student_id=sc.id WHERE sc.id is null
结果为:
;解析:在 第一个语句的基础上加上 WHERE sc.id is null ;只保留sc.id 为 nul的数据,而这个数据 只有 student 和 sc 非交集部分才有;
重点为 mysql 没有 full outer join 或者 full join;导致 要想完成 图中的 6,7部分,必须使用 图中1和4 或 1和5 的 union 来实现;
测试第6个join 语句如下:
select student.student_id,sc.score from student left JOIN sc on student.student_id=sc.id
UNION
select student.student_id,sc.score from student RIGHT JOIN sc on student.student_id=sc.id
结果为:
测试第7个join 语句如下:
select student.student_id,sc.score from student left JOIN sc on student.student_id=sc.id WHERE sc.id is null
UNION
select student.student_id,sc.score from student RIGHT JOIN sc on student.student_id=sc.id WHERE student.student_id is null
结果为:
mysql各种join连接查询的更多相关文章
- Mysql 连接查询 Mysql支持的连接查询有哪些
CREATE TABLE `chx` ( `id` VARCHAR(20) NOT NULL, `name` VARCHAR(50) DEFAULT NULL, `name2` CHAR( ...
- MySql数据库之连接查询
在MySql数据库中连接查询分为以下几种方式: 1.内连接查询 内连接查询通过关键字 inner join 关键字来实现,通过代码实现: select * from 表1 inner join 表2 ...
- 【SQL】各取所需 | SQL JOIN连接查询各种用法总结
前面 在实际应用中,大多的查询都是需要多表连接查询的,但很多初学SQL的小伙伴总对各种JOIN有些迷糊.回想一下,初期很长一段时间,我常用的似乎也就是等值连接 WHERE 后面加等号,对各种JOIN也 ...
- 【连接查询】mySql多表连接查询与union与union all用法
1.准备两个表 表a: 结构: mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | T ...
- MySQL 进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接
#进阶6: 连接查询 (多表连接) : 等值连接/非等值连接 /左右全连接/内连接 /* 含义: 当查询的字段来自于多个表时, 就会用到连接查询 一: sql 92标准 :等值连接 ,(#内连接) 1 ...
- Mysql联合,连接查询
一. 联合查询 UNION, INTERSECT, EXCEPT UNION运算符可以将两个或两个以上Select语句的查询结果集合合并成一个结果集合显示,即执行联合查询.UNION的语法格式为 ...
- php使用mysql和mysqli连接查询数据
mysql: <?php $code = $_POST['code']; $status = ""; $success = ""; $scookies = ...
- SQL Join(连接查询)
1.连接查询分为: inner join(自然连接,自连接) Left join(左连接)/Left outer join(左外连接):效果一样 Right join(右连接)/Right outer ...
- 关于left join连接查询 两张表里有同名字段的问题
左连接查询在开发中很常用,但有个问题常常会遇到,两个表中有同名字段时,比如左右表都有一个id字段,会造成查询结果中左表的id值被右表的id值覆盖掉(大部分php框架都是这个效果),而且还不会报错,容易 ...
随机推荐
- 数据库_MHA群集搭建
MHA概念介绍,群集搭建与测试 一, MHA介绍 1.概念:MHA master high availability,由日本DeNA公司开发,解决mysql故障切换可以做到0-30秒,而且在故障切换过 ...
- IDA Pro - 如何得到比较清楚的逆向伪代码
原文地址:Question about disassembler 简介 这篇文章介绍了如何在不使用插件的IDA Hex-Rays如何得到比较清晰的伪代码.IDA Hex-Rays功能很强大,只要你提供 ...
- Retrofit与RXJava整合(转)
Retrofit 除了提供了传统的 Callback 形式的 API,还有 RxJava 版本的 Observable 形式 API.下面我用对比的方式来介绍 Retrofit 的 RxJava 版 ...
- ltp-ddt nand_perf_ubifs_w_cpuload
NAND_M_PERF_UBIFS_CPU_LOAD source 'common.sh';/opt/ltp/runltp -f ddt/nand_perf_ubifs -s "NAND_S ...
- vmwre虚拟机配置
mware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式).打开vmware虚拟机,我们可以在选项栏的“编辑”下的“虚 ...
- win10搭建ftp环境
1.进入程序,并点击“启用或关闭windows功能” 2.勾选对应的功能,并点击“确定” 3.进入IIS 4.如下图 5.如图 6.如图 7.如下图 8.创建新用户,用于登录ftp(自行创建) 9.禁 ...
- shell脚本学习 (10) 从结构化文本提取数据
1提取/ 后的数据 sed -e 's=/.*==' do.txt 2 sed -e 's=/.*=='\ -e 's=^\([^:]*\):\(.*\) \([^ ]*\)=\1:\3, \2=' ...
- 【CF906E】Reverses(回文自动机,最小回文分割)
题意:给定两个长度相等的仅由小写字母组成的串A和B,问在A中最少选择多少段互不相交的子串进行翻转能使A和B相同 len<=5e5 思路:构造新串S=a[1]b[1]a[2]b[2]...a[n] ...
- Java并发AtomicLong接口
java.util.concurrent.atomic.AtomicLong类提供了可以被原子地读取和写入的底层long值的操作,并且还包含高级原子操作. AtomicLong支持基础long类型变量 ...
- Thymeleaf 遇到的问题
1. 后台传递long类型的值作为 js 执行方法的参数,精准度失效解决办法 解决办法:用thymeleaf的拼接字符串方法来解决 例:<button class="btn btn-p ...