MySQL数据库增删改查

删除表

drop table 表名;
drop table if exists 表名;

修改表

修改表名

alter table 表名 rename to 新表名;

image-20230914161657093

添加列

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

删除列

alter table 表名 drop 列名;

修改数据类型

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

修改列名和数据类型

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

图形化客户端工具

Navicat

给指定列添加数据

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

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);

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

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

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
	);		-- 分号默认在最后

image-20230914170520034
修改数据

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

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

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

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

示例:使用该语句后,筛选删除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;

基础查询

查询name age 两列

select name,age from stu;

image-20230914213313344

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

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

select * from stu;

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

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

使用distinct关键字

select DISTINCT address from stu;

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.筛选出年龄大于二十的人

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

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;

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

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

image-20230914220004813

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

select * from stu where age = 18;

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

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

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

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

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

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

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

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

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

-- 错误写法
select * from stu where english = null;
-- 正确写法
select * from stu where english is null;

模糊查询

like

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

示例:

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

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

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

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

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

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

条件查询

排序查询

ASC升序排列 DESC降序排列

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

select * from stu order by age asc;

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

select * from stu order by math desc;

image-20230915192256153

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

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

image-20230915192409329

分组查询

聚合函数

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

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

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

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

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

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

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

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

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

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

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

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

image-20230915195240100

分页查询

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

select * from stu limit 0 , 3: 

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

select * from stu limit 0 3;

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

select * from stu limit 3 .3;

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

select * from stu limit 6 , 3;

每页的开始索引计算:

(页码-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: 

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

select * from stu limit 0 3;

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

select * from stu limit 3 .3;

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

select * from stu limit 6 , 3;

每页的开始索引计算:

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小泥人Hyper

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值