MySQL的7种JOIN表连接结果集,你了解几个?搞懂仅需1张图
目录
实践
第一种
第二种
第三种
第四种
第五种
第六种
第七种
实践
我相信各位小伙伴通过上面的图已经明白了,接下来为了加深印象,让我们实践一下吧!
用户表:-- 建表 CREATE TABLE `sys_user` ( `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT "用户ID", `user_name` varchar(30) NOT NULL COMMENT "用户账号", `nick_name` varchar(30) NOT NULL COMMENT "用户昵称", `dept_id` bigint(20) DEFAULT NULL COMMENT "部门ID", PRIMARY KEY (`user_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT="用户信息表"; -- 插入数据 INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (1, "管理员", "admin", 10); INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (2, "张三", "zs", 10); INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (3, "李四", "ls", 11); INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (4, "王五", "ww", 10); INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (5, "老六", "ll", 11); INSERT INTO `yy`.`sys_user`(`user_id`, `user_name`, `nick_name`, `dept_id`) VALUES (6, "小七", "xq", NULL);
部门表: -- 建表 CREATE TABLE `sys_dept` ( `dept_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT "部门id", `parent_id` bigint(20) DEFAULT "0" COMMENT "父部门id", `dept_name` varchar(30) DEFAULT "" COMMENT "部门名称", PRIMARY KEY (`dept_id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT="部门表"; -- 插入数据 INSERT INTO `yy`.`sys_dept`(`dept_id`, `parent_id`, `dept_name`) VALUES (10, 0, "法外狂徒部"); INSERT INTO `yy`.`sys_dept`(`dept_id`, `parent_id`, `dept_name`) VALUES (11, 0, "伏地魔部"); INSERT INTO `yy`.`sys_dept`(`dept_id`, `parent_id`, `dept_name`) VALUES (12, 0, "测试部")第一种
SQL语句:SELECT * FROM sys_user u LEFT JOIN sys_dept d ON u.dept_id = d.dept_id;
结果:
LEFT JOIN是以左表为主,不管有没有匹配到右表的数据都要显示左边的数据,可能有小伙伴不知道哪个是左表哪个是右表,SQL语句中 写在LEFT JOIN左边 的表是 左表 , 写在右边 的那自然就是 右表 啦!!! 第二种
SQL语句:SELECT * FROM sys_user u LEFT JOIN sys_dept d ON u.dept_id = d.dept_id WHERE d.dept_id IS NULL;
结果:
在原先的基础上多加了WHERE d.dept_id IS NULL的条件,这个条件筛选出sys_user表中dept_id字段为空的数据,结果集中不包含和sys_dept表对应的数据 第三种
SQL语句:SELECT * FROM sys_user u RIGHT JOIN sys_dept d ON u.dept_id = d.dept_id;
结果:
这个结果集和LEFT JOIN的恰恰相反,只是主体换了而已 第四种
SQL语句:SELECT * FROM sys_user u RIGHT JOIN sys_dept d ON u.dept_id = d.dept_id WHERE u.dept_id IS NULL;
结果:
结果集和上述第二种中的结果集是相反的,可以往上翻进行对比哦!!!第五种SQL语句:
SELECT
*
FROM
sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.dept_id UNION
SELECT
*
FROM
sys_user u
RIGHT JOIN sys_dept d ON u.dept_id = d.dept_id;
结果:
该结果集只是使用UNION关键字将上述第一种和第三种的结果集进行了拼接,那么有的小伙伴就要问了,既然是拼接那么为什么没有重复的数据,这是因为UNION给我们去除了重复的数据了,如果你想看重复的数据就要使用UNION ALL关键字,如下:
第六种
SQL语句:
SELECT
*
FROM
sys_user u
LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
WHERE
d.dept_id IS NULL UNION
SELECT
*
FROM
sys_user u
RIGHT JOIN sys_dept d ON u.dept_id = d.dept_id
WHERE
u.dept_id IS NULL;
结果:
第七种
SQL语句:SELECT * FROM sys_user u INNER JOIN sys_dept d ON u.dept_id = d.dept_id;
结果:
除了上面这种写法,还有一种写法是用逗号代替,如: SELECT * FROM sys_user u,sys_dept d WHERE u.dept_id = d.dept_id;
结果:
发现结果集是一样的,别看两条语句写法差很大,但是它们是等价的 总结了很多有关于java面试的资料,希望能够帮助正在学习java的小伙伴。由于资料过多不便发表文章,创作不易,望小伙伴们能够给我一些动力继续创建更好的java类学习资料文章,
请多多支持和关注小作,别忘了点赞+评论+转发。右上角私信我回复【03】即可领取免费学习资料谢谢啦!
原文出处:https://blog.csdn.net/qq_38238956/article/details/124778421?spm=1001.2100.3001.7377&utm_medium=distribute.pc_feed_blog_category.none-task-blog-classify_tag-11-124778421-null-null.nonecase&depth_1-utm_source=distribute.pc_feed_blog_category.none-task-blog-classify_tag-11-124778421-null-null.nonecase
请尽量停止这样聊天(漫画科普)看完倒吸一口冷气!我们大家都知道人和人之间,最舒适的距离就是尊重,一个懂得尊重别人的人,自然会获得别人的尊重和肯定,在别人与你说话的时候,一定要做一个合格的倾听者,别人说话的时候一定不要打断别人的话
国乒世界排名更新!张本智和积分大跌,马龙或被超,孙颖莎成赢家目前新年的假期已经过完,进入到新一轮的周期,国际乒联针对各大主力的排名进行更新。从这一次的世界排名来看,国乒的各大主力依旧非常的争气占据主流,只不过对于有的球员来说有人欢喜有人愁,
中国的围棋世界冠军姓氏大全无四大姓每姓无二人丁浩夺冠丁家入围准确地说,题目应是中国棋院的围棋世界个人赛冠军姓氏大全。图摭棋协第27届LG杯,丁浩20胜杨鼎新夺冠。中国的围棋世界冠军姓氏榜上再添一家。目前合计22家,夺冠者分别是马晓春俞斌常昊
世界最神秘的按摩店,服务员背景惊人,顾客被吓得腿软很多人对于旅游是非常热爱的,在旅游途中,我们或许还能收获一两个人生挚友。(此处已添加小程序,请到今日头条客户端查看)即便没有这样的缘分,旅游也能令人心胸开阔,视野宽广,人生阅历也得
每个人内心都住着想被温暖的小孩准备收摊回家的时候,又冷又饿又累的她,给家里的那个人打了个电话,让他帮忙下楼搬东西。由于天气太冷,路面上结了冰,比平时晚了五分钟到家。他站在那里脸不是脸鼻子不是鼻子大声咆哮着,埋怨
中国漫画第一人丰子恺儿童漫画选6丰子恺是中国引进漫画概念的第一人,其漫画作品多以儿童为题材,富有童趣幽默睿智反映社会现象。头条创作挑战赛漫画新中国70年双双对对飞睡着了骏马小梦搬凳丰子恺其实,我的画究竟是不是漫画
寂照庵旅拍薅了一把花草,光影效果不错!你觉得呢?错峰出游大理苍山寂照庵,薅了一把花草回来,自我感觉这次旅拍,光影效果还不错。不知道,你觉得如何呢?春节期间,因为去有风的地方火热播出,大理到处都是游客,景区和景点都是人山人海。就连
狂飙取景地在江门,这里还有一处南国威尼斯古劳水乡2月1日,电视剧狂飙迎来大结局。受益于狂飙热播,取景地江门的相关景区也成了热门旅游目的地,比如狂飙里旧街区的主要取景于江门蓬江区长堤历史文化街区。其实,江门可以玩的地方还有很多。侨
青秀山丛林冒险乐园作者chatGPT青秀山丛林冒险是一次刺激而又不失美好的旅行。这里的丛林拥有独特的生态环境和丰富的动植物资源。当你沿着青秀山的山路前行时,你可以感受到大自然的美丽和庞大,同时也能领略到空气的清新和绿
杭州建德草莓有多热?90后博士村干部当起农场主眼下正是草莓季,春节返乡的你,有没有去家附近的草莓大棚,体验一次采摘游?杭州建德被誉为中国草莓之乡,这里的草莓全产业链产值超45亿元,产值规模浙江省第一全国第三。当地种植有包括建德
古堡里的宁静时光(走进传统村落)来源人民网图北方城村内民居屋顶上的典型装饰。图村民展示刚刚做好的蔚县传统美食黄糕。图北方城村内的建筑。图村民邓发站在自家院内。图小朋友在北方城村内的主街道上骑车。图北方城村内的街景