【MySQL】表的基本增删查改(结合案例)

【MySQL】表的基本增删查改(结合案例)

码农世界 2024-06-16 后端 100 次浏览 0个评论

文章目录

  • 1.前言
  • 2.插入数据(Create)
    • 2.1案例
    • 2.2单行数据+全列插入
    • 2.3多行数据+指定列插入
    • 2.4插入否则更新
    • 2.5替换
    • 3. 读取数据(Retireve)
      • 3.1案例
      • 3.2全列查询
      • 3.3指定列查询
      • 3.4查询字段为表达式
      • 3.5为查询结果起别名
      • 3.6去重
      • 3.7where条件
        • 3.7.1案例
        • 3.8排序
        • 3.9筛选分页
        • 4. 修改数据(Update)
        • 5.删除数据(Delete)
          • 5.1delete删除
          • 5.2截断表
          • 5.3truncate和delete的区别
          • 6.将查询结果当作数据进行多行插入
          • 7.聚合函数
          • 8.分析基本查询的执行顺序
          • 9.分组查询
          • 10.SQL查询的顺序

            1.前言

            在前面我们学习了针对库的操作以及针对表结构的操作,下面我们来学习针对表中数据的操作。对数据操作的类型无非就是C(创建)R(读取)U(修改)D(删除),针对以上四种类型的操作,结合案例展开讨论

            2.插入数据(Create)

            语法:

            insert
            	表
            	插入列
            values
               数据
            

            2.1案例

            现创建一张学生表,表结构如下:

            CREATE TABLE students (
               id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
               sn INT NOT NULL UNIQUE COMMENT '学号',
               name VARCHAR(20) NOT NULL,
               qq VARCHAR(20)
            );
            

            【MySQL】表的基本增删查改(结合案例)

            2.2单行数据+全列插入

            【MySQL】表的基本增删查改(结合案例)

            【MySQL】表的基本增删查改(结合案例)

            【MySQL】表的基本增删查改(结合案例)

            2.3多行数据+指定列插入

            【MySQL】表的基本增删查改(结合案例)

            2.4插入否则更新

            如果我们再插入数据时遇到了主键或者唯一键冲突,我们选择性的进行同步操作,例如:

            【MySQL】表的基本增删查改(结合案例)

            【MySQL】表的基本增删查改(结合案例)

            使用ON DUPLICATE KEY UPDATE可以在发生冲突之后执行update语句。

            2.5替换

            主键或者唯一键发生冲突,删除再插入

            没有发生冲突就直接插入

            【MySQL】表的基本增删查改(结合案例)

            3. 读取数据(Retireve)

            读取数据其实就是查询数据,查询数据使用select语句

            语法:

            select {cloumn1,cloumn2..} from {table1,table2...} [where...] [order by...] [goup by...] [limit...]
            

            3.1案例

            创建一个exam_result表记录学生的考试成绩:

            CREATE TABLE exam_result ( 
             id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, 
             name VARCHAR(20) NOT NULL COMMENT '同学姓名', 
             chinese float DEFAULT 0.0 COMMENT '语文成绩', 
             math float DEFAULT 0.0 COMMENT '数学成绩', 
             english float DEFAULT 0.0 COMMENT '英语成绩' 
            ); 
            

            给出一组数据用于测试:

            INSERT INTO exam_result (name, chinese, math, english) VALUES 
             ('唐三藏', 67, 98, 56), 
             ('孙悟空', 87, 78, 77), 
             ('猪悟能', 88, 98, 90), 
             ('曹孟德', 82, 84, 67), 
             ('刘玄德', 55, 85, 45), 
             ('孙权', 70, 73, 78), 
             ('宋公明', 75, 65, 30);//多行全列插入
            

            3.2全列查询

            【MySQL】表的基本增删查改(结合案例)

            3.3指定列查询

            假设要查看所有同学的数学成绩以及姓名

            【MySQL】表的基本增删查改(结合案例)

            3.4查询字段为表达式

            假设要查询所有同学的总成绩

            【MySQL】表的基本增删查改(结合案例)

            3.5为查询结果起别名

            使用as可以给一个表达式或者是一张表或者一个字段起别名,例如还是查询所有同学的总成绩:

            【MySQL】表的基本增删查改(结合案例)

            其中as也可以省略不写

            3.6去重

            可以在查询字段前添加distinct表示对该字段去重,例如查询所有同学的数学成绩:

            去重前:

            【MySQL】表的基本增删查改(结合案例)

            去重后

            【MySQL】表的基本增删查改(结合案例)

            这样就没有重复的数学成绩了。

            3.7where条件

            使用where可以保证查询数据的准确性。

            下面给出常见的比较运算符

            【MySQL】表的基本增删查改(结合案例)

            逻辑运算符

            【MySQL】表的基本增删查改(结合案例)

            下面结合具体案例来使用where

            3.7.1案例

            • 案例一:查询英语成绩不及格的同学及其英语成绩

              【MySQL】表的基本增删查改(结合案例)

            • 案例二:语文成绩在 [80, 90] 分的同学及语文成绩

              【MySQL】表的基本增删查改(结合案例)

              【MySQL】表的基本增删查改(结合案例)

            • 案例三:数学成绩是 98 或者 78的 同学及数学成绩

              【MySQL】表的基本增删查改(结合案例)

            • 案例四:查询姓孙的同学的成绩

              【MySQL】表的基本增删查改(结合案例)

            • 案例五:查询名字姓孙某(两个字)同学的成绩

              【MySQL】表的基本增删查改(结合案例)

            • 案例六:在students表中查询qq为NULL的同学的语文成绩

              【MySQL】表的基本增删查改(结合案例)

              3.8排序

              语法:

              select 
              	聚合函数,
              	列(要求出现在group by的后面)
              from 
              	表
              where 
              	筛选条件
              order by 
              	cloumn asc;//升序
              	cloumn desc;//降序
              
              • 案例1:查询所有同学的数学成绩并按照升序显示

                【MySQL】表的基本增删查改(结合案例)

              • 案例2:查询所有同学的总成绩并安装降序排序

                【MySQL】表的基本增删查改(结合案例)

                3.9筛选分页

                语法:

                -- 起始下标为 0 
                 
                -- 从 s 开始,筛选 n 条结果 
                SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n
                -- 从 0 开始,筛选 n 条结果
                SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
                 ; 
                 
                -- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用 
                SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s; 
                

                比如查询所有同学的总成绩,显示分数最高的三个人

                【MySQL】表的基本增删查改(结合案例)

                也可以使用offset:

                【MySQL】表的基本增删查改(结合案例)

                4. 修改数据(Update)

                语法:

                UPDATE table_name SET column = expr [, column = expr ...] 
                 [WHERE ...] [ORDER BY ...] [LIMIT ...] 
                
                • 案例:将孙某同学的成绩改为60分

                  【MySQL】表的基本增删查改(结合案例)

                  5.删除数据(Delete)

                  5.1delete删除

                  delete可以删除表中的部分数据,也可以删除全部数据。delete并不会影响表的结构。

                  语法:

                  DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...] 
                  
                  • 案例1:删除孙悟空同学的考试成绩

                    查看原数据:

                    【MySQL】表的基本增删查改(结合案例)

                    删除后:

                    【MySQL】表的基本增删查改(结合案例)

                  • 案例2:删除整张表的数据

                    delete table table_name表示删除table_name表的数据,这里不做演示。

                    5.2截断表

                    截断truncate和delete都是对表中数据进行删除,truncate只能用来删除表中的所有数据

                    语法:

                    TRUNCATE TABLE table_name;
                    

                    5.3truncate和delete的区别

                    • 作用范围:truncate只能作用于整个表不能带条件,而delete可以删除表中部分数据且可以带条件
                    • 速度和性能:truncate是批量删除,delete是逐行删除。truncate删除数据之后并不会留下日志记录,而delete会,所以truncate的速度较快
                    • 重置表的索引:除了删除数据之外,truncate还会重置表中的索引值,比如自增键(auto_incream)又变为了1。

                      总结:如果希望删除表中所有数据其希望操作更快,用truncate.如果希望删除操作能回滚即恢复数据,或者只是删除部分数据,那就用delete

                      6.将查询结果当作数据进行多行插入

                      语法:

                      INSERT INTO table_name [(column [, column ...])] SELECT ... 
                      

                      mysql支持将select查询到的结果作为数据对某一张表进行多行插入,比如当我们想复制一个表中的数据到另一个表里。

                      现给出原始表数据:

                      -- 创建原数据表 
                       
                      CREATE TABLE duplicate_table (id int, name varchar(20)); 
                      Query OK, 0 rows affected (0.01 sec) 
                       
                      -- 插入测试数据 
                      INSERT INTO duplicate_table VALUES 
                       (100, 'aaa'), 
                       (100, 'aaa'), 
                       (200, 'bbb'), 
                       (200, 'bbb'), 
                       (200, 'bbb'), 
                       (300, 'ccc'); 
                      

                      【MySQL】表的基本增删查改(结合案例)

                      • 案例:删除duplicate_table表中的重复数据

                        思路:创建一张空表,表结构和duplicate_table保持一致,然后将duplicate_table去重查询到的数据插入到新表中,再将新表重命名为duplicate_table

                        其中复制一个表的结构我们可以使用like,例如:

                        【MySQL】表的基本增删查改(结合案例)

                        将duplicate_table去重查询到的数据插入到新表中:

                        【MySQL】表的基本增删查改(结合案例)

                        重命名表名

                        【MySQL】表的基本增删查改(结合案例)

                        【MySQL】表的基本增删查改(结合案例)

                        7.聚合函数

                        MySQL中的聚合函数主要用于对一组数据进行计算,返回单个值。常见的聚合函数包括SUM(求和)、AVG(平均值)、MAX(最大值)、MIN(最小值)、COUNT(计数)等。

                        【MySQL】表的基本增删查改(结合案例)

                        • 案例:统计班级有多少学生

                          【MySQL】表的基本增删查改(结合案例)

                        • 案例:统计数学成绩总分

                          【MySQL】表的基本增删查改(结合案例)

                        • 案例:统计数学的平均成绩

                          【MySQL】表的基本增删查改(结合案例)

                        • 案例:返回数学成绩做高分

                          【MySQL】表的基本增删查改(结合案例)

                          8.分析基本查询的执行顺序

                          比如以下语句:

                          【MySQL】表的基本增删查改(结合案例)

                          执行的顺序为:

                          1. from exam_result
                          2. where math>60
                          3. select name,math
                          4. order by math asc

                          9.分组查询

                          在select中使用group by 子句可以对指定列进行分组查询

                          语法:

                          select 
                          	聚合函数,
                          	列(要求出现在group by的后面)
                          from 
                          	表
                          where 
                          	筛选条件
                          group by 
                          	分组的列表
                          having
                             条件查询
                          order by 
                          	排序
                          limit
                             分页
                          

                          其中having表示对分组结果进行条件筛选,执行顺序在group by之后。

                          下面有一张员工表EMP,字段包括员工工资sal、部门号deptno,岗位job。具体内容如下:

                          【MySQL】表的基本增删查改(结合案例)

                          • 案例1:显示每个部门的平均工资和最高工资

                            思路:按照部门号进行分组,于是我们得到了诺干个子表,子表属于同一部门的。再聚合统计每个子表的平均工资的最高工资好平均工资。

                            sql语句:

                            select deptno,max(sal),avg(sal) from emp group by deptno;
                            

                            【MySQL】表的基本增删查改(结合案例)

                            • 案例2:显示每个部门的每种岗位的平均工资和最高工资

                              思路:先按部门号分组,再按岗位分组,再聚合统计每个组的平均工资和最高工资

                              sql语句:

                              select deptno,max(sal),avg(sal) from emp goup by deptno,joib;
                              

                              【MySQL】表的基本增删查改(结合案例)

                              • 案例3:统计平均工资低于2000的部门和它的平均工资

                                思路:先按部门分组,再对每个组求平均工资,最后使用having 对分组结果进行查询,即查询部门平均工资低于2000的

                                sql语句:

                                select avg(sal) avg_sal from emp group by deptno having avg(sal)<2000;
                                

                                【MySQL】表的基本增删查改(结合案例)

                                10.SQL查询的顺序

                                from > on> join > where > group by> with > having> select > distinct > order by > limit

转载请注明来自码农世界,本文标题:《【MySQL】表的基本增删查改(结合案例)》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,100人围观)参与讨论

还没有评论,来说两句吧...

Top