zoukankan      html  css  js  c++  java
  • MySQL必知必会总结(一)

    去重

    MySQL中不能部分使用DISTINCT,DISTINCT关键字会应用于所有列而不仅是前置它的列。如果给出SELECT DISTINCT score,age,除非指定的两个列都不同,否则所有行都将被检索出来。

    例如如下的表

    name score age
    test1 11 11
    test2 11 11
    test3 123 123
    test4 123 11
    SELECT DISTINCT score ,age FROM `student` 
    

    结果:

    score age
    11 11
    123 123
    123 11

    排序

    • 按单个列排序

      SELECT score FROM 'student' ORDER BY score
      
      score
      11
      11
      123
      123
    • 按多个列排序

      会先按照第一列排序,如果第一列存在相同的会根据后面的列继续排列,换句话说就是当第一列所有数据全部不同,那么是不会根据后面的列再次排序的

      SELECT score, age FROM 'student' ORDER BY score, age
      
      score age
      11 11
      11 11
      123 11
      123 123
    • 指定排序方向

      MySQL中默认为升序排序,如果想用降序排序需要指定DESC关键字,和DISTINCT不同的是DESC只会作用于它前面的列,想要每列都已降序排序就必须对每列都指定DESC关键字。

      SELECT score, age FROM 'student' ORDER BY score DESC,age
      
      score age
      123 11
      123 123
      11 11
      11 11
    • 排序规则

      在对文本性的数据排序时,MySQL默认是不区分大小写的,即A和a相同,如果想要区分的话可能需要对数据库的设置做更改

    过滤数据

    • WHERE语句的操作符

      操作符 作用
      = 等于
      <> 不等于
      != 不等于
      <
      <=
      >
      >=
      BETWEEN… AND… 在两个指定值之间
    • 匹配操作

      MySQL在执行WHERE语句匹配时默认不区分大小写,Abc和abc是一样的

      select name from tbnaem where name='Abc';
      select name from tbnaem where name='abc';
      
    • 空值检查

      NULL和0、空字符串是不同的,如果要匹配NULL需要用IS NULL子句实现

      select * from tbname where name IS NULL
      
    • 组合过滤

      • AND操作符

        会对每个判断条件取与,满足所有条件才会返回

      • OR操作符

        满足任意一个条件即符合要求

      • 同时使用AND和OR操作符

        MySQL会优先处理AND操作符,例如 :

        select name, price from tbname where id = 2 or id = 3 and price<10
        

        上面这个SQL语句会过滤出ID等于2或者ID等于3并且价格小于10的行,这显然和我们的意图不一样(ID等于2或者3,并且价格小于10)。为了解决这个问题,需使用圆括号将操作符分组区分开来,改为下面这种:

        select name, price from tbname where (id = 2 or id = 3) and price<10
        

        因此在使用具有AND和OR操作符的where子句时,应当使用圆括号将操作符分组处理,不要依赖于默认的计算顺序以免出现错误。

    • IN操作符

      IN操作符可以指定条件范围,范围中的每个条件都可以进行匹配,类似于之前的OR操作符

      select name, price from tbname where id in (2,3)
      

      相交于OR操作符,在更多的过滤条件下显得更为简洁直观,会有比OR操作符更好的性能,另外IN操作符可以包含其他的SELECT语句:

    • NOT操作符

      NOT操作符只有一个功能,否定它之后所跟的任何条件,例如IN、BETWEEN、EXISTS

      select name from tbname where id not in (2,3)
      

      选取ID不是2,3的行。

    • 通配符过滤(LIKE操作符)

      • 百分号(%)通配符

        %可以表示任何字符串出现任何次数,例如找到name是以fml开头的行

        select name from tbname where name LIKE 'fml%'
        

        或者包含abc的行

        select name from tbname where name LIKE '%abc%'
        

        或者以a开头c结尾的行

        select name from tbname where name LIKE 'a%c'
        

        %看似可以匹配任何东西,但是NULL是例外的, LIKE ‘’%‘’无法匹配值为NULL的行,另外值得注意的是尾空格可能也会干扰通配符的匹配

      • 下划线(_)通配符

        _只能匹配单个字符其他的和%一样

      • 技巧

        1. 不要过度使用通配符,如果其他操作符能够实现同样的目的那么就使用其他操作符。
        2. 除非是必要的,否则不要将通配符放在开始处,那样是最慢的
    • 使用正则表达式

      使用正则表达式匹配的时候需要使用REGEXP关键字来代替LIKE,REGEXP后所跟的字符串就是正则表达式了。正则表达式怎么写就不在这说了

  • 相关阅读:
    横竖屏切换
    org.apache.harmony.xml.ExpatParser$ParseException: At line 1, column 0: unknown encoding
    @Value() 使用方法
    调用第三方超时处理
    spring 配置注解定时器quartz01
    tomcat:PermGen space
    06-图3 六度空间 (30分)
    06-图2 Saving James Bond
    06-图1 列出连通集 (25分)
    05-树9 Huffman Codes (30分)
  • 原文地址:https://www.cnblogs.com/FanMLei/p/10500971.html
Copyright © 2011-2022 走看看