mysql学习第9-12 天 where和from子查询的用法

2019年12月18日 | 标签:

标题:mysql学习第9 天 where和from子查询的用法

——————————————————————————————————————————-

时间:2012/4/26 1:04:30

——————————————————————————————————————————-

内容:

首先看一个数据吧

 name  score
 cotine  53
 cotine  43
 stephen  75
 stephen  63

很简单很普通的分数表

cotine的人 有门功课是53有门是43

stephen的人 有门75 有门63

我想知道分数低于50的人的平均分

再解决这个问题之前 我们要学习下from的子查询

select * from  where表达式 大家都知道

其实这个表达式可以是一个子句

就是 select * from student where score between 0 and 50,

where就是里面的查询结果是作为外面的选择条件

from 就是里面的零时表就是外面的调用的 然后使用from 一定要小心 嵌套的时候 零时表一定要起个别名 要不然不能调用的

 

首先看一个数据吧

 name  score
 cotine  53
 cotine  43
 stephen  75
 stephen  63

很简单很普通的分数表

cotine的人 有门功课是53有门是43

stephen的人 有门75 有门63

我想知道分数低于50的人的平均分

再解决这个问题之前 我们要学习下from的子查询

select * from  where表达式 大家都知道

其实这个表达式可以是一个子句

就是 select * from student where score between 0 and 50,

where就是里面的查询结果是作为外面的选择条件

from 就是里面的零时表就是外面的调用的 然后使用from 一定要小心 嵌套的时候 零时表一定要起个别名 要不然不能调用的

标题:mysql 学习第10天 exist用户和where in的区别

——————————————————————————————————————————-

时间:2012/4/26 18:08:17

——————————————————————————————————————————-

内容:

有一个表1 叫TA 记录汶川地震时候捐款信息放着捐款人民和金额和名字

 name  donate
 stephen  100
 hou  200
 zhang  200
 zheng  200
xiao  200

有一个表2 叫TB 记录玉树地震时候捐款信息放着捐款人民和金额和名字

 name  donate
 xiao  100
 hou  200
 zhu  200
 ben  200
wu  200

现在我需要知道在玉树地震捐款的名单中 谁在汶川地址的时候已经捐过了

可以用where in来做

select * from TB where name in (select name from TA),

where in执行方法是先做内查询的  得到零时表的结果集

然后对tb表中每一户数据进行判断 是否在这个结果集中

那么计算方法是加入a表有a行 b表有b行 计算量是

1,取出经过筛选的a行数据—-2,对b行的每一行数据在a行数据中对比 找到就复合条件 比较A*B次  就得到结果

总的计算量是  读取(A)次+比较(A*B)次

也可以用 exists 做

select * from TB where exists (select 1 from TA TB.name=TA.name)

exists执行方法是 取出外表的每行数据 代入到 内部中进行比较, 如果存在 就得到结算

那么我门来算下这种方法的计算量

读取B行+ 比较(A*B)次

那么很明显 如果a比较小的时候 用in 也就是说先计算的表比较小时候用in

如果b小的时候用exists  也是读取小表用

 

那么简单了 什么时候用exists 什么使用用in呢

 

当我手上拿着一张小表 我要去大表里找小表中重复的数据我用exsit

如果手上是大表 我要小表中找重复的数据我用in

 

 

有一个表1 叫TA 记录汶川地震时候捐款信息放着捐款人民和金额和名字

 name  donate
 stephen  100
 hou  200
 zhang  200
 zheng  200
xiao  200

有一个表2 叫TB 记录玉树地震时候捐款信息放着捐款人民和金额和名字

 name  donate
 xiao  100
 hou  200
 zhu  200
 ben  200
wu  200

现在我需要知道在玉树地震捐款的名单中 谁在汶川地址的时候已经捐过了

可以用where in来做

select * from TB where name in (select name from TA),

where in执行方法是先做内查询的  得到零时表的结果集

然后对tb表中每一户数据进行判断 是否在这个结果集中

那么计算方法是加入a表有a行 b表有b行 计算量是

1,取出经过筛选的a行数据—-2,对b行的每一行数据在a行数据中对比 找到就复合条件 比较A*B次  就得到结果

总的计算量是  读取(A)次+比较(A*B)次

也可以用 exists 做

select * from TB where exists (select 1 from TA TB.name=TA.name)

exists执行方法是 取出外表的每行数据 代入到 内部中进行比较, 如果存在 就得到结算

那么我门来算下这种方法的计算量

读取B行+ 比较(A*B)次

那么很明显 如果a比较小的时候 用in 也就是说先计算的表比较小时候用in

如果b小的时候用exists  也是读取小表用

 

那么简单了 什么时候用exists 什么使用用in呢

 

当我手上拿着一张小表 我要去大表里找小表中重复的数据我用exsit

如果手上是大表 我要小表中找重复的数据我用in

 

标题:mysql学习第10天union用法和左链接

——————————————————————————————————————————-

时间:2012/4/28 0:37:01

——————————————————————————————————————————-

内容:

union用法

讲一个和多个表联合在一个新表中

默认有去除重复行的特点 加上union all可以加快速度 不让合并

union 后排序主要要加括号 要求union的2个或者多个表列的数量相同即可 类型可以不同

但是行的元素完全一样 后面的省略

 

左链接用法

类是excel的vlookup

左边是我的主表 我对主表某一行的数据需要到右边去查找对应的值 所以要

select biao1.lie1,biao1.lie2, from biao1 left join biao2 on biao1.lie1.biao2.lie1

 

用途就是表1列的一个数值 去表而中查询找到了就返回这一行的整个数据

union用法

讲一个和多个表联合在一个新表中

默认有去除重复行的特点 加上union all可以加快速度 不让合并

union 后排序主要要加括号 要求union的2个或者多个表列的数量相同即可 类型可以不同

但是行的元素完全一样 后面的省略

 

左链接用法

类是excel的vlookup

左边是我的主表 我对主表某一行的数据需要到右边去查找对应的值 所以要

select biao1.lie1,biao1.lie2, from biao1 left join biao2 on biao1.lie1.biao2.lie1

 

用途就是表1列的一个数值 去表而中查询找到了就返回这一行的整个数据

目前还没有任何评论.