产品经理学SQL的正确姿势(二)
以下所有的查询语句,符号都要用英文
基本查询和查询模型
还记得上篇最后的练习吗?
select * from beauty;
这就是最简单的查询,我们一起来分析下:
- select代表查询的意思。
- * 代表查出所有列,也就是字段。
- from 后面接要查询的表名。
上面这句话的意思就是,查出beauty表所有的信息。是不是一目了然?
但是我们觉的信息太多了,不想要这么多,只想查出表中所有美女的名字和等级
那么我们要怎么来思考并写出语句呢?这里我给出一个思维模型。写语句前我们先问自己两个问题:
- 我要查询那张表?
- 我需要什么信息(字段或者说列)
想明白了吗?好,我们跟着这思路来:
select 列1,列2,...列n from 表名
我要查的表是beauty,想查出的名字(name)和等级(level)。那么套进去,语句如下:
select name,level from beauty;
运行一下,是不是出现自己想要的结果了?趁热我们再来一句:
我们现在想查出表中所有美女的名字,年纪和等级
想一想,我们怎么来做?练习一下吧。
where子句
这时,是不是有疑问了?为什么都是查出所有的行?我们只想查出一行信息怎么查呢?那我们把上面的模型更新一下:
select 列1,列2,...列n from 表名 where 列 运算符 值;
where接的就是要查询的条件。
比如:我们要查出第二行所有信息,那么语句如下:
select * from beauty where id = 2;
运行一下,是不是已经把第二条信息查出来了?那我们来介绍下运算符有什么?
= 等于
<> 不等于
> 大于
< 小于
= 大于等于
<= 小于等于
直接试验吧:
- 查出名字是张柏芝的所有信息。
- 查出id大于2的所有信息。
试着写下吧。
where子句之模糊查询
记得google搜索查询东西吗?所有的条件都是不准确的,但信息我们依然能搜索出来,他是怎么做到的?
我们可以在where字句中使用like关键字,它主要是用于检索与特定字符串匹配的数据,我们来试下:
1.现在我们要查询出名字中包含玲的所有信息:
select * from beauty where name linke '%玲%'
结果如何?%我们叫做通配符,必须被单引号括起来。通配符的作用就是在通配符的位置配备任意字符。上面这语句的意思就是,不管前后,只要包含玲就查出来。
但是通配符除了%号还有其他的,试着google下:
- 查出都有些什么通配符?
- 试着每个通配符都用下,看看效果。
where之IN子句
是不是觉得where字句很有意思?现在我们有一个需求:
- 假设,beauty里有一千条美女的数据,而我们只需要筛选出其中几条不连续ID的(必需ID为1,99,199)的数据,怎么办呢?
按照上面我们学习的东西,如果要查出来,我们是不是的写三条
select * from beauty where id = 1;
select * from beauty where id = 99;
select * from beauty where id = 199;
是不是感觉特别费劲?有没有发现一个规律?前面语句都一样只是后面的ID不同?要是能把ID都包含起来就好了。IN 子句的意思就包含,试下查询出beauty 表中id 为1,和3的数据:
select * from beauty where id in(1,3)
IN除了可以写具体值,还有包含一条其他的查询语句。不过这个后面在说。对了,不要忘记加逗号。
where之复合查询
不知你有没有发现,前面的where都只讲了一个条件,要是我们有多个条件呢?比如:查询等级为7,且年龄等于36的美女名字。怎么办?我们来试下下面语句:
select name from beauty where level = 7 and age = 36
执行结果如何?在查询条件中,多个条件可以使用逻辑运算符连接。上面语句and 就逻辑运算符。总共有三:
and ,not,or
分别查下是什么意思?并且写写试试。
统计函数
现在来个比较好玩儿的,身为产品,是不是经常要统计一些平均值,总数量之类的?哈,先来一个例子吧:
计算出等级的平均值。
思路依旧如上,只是在列上要加点小东西,先认识一下:
count()计算行数
avg()求平均函数
sum()求总和
min()求最小
max() 求最大
有疑惑先放着,跟着来,我们查的表(beauty),要查出的字段(level),语句如下:
select level from beauty;
要查出平均值,函数为avg(),只需加在需要的列上,如下:
select avg(level) from beauty;
结果出来了吧?接下来,查一查下面的:
- 查出等级的总和。
- 查出表里有多少行。
order by子句
学了统计函数调节下胃口,现在来学习下排序:
首先我们先查出所有信息,然后突然想按照等级给他们排序下,怎么办?
执行下面这语句试下:
select * from beauty order by level
如果想倒着来呢?试着在level后再加个desc试下。
练完后,换一下 desc 和 asc都试下,有没有发现什么?
基本篇到此结束,下篇预告:
- 分组查询
- having子句
- 连表查询(内连接,外连接,交叉连接)
- 子查询