MySQL5.7-查询子句

系列文章目录

MySQL查询子句

1. WHERE过滤

  • 作用:

    通过限制一些条件,过滤出符合条件的数据。

  • 语法:

    SELECT或UPDATE或DELETE 字段名…… FROM 表名 WHERE 条件;
    

    比如:查询学生的姓名和年龄,条件是年龄大于18岁且性别为男:

    SELECT name,age FROM students WHERE age>18 AND gender='male';
    

    除了AND、>、=外,操作符还有以下这些:

    操作符意义
    >、<、=、<=、>=就是符号本身的意义
    <>或!=不等于
    AND并且
    OR或者
    NOT
    x BETWEEN a AND bx在a到b这个范围中
    x IN(a,b,c……)x在(a,b,c……)中
    x NOT IN(a,b,c……)x不在(a,b,c……)中
    x IS NULLx是空的

2. LIKE模糊查询

  • 作用:
    使用WHERE过滤查询时,搜索匹配表达式的指定内容

    SELECT 字段名,…… FROM 表名 WHERE 字段 LIKE 表达式;
    

    比如:查询名字中带字母h的学生记录:

    SELECT * FROM students WHERE name LIKE "%h%";
    

    %用来匹配多个任意字符;

    _用来匹配单个任意字符。

  • 计算字段长度:CHAR_LENGTH(字段名)

3. GROUP BY分组

  • 作用:

    根据一个或多个列对结果集进行分组,分组之后,操作的最小单位是组,而不是记录。在严格模式下,尝试操作单个记录会直接报错。在关闭严格模式后,就可以进行单个记录的操作,但是不应该这样做。

  • 语法:

    分组依据通常是一个字段,比如性别,这会使数据分为两组(男生组、女生组)。

    SELECT 分组依据 FROM 表名 GROUP BY 分组依据;
    

    查询的字段只能是分组依据!乍一看,这个分组语句很没用,只能查询出分组依据字段。但其实,它更多的是配合聚合函数一起使用。

    比如,查询男生和女生中,各自年龄最大的一个。

    SELECT gender,MAX(age) FROM students GROUP BY gender;
    

    返回:

    genderMAX(age)
    male19
    female18

    上面结果中,显示MAX(age)不够雅观。可以使用AS关键字来给字段取别名

    SELECT gender AS "性别", MAX(age) AS "最大年龄"FROM students GROUP BY gender;
    

    返回结果:

    性别最大年龄
    male19
    female18

    AS关键字还可以给表起别名。当然,这些别名都是临时有效。

    AS关键字可以省略,然后直接写别名,但是不推荐这种写法。

  • 聚合函数:

    聚合函数只能在分组之后使用。

    函数名作用
    AVG()求平均值
    MAX()求最大值
    MIN()求最小值
    SUM()求和
    COUNT()求行数(记录数),不包括NULL值
  • GROUP_CONCAT()函数:

    该函数将分组中的字符串与各种选项进行拼接。

    使用该函数可以在分组中查询任意字段,包括分组依据字段以外的字段:

    SELECT GROUP_CONCAT(name),gender FROM students GROUP BY gender;
    

    还可以连接字符串和数据,比如将两个原本分开的字段,拼接在一起返回,比如:以姓名:性别的形式显示结果:

    SELECT GROUP_CONCAT(name,":", gender) FROM students GROUP BY gender;
    

    返回结果:

    GROUP_CONCAT(name,":", gender)
    hugh:male,tom:male
    lucy:female

    GROUP_CONCAT()是给分组用的,类似的有一个CONCAT()是给未分组的使用,作用相同。

  • 注意:

    不能在WHERE的过滤条件中,使用聚合函数:WHERE MAX(AGE)=19

    在不分组的情况下,默认整张表是一组,可以直接使用聚合函数

4. HAVING过滤

  • 作用:
    HAVING的语法和作用与WHERE是一致的,不同之处在于:前者是对分组(即分组之后)的过滤,后者是对记录(即分组之前)的过滤。因此,HAVING可以使用聚合函数。
    SELECT 字段,…… FROM 表名 GROUP BY …… HAVING 条件;
    

5. DISTINCT去重

  • 作用:
    针对查询字段中重复的值,只返回一次,包括NULL值。如果是多个字段,只要字段的组合不是一模一样的,还是会返回。

    SELECT DISTINCT 字段,…… FORM 表名;
    

6. ORDER BY排序

  • 作用:
    将查询到的结果,进行排序。

    SELECT 字段,…… FORM 表名 ORDER BY 排序依据 DESC;
    

    默认为升序ASC,可以不写,降序写DESC

    排序依据可以是一个或多个字段,当无法用前一个字段比较出顺序时,就使用后一个字段进行比较。

7. LIMIT分页

  • 作用:

    限制每次查询时返回的记录数量。

    SELECT 字段,…… FORM 表名 LIMIT 起始位置,条数;
    

    不写起始位置,默认从第一条开始。

8. 正则

MySQL支持正则表达式,语法如下:

SELECT 字段,…… FORM 表名 WHERE 字段 REGEXP "正则表达式";

下一篇

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值