mysql for 运营简明教程

大纲

mysql查询是一种入门很简单的技术,最简单的查询长得像这样:select * from user,简单查询用户表(不建议直接使用)。完整一点的查询长这样:select * from user where id=1 order by time desc limit 10。查询主要由4部分组成:

  • select 部分,表明你要查什么,*代表所有,一般不推荐。建议需要查什么字段都写上去,支持嵌套查询语句。
  • from 部分,表明你要从哪里查,可以多表联合查询。
  • where 部分,表明你的筛选条件,也支持嵌套,是查询语句中最重要也最复杂的部分。
  • order 后面的部分,表明你想要怎么展示。语法上这部分不是必须的,但是除了导出,大家在日常使用中必须要加。
    下面按照重要程度进行详细介绍。(注意:示例代码不一定完整,实际使用的这4部分基本都要有!)

where

日常使用中一般会用到下面几个基本语句:

对比判断

  • 如需要查询名字是小明的用户,可以用where name = '小明',注意字符串必须用单引号包裹,不要用双引号。
  • 想要查询年龄是18岁或者是30-40岁的用户,可以用where age=18 or (age>=30 and age <=40)。和数学一样,括号里面的优先计算,所以不熟练的情况下建议多打括号。
  • 上面的语句可以优化成where age=18 or age between 30 and 40,between是一个语句,不需要用括号,包含两端(30和40)。
  • 不等于用!=,如where age!=18就是年龄不为18的。

模糊查询

如果我们只知道一个人名字里面有“明”,那么我们需要用到模糊查询:where name like '%明%'。%是通配符,代表任意字符,这个语句可以查询所有名字里面带“明”字的用户。一般情况下这种查询会很慢,建议少用,或者明确知道“明”在前面还是后面时,去掉一个%来提高效率。

in查询

想要查询年龄是2 4 8岁的用户,可以用in查询:where age in (2,4,6)。选项用逗号分隔,外面用括号包裹。更复杂一点(可选学习),它还可以嵌套查询,比如想查询18岁用户上了哪些课,可以这么写:select name from classChoose where userId in (select id from user where age=18)。这里查的是classChoose表,条件里面通过(select id from user where age=18)来获取所有18岁用户的ID,然后用in来进行匹配筛选。in里面的嵌套查询只能select一个字段,用以匹配筛选,嵌套查询需要用括号包裹。


from

from里面是你想要查询的表,如user。表名建议使用双引号包裹,否则和系统关键字一样会报错(示例里面都没有加,是因为切换输入法麻烦,正常使用建议都加防止出错)。多表查询如下:from user join classChoose where user.id=classChoose.userId,使用join进行连接多个表,然后用where限定连接条件。join理论上可以无限写,但是多写一个占用的空间会多一个数量级,在没有合适限定条件的情况下数据库会爆炸(假设A表有10W数据,B表1000数据,两表简单连接会产生1亿条数据)。所以多表连接必须写好限定条件。

有时候会涉及两个相同的表联查,涉及上下级的时候比较常见。这个时候需要写别名,如select u1.name,u2.age from user u1 join user u2 on u1.id=u2.fatherId where u1.time>10086。表名+空格+别名即可,其他地方使用这个表只能使用别名,原本的名字相当于隐藏了。


select

select里面是你要查什么,一般是表里面的字段,如select name from "user"注意,user在postsql里面是关键字,这里的表名不加双引号就会报错,所以建议表名都要加)就是查询用户的名称。如果是连表查询,字段前面需要加所属表的名称,如"user".name,否则容易出错。

select里面还有一些统计函数,如select count(*) as userCount,sum(age) as age,avg(age) as avgAge,min(age) as minAge,max(age) as maxAge。这里as代表别名,函数一般比较长,所以一般会设置一个别名方便看。userCount是一共有多少数据(如果有where,那么都是筛选后的数据),age是年龄总和,avgAge是平均年龄,minAge maxAge分别是最大最小年龄。这里除了count函数以外,其他的都需要输入字段,告诉数据库你要看哪个字段的统计数据。在使用统计数据函数的时候,无法查询普通字段,因为已经给你聚合统计了。高级用法后续会讲。

(可选学习)select还可以进行嵌套查询,如select name,(select count(*) from classChoose where classChoose.userId=user.id) as classes,这样一句话就可以查到用户的信息以及他选了多少课,在需要连多表查询多个统计信息的时候会很方便。要点是,嵌套的查询只能select 1个字段,然后需要用括号包裹起来,可以引用主表(这里是user表)里面的字段(user.id)。


杂项

where语句后面的内容统称为杂项,常用的有order by age asc limit 10order by是对结果进行排序,asc是升序,desc是降序。limit是限制返回多少条,一般不要太大(一般200足够了,多也不要超过1K),太大了占带宽且慢。

和统计函数一起有个高级用法,group by。它可以和统计函数一起进行分组统计,如select avg(age) as age,level from user group by level,就是按照等级来看用户的平均年龄,在这种情况下select里面可以添加group by中的字段。group by支持多个字段,如select avg(age) as age,level,class from user group by level,class就是按照等级和班级进行分组统计。

你可能感兴趣的:(mysql for 运营简明教程)