1.distinct去重

        
(1)使用distinct关键字进行去重,可以在聚合函数里用distinct。
(2)使用group by,想对谁去重就按谁分组
        

2.查询结果限制行数——limit

        LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数
        LIMIT n1,n2 接受一个或两个数字参数:

  • 如果只给定一个参数,它表示返回最大的记录行数目,即返回前几行记录。

  • 如果给定两个参数,第一个参数指定第一个返回记录行的偏移量(记录的下标),第二个参数指定返回记录行的最大数目。如果第二个参数是-1,表示从指定的起始行到表的最后一行。

【tips】第一行记录是0!limit后面不用加()

3.分组过滤having

        where后面不能跟聚合函数,而having后面可以跟聚合函数
        group by在前,having在后,但having先执行。(就像select在前where在后,where先执行一样,都要先根据条件进行筛选
        在select后重命名的字段在这个sql中都能用。
【tips】聚合函数有:AVG()、SUM()、MAX()、MIN()、COUNT()。
        

4.连接查询

(1)内连接 join
        查询两表都有的数据。
        ★内连接对重复记录的处理:比如说下面 user_profile 表和 question_practice_detail 表进行内连接,在 question_practice_detail 表中有 device_id 相同的记录,内连接后的表应该是什么样的呢?多条相同device_id的记录是都在还是只有一个?
        
        【结果】从内连接后的表可以看出,相同记录会都在
        
(2)左/右外连接 left/right join
        两表交集+其中一表全部数据。

5.or、union和union all的区别

        or是连接两个判断条件,意思是"或",而union和union all是对两个结果集求并集
        
        or和union都会自动去重,union all不去重,即所有的结果全部显示。

6.★if函数

        语法:IF(expr1,expr2,expr3)
        解释:expr1 的值为 TRUE,则返回值为 expr2;expr1 的值为FALSE,则返回值为 expr3。其中,expr1是判断条件,expr2和expr3是符合expr1的自定义的返回结果
        举例:
        
        一般用来将查询数据根据条件转换成中文。

7.★case函数

        case有点类似switch语句,可以用来进行多个条件的选择。
        用法:
  • 普通case语句:
  • 搜索case语句:

    【tips】注意要以end结尾!

8.day()、month()、year()函数

        对于一个date类型的字段,可以用day(字段名)、month(字段名)、year(字段名)来分别获取该字段的日、月、年

9.date_add函数

        DATE_ADD() 函数可以向日期添加指定的时间间隔
        语法:DATE_ADD(字段名,INTERVAL expr type)
  • INTERVAL:英语中"间隔"的意思,固定用法;
  • expr:我们指定的间隔的时间,单位是type;
  • type:时间单位类型,可以是如下类型:
        举例:
        

10.字符串截取——substring_index

        

11.★窗口函数

        当我们需要组内排序或者获取每组的topN的时候,就要用到窗口函数了。
【tips】注意!min和max是全局获取最值,用于组内获取最值时,id和最值记录往往是不对应的,所以对于组内获取最值不能简单的min+group by!
        看这个链接:https://zhuanlan.zhihu.com/p/92654574

12.