• MySQL备忘点(上)


    给自己看的,所以以举例子为主了

    检索数据

       SELECT  检索单列    SELECT name FROM student

             检索多列    SELECT no, name FROM student

             检索所有列   SELECT * FROM student

             检索不同行   SELECT DISTINCT name, sex FROM student    distinct修饰的select下的所有列,也就是说两条数据,name和sex中只要有一列不同,就算不同行了。

             限制结果    SELECT no FROM student LIMIT 5        如果搜出来的行不足限制数,那么全输出

             全限定表名   SELECT student.no FROM student

    排序数据

      ORDER BY   按单列排序  SELECT name FROM student ORDER BY no      未被检索的列(no字段)也是可以以其排序的

               按多列排序  SELECT * FROM student ORDER BY birthday, sex   只有结果集中存在birthday相同的数据时,这些数据才会再按照sex排序

               排序方向   SELECT * FROM student ORDER BY birthday DESC   从大到小排序,常见的情形是价格最贵的,日期最新的。

    过滤数据

      WHERE   单条件    SELECT name FROM student WHERE no=10

              不匹配    SELECT name FROM student WHERE no!=10

              范围     SELECT name FROM student WHERE no BETWEEN 1 AND 3  头尾都包含,即1、2、3

              空值     SELECT name FROM student WHERE sex IS NULL

    数据过滤

      AND    多条件      SELECT name FROM student WHERE name='Deolin' AND sex=1

      OR      多条件      SELECT name FROM student WHERE name='Deolin' OR name='Bld'  一般AND和OR共存的情况,直接有小括号保证计算次序,而不是通过记忆去依赖优先级

      IN     范围       SELECT name FROM student WHERE name IN ('Deolin', 'Bld')     in和or, 优先选用in,因为速度更快,易管理,更直观

      NOT      否定单个条件     SELECT name FROM student WHERE NOT name IN ('Deolin1', 'Bld1')

    通配符      为了效率,不过度使用;尽量不把通配符放在开始处

       LIKE %  通配符匹配  SELECT name FROM student WHERE name LIKE 'D%n'    任何字符任何次数, name是'Dn' 'Deolin'…的数据都在范围内;LIKE '%'匹配不到null

       LIKE _   通配符匹配  SELECT name FROM student WHERE name LIKE 'Deol_n'   任何字符一次,只能1次,不能多也不能少

    正则表达式

      REGEXP

        OR匹配   REGEXP '1000|2000'   匹配1000或2000

        字符匹配    REGEXP '[ab12]ton'  匹配aton或bton或1ton或2ton

        范围匹配  REGEXP '[0-9]'     相当于[0123456789]

              REGEXP '[3-6]'     相当于[3456]

              REGEXP '[b-d]'     相当于[bcd]

        转义匹配  REGEXP '\%'     匹配字符 %

        元字符匹配 REGEXP '\f'       换页    \f换页   \n换行   \r回车   \t制表   \v纵向制表

        字符类匹配 REGEXP '[:alnum:]'  相当于[a-zA-Z0-9],而且三者都得有

              REGEXP '[:alpha:]'   相当于[a-zA-Z],而且两者都得有

              REGEXP '[:digit:]'    相当于[0-9]

        多匹配   {n}          指定匹配次数

              {n,}          指定匹配次数不小于n

              {n,M}         指定匹配次数为n至M

              *             0次或多次匹配

              +           相当于{1,}

              ?            相当于{0,1}

        定位匹配  ^ $          文本开始至文本结束    举例:REGEXP '1000|2000' 会匹配到 h1000或sd2000之类的,但是REGEXP ^'1000|2000'$只会匹配到1000和2000两个

        否定匹配  [^ ]          ^出现在集合(指中括号)中时,用于否定集合里的表达式

    计算字段

        CONCAT()  字段拼接      SELECT CONCAT('The name is '+name+'.') FROM student  

        RTRIM()   去除右边空格    SELECT RTRIM(name) FROM student      LTRIM()左边空格,TRIM()两边空格

        AS      别名        SELECT (RTRIM(name)+sex)  AS name FROM student  结合函数和列与列之间的算数运算使用

    函数

        文本处理

          LEFT() / RIGHT()      文本的左/右边字符

          LENGTH()           文本长度

          LOWER() / UPPER()     转换为小/大写

        日期      日期比较时,尽量用DATE()包裹字段;目标值的链接符号虽然/和-都可以,但尽量和字段一致,使用-

          DATE() / TIME()          取出字段的年月日/时分秒

          YEAR() / MONTH() / DAY()      取出字段的年/月/日

          HOUR() / MINUTE() / SECOND()  取出字段的时/分/秒

          NOW()               现在的日期和时间

          DAYOFWEEK()           周几

    汇总数据

        聚集函数        如果是select count(no) as cnt, name from student,那么虽然cnt的值是一致的,但是还是会被复制到每个行中,因为结果集被name字段“撑开”了

          AVG()    聚集结果集中某列的平均值,参数是非数字也可行,但是会返回奇怪的结果,avg()忽略null值

          COUNT()    用的太多了,“聚集”的作用都可以参考count    count()参数是列名时,会忽略列中的null值,null值不计入总数

          MAX()    聚集结果集中某列的最大值

          MIN()     聚集结果集中某列的最小值      min()会忽略null值

          SUM()    聚集结果集中某列的和,参数是非数字也可行,但是会返回奇怪的结果

    分组数据

        GROUP BY    创建分组

        HAVING      过滤分组

    子查询

        IN (SELECT…)      子查询作为检索条件的值(的集合)

        SELECT (SELECT…)    子查询作为检索项目的计算值      注意这里要全限定表名

    理解分组

      创建分组(GROUP BY)

      简单说就是把结果集按列隐式地分组成了很多个结果集,分组是个结果集;

      既然分组是个“结果集”,那么select中的聚集函数会对每个分组分别计算,

      可以认为,分组的目的就是为了使用聚集函数

      group by可以跟任意数量的列名,代表结合多个列进行分组;

      group by后面不能跟聚集函数;

      列中的null值是一个特殊值,区别与其他的非null值;

      过滤分组(HAVING)

      跟where非常相似,where的语法having几乎全适用;

      where过滤的是整个结果集中不符合条件的每个数据,

      having过滤的是整个结果集中符合条件的每个分组

  • 相关阅读:
    python模块之random模块
    python模块之os模块
    python模块之collections模块
    python模块之re模块
    python基础十五之递归函数
    python基础十四之匿名函数
    python基础十三之内置函数
    leetcode 108 和leetcode 109 II
    leetcode 108 和leetcode 109
    对于final修饰的类型运算时的表现
  • 原文地址:https://www.cnblogs.com/deolin/p/6941220.html
Copyright © 2020-2023  润新知