drop table 表名;
drop table if exists 表名;
alter table 表名 rename to 新表名;
alter table 表名 add 列名 数据类型;
alter table 表名 drop 列名;
alter table 表名 modify 列名 新数据类型;
alter table 表名 change 列名 新列名 新数据类型;
给指定列添加数据
insert into 表名(列名1,列名2...) values(值1,值2...);
给所有列添加数据时,依然可以用上面的格式,如下
INSERT into stu(id,name,sex,birthday,score,email,tel,status) value(2,'李四','男','1999-1-1',88.88,'[email protected]','13888888888',1);
但给所有列添加数据可以简化,把列名删去,减少代码量
insert into 表名 values(值1,值2...);
INSERT into stu value(2,'李四','男','1999-1-1',88.88,'[email protected]','13888888888',1);
美化SQL
批量添加,仅需把括号和里面的内容多复制几遍,并且加上逗号,然后运行即可,例如:
INSERT INTO stu (
id,
NAME,
sex,
birthday,
score,
email,
tel,
STATUS
)
VALUE
(
2,
'李四',
'男',
'1999-1-1',
88.88,
'[email protected]',
'13888888888',
1
),( -- 先加逗号,然后复制一遍,分号只需要在最后就好
2,
'李四',
'男',
'1999-1-1',
88.88,
'[email protected]',
'13888888888',
1
),( -- 先加逗号,然后复制一遍
2,
'李四',
'男',
'1999-1-1',
88.88,
'[email protected]',
'13888888888',
1
),( -- 先加逗号,然后复制一遍
2,
'李四',
'男',
'1999-1-1',
88.88,
'[email protected]',
'13888888888',
1
); -- 分号默认在最后
update 表名 set 列名1=值1,列名2=值2,...[where 条件]
例如修改张三的性别生日和分数
注意:如果update语句没有加where条件,则会将表中所有数据全部修改!
删除数据
删除DELETE EROM 表名 [WHERE 条件] ;
示例:使用该语句后,筛选删除name为张三的列
首先提前做好一个学生表,下面的代码全部复制到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;
上文我们已经使用过下面的代码,用*星号查询全部数据
(但日后不建议使用,公司里代码规范不允许这样使用,在美化SQL代码后,*无法加注释,而且别人无法得知你查的全部数据到底是哪几项,所有建议还是把列名全部写出来)
select * from stu;
当我们需要了解某一数据分布时,可能会遇到重复数据,例如了解所有学生的所在地
这时候我们就要把重复数据筛选,去除重复记录
使用distinct关键字
select DISTINCT address from stu;
在不改变列名的情况下,给它取一个小名,例如代码中使用英文,表中math为数学成绩,我们就可以将代码改成如下进行查询
(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;
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';
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;
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;
3.查询学生信息,按照数学成绩降序排列,如果数学成绩一样,再按照英语成绩升序排列
select * from stu order by math desc, english asc;
将一列数据作为一个整体,进行纵向计算,例如计算所有人分数的平均值
函数名 | 功能 |
---|---|
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;
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