MySQL之数据操作之单表查询

项目中我们肯定是用表查询居多,但是还是先回顾下增删改的语法。

1>数据插入

    语法

        -->INSERT INTO 表名 VALUES (值1,值2,值3…值n);    # 按列名顺序插入所有值

        -->INSERT INTO 表名(字段1,字段2,字段3…) VALUES (值1,值2,值3…);    # 指定列插入值

        -->INSERT INTO 表名 VALUES
                    (值1,值2,值3…值n),
                    (值1,值2,值3…值n),

                    (值1,值2,值3…值n);    # 插入多条件记录

        -->INSERT INTO 表名(字段1,字段2,字段3…字段n) 
                    SELECT (字段1,字段2,字段3…字段n) FROM 表2
                    WHERE …; 
  # 查询插入,前提是两张表列的属性必须一致

2>数据修改

    语法    ,按条件修改单列记录或多了记录

        UPDATE 表名 SET 字段1=值1,字段2=值2,...字段n=值n WHERE CONDITION;

3>数据删除

    语法    ,按条件删除

        DELETE FROM 表名 WHERE CONITION;

4>数据查询

    4.1>单表查询的语法及各关键字执行优先级

        如下,若存在多个关键字‘约束’查询结果,按下列排序写sql,

        SELECT distinct 字段1,字段2... FROM 表名
                  WHERE 条件
                  GROUP BY field
                  HAVING 筛选
                  ORDER BY field

                  LIMIT 限制条数

        关键字执行顺序(相当重要)

        from    # 第一步,先找到表
        where    # 再拿着where指定的约束条件,去文件/表中取出一条条记录
        group by    # 将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组
        having    # 将分组的结果进行having过滤
        select    # 执行select
        distinct    # 去重
        order by    # 将结果按条件排序
        limit    # 限制结果的显示条数

   接下来对各个关键字分开解析。

    4.2>简单查询一些注意的点

        --->简单查询    SELECT * FROM 表;SELECT 字段1,字段2 FROM 表;

        --->去重    SELECT distinct 字段1 FROM 表;

        --->通过四则运算查询    SELECT 字段1*10 FROM 表; 

        --->自定义显示格式

                SELECT 字段1 as 别名 FROM 表;     # 指定列显示名称

                  CONCAT() 函数用于连接字符串
                  CONCAT_WS() 第一个参数为分隔符

                SELECT CONCAT('<姓名: ',name,'> <年龄: ', age,'>') FROM 表;    # 指定显示格式

                SELECT CONCAT_WS('|',字段1,字段2) FROM 表;    # 字段显示在一列里,以‘|’分隔

    4.3>WHERE约束

        where筛选条件中可以使用:

         比较运算符:><>= <= <> !=
        between x and y
# 效果等同于 x<= 取值 <=y
         in(x,y,z) # 值为x或y或z
         like 'x%'或者'x_' # %匹配0或任意个字符,_匹配1个字符

        逻辑运算符:and or not # 多个条件中使用

        其他需注意的点:

        关键字IS NULL(判断某个字段是否为NULL不能用等号,需要用IS),更不能用=''(等于空字符串)

        去判断值是否为空,is null是一种数据存储类型,表示没有存值,=''是一种数据类型,存了一个空值,

        两个有本质的区别,根本不是一码事。

    4.4>分组查询 GROUP BY

        分组的概念及需要注意的点

        -->分组发生在where之后,即分组是基于where之后得到的记录而进行的,

        -->分组是将记录按照某个相同字段进行归类,可以按照任意字段分组,但是分组完毕后,

             只能查看分组字段,如果想查看组内信息,需要借助于聚合函数。

            聚合函数:SUM,MAX,MIN,AVG,COUNT

        -->ONLY_FULL_GROUP_BY模式设定

            set global sql_mode='ONLY_FULL_GROUP_BY';

            当没有设置该模式时,分组之后依然可以查到除分组字段之外的其他字段,但这没有意义

            设置了之后,只能查询分组字段或聚合函数的结果。

        -->group by与group_concat()一起使用

            group_concat():该函数返回带有来自一个组的连接的非NULL值的字符串结果,

            简单来说,就是将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

            group_concat()要与group by一起使用,才有实际效果。

            例子:

    4.5>HAVING过滤

            having也是删选条件,跟where有何不同呢,

            首先,where能用的一些运算符或关键字,having也支持,

            其次,如之前所言,having是执行在group by之后,所以它可以也只能使用group by之后

            的分组字段或者聚合函数的结果,不能使用其他字段,也就是基于分组字段或聚合函数再筛选,

            但是where是能用表内的所有字段,但是无法使用聚合函数,---------执行顺序的原因。

    4.6>查询排序 ORDER BY

        -->单列排序:SELECT * FROM 表 ORDER BY 字段1;

        -->多列排序:SELECT * from 表 ORDER BY 字段1 ASC,字段2 DESC;

         适用场景:先按字段1排序,当出现字段1多个值相等的时候,按字段2排序。

        -->升序还是降序:默认就是ASC,升序排序(由小到大),DESC为降序排序(由大到小)。

    4.7>限制显示记录数LIMIT

    SELECT * FROM 表 ORDER BY 字段1 LIMIT 3; # 默认初始位置为0 
    SELECT * FROM 表 ORDER BY 字段1 LIMIT 0,3; # 从0开始,即先查询出第1条,然后包含这一条在内往后查3条

    SELECT * FROM 表 ORDER BY 字段1 LIMIT 3,3; #查询记录为 4,5,6


猜你喜欢

转载自blog.csdn.net/huangql517/article/details/80262398