Oracle 数据库中WHRER的用法

本文通过实例演示了在MySQL中使用WHERE子句进行多表联查的情况,展示了当两个表的数据匹配时,查询结果的数量如何受两个表中匹配数据数量的影响。通过对teacher和maker表的插入和查询操作,揭示了查询结果的规律:查询结果条数等于两表中匹配数据条数的乘积。同时,文章指出在大数据量下,这样的查询效率低下,并预告将探讨更优的查询方法。

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

理清WHERE语句的用法

我们先来创建两张表来做演示

  1. 创建teacher
create table teacher
(
    id             bigint unsigned auto_increment,
    username       varchar(50)      default null unique comment '用户名',
    password       char(64)         default null comment '密码',
    nickname       varchar(50)      default null comment '昵称',
    phone          varchar(50)      default null unique comment '手机号码',
    email          varchar(50)      default null unique comment '电子邮箱',
    description    varchar(255)     default null comment '描述',
    primary key (id)
) comment '管理员表' charset utf8mb4;
  1. 创建maker
create table maker
(
    id             bigint unsigned auto_increment,
    username       varchar(50)      default null unique comment '用户名',
    password       char(64)         default null comment '密码',
    nickname       varchar(50)      default null comment '昵称',
    phone          varchar(50)      default null  comment '手机号码',
    email          varchar(50)      default null  comment '电子邮箱',
    description    varchar(255)     default null comment '描述',
    primary key (id)
) comment '制造者表' charset utf8mb4;
  1. teacher中插入数据
insert into teacher (username, password, nickname, phone, email, description) values ('小明','1','路飞','1','yao@ch.com','格斗家');
insert into teacher (username, password, nickname, phone, email, description) values ('小红','12','路飞','12','daomei@nl.com','格斗家');
insert into teacher (username, password, nickname, phone, email, description) values ('小绿','123','路飞','123','jianhao@jl.com','格斗家');
insert into teacher (username, password, nickname, phone, email, description) values ('小蓝','1234','路飞','1234','jianhao1@jl.com','怒翼龙');
insert into teacher (username, password, nickname, phone, email, description) values ('小紫','12345','娜美','12345','jianji1@zl.com','怒翼龙');
insert into teacher (username, password, nickname, phone, email, description) values ('小橙子','1234567','娜美','1234567','jianji2@zl.com','怒翼龙');
insert into teacher (username, password, nickname, phone, email, description) values ('小橘子','6','娜美','6','jianji3@zl.com','幻镜龙');
insert into teacher (username, password, nickname, phone, email, description) values ('小苹果','56','索隆','56','jiansheng1@sl.com','幻镜龙');
insert into teacher (username, password, nickname, phone, email, description) values ('小香蕉','456','索隆','456','jiansheng2@sl.com','金鳞龙');
insert into teacher (username, password, nickname, phone, email, description) values ('小西瓜','3456','罗宾','5456','jiansheng3@sl.com','金鳞龙');
insert into teacher (username, password, nickname, phone, email, description) values ('小荔枝','23456','剑魔','23456','jiansheng4@sl.com','斗士');

  1. 效果图
    在这里插入图片描述

开始测试(思考的过程)

主要目的是了解清楚用了where语句之后它的查询出来的结果集会是什么样子的,以及它查询结果的规律.

当你写完sql语句,点击执行的那一刻,你就应该知道你查询出来的结果是什么样子

  1. 如果maker表中没有数据

(1)sql语句

select a.username,a.password,a.nickname,a.email,b.username,b.password,b.nickname,b.email from teacher a, maker b where a.nickname = b.nickname

注:整篇文章的查询都使用的这一个sql语句

(2)查询结果
在这里插入图片描述
(3)说明
maker表中 nickname = 路飞 的条数为0,所以b.nickname就都是空,a.nickname没有为空的,所以自然就查询不到结果.
此时如果teacher表中有一条nickname为空的数据,maker表中也有一条nickname为空的数据,执行查询的时候,也会查询出来,因为他们满足了where条件,大家可DIY

  1. maker表中插入一条数据

(1)sql语句

insert into maker (username, password, nickname, phone, email, description) values ('马尔扎哈','99999','路飞','1','yao@ch.com','格斗家');

(2)查询结果
在这里插入图片描述(3)说明
可见teacher表中所有nickname = 路飞的数据都查询出来了,而maker表中只有一条为路飞的数据,此时查询出来的数据条数为1*4

(maker表中的一条 * teacher表中的四条)

  1. 再往maker表中插入一条nickname = 路飞的数据
    (1)sql语句
insert into maker (username, password, nickname, phone, email, description) values ('迪丽热巴','666666','路飞','1','dllb@ch.com','星界龙');

(2)查询结果
在这里插入图片描述
(3)说明
此时原来的teacher表中依然只有四条nickname = 路飞的数据,而maker表中nickname = 路飞的数据增加到了两条,此时所有的数据条数为2*4

(maker表中的两条数据 * teacher表中的四条数据)

4.那我们再往maker表中插入一条数据呢?
(1)sql语句

insert into maker (username, password, nickname, phone, email, description) values ('古力娜扎','333333','路飞','1','glnz@ch.com','神龙尊者');

(2)查询结果
在这里插入图片描述
(3)说明
此时原来的teacher表总还是只有四条数据,而maker表中增加了一条数据变为了三条数据,此时查询出来的所有数据条数为3*4

(maker表中的三条 * teacher表中的四条)

  1. 小结

此时结果就显而易见了,如果你想要用where去做两个表之间的关联查询,那么查询出来的数据条数就是每个表中符合 where 查询条件 的 数据条数 的乘积 之和

由此可见,where语句的查询效率是特别的低下的,那会有更好的改进方法么?
我会在接下来的文章中介绍

查询结果的规律如下图
在这里插入图片描述

补充

上边的maker表在做测试的时候只有 nickname = 路飞 的数据,并没有nickname = 其他值的数据,在这里我们补充一下
maker表中的数据全部删除

truncate table maker;

然后再插入以下数据

insert into maker (username, password, nickname, phone, email, description) values ('maker1','maker1','路飞','1','maker1@ch.com','maker');
insert into maker (username, password, nickname, phone, email, description) values ('maker2','maker2','路飞','1','maker2@ch.com','maker');
insert into maker (username, password, nickname, phone, email, description) values ('maker3','maker3','娜美','1','maker3@ch.com','maker');
insert into maker (username, password, nickname, phone, email, description) values ('maker4','maker4','娜美','1','maker4@ch.com','maker');
insert into maker (username, password, nickname, phone, email, description) values ('maker5','maker5','娜美','1','maker5@ch.com','maker');

查询结果
在这里插入图片描述
为什么是这个查询结果呢?

2 * 4 + 3 * 3
DIY

自言自语

其实这篇文章就是由 where t.zm = a.bzmc 引发的思考,数据量太大的时候真不好想明白这个!
t中的zm10个’米国注水站’, a中的bzmc5个’米国注水站’,那么总的查询出来的条数就有50条,这50条数据是什么呢?
t为每条数据前面的部分,a为每条数据后边的部分.
50 条数据分为10组, 每组中的t的数据完全相同,但是每个组的每条数据各不相同,然后再使t中的每组(5个)分别对应 a中的5个不同的bzmc(15)
反过来说就是
a中的每一条数据对应10条不同的t中的数据(110)

最后

百密终有一疏,我所写的所有文章都不是写完就不管他了,我会在对知识有了新的理解之后,就会去更新我所写的博客,也希望大家能够指正我所写的文章中的错误,也欢迎大家把自己对知识的理解写在评论区,大家一起学习,一起进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值