SQL
1. 数据库的介绍
1.1 数据库是什么
数据库其实就是存储和管理数据的仓库。
在一些公司中,我们常见的其实就是使用Excel来存储和管理数据。我们的数据库其实就是和Excel是一样的作用,其表现形式类似的。
那我们为什么要学习数据库呢?为什么不使用Excel来存储和管理数据呢?最重要的原因其实就是因为Excel不够强大。
1.2 数据库的分类
数据库这种应用有很多产品。可以分为两大类
关系型数据库
指这种数据库不光光可以用来存储数据,还可以存储数据与数据之间的关系。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tZ9UUeYH-1641383478890)(SQL.assets/image-20211119103541195.png)]
关系型数据库有哪些产品呢?
-
**Oracle **
Oracle这个公司一直都是做Oracle数据库发家的。Oracle这个数据库是世界上使用的最多的一个收费的产品。
-
MySQL
MySQL之前是一个开源的,免费的数据库产品,很多公司在用。当前已经被Oracle收购了,有两个版本,社区版和收费版。
-
SQL server
是一个微软开发的数据库产品,现在还是有一定的市场份额的。
-
MariaDB
其实就是MySQL的同一个作者搞出来的一个开源的数据库
-
Access
Access是Office套件的一员,是一个微软开发出来的数据库,基本没人用
-
SQLite
是一个微型的数据库产品。在Android操作系统中用来存储联系人、短信、通讯录等等内容
-
OceanBase
这个是一个国产(Alibaba)的数据库产品,历史还不是很长。
非关系型数据库
非关系型数据库仅仅用来存储数据。非关系型数据库又有一个名字,叫NoSQL。
NoSQL : Not only SQL。意思是作为关系型数据库的一个良好的补充。为什么关系型数据库需要一个补充产品呢?主要是因为关系型数据库的这些产品都是把数据存储在磁盘上,存储在磁盘上就会导致读写效率很低,所以在应对需要读写速度快的这种场景的时候,我们就需要一些把存储在内存上的数据库。
非关系型数据库的主要特点就是:读写速度快
-
Redis
是目前使用的最多的一个NoSQL产品
-
Memcache
是一个Redis之前的一个产品
-
MongoDB
-
Cassandra
1.2 SQL的介绍
关系型数据库都遵循统一的语法:SQL
SQL:Structured Query Language ,结构化的查询语言。现在市面上所有的关系型数据库都支持SQL语法标准。各个数据库产品有自己的语法标准,类似于方言。但是绝大多数的关系型数据库都支持SQL标准语法。所以我们把SQL标准语法学习好就可以了。
2. 安装数据库
安装MySQL
我们采用的MySQL这个数据库。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IOM3DDCk-1641383478893)(SQL.assets/image-20211119110257054.png)]
安装MySQL的要求
- 如果有5.7以外的别的版本的MySQL,先卸载掉再装
- 密码要求统一:123456
如何证明MySQL数据库安装成功呢?
-
查看服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5oG4RzOv-1641383478894)(SQL.assets/image-20211119110730287.png)]
-
执行指令,连接MySQL
mysql -uroot -p
然后输入密码 123456 连接上MySQL就可以了
图形化界面客户端
我们这里采用Navicat
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OGedBt1S-1641383478895)(SQL.assets/image-20211119111208767.png)]
如何连接MySQL
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BAfhnu67-1641383478895)(SQL.assets/image-20211119111613949.png)]
MySQL的软件架构
MySQL是一个C/S架构的产品,我们之前安装的Navicat仅仅只是一个客户端,服务端是我们之前安装的MySQL5.7
目前市面上有两种软件形态。B/S | C/S
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-56hHjdLf-1641383478897)(SQL.assets/image-20211119113950608.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LypZB2XO-1641383478898)(SQL.assets/image-20211119113958247.png)]
3. SQL
如何使用呢?其实就是去学习SQL标准语法来操作数据库。
SQL是由一堆关键字组成的语句,一般来说不会太长。这个语句里面有一些关键字,也有一些用户起的名字。
关键字是不区分大小写的,用户起的名字规范是都使用小写。SQL关键字不多,大概20多个。
每一个SQL语句都要以分号结尾。
3.1 MySQL的存储结构
每一个MySQL的服务里面,有很多库,库里面有很多表,表里面有很多数据。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n1ZlTPre-1641383478899)(SQL.assets/image-20211119114438714.png)]
3.2 库
字符集和校对规则。
字符集:其实就是一套符号和编码。utf8,gbk,Latin1(不支持中文),utf8mb4(对UTF8的一个拓展)
校对规则:其实就是一套用来比较字符集内字符大小的规则。utf8_bin(区分大小写),utf8_general_ci(不区分大小写)
所以,大家在去新建库、新建表的时候一定要指定对应的字符集。
增
create database dbName character set utf8 collate utf8_bin;
删
drop database [if exists] dbName;
改
-- 修改库的名字(不支持)
-- 修改库的字符集
alter database 36th character set gbk collate gbk_bin;
查
-- 查询库
-- 查询所有的库
show databases;
-- 查询库的建库语句 可以帮助我们查看库的字符集和校对规则
show create database 36th;
3.3 表
增
-- 整型
create table t_int (
t1 TINYINT,
t2 smallint,
t3 MEDIUMINT,
t4 int,
t5 bigint
)character set utf8;
-- 浮点型 float double bigDecimal
create table t_f (
t1 float(4,2),
t2 double(6,2),
t3 decimal(8,2)
)character set utf8 collate utf8_bin;
create table t_date(
t1 year,
t2 date,
t3 time,
t4 datetime,
t5 timestamp
)character set utf8 collate utf8_bin;
-- datetime 和timestamp有什么区别呢? 国际化
-- 1. datetime 占用8个直接 timestamp占用4个直接
-- 2. timestamp默认时间是当前时间,datetime默认是null
-- 3. timestamp 跟着mysql的时间走,而datetime跟着系统的时间走
set time_zone = '+8:00';
--字符串类型
create table t_str(
t1 char(5),
t2 varchar(20),
t3 text
)character set utf8 collate utf8_bin;
-- 枚举类型
create table t_enum(
t1 enum('first','second','third'),
t2 varchar(20)
)character set utf8 collate utf8_bin;
-- 集合类型
create table t_set(
t1 set("bob","tom","jerry")
)character set utf8 collate utf8_bin;
-- 练习
create table employee(
id int,
name varchar(20),
gender enum('男','女'),
birthday date,
entry_date date,
job varchar(20),
salary double(10,2),
resume text
)character set utf8 collate utf8_bin;
删
drop table [if exists] t_set;
改
-- 改
-- 修改表名
rename table employee to user;
-- 修改表的字符集
alter table user character set utf8 collate utf8_bin;
-- 修改列
-- 增加列 add
alter table user add height int;
-- 删除列 drop
alter table user drop height;
-- 修改列的名字 change
alter table user change id uid double(4,2);
-- 修改列的类型 change modify
alter table user modify uid int;
查
-- 查表的建表语句
show create table user;
-- 查询所有的表
show tables;
-- 查表的结构
describe tableName;
desc tableName;
3.4 数据
增
-- 增
-- 插入单个值
insert into user1 values (1,"天明","男",'2000-10-19','2015-10-11','讲师',10000.00,'王道最可爱的天明妈妈');
-- values 和value目前来说没有区别,大家以后在使用的过程中推荐使用values
-- 插入多个值
insert into user1 values
(3,"云天明2号","男",'2000-10-19','2015-10-11','讲师',10000.00,'王道最可爱的天明妈妈'),
(2,"长风","男",'2000-10-19','2015-10-11','讲师',20000.00,'王道最会单手打方向盘的男人');
insert into user1 values
(1001,'李云龙',null,null,null,"",null,null);
-- 插入指定列的值
insert into user1 (uid,name) values (1002,'楚云飞');
删
-- 删除
delete from user1;
-- 删除指定的数据 where
-- where是对表中的记录去过滤,筛选出符合条件的行(记录)
delete from user1 where uid = 1;
delete from user1 where name = '楚云飞';
delete from user1 where uid > 2;
-- 修改
-- 修改单列
update user1 set name = '短风';
update user1 set name = '长风' where uid = 1;
改
-- 修改
-- 修改单列
update user1 set name = '短风';
update user1 set name = '长风' where uid = 1;
-- 修改多列
update user1 set job = '总经理',resume='最大方的总经理' where uid = 1;
查
-- select 关键字其他的功能
select now();
select 199*258;
select trim(" abcd ed ");
select concat("天明","程心");
CREATE TABLE t_students(
id INT PRIMARY KEY AUTO_INCREMENT,
name CHAR(20) NOT NULL,
class CHAR(10) NOT NULL,
chinese FLOAT,
english FLOAT,
math FLOAT
)character set utf8;
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('东邪', '一班', 90, 90, 90);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('西毒', '二班', 80, 80, 90);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('南帝', '三班', 80, 90, 80);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('北丐', '四班', 60, 60, 60);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('中神通', '五班', 100, 100, 100);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('郭靖', '一班', 59, 59, 59);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('黄蓉', '一班', 90, 90, 90);
-- 查询
-- 查询表 t_students 中学生的姓名
select name from t_students;
-- 查询多列
select id,name,class from t_students;
-- 查询所有的列
select id,name,class,english,math,chinese from t_students;
select * from t_students;
3.5 where
where关键字可以帮助我们去过滤数据,过滤出符合条件的指定的行。
where [布尔表达式],这个布尔表达式的值是一个boolean类型的
= != <> > < >= <=
-- 使用where条件语句去过滤
select * from t_students where id = 1;
select * from t_students where class = '一班';
-- 1. 查询语数外总成绩大于 180 的同学信息
select * from t_students where (chinese + english + math) > 180;
-- 2. 查询数学成绩在[80,90]区间的同学姓名;
-- 1 2 3 7
select * from t_students where math >= 80 and math <= 90;
-- 3. 查询各科都及格的同学姓名;
select name from t_students where chinese >= 60 and math >= 60 and english >= 60;
-- 5. 查询id不等于1的同学的信息
select * from t_students where id != 1;
select * from t_students where id <> 1;
关键字
-
or and
可以用来拼接条件
-- or and -- 4. 查询一班和二班的同学信息; select * from t_students where class = '一班' or class = '二班';
-
is null | is not null
-- is null select * from user1; -- 查询Job为空的用户信息 select * from user1 where job = ""; -- is not null select * from user1 where job is not null;
-
between and | not between and
-- between and 表示查询一个范围区间(闭区间)的成员 -- 2. 查询数学成绩在[80,90]区间的同学姓名; select * from t_students where math between 80 and 90; select * from t_students where math not between 80 and 90;
-
in | not in
-- in 查询在一个指定范围内的成员 select * from t_students; select * from t_students where id in (1,2,3,4,1001); select * from t_students where id = 1 or id = 2 or id = 3 or id = 4 or id = 1001; -- 4. 查询一班和二班的同学信息 select * from t_students where class in ('一班','二班'); -- not in -- 查询不是一班和二班的同学信息 select * from t_students where class not in ('一班','二班');
-
like | not like
-- like -- 模糊查询 -- % 表示通配 -- _表示占位 select * from t_students; select * from t_students where name like "%黄%"; select * from t_students where name like "黄%"; select * from t_students where name like "黄_"; -- 例如百度这样的搜索引擎,不是使用模糊查询来查的,为什么呢?因为效率太低了 -- ES lucense Solr -- not like select * from t_students where name not like "黄%";
3.6 其他的关键字
3.6.1 distinct
这个关键字是用来去重的
-- 查询 t_students 表中的不同班级名
select distinct(class) from t_students;
需要注意的是,只有两行数据完全一致的时候才会去重,假如不一致,就不会去重
select distinct(class),name from t_students;
-- 只有当我们需要的class 和name两个都完全一样的时候,才会去重
3.6.2 limit
限制结果集,其实就是可以帮助我们把查询出来的指定条数的记录显示出来。
-- 查询 t_students 表中第3到第5条记录;
select * from t_students limit 2,3;
-- 查询前三条记录
select * from t_students limit 3;
limit关键字的作用:
在我们后续进行分页的时候有用。
假如我们查询的页码叫做 page_no,然后一页有 page_size 条记录
limit (page_no-1)*page_size,page_size
3.6.3 order
对结果进行排序
- 升序:默认值,ASC
- 降序:DESC
-- 对单列进行排序
select * from t_students order by chinese asc;
select * from t_students order by chinese desc;
select * from t_students order by chinese desc limit 1;
-- 对多列进行排序
-- 按照语文成绩从高到低排序,如果语文成绩一样,按照数学成绩,从高到低排序
select * from t_students order by chinese desc,math asc;
-- 如:对数学单科成绩从低到高进行排序。
select * from t_students order by math asc;
-- 如:对语文降序,数学升序,外语降序排序。
select * from t_students order by chinese desc,math asc,english desc;
-- 查询总成绩前三名同学的信息。
select * from t_students order by (chinese+math+english) desc limit 3;
3.6.4 计算字段
-- 查询总成绩信息
select name,chinese+english+math from t_students;
注意:计算字段是对行内的数据进行加减,不能对一列的数据进行加减
3.6.5 AS
我们可以通过as关键字来起别名, as关键字可以省略,不建议省略,省略了之后SQL的可读性会变差。
-
对列起别名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9HoJMb1n-1641383478900)(SQL.assets/image-20211120162530884.png)]
-
对表起别名
这个一般是在我们后续学习的多表查询中有用。
select * from (select name as '名字',chinese+english+math as '总成绩' from t_students) as user;
3.6.6 group by
我们可以对查询的结果进行分组。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dTJtNViB-1641383478901)(SQL.assets/image-20211120170404835.png)]
select class,group_concat(id),group_concat(name) from student group by class;
having:对分组之后的结果进行过滤。
-- 对于分组之后的结果过滤,我们要使用having关键字
-- 对于分组之前的原始表中的数据进行过滤,我们要使用where关键字
select class,count(*) as count from student group by class having count > 2;
3.6.7 聚合函数
-
max
求最大值
-- max select max(score) from student; -- 求各个班级的最高分 select class,max(score) from student group by class;
-
min
求最小值
-- min select min(score) from student; -- 求各个班级的最低分 select class,min(score) from student group by class;
-
sum
求和
-- sum 求和 select sum(score) from student; -- 各个班级的总分 select class,sum(score) from student GROUP BY class;
-
count
计数
-- 计数 count select count(*) from student; -- 求各个班级有多少个学生 select count(*),class from student group by class;
-
avg
求平均值
-- avg 平均值 select avg(score) from student; -- 求各个班级的平均分 select class,avg(score) from student group by class;
3.7 SQL语句的执行顺序
(5) SELECT column_name, ...
(1) FROM table_name, ...
(2) [WHERE ...]
(3) [GROUP BY ...]
(4) [HAVING ...]
(6) [ORDER BY ...]
(7) [limit...];
说明:关键字的顺序是不能够改变的,如果改变了之后,会有语法错误。
上课SQL
-- 库
-- 增
create database 36th;
create database 36th character set utf8 collate utf8_bin;
-- 查询库
-- 查询所有的库
show databases;
-- 查询库的建库语句 可以帮助我们查看库的字符集和校对规则
show create database 36th;
-- 删除
drop database 28_jdbc;
drop database 28_sql4;
drop database if EXISTS 28_sql5;
-- 修改库的名字(不支持)
-- 修改库的字符集
alter database 36th character set utf8 collate utf8_bin;
-- 表
-- 选中数据库
use 36th;
-- 增
create table province (
id int,
name String,
)
-- 整型
create table t_int (
t1 TINYINT,
t2 smallint,
t3 MEDIUMINT,
t4 int,
t5 bigint
)character set utf8;
-- 浮点型 float double bigDecimal
create table t_f (
t1 float(4,2),
t2 double(6,2),
t3 decimal(8,2)
)character set utf8 collate utf8_bin;
create table t_date(
t1 year,
t2 date,
t3 time,
t4 datetime,
t5 timestamp
)character set utf8 collate utf8_bin;
-- datetime 和timestamp有什么区别呢? 国际化
-- 1. datetime 占用8个直接 timestamp占用4个直接
-- 2. timestamp默认时间是当前时间,datetime默认是null
-- 3. timestamp 跟着mysql的时间走,而datetime跟着系统的时间走
set time_zone = '+8:00';
--字符串类型
create table t_str(
t1 char(5),
t2 varchar(20),
t3 text
)character set utf8 collate utf8_bin;
-- 枚举类型
create table t_enum(
t1 enum('first','second','third'),
t2 varchar(20)
)character set utf8 collate utf8_bin;
-- 集合类型
create table t_set(
t1 set("bob","tom","jerry")
)character set utf8 collate utf8_bin;
insert into t_date values (now(),now(),now(),now(),now());
create table employee(
id int,
name varchar(20),
gender enum('男','女'),
birthday date,
entry_date date,
job varchar(20),
salary double(10,2),
resume text
)character set utf8 collate utf8_bin;
-- 删
drop table if exists t_set;
-- 改
-- 修改表名
rename table employee to user;
-- 修改表的字符集
alter table user character set utf8 collate utf8_bin;
-- 修改列
-- 增加列 add
alter table user add height int;
-- 删除列 drop
alter table user drop height;
-- 修改列的名字 change
alter table user change id uid double(4,2);
-- 修改列的类型 change modify
alter table user modify uid int;
-- 查
-- 查表的建表语句
show create table user;
-- 查询所有的表
show tables;
use 36th;
alter table user add image varchar(255);
alter table user modify job varchar(60);
alter table user drop image;
rename table user to user1;
alter table user1 character set gbk;
-- 数据
-- 增
-- 插入单个值
insert into user1 values (1,"天明","男",'2000-10-19','2015-10-11','讲师',10000.00,'王道最可爱的天明妈妈');
-- values 和value目前来说没有区别,大家以后在使用的过程中推荐使用values
-- 插入多个值
insert into user1 values
(3,"云天明2号","男",'2000-10-19','2015-10-11','讲师',10000.00,'王道最可爱的天明妈妈'),
(2,"长风","男",'2000-10-19','2015-10-11','讲师',20000.00,'王道最会单手打方向盘的男人');
insert into user1 values
(1001,'李云龙',null,null,null,"",null,null);
-- 插入指定列的值
insert into user1 (uid,name) values (1002,'楚云飞');
-- 删除
delete from user1;
-- 删除指定的数据 where
-- where是对表中的记录去过滤,筛选出符合条件的行(记录)
delete from user1 where uid = 1;
delete from user1 where name = '楚云飞';
delete from user1 where uid > 2;
-- 修改
-- 修改单列
update user1 set name = '短风';
update user1 set name = '长风' where uid = 1;
-- 修改多列
update user1 set job = '总经理',resume='最大方的总经理' where uid = 1;
-- select 关键字其他的功能
select now();
select 199*258;
select trim(" abcd ed ");
select concat("天明","程心");
CREATE TABLE t_students(
id INT PRIMARY KEY AUTO_INCREMENT,
name CHAR(20) NOT NULL,
class CHAR(10) NOT NULL,
chinese FLOAT,
english FLOAT,
math FLOAT
)character set utf8;
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('东邪', '一班', 90, 90, 90);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('西毒', '二班', 80, 80, 90);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('南帝', '三班', 80, 90, 80);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('北丐', '四班', 60, 60, 60);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('中神通', '五班', 100, 100, 100);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('郭靖', '一班', 59, 59, 59);
INSERT INTO t_students (name, class, chinese, english, math)
VALUES ('黄蓉', '一班', 90, 90, 90);
-- 查询
-- 查询表 t_students 中学生的姓名
select name from t_students;
-- 查询多列
select id,name,class from t_students;
-- 查询所有的列
select id,name,class,english,math,chinese from t_students;
select * from t_students;
-- 使用where条件语句去过滤
select * from t_students where id = 1;
select * from t_students where class = '一班';
-- 1. 查询语数外总成绩大于 180 的同学信息
select * from t_students where (chinese + english + math) > 180;
-- 2. 查询数学成绩在[80,90]区间的同学姓名;
-- 1 2 3 7
select * from t_students where math >= 80 and math <= 90;
-- 3. 查询各科都及格的同学姓名;
select name from t_students where chinese >= 60 and math >= 60 and english >= 60;
-- 4. 查询一班和二班的同学信息;
select * from t_students where class = '一班' or class = '二班';
-- 5. 查询id不等于1的同学的信息
select * from t_students where id != 1;
select * from t_students where id <> 1;
-- 常见的关键字
-- is null
select * from user1;
-- 查询Job为空的用户信息
select * from user1 where job = "";
-- is not null
select * from user1 where job is not null;
-- between and 表示查询一个范围区间(闭区间)的成员
-- 2. 查询数学成绩在[80,90]区间的同学姓名;
select * from t_students where math between 80 and 90;
select * from t_students where math not between 80 and 90;
-- in 查询在一个指定范围内的成员
select * from t_students;
select * from t_students where id in (1,2,3,4,1001);
select * from t_students where id = 1 or id = 2 or id = 3 or id = 4 or id = 1001;
-- 4. 查询一班和二班的同学信息
select * from t_students where class in ('一班','二班');
-- not in
-- 查询不是一班和二班的同学信息
select * from t_students where class not in ('一班','二班');
-- like
-- 模糊查询
-- % 表示通配
-- _表示占位
select * from t_students;
select * from t_students where name like "%黄%";
select * from t_students where name like "黄%";
select * from t_students where name like "黄_";
-- 例如百度这样的搜索引擎,不是使用模糊查询来查的,为什么呢?因为效率太低了
-- ES lucense Solr
-- not like
select * from t_students where name not like "黄%";
-- 查询 t_students 表中的不同班级名
select distinct(class) from t_students;
select distinct(class),name from t_students;
-- 查询 t_students 表中第3到第5条记录;
select * from t_students limit 2,3;
-- 查询前三条记录
select * from t_students limit 3;
-- 对单列进行排序
select * from t_students order by chinese asc;
select * from t_students order by chinese desc;
select * from t_students order by chinese desc limit 1;
-- 对多列进行排序
-- 按照语文成绩从高到低排序,如果语文成绩一样,按照数学成绩,从高到低排序
select * from t_students order by chinese desc,math asc;
-- 如:对数学单科成绩从低到高进行排序。
select * from t_students order by math asc;
-- 如:对语文降序,数学升序,外语降序排序。
select * from t_students order by chinese desc,math asc,english desc;
-- 查询总成绩前三名同学的信息。
select * from t_students order by (chinese+math+english) desc limit 3;
-- 查询总成绩信息
select * from t_students;
select name,chinese+english+math from t_students;
select * from
(select name as '名字',chinese+english+math as '总成绩' from t_students) as user;
select name '名字',chinese+english+math '总成绩' from t_students;
create table student (
id int,
name varchar(20),
class varchar(10)
)character set utf8;
insert into student values (1,"刘备",'一班');
insert into student values (2,"关羽",'一班');
insert into student values (3,"张飞",'一班');
insert into student values (4,"大乔",'二班');
insert into student values (5,"小乔",'二班');
insert into student values (6,"孙尚香",'二班');
insert into student values (7,"曹操",'三班');
insert into student values (8,"曹丕",'三班');
insert into student values (9,"荀彧",'三班');
select * from student;
select class,group_concat(id),group_concat(name) from student group by class;
alter table student add score int;
-- max
select max(score) from student;
-- 求各个班级的最高分
select class,max(score) from student group by class;
-- min
select min(score) from student;
-- 求各个班级的最低分
select class,min(score) from student group by class;
-- sum 求和
select sum(score) from student;
-- 各个班级的总分
select class,sum(score) from student GROUP BY class;
-- 计数 count
select count(*) from student;
-- 求各个班级有多少个学生
select count(*),class from student group by class;
-- avg 平均值
select avg(score) from student;
-- 求各个班级的平均分
select class,avg(score) from student group by class;
select * from student;
select class,count(*) from student group by class;
-- 对于分组之后的结果过滤,我们要使用having关键字
-- 对于分组之前的原始表中的数据进行过滤,我们要使用where关键字
select class,count(*) as count from student group by class having count > 2;
select * from t_students;
-- 查询每个同学的总成绩,平均成绩,并用别名表示;
select name,(chinese+english+math) as '总成绩',(chinese+english+math)/3 as '平均成绩' from t_students;
-- 查询数学最大值,并用别名表示;
select max(math) as '数学最高分' from t_students;
-- 查询外语最小值,并用别名表示;
select min(english) as '英语最低分' from t_students;
-- 查询全体学生的语数外各科平均成绩,并用别名表示
select avg(chinese) as '语文平均分',avg(math) as '数学平均分',avg(english) as '英语平均分' from t_students;
补充 枚举类型
public enum OrderStatus {
// 枚举类型不可以创建实例对象
// 定义好枚举类型的实例对象
NOT_PAYED(1,"未支付"),
PAYED(2,"已支付"),
CANCEL(3,"取消")
;
int id;
String desc;
OrderStatus(int id, String desc) {
this.id = id;
this.desc = desc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
的结果过滤,我们要使用having关键字
– 对于分组之前的原始表中的数据进行过滤,我们要使用where关键字
select class,count(*) as count from student group by class having count > 2;
select * from t_students;
– 查询每个同学的总成绩,平均成绩,并用别名表示;
select name,(chinese+english+math) as ‘总成绩’,(chinese+english+math)/3 as ‘平均成绩’ from t_students;
– 查询数学最大值,并用别名表示;
select max(math) as ‘数学最高分’ from t_students;
– 查询外语最小值,并用别名表示;
select min(english) as ‘英语最低分’ from t_students;
– 查询全体学生的语数外各科平均成绩,并用别名表示
select avg(chinese) as ‘语文平均分’,avg(math) as ‘数学平均分’,avg(english) as ‘英语平均分’ from t_students;
## 补充 枚举类型
```java
public enum OrderStatus {
// 枚举类型不可以创建实例对象
// 定义好枚举类型的实例对象
NOT_PAYED(1,"未支付"),
PAYED(2,"已支付"),
CANCEL(3,"取消")
;
int id;
String desc;
OrderStatus(int id, String desc) {
this.id = id;
this.desc = desc;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}