• 二战MySQL数据库【升华篇】


    每篇前言:


    在这里插入图片描述

    1.筛选条件:

    (1)比较运算符:

    运算符含义
    =等于(注意:不是==)
    >=大于等于
    !=或<>不等于
    <小于
    >大于
    <=小于等于
    IS NULL为空
    IS NOT NULL不为空

    知识点补给站:
    关于IS NULL和IS NOT NULL如何使用?

    select * from tb_name where 字段名 IS NULL;
    查询tb_name表中指定字段名为空的所有数据。

    (2)逻辑运算符:

    运算符含义
    AND
    OR
    NOT
    【运算顺序:not >and>or】

    (3)其他操作:

    1.排序:

    select  name1 from tb2_name order by tb3_name [asc/desc];
    
    • 1
    • 第一个name是指定查询的数据,即显示出来的数据;

    • 第二个tb2_name是表的名字;

    • 第三个tb3_name是表中排序的那一列的字段; (一般都是数字排序,如果是字母,按首字母顺序排序)

    • asc是正序(默认,不输入也是正序);desc(descend降序排列)是倒序。

    2.限制:

    select name1 from tb_name limit start,count;
    
    • 1
    • 第一个name1是指定查询的数据,即显示出来的数据;

    • 第二个tb_name表的名字;

    • 第三个start是限制的表中开始的行数,count是要显示出来的行的个数。(表中行数以0开始。如果start没有数据,默认从第零行开始)

    拓展:

    带条件的限制(where):

    select name1 from tb_name where 条件语句 limit start,count;
    
    • 1
    • 会从name1中筛选出符合where的且满足限制条件start,count的数据。

    3.去重:

    select distinct name1 from tb_name;
    
    • 1
    • 第一个name1是指定查询的数据,即显示出来的数据。这是指定去重的数据。

    • 第二个tb_name是表名。

    注意:
     如果name1是*,则把整张表里行中一模一样的去重;如果name1是字段名,则把对应的字段值里一样的去重.

    4.模糊查询: (like ‘%’)

    1. 任意多个字符: %
      模糊查询和范围查询都是和where一起用。

    2. 任意一个字符:_

    例子:

    select name1 from tb_name where name like 'h%'; 
    
    • 1
    • 查询表中满足name为h开头的对应name1字段下的字段值。

    • 如果’h%'换为’h_'则只能查询以h开头且h后面只有一个字符的name。

    • 如果’h%‘换为’%h%'则只能查询name中间有h的任意name

    5.范围查询:

    1. 连续范围:between a and b
      a <= value <= b(包括a和b)

    例子:

    select name1 from tb_name where id between a and b;
    
    • 1
    • 查询表中id在a和b之间的(包括a和b)name1字段下的字段值。
    1. 间隔范围:in()
      括号里可以写任意值,包括表里没有的也不会报错,只查询括号里指定的值

    例子:

    select name1 from tb_name  where id in (1,7); 
    
    • 1
    • 只查询表中的id为1和7的对应name1字段下的字段值,里面可以写表里没有的也不会报错 。

    2.聚合与分组(重点哦!):

    数据表准备(为了讲解更容易理解,会配套上实操演示效果):
    在这里插入图片描述在这里插入图片描述

    (1)常用聚合函数:

    聚合函数作用
    count(column)统计个数
    sum(column)求和
    max(column)最大值
    avg(column)平均值
    min(column)最小值
    group_concat(column)列出字段全部值

    用法:

    select 聚合函数(字段) from; 
    
    • 1

    (其实你也可能感觉到了,这些聚合函数单独使用没啥子实际作用,其实聚合函数一般都是和分组结合使用才能发挥其作用哦~)

    重点:

    select group_concat(字段) from;   
    
    • 1
    • 列出指定字段的全部值 (在分组后可以列出每组指定字段的所有值。

    在这里插入图片描述

    (2)分组查询:

    select 字段 from 表 group by 字段;
    (注意:这里的两个字段必须一致,否则会报错)

    在这里插入图片描述

    select 字段,count(*) from 表 group by 字段;
    配合聚合函数使用,例如—显示count,即个数。

    注意:在分组的情况下,只能够出现分组字段(即分组的那个字段)和聚合字段,其他的字段没有意义,会报错!

    在这里插入图片描述

    小注意:
     如果要加入where筛选,where语句要放在分组查询grou by的前面哦~

    在这里插入图片描述

    (3)聚合筛选:(having)

    1. select 字段1 from 表名 group by 字段1,字段2 having 字段2>=80;

    (加having条件表达式,可以对输出的结果做出限制。是不是想到了where,别急,我也想到了~)

    在这里插入图片描述

    假如说一个查询语句中同时包含了别名(as),聚合函数, where, having那么他们的执行顺序是:

    • 先是执行:where 这次是在整个表的前提下筛选
    • 然后执行:聚合函数和别名
    • 最后执行:having,这次是在字段里筛选
      (where比having执行要快!所以多用where)

    注意:一般where写的条件筛选,都可以用having筛选表示。

    小tips:最后加having class = ‘first’ 跟在前面用where都可以 ,代码执行结果一致。

    但是要注意where是在整表中进行筛选;而having是在聚合及分组操作之后产生的一张虚表中进行筛选。(即Where是在聚合分组之前对数据进行筛选
    having是在聚合之后再进行筛选)二者使用哪个看场景~

    3.子查询:

    将一个查询的结果留下来用于下一次查询 ( select 中嵌套 select )

    要求:

    1. 嵌套在查询内部

    2. 必须始终出现在圆括号内

    例子:

    • 求出学生的平均年龄
    select avg(age) from students;
    
    • 1
    1. 查找出大于平均年龄的数据
    select * from student where age > 19.7273;
    
    • 1
    1. 将求出的平均年龄的SQL语句用于查找大于平均年龄的语句中
    select * from students where age > (select avg(age) from students);
    
    • 1

    4.连接查询:

    再创建一个表,结合上面创建的那张表演示效果:

    在这里插入图片描述

    (1)内连接(inner join)

    • 无条件内连接:
      无条件内连接,又名交叉连接/笛卡尔连接,第一张表中的每一项会和另一张表的每一项依次组合

    select * from 表1 [inner] join 表2;
    inner可写可不写,没影响。

     比如第一张表有6条数据,第二张表有2条数据,那么内连接查询则有12条数据,第一张表的每一条数据分别和第二张表的两张数据组合。

    在这里插入图片描述

    • 有条件内连接:
      在无条件内链接的基础上,加上一个on子句,当连接的时候,筛选出那些有实际意义的记录来进行组合
      select * from 表1 inner join 表2 on 条件
      (比如:表1.id = 表2.id);

    在这里插入图片描述

    (2)外连接( left / right join )

    • 左外连接: (以左表为基准)
      两张表做连接的时候,在连接条件不匹配的时候留下左表中的数据,而右表中的数据以NULL填充
      select * from 表1 left join 表2 on 条件;
      条件里面可以写 表1.字段=表2.字段。

    在这里插入图片描述

    • 右外连接: (以右表为基准)
      对两张表做连接的时候,在连接条件不匹配的时候留下右表中的数据,而左表中的数据以NULL填充
     select * from1 right join2 on 条件;
    
    • 1

    在这里插入图片描述

    拓展:

    三连接:

    select * from1 left join2 on 条件1 left join3 on 条件2;
    
    • 1

    表1和表2,然后和表3连接,表1是主表。

  • 相关阅读:
    版本控制--Git
    前端&UI核心
    NC16422 图书管理员
    用Python实现简单的验证码处理
    2┃音视频直播系统之浏览器中通过 WebRTC 拍照片加滤镜并保存
    Linux网络编程-传输层UDP和TCP协议详解
    c语言qsort函数使用教程
    如何学好机器学习?机器学习一定需要下面这几方面知识!
    软件工程详细知识点复习(上)
    爬虫是什么?爬虫的原理及应用
  • 原文地址:https://blog.csdn.net/qq_44907926/article/details/122318583