【MySQL】基本查询(1)
作者:mmseoamin日期:2024-04-01

【MySQL】基本查询(1)

目录

  • 【MySQL】基本查询(1)
    • 表的增删改查
      • Create
        • 单行数据 + 全列插入
        • 多行数据 + 指定列插入
        • 插入否则更新
        • 替换
        • Retrieve
          • SELECT 列
            • 全列查询
            • 指定列查询
            • 查询字段为表达式
            • 为查询结果指定别名
            • 结果去重
            • WHERE 条件
              • 英语不及格的同学及英语成绩 ( < 60 )
              • 语文成绩在 [80, 90] 分的同学及语文成绩
              • 数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
              • 姓孙的同学 及 孙某同学
              • 语文成绩好于英语成绩的同学
              • 总分在 200 分以下的同学
              • 语文成绩 > 80 并且不姓孙的同学
              • 孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80
              • NULL 的查询
              • 结果排序
                • 查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示
                • 查询同学及总分,由高到低
                • 查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示
                • 筛选分页结果

                  作者:爱写代码的刚子

                  时间:2024.3.18

                  前言:本篇博客将会记录表的基本查询,主要是select语句的用法。

                  表的增删改查

                  CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)

                  Create

                  语法:

                  INSERT [INTO] table_name
                      [(column [, column] ...)]
                      VALUES (value_list) [, (value_list)] ...
                  value_list: value, [, value] ...
                  

                  into是可以被省略的。

                  案例:

                  -- 创建一张学生表
                  CREATE TABLE students (
                    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
                    sn INT NOT NULL UNIQUE COMMENT '学号',
                    name VARCHAR(20) NOT NULL,
                    qq VARCHAR(20)
                  );
                  
                  单行数据 + 全列插入
                  -- 插入两条记录,value_list 数量必须和定义表的列的数量及顺序一致
                  -- 注意,这里在插入的时候,也可以不用指定id(当然,那时候就需要明确插入数据到那些列了),那么mysql会使用默认的值进行自增。
                  INSERT INTO students VALUES (100, 10000, '唐三藏', NULL);
                  Query OK, 1 row affected (0.02 sec)
                    
                  INSERT INTO students VALUES (101, 10001, '孙悟空', '11111'); 
                  Query OK, 1 row affected (0.02 sec)
                  -- 查看插入结果
                  SELECT * FROM students; 
                  
                  多行数据 + 指定列插入
                  -- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
                  INSERT INTO students (id, sn, name) VALUES (102, 20001, '曹孟德'),
                  (103, 20002, '孙仲谋');
                  Query OK, 2 rows affected (0.02 sec)
                  Records: 2  Duplicates: 0  Warnings: 0
                    
                  -- 查看插入结果
                  SELECT * FROM students;
                  
                  插入否则更新

                  由于主键或者唯一键对应的值已经存在而导致插入失败,所以可以选择性的进行同步更新操作语法:

                  【MySQL】基本查询(1),在这里插入图片描述,第1张

                  -- 0 row affected://表中有冲突数据,但冲突数据的值和 update 的值相等
                  -- 1 row affected:// 表中没有冲突数据,数据被插入
                  -- 2 row affected:// 表中有冲突数据,并且数据已经被更新
                  
                  • 查询受影响的行数:

                    【MySQL】基本查询(1),在这里插入图片描述,第2张

                    替换
                    -- 主键 或者 唯一键 没有冲突,则直接插入; 
                    -- 主键 或者 唯一键 如果冲突,则删除后再插入
                      
                    REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒'); 
                    Query OK, 2 rows affected (0.00 sec)
                      
                    -- 1 row affected: 表中没有冲突数据,数据被插入 
                    -- 2 row affected: 表中有冲突数据,删除后重新插入
                    

                    【MySQL】基本查询(1),在这里插入图片描述,第3张

                    Retrieve

                    • 先创建一个表用于之后的测试:

                      【MySQL】基本查询(1),在这里插入图片描述,第4张

                      SELECT 列
                      全列查询

                      – 通常情况下不建议使用 * 进行全列查询

                      – 1. 查询的列越多,意味着需要传输的数据量越大;

                      – 2. 可能会影响到索引的使用。

                      【MySQL】基本查询(1),在这里插入图片描述,第5张

                      指定列查询

                      【MySQL】基本查询(1),在这里插入图片描述,第6张

                      查询字段为表达式

                      【MySQL】基本查询(1),在这里插入图片描述,第7张

                      为查询结果指定别名

                      【MySQL】基本查询(1),在这里插入图片描述,第8张

                      • 当然也可以不带as关键字:

                        【MySQL】基本查询(1),在这里插入图片描述,第9张

                        结果去重
                        • distinct关系字

                          【MySQL】基本查询(1),在这里插入图片描述,第10张

                          WHERE 条件
                          • 比较运算符:
                            运算符说明
                            >, >=, <, <=大于,大于等于,小于,小于等于
                            =等于,NULL不安全,例如NULL = NULL的结果是NULL
                            <=>等于,NULL安全,例如NULL<=>NULL的结果是TRUE(1)
                            !=,<>不等于,NULL不安全
                            BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
                            IN (option, …)如果是option中的任意一个,返回TRUE(1)
                            IS NULL是NULL
                            IS NOT NULL不是NULL
                            LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符

                            逻辑运算符:

                            运算符说明
                            AND多个条件必须都为TRUE(1),结果才是TRUE(1)
                            OR任意一个条件为TRUE(1),结果为TRUE(1)
                            NOT条件为TRUE(1),结果为FALSE(0)
                            • NULL不能参与等号的比较

                              【MySQL】基本查询(1),在这里插入图片描述,第11张

                              英语不及格的同学及英语成绩 ( < 60 )

                              【MySQL】基本查询(1),在这里插入图片描述,第12张

                              select后面跟的表示显示哪些列,不带名称则会显示全列。where后面的语句表示进行行筛选。

                              语文成绩在 [80, 90] 分的同学及语文成绩

                              【MySQL】基本查询(1),在这里插入图片描述,第13张

                              • 也可以使用between…and…语句:

                                【MySQL】基本查询(1),在这里插入图片描述,第14张

                                数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩

                                【MySQL】基本查询(1),在这里插入图片描述,第15张

                                • 或者优雅的写法:

                                  【MySQL】基本查询(1),在这里插入图片描述,第16张

                                  姓孙的同学 及 孙某同学
                                  • 模糊查询:

                                    【MySQL】基本查询(1),在这里插入图片描述,第17张

                                    【MySQL】基本查询(1),在这里插入图片描述,第18张

                                    语文成绩好于英语成绩的同学

                                    【MySQL】基本查询(1),在这里插入图片描述,第19张

                                    总分在 200 分以下的同学

                                    【MySQL】基本查询(1),在这里插入图片描述,第20张

                                    • 我们尝试使用别名的方法:

                                      【MySQL】基本查询(1),在这里插入图片描述,第21张

                                      发现报错,所以我们要讨论一下sql语句的执行顺序:

                                      【MySQL】基本查询(1),在这里插入图片描述,第22张

                                      同时不能在筛选条件(where)里面做重命名!!!因为重命名都是最后一步

                                      • 所以只能这么做:

                                        【MySQL】基本查询(1),在这里插入图片描述,第23张

                                        语文成绩 > 80 并且不姓孙的同学

                                        【MySQL】基本查询(1),在这里插入图片描述,第24张

                                        孙某同学,否则要求总成绩 > 200 并且 语文成绩 < 数学成绩 并且 英语成绩 > 80

                                        【MySQL】基本查询(1),在这里插入图片描述,第25张

                                        【MySQL】基本查询(1),在这里插入图片描述,第26张

                                        NULL 的查询
                                        • 创建一张表:

                                          【MySQL】基本查询(1),在这里插入图片描述,第27张

                                          【MySQL】基本查询(1),在这里插入图片描述,第28张

                                          【MySQL】基本查询(1),在这里插入图片描述,第29张

                                          • 进行查找:

                                            【MySQL】基本查询(1),在这里插入图片描述,第30张

                                            【MySQL】基本查询(1),在这里插入图片描述,第31张

                                            【MySQL】基本查询(1),在这里插入图片描述,第32张

                                            结果排序

                                            语法:

                                            – ASC 为升序(从小到大)

                                            – DESC 为降序(从大到小)

                                            – 默认为 ASC

                                            注意:没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序

                                            • 升序排序:

                                              【MySQL】基本查询(1),在这里插入图片描述,第33张

                                              • 降序排序:

                                                【MySQL】基本查询(1),在这里插入图片描述,第34张

                                                • null值一般最小(与数据库类型有关)

                                                  【MySQL】基本查询(1),在这里插入图片描述,第35张

                                                  【MySQL】基本查询(1),在这里插入图片描述,第36张

                                                  查询同学各门成绩,依次按 数学降序,英语升序,语文升序的方式显示

                                                  – 多字段排序,排序优先级随书写顺序

                                                  【MySQL】基本查询(1),在这里插入图片描述,第37张

                                                  由于默认排升序:

                                                  【MySQL】基本查询(1),在这里插入图片描述,第38张

                                                  所以我们还可以这样写:

                                                  【MySQL】基本查询(1),在这里插入图片描述,第39张

                                                  查询同学及总分,由高到低

                                                  【MySQL】基本查询(1),在这里插入图片描述,第40张

                                                  因为要排序所以先要有合适的数据,所以这里order by后面可以跟别名

                                                  查询姓孙的同学或者姓曹的同学数学成绩,结果按数学成绩由高到低显示

                                                  【MySQL】基本查询(1),在这里插入图片描述,第41张

                                                  筛选分页结果

                                                  语法:

                                                  – 起始下标为 0

                                                  – 从 0 行开始,筛选 n 条结果

                                                  SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n;

                                                  – 从 s 行开始,筛选 n 条结果

                                                  SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT s, n;

                                                  – 从 s 行开始,筛选 n 条结果,比第二种用法更明确,建议使用

                                                  SELECT … FROM table_name [WHERE …] [ORDER BY …] LIMIT n OFFSET s;

                                                  【MySQL】基本查询(1),在这里插入图片描述,第42张

                                                  • 第一种:
                                                  • 从表头开始连续读取三行:

                                                    【MySQL】基本查询(1),在这里插入图片描述,第43张