mysql(where子句)

MySQL WHERE 子句

我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。

语法

以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以使用 AND 或者 OR 指定一个或多个条件。
  • WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
  • WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。
  • where:数据库中常用的是where关键字,用于在初始表中筛选查询。它是一个约束声明,用于约束数据,在返回结果集之前起作用。

    group by:对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个指定字段或者表达式的值。

    having:用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果。它是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作。

    执行顺序

    select –>where –> group by–> having–>order by

  • like 匹配/模糊匹配,会与 % 和 _ 结合使用。

    '%a'     //以a结尾的数据
    'a%'     //以a开头的数据
    '%a%'    //含有a的数据
    '_a_'    //三位且中间字母是a的
    '_a'     //两位且结尾字母是a的
    'a_'     //两位且开头字母是a的

    查询以 java 字段开头的信息。

    SELECT * FROM position WHERE name LIKE 'java%';

    查询包含 java 字段的信息。

    SELECT * FROM position WHERE name LIKE '%java%';

    查询以 java 字段结尾的信息。

    SELECT * FROM position WHERE name LIKE '%java';
  • 在 where like 的条件查询中,SQL 提供了四种匹配方式。

    1. %:表示任意 0 个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
    2. _:表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句。
    3. []:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。
    4. [^] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。
    5. 查询内容包含通配符时,由于通配符的缘故,导致我们查询特殊字符 “%”、“_”、“[” 的语句无法正常实现,而把特殊字符用 “[ ]” 括起便可正常查询。
    6.             MySQL 排序

      我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。

      如果我们需要对读取的数据进行排序,我们就可以使用 MySQL 的 ORDER BY 子句来设定你想按哪个字段哪种方式来进行排序,再返回搜索结果。

      语法

      以下是 SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再返回数据:

      SELECT field1, field2,...fieldN FROM table_name1, table_name2...
      ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
      • 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
      • 你可以设定多个字段来排序。
      • 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
      • 你可以添加 WHERE...LIKE 子句来设置条件。
      • MySQL GROUP BY 语句

        GROUP BY 语句根据一个或多个列对结果集进行分组。

        在分组的列上我们可以使用 COUNT, SUM, AVG,等函数。

        GROUP BY 语法

        SELECT column_name, function(column_name)
        FROM table_name
        WHERE column_name operator value
        GROUP BY column_name;
      • MySQL UNION 操作符

        本教程为大家介绍 MySQL UNION 操作符的语法和实例。

        描述

        MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

        语法

        MySQL UNION 操作符语法格式:

        • expression1, expression2, ... expression_n: 要检索的列。

        • tables: 要检索的数据表。

        • WHERE conditions: 可选, 检索条件。

        • DISTINCT: 可选,删除结果集中重复的数据。默认情况下 UNION 操作符已经删除了重复数据,所以 DISTINCT 修饰符对结果没啥影响。

        • ALL: 可选,返回所有结果集,包含重复数据。

        • UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

          UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

          使用形式如下:

          SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;
          SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;
        • MySQL 处理重复数据

          有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据。

          本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据。


          防止表中出现重复数据

          你可以在 MySQL 数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性。
        • 过滤重复数据

          如果你需要读取不重复的数据可以在 SELECT 语句中使用 DISTINCT 关键字来过滤重复数据。

          mysql> SELECT DISTINCT last_name, first_name
              -> FROM person_tbl;

          你也可以使用 GROUP BY 来读取数据表中不重复的数据:

          mysql> SELECT last_name, first_name
              -> FROM person_tbl
              -> GROUP BY (last_name, first_name);

          删除重复数据

          如果你想删除数据表中的重复数据,你可以使用以下的SQL语句:

          mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl  GROUP BY (last_name, first_name, sex);
          mysql> DROP TABLE person_tbl;
          mysql> ALTER TABLE tmp RENAME TO person_tbl;

          当然你也可以在数据表中添加 INDEX(索引) 和 PRIMAY KEY(主键)这种简单的方法来删除表中的重复记录。方法如下:

          mysql> ALTER IGNORE TABLE person_tbl
              -> ADD PRIMARY KEY (last_name, first_name);
        • ect 列名1count1 as count 
          from 表名
          group by  列名1
          having count>1  and 其他条件
          
          select 列名1,列名2count1 as count 
          from 表名
          group by  列名1,列名2 
          having count>1  and 其他条件

          原理:先按照要查询出现重复数据的列,进行分组查询。count > 1 代表出现 2 次或 2 次以上。

          示例:

          /*查询重复数据*/
          select serialnum,cdate,count(*) as count 
          from m_8_customer_temp_20180820bak 
          group by serialnum,cdate having  count>1 and cdate>='2018-08-20 00:00:00';
        • 
          

          我们已经知道MySQL使用SQL SELECT命令及WHERE子句来读取数据表中的数据,但是当提供的查询条件字段为NULL时,该命令可能就无法正常工作。

          为了处理这种情况时,MySQL提供了三大运算符:

          • IS NULL:当列的值是NULL,此运算符返回true。
          • IS NOT NULL:当列的值不为NULL,运算符返回true。
          • <=>:  比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。

          关于NULL的条件比较运算是比较特殊的。你不能使用= NULL或!= NULL在列中查找NULL值。

          在MySQL中,NULL值与任何其他值的比较(即使是NULL)永远返回false,即NULL = NULL返回false。

          MySQL中处理NULL使用IS NULL和IS NOT NULL运算符。

posted @ 2019-07-14 15:47  武玉君  阅读(494)  评论(0编辑  收藏  举报