MySQL查询基础操作

今天这两天学习了一写MySql的基础查询在这里记载一下。

distinct的用法

首先需要注意,distinct只能用在查询的开头:
例如:select distinct sname from student
如果需要两个条件来去重那么两个条件直接跟在distinct之后就可以了
例如:select distinct sname,sno from student
在这里插入图片描述

还有一种情况:当你需要查询给一个字段去重,同时还要保留其他字段作为查询结果的时候就不能把,字段放在distinct之前
例如:select sname,distinct ssex from student
这样就是一个错误的用法,
那正确的用法应该是怎么样的呢:
select count(*) from (
select count(a.buyer) as b from (
select distinct buyer,paytime from trade where shopname=‘美宝莲’ and status=‘finished’ and paytime BETWEEN ‘2018-03-01’ and ‘2018-03-31’ )
a group by a.buyer)
as m where m.b>1;
解决问题的基本思路: 首先去重,去除消费者与日期相同的数据,值保留一条;第二,对每一个消费者的购买次数计数,第三、找到计数大于1的,就是复购的人,对复购的人进行计数;

using的用法

using 一般配合join使用,使用join的时候我们一般要指定用什么字段来join,
例如:select * from student a join score b on a.sno=b.sno
using的作用和on类似:
例如:select * from student a join score b using(sno)
这里需要注意的是,使用using的时候要加上括号,类似与函数,而且比喻两个表中的字段名完全一致才能使用。

isnull的用法

isnull通常用在:查询不包含某个条件的场景时使用;
用法是 isnull() 括号里面写上条件,

exists的用法

exists的用法与in类似,当你要依据另一个表的查询结果作为查询条件时,通常使用这个方法:
例如:查询所有未讲课的教师的Tname和Depart.
这时候就可以使用:select tname,depart from teacher a where not exists
(select * from course b where a.tno=b.tno);
exists后面的返回值,会作为一个布尔值,存在的时候就返回True,之前的查询就会生效;

join,leftioin,rightjoin 的用法

在这里插入图片描述

在这里插入图片描述
两张表,分别时学生名单以及分数表;
join :直接把两个表中共有的元素连接起来;相当于求交集;
leftjoin:左连接,依据左边的进行连接,左边的表有几行就会返回来几行;
right join :依据右边的表连接,右边的表有几行就连接几行,右边有而左边没有的,可以为空;

猜你喜欢

转载自blog.csdn.net/qq_21795835/article/details/83001728