[Mysql] 集合操作
2023-09-11 14:22:53 时间
![](https://img-blog.csdnimg.cn/fe090eca03544eaa9c8d6c8f0d9081d8.png)
数据导入
DROP TABLE IF EXISTS `table_aid`;
CREATE TABLE `table_aid` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `table_aid` VALUES ('1');
INSERT INTO `table_aid` VALUES ('2');
INSERT INTO `table_aid` VALUES ('3');
INSERT INTO `table_aid` VALUES ('4');
DROP TABLE IF EXISTS `table_bid`;
CREATE TABLE `table_bid` (
`id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO `table_bid` VALUES ('2');
INSERT INTO `table_bid` VALUES ('3');
INSERT INTO `table_bid` VALUES ('5');
INSERT INTO `table_bid` VALUES ('6');
table_aid表
table_bid表
上述表a和表b都只有一个字段,即相同字段名id
问题1:求表a与表b的交集
SELECT a.id
FROM table_aid AS a
INNER JOIN table_bid AS b
ON a.id = b.id;
结果展示:
问题2:求表a与表b的并集
SELECT *
FROM table_aid
UNION
SELECT *
FROM table_bid;
结果展示:
问题3:存在表a但不存在表b的元素
SELECT a.id
FROM table_aid AS a
LEFT JOIN table_bid AS b
ON a.id = b.id
WHERE b.id IS NULL;
结果展示:
问题3:存在表b但不存在表a的元素
SELECT b.id
FROM table_aid AS a
RIGHT JOIN table_bid AS b
ON a.id = b.id
WHERE a.id IS NULL;
结果展示:
问题4:存在表a但不存在表b的元素,同时存在表b但不同时存在表a的元素
-- 解法1
SELECT a.id
FROM table_aid AS a
LEFT JOIN table_bid AS b
ON a.id = b.id
WHERE b.id IS NULL
UNION
SELECT b.id
FROM table_aid AS a
RIGHT JOIN table_bid AS b
ON a.id = b.id
WHERE a.id IS NULL;
-- 解法2
SELECT *
FROM table_aid
WHERE id NOT IN(SELECT id FROM table_bid)
UNION
SELECT *
FROM table_bid
WHERE id NOT IN(SELECT id FROM table_aid);
结果展示:
知识扩展:查找不在表里的数据
遇到要查找“不在表里的数据,也就是在表A里的数据,但是不在表B里的数据”,可以使用如下SQL语句:
SELECT...
FROM 表1 AS a
LEFT JOIN 表2 AS b
ON a.列名 = b.列名
WHERE b.列名 IS NULL;
SELECT...
FROM 表1 AS a
RIGHT JOIN 表2 AS b
ON a.列名 = b.列名
WHERE a.列名 IS NULL;
案例练习
数据导入
DROP TABLE IF EXISTS `customers`;
CREATE TABLE `customers` (
`id` int(11) NOT NULL,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `customers` VALUES (1, 'Joe');
INSERT INTO `customers` VALUES (2, 'Henry');
INSERT INTO `customers` VALUES (3, 'Sam');
INSERT INTO `customers` VALUES (4, 'Max');
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
`id` int(11) NOT NULL,
`customerid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
INSERT INTO `orders` VALUES (1, 3);
INSERT INTO `orders` VALUES (2, 1);
某网站包含两个表,顾客姓名表(表名Customers)和购买记录表(表名Orders)
“顾客姓名表”中的ID与“购买记录”表中的学生学号CustomerId一一对应
customers表(顾客姓名表)
orders表(购买记录表)
问题:找出所有从不订购任何东西的客户
SELECT a.name AS Customers
FROM customers AS a
LEFT JOIN orders AS b
ON a.id = b.customerid
WHERE b.customerid IS null;
结果展示:
![](https://img-blog.csdnimg.cn/a6e2f84fd5e140b3b207fea8d33e8f1f.png)
相关文章
- Mysql加锁过程详解(3)-关于mysql 幻读理解
- MySQL中这14个牛逼的功能,惊艳到我了!!!
- mysql binlog 参数_MySQL Binlog常用参数
- explain 关键字模拟 MySQL 优化器执行 SQL 语句
- MySQL第四讲 MySql Undo日志 - 对聚簇索引进行CUD操作
- 三个步骤搞定 MySQL,offer到手。
- 【MySQL进阶-09】深入理解mysql执行的底层机制
- MySQL大表优化方案
- mysql数据库提示本地无法连接远程服务器(Host is not allowed to connect to this MySQL server)解决办法
- 在mysql命令行下执行sql文件
- MariaDB/MySQL中的变量
- mysql、mybatis遇到问题集合
- python操作mysql数据库系列-操作MySql数据库(四)
- python操作mysql数据库系列-安装MySql
- mysql读写分离的操作动作依据(读写分离基本依据)
- Mysql日期函数说明
- 在centos中php 在连接mysql的时候,出现Can't connect to MySQL server on 'XXX' (13)
- Mysql error.log报错:Error: Table “mysql”.“innodb_table_stats” not found
- (5.6)mysql高可用系列——MySQL Utilities 管理工具
- 【转】MySQL Utilities,mysql工具包
- 【转】一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG
- configure JDBCRealm JAAS for mysql and tomcat 7 with form based authentication--reference
- MySQL 安装mysql数据库
- Linux安装Mysql server镜像安装失败 警告:mysql-community-devel-8.0.31-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature