mysql进阶操作join篇(三)

本文详细介绍了MySQL中JOIN操作符(包括LEFT JOIN、RIGHT JOIN、INNER JOIN及全连接替代方案)与IN、EXISTS子句的应用。通过具体实例展示了如何使用这些技术来查询不同场景下的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要介绍mysql中常用join和in,exists 的转化

mysql 版本: m y s q l V e r 8.0.27 f o r W i n 64 o n x 8 6 6 4 ( M y S Q L C o m m u n i t y S e r v e r − G P L ) \color{red}{mysql Ver 8.0.27 for Win64 on x86_64 (MySQL Community Server - GPL)} mysqlVer8.0.27forWin64onx8664(MySQLCommunityServerGPL)
注 意 : 使 用 5.7 以 下 版 本 建 表 是 不 支 持 两 个 时 间 戳 字 段 的 \color{red}{注意: 使用5.7 以下版本建表是不支持两个时间戳字段的} 使5.7

  • 建表
-- 建表
CREATE TABLE `product_name_copy` (
  `id` bigint NOT NULL DEFAULT '0',
  `name` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL COMMENT '产品名',
  `create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

使 用 单 列 的 文 件 在 n a v i c a t 里 可 视 化 录 入 数 据 \color{red}{使用单列的文件在navicat里可视化录入数据} 使navicat

  • left join
-- 查询A表有而B表没有的数据
select * from demo.product_name_copy a left join demo.product_name b on a.name = b.name  where b.name is null ;
select * from demo.product_name_copy a left outer join demo.product_name b on a.name = b.name  where b.name is null ;
select * from demo.product_name_copy  a  where a.name not  in (select name from demo.product_name) ;
select * from demo.product_name_copy  a  where not EXISTS(select name from demo.product_name b where a.name = b.name) ;
  • right join
-- 查询A表没有而B表有的数据
select * from demo.product_name a right join demo.product_name_copy b on a.name = b.name  where a.name is null ;
  • inner join
-- 查询A和B表同时存在的数据
select * from demo.product_name_copy a  join demo.product_name b on a.name = b.name ;
select * from demo.product_name_copy a inner join demo.product_name b on a.name = b.name ;
select * from demo.product_name_copy  a  where a.name  in (select name from demo.product_name) ;
select * from demo.product_name_copy  a  where exists(select * from demo.product_name b where a.name = b.name )  ;
  • full join ( m y s q l 本 身 不 存 在 f u l l j o i n \color{red}{mysql本身不存在full join} mysqlfulljoin)
-- mysql 不存在full join 
-- full join  
-- full join 原始写法1 , 1=1 写法慎用,会出现笛卡尔积,内存爆炸
select * fr om demo.product_name_copy a  FULL JOIN   demo.product_name b on 1=1; -- 写法不存在
-- full join  替代方案1
select * from demo.product_name_copy a left join demo.product_name b on  1=1
union 
select * from demo.product_name_copy a right join demo.product_name b on 1=1
;
-- full join原始写法2
select * from demo.product_name_copy a  FULL JOIN   demo.product_name b on a.name=b.name; -- 写法不存在
-- full join替代方案2
select * from demo.product_name_copy a left join demo.product_name b on  a.name=b.name
union 
select * from demo.product_name_copy a right join demo.product_name b on a.name=b.name;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值