• MySQL数据库增删改查


    删除表

    drop table 表名;
    drop table if exists 表名;
    
    • 1
    • 2

    修改表

    修改表名

    alter table 表名 rename to 新表名;
    
    • 1

    image-20230914161657093

    添加列

    alter table 表名 add 列名 数据类型;
    
    • 1

    删除列

    alter table 表名 drop 列名;
    
    • 1

    修改数据类型

    alter table 表名 modify 列名 新数据类型;
    
    • 1

    修改列名和数据类型

    alter table 表名 change 列名 新列名 新数据类型;
    
    • 1

    图形化客户端工具

    Navicat

    给指定列添加数据

     insert into 表名(列名1,列名2...) values(值1,值2...);
    
    • 1

    image-20230914164508259

    给所有列添加数据时,依然可以用上面的格式,如下

    INSERT into stu(id,name,sex,birthday,score,email,tel,status) value(2,'李四','男','1999-1-1',88.88,'lisi@163.com','13888888888',1);
    
    
    • 1
    • 2

    但给所有列添加数据可以简化,把列名删去,减少代码量

     insert into 表名 values(值1,值2...);
     
     INSERT into stu value(2,'李四','男','1999-1-1',88.88,'lisi@163.com','13888888888',1);
    
    • 1
    • 2
    • 3

    image-20230914165805570

    美化SQL

    image-20230914170041525

    点击后:
    image-20230914170117525

    批量添加,仅需把括号和里面的内容多复制几遍,并且加上逗号,然后运行即可,例如:

    INSERT INTO stu (
    	id,
    	NAME,
    	sex,
    	birthday,
    	score,
    	email,
    	tel,
    	STATUS
    )
    VALUE
    	(
    		2,
    		'李四',
    		'男',
    		'1999-1-1',
    		88.88,
    		'lisi@163.com',
    		'13888888888',
    		1
    	),(		-- 先加逗号,然后复制一遍,分号只需要在最后就好
    		2,
    		'李四',
    		'男',
    		'1999-1-1',
    		88.88,
    		'lisi@163.com',
    		'13888888888',
    		1
    	),(		-- 先加逗号,然后复制一遍
    		2,
    		'李四',
    		'男',
    		'1999-1-1',
    		88.88,
    		'lisi@163.com',
    		'13888888888',
    		1
    	),(		-- 先加逗号,然后复制一遍
    		2,
    		'李四',
    		'男',
    		'1999-1-1',
    		88.88,
    		'lisi@163.com',
    		'13888888888',
    		1
    	);		-- 分号默认在最后
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    image-20230914170520034
    修改数据

    update 表名 set 列名1=值1,列名2=值2,...[where 条件]
    
    • 1

    例如修改张三的性别生日和分数

    注意:如果update语句没有加where条件,则会将表中所有数据全部修改!
    image-20230914211616593
    image-20230914211627517
    删除数据

    删除DELETE EROM 表名 [WHERE 条件] ;
    
    • 1

    示例:使用该语句后,筛选删除name为张三的列

    image-20230914212228267
    注意此处的条件语句,如果没有条件语句,所有数据都会被删除

    DQL数据库查询

    首先提前做好一个学生表,下面的代码全部复制到navicat 然后点击运行即可

    
    -- 删除stu表
    drop table if exists stu;
    
    
    -- 创建stu表
    CREATE TABLE stu (
     id int, -- 编号
     name varchar(20), -- 姓名
     age int, -- 年龄
     sex varchar(5), -- 性别
     address varchar(100), -- 地址
     math double(5,2), -- 数学成绩
     english double(5,2), -- 英语成绩
     hire_date date -- 入学时间
    );
    
    -- 添加数据
    INSERT INTO stu(id,NAME,age,sex,address,math,english,hire_date) 
    VALUES 
    (1,'马运',55,'男','杭州',66,78,'1995-09-01'),
    (2,'马花疼',45,'女','深圳',98,87,'1998-09-01'),
    (3,'马斯克',55,'男','香港',56,77,'1999-09-02'),
    (4,'柳白',20,'女','湖南',76,65,'1997-09-05'),
    (5,'柳青',20,'男','湖南',86,NULL,'1998-09-01'),
    (6,'刘德花',57,'男','香港',99,99,'1998-09-01'),
    (7,'张学右',22,'女','香港',99,99,'1998-09-01'),
    (8,'德玛西亚',18,'男','南京',56,65,'1994-09-02');
    
    select * from stu;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    基础查询

    查询name age 两列

    select name,age from stu;
    
    • 1

    image-20230914213313344

    上文我们已经使用过下面的代码,用*星号查询全部数据

    (但日后不建议使用,公司里代码规范不允许这样使用,在美化SQL代码后,*无法加注释,而且别人无法得知你查的全部数据到底是哪几项,所有建议还是把列名全部写出来)

    select * from stu;
    
    • 1

    当我们需要了解某一数据分布时,可能会遇到重复数据,例如了解所有学生的所在地

    这时候我们就要把重复数据筛选,去除重复记录

    使用distinct关键字

    select DISTINCT address from stu;
    
    • 1

    image-20230914213831770
    别名 as

    在不改变列名的情况下,给它取一个小名,例如代码中使用英文,表中math为数学成绩,我们就可以将代码改成如下进行查询

    使用别名前
    image-20230914214026248
    使用别名后
    image-20230914214351331
    image-20230914214509166

    (as可以不用写,但要和列名至少保留一个空格隔开)

    select name,math as 数学成绩,english as 英语成绩 from stu;
    select name,math 数学成绩,english 英语成绩 from stu;
    
    • 1
    • 2

    条件查询

    1.筛选出年龄大于二十的人

    select name,age,sex from stu where age>20;
    
    • 1

    image-20230914215021369

    2.筛选年龄在20到30之间的人

    select name,age,sex from stu where age>=20 && age<=30;
    -- 或者使用and代替&&
    select name,age,sex from stu where age>=20 and age<=30;
    -- 再或者划定范围用between and,英文翻译就是在什么之内
    select name,age,sex from stu where age between 20 and 30;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.虽然日期是字符,但筛选日期也可以使用这种区间法

    select name,age,sex from stu where hire_date between '1998-09-01' and '1999-09-01';
    
    • 1

    image-20230914220004813

    4.查询年龄等于18的学员

    select * from stu where age = 18;
    
    • 1

    5.查询年龄不等于18的学员(两种用法)

    select * from stu where age != 18;
    select * from stu where age <> 18;
    
    • 1
    • 2

    6.查询年龄等于18,或者年龄等于20,或者年龄等于22的学员

    查询多个条件,可以使用 || 或者 or(推荐使用)

    select * from stu where age = 18 or age = 20 or age = 22;
    
    • 1

    image-20230914220607461
    还可以使用类似与数组的方法,在这里面的就查询

    select * from stu where age in (18,20,22);
    
    • 1

    7.查询英语成绩为null的成员

    null值的比较不能使用 = != ,要使用is is not

    -- 错误写法
    select * from stu where english = null;
    -- 正确写法
    select * from stu where english is null;
    
    • 1
    • 2
    • 3
    • 4

    模糊查询

    like

    通配符 _:代表单个任意字符 %:代表任意个数字符

    示例:

    1.查询姓’马’的学员信息

    select * from stu where name like '马%';
    
    • 1

    2.查询第二个字是‘花’的学员信息

    select * from stu where name like '_花%';
    
    • 1

    3.查询名字中包含,德’的学员信息(最常用的查询)

    select * from stu where name like '%得%';
    
    • 1

    条件查询

    排序查询

    ASC升序排列 DESC降序排列

    1.查询学生信息,按照年龄升序排列(ASC可以不写,为默认值)

    select * from stu order by age asc;
    
    • 1

    2.查询学生信息,按照数学成绩降序排排列

    select * from stu order by math desc;
    
    • 1

    image-20230915192256153

    3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列

    select * from stu order by math desc, english asc;
    
    • 1

    image-20230915192409329

    分组查询

    聚合函数

    将一列数据作为一个整体,进行纵向计算,例如计算所有人分数的平均值

    函数名功能
    count(列名)统计数量(一般选用不为null的列)
    max(列名)最大值
    min(列名)最小值
    sum(列名)求和
    avg(列名)平均值
    -- 语法
    select 聚合函数 from 表;
    
    • 1
    • 2

    null值不参与所有聚合函数运算,所有统计这些值时,null不会被作为最小值显示出来

    SELECT 字段列表 FROM 表名[WHERE 分组前条件限定] GROUP BY 分组字段名 [HAVING 分组后条件过滤];
    
    • 1

    1.查询男同学和女同学各自的数学平均分

    select sex,avg(math) from stu group by sex;
    
    • 1

    2.查询男同学和女同学各自的数学平均分,以及各自人数

    select sex,avg(math),count(*) from stu group by sex;
    
    • 1

    3.查询男同学和女同学各自的数学平均分,以及各自人数,要求: 分数低于70分的不参与分组

    select sex,avg(math),count(*) from stu where math>70 group by sex;
    
    • 1

    4.查询男同学和女同学各自的数学平均分,以及各自人数,要求: 分数低于70分的不参与分组,分组之后人数大于

    select sex,avg(math),count(*) from stu where math>70 group by sex having count(*)>2;
    
    • 1

    image-20230915195240100

    分页查询

    1.从0开始查询,查询3条数据

    select * from stu limit 0 , 3: 
    
    • 1

    2,每页显示3条数据,查询第1页数据

    select * from stu limit 0 3;
    
    • 1

    3。每页显示3条数据,查询第2页数据

    select * from stu limit 3 .3;
    
    • 1

    4.每页显示3条数据,查询第3页数据

    select * from stu limit 6 , 3;
    
    • 1

    每页的开始索引计算:

    (页码-1)*每页显示的条数

    l
    select sex,avg(math),count() from stu where math>70 group by sex having count()>2;

    
    [外链图片转存中...(img-roXriq3j-1694780321837)]
    
    ### 分页查询
    
    1.从0开始查询,查询3条数据
    
    ```mysql
    select * from stu limit 0 , 3: 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    2,每页显示3条数据,查询第1页数据

    select * from stu limit 0 3;
    
    • 1

    3。每页显示3条数据,查询第2页数据

    select * from stu limit 3 .3;
    
    • 1

    4.每页显示3条数据,查询第3页数据

    select * from stu limit 6 , 3;
    
    • 1

    每页的开始索引计算:

    (页码-1)*每页显示的条数

    例如:每页显示15条,第十一页的开始索引就是(11-1)*15=150,第一条的序号就是150

  • 相关阅读:
    Human Guided Ground-truth Generation for Realistic Image Super-resolution
    YTM32的LIN通信协议引擎LinFlexD外设模块详解
    027实现可视化编程所需拖拽技术实现方案之vuedraggable
    Spring:AOP事务管理(14)
    PV静态创建和动态创建
    AcWing 288. 休息时间,《算法竞赛进阶指南》,环形与后效性处理
    Stable Diffusion 模型下载:Juggernaut(主宰、真实、幻想)
    这么分析大文件日志,以后就不用加班卷了!
    Vue中 引入使用 localforage 改进本地离线存储(突破5M限制)
    C++设计模式---观察者模式
  • 原文地址:https://blog.csdn.net/neadsc/article/details/132910822