|
楼主 |
发表于 2020-4-8 23:35:10
|
显示全部楼层
Linux的基本操作差不多看完了,又返回去联系了一下不熟练的数据库,数据库的内容也只是看了一点,还有很多没学,今天复习了之前学的内容
进行练习 练习的内容也是从网上找的 下午没课,几乎是用了一个下午才,照着教程操作了一次 (发现了一个很好用的软件typora )
首先准备数据:
-- 创建数据库 create database python_test_1 charset=utf8;
-- 使用数据库 use python_test_1;
-- 创建学生表
create table students( id int unsigned primary key auto_increment not null, name varchar(20) default '', age tinyint unsigned default 0, height decimal(5,2), gender enum('男','女','中性','保密') default '保密', cls_id int unsigned default 0, is_delete bit default 0 );
-- 创建班级表
create table classes ( id int unsigned auto_increment primary key not null, name varchar(30) not null );
-- 向学生表中插入数据 insert into students values (0,'张三',18,180.00,2,1,0), (0,'李四',18,180.00,2,2,1), (0,'王五',29,185.00,1,1,0), (0,'赵六',59,175.00,1,2,1), (0,'冯远征',38,160.00,2,1,0), (0,'金星',28,150.00,4,2,1), (0,'王刚',18,172.00,2,1,1), (0,'周杰伦',36,NULL,1,1,0), (0,'曹操',27,181.00,1,2,0), (0,'刘备',25,166.00,2,2,0), (0,'孙权',33,162.00,3,3,1), (0,'周瑜',12,180.00,2,4,0), (0,'鲁肃',12,170.00,1,4,0), (0,'马超',34,176.00,2,5,0);
-- 向班级表中插入数据 insert into classes values(0,'python_01'),(0,'python_02');
-- 数据准备就绪,开始查询 -- 查询编号大于3的同学 select * from students where id>3;
-- 查询编号不大于3的同学 select * from students where id<=3;
-- 查询姓名不是张三的同学 select * from students where name!='张三'
-- 查询编号大于3的男同学 select * from students where id>3 and gender='男';
-- 查询编号大于2或者没被删除的同学 select * from students where id>2 or is_delete=0;
-- 查询姓李的学生 select * from students where name like '李%';
-- 查询姓张且名字是一个字的学生 select * from students where name like '张_';
-- 查询姓马或者名字是超的学生 select * from students where name like '马%' or name like '%超';
-- 查询编号是1或3或5的学生 -- in表示在一个非连续的范围内
select * from students where id in(1,3,5);
-- between ... and ...表示在一个连续的范围内 -- 查询编号为3到8的学生 select * from students where id between 3 and 8;
-- 查询编号是3到8的男生 -- between A and B在匹配数据的时候匹配的范围空间是 [A,B] select * from students where (id between 3 and 8) and gender='男';
-- is null表示判断为空 -- 查询没有填写身高的学生 select * from students where height is null;
-- 判非空is not null -- 查询填写了身高的学生 select * from students where height is not null;
-- order by 排序查询 -- 排序的语法规则:select * from 表名 order by 列1 asc | desc, 列2 asc | desc, ...
-- 查询未删除男生信息,按学号降序 select * from students where gender='男' and is_delete=0 order by id desc;
-- 查询未删除学生信息,按名id升序 select * from students where is_delete=0 order by id asc;
-- 显示所有的学生信息,先按照年龄从大-->小排序,当年龄相同时 按照身高从高到低排序 select * from students where order by age desc, height desc;
-- 分页查找
-- 分页查找格式 -- select * from 表名 limit start=0,count;
-- 查询前3行男孩信息 select * from students where gender=1 limit 0,3;
-- 聚合函数 -- 查询学生总数 select count(*) from students;
-- max(列) 表示求此列的最大值 -- 查询女生的编号最大值 select max(id) from students where gender=2;
-- min(列) 表示求此列的最小值 -- 查询未删除的学生最小编号 select min(id) from students where is_delete=0;
-- sum(列) 表示求此列的和 -- 查询男生的总年龄 select sum(age) from students where gender=1;
-- avg(列) 表示求此列的平均值 -- 查询未删除女生的编号平均值 select avg(id) from students where is_delete=0 and gender=2;
-- 分组查询 -- 需求:先查出学生表,在将学生表以性别进行分组
查出所有学生
select * from students;
按gender字段来进行分组查询
select gender from students group by gender;
-- 根据分组结果,使用group_concat()存放每一个分组中某字段的集合 -- 需求:根据性别字段,列出性别所对应姓名的结合 select gender,group_concat(name) from students group by gender;
-- 聚合函数在和group by结合使用的时候 统计的对象是每一个分组 -- 分别统计性别为男/女的人年龄平均值 select gender,avg(age) from students group by gender;
-- 分别统计性别为男/女的人的个数 select gender,count(*) from students group by gender;
-- 连接查询 -- 连接查询语法 -- select * from 表1 inner或left或right join 表2 on 表1.列 运算符 表2.列
-- 使用内连接查询班级表与学生表 select * from students inner join classes on students.cls_id = classes.id;
-- 使用左连接查询班级表与学生表 select * from students left join classes on students.cls_id = classes.id;
-- 使用右连接查询班级表与学生表 select * from students right join classes on students.cls_id = classes.id;
然后准备文档
-- 创建名为python_test_1的数据库 create database python_test_1 charset=utf8;
-- 使用python_test_1数据库 use python_test_1;
-- 创建students学生表 create table students( id int unsigned primary key auto_increment not null, name varchar(20) default '', age tinyint unsigned default 0, height decimal(5,2), gender enum('男','女', '中性', '保密'), cls_id int unsigned default 0, is_delete bit default 0 );
-- 创建classes班级表 create table classes( id int unsigned primary key auto_increment not null, name varchar(30) not null );
| Field | Type | Null | Key | Default | Extra | +-----------+-------------------------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(20) | YES | | | | | age | tinyint(3) unsigned | YES | | 0 | | | height | decimal(5,2) | YES | | NULL | | | gender | enum('男','女','中性','保密') | YES | | NULL | | | cls_id | int(10) unsigned | YES | | 0 | | | is_delete | bit(1) | YES | | b'0' | | +-----------+-------------------------------------+------+-----+---------+----------------+
-- 向学生表中插入数据 insert into students values (0,'张三',18,180.00,2,1,0), (0,'李四',18,180.00,2,2,1), (0,'王五',29,185.00,1,1,0), (0,'赵六',59,175.00,1,2,1), (0,'冯远征',38,160.00,2,1,0), (0,'金星',28,150.00,4,2,1), (0,'王刚',18,172.00,2,1,1), (0,'周杰伦',36,NULL,1,1,0), (0,'曹操',27,181.00,1,2,0), (0,'刘备',25,166.00,2,2,0), (0,'孙权',33,162.00,3,3,1), (0,'周瑜',12,180.00,2,4,0), (0,'鲁肃',12,170.00,1,4,0), (0,'马超',34,176.00,2,5,0);
-- 向班级表中插入数据
-- 数据准备就绪,开始查询 -- 查询编号大于3的同学 select * from students where id>3;
-- 查询编号不大于3的同学 select * from students where id<=3;
-- 查询姓名不是张三的同学 select * from students where name!='张三';
-- 查询编号大于3的男同学 select * from students where id>3 and gender='男';
-- 查询编号大于2或者没被删除的同学 select * from students where id>2 or is_delete=0;
-- 查询姓李的学生 select * from students where name like '李%';
-- 查询姓张且名字是一个字的学生 select * from students where name like '张_';
-- 查询姓马或者名字是超的学生 select * from where name like '马%' or name like '%超';
-- 查询编号是1或3或5的学生 -- in表示在一个非连续的范围内 select * from students where id in(1,3,5);
-- between ... and ...表示在一个连续的范围内 -- 查询编号为3到8的学生 select * from students where id between 3 and 8;
-- 查询编号是3到8的男生 -- between A and B在匹配数据的时候匹配的范围空间是 [A,B]
-- is null表示判断为空 -- 查询没有填写身高的学生 select * from students where height is null;
-- 判非空is not null -- 查询填写了身高的学生 select * from students where height is not null;
-- 当有数据重复时,可使用distinct对重复数据进行去重 -- 对性别进行去重 select distinct gender from students;
-- order by 排序查询 -- 排序的语法规则:select * from 表名 order by 列1 asc | desc, 列2 asc | desc, ...
-- 查询未删除男生信息,按学号降序 select * from students where is_delete=0 order by id desc;
-- 查询未删除学生信息,按名id升序 select * from students where is_delete=0 order by id asc;
-- 显示所有的学生信息,先按照年龄从大-->小排序,当年龄相同时 按照身高从高到低排序 select * from students order by age desc,height desc;
-- 分页查询 -- 查询前3行男同学信息 select * from students where gender=1 limit 0,3;
-- 聚合函数 -- 查询学生总数 select count(*) from students;
-- max(列) 表示求此列的最大值 -- 查询女生的编号最大值 select max(id) from students where gender=2;
-- min(列) 表示求此列的最小值 -- 查询未删除的学生最小编号 select min(id) from students where is_delete=0;
-- sum(列) 表示求此列的和 -- 查询男生的总年龄 select sum(age) from students where gender=1;
-- avg(列) 表示求此列的平均值 -- 查询未删除女生的编号平均值 select avg(id) from students where is_delete=2 and gender=2;
-- 分组查询 -- 需求:先查出学生表,在将学生表以性别进行分组
查出所有学生
select * from students;
按gender字段来进行分组查询
select gender from students group by gender;
-- 根据分组结果,使用group_concat()存放每一个分组中某字段的集合 -- 需求:根据性别字段,列出性别所对应姓名的结合 select gender,group_concat(name) from students group by gender;
-- 聚合函数在和group by结合使用的时候 统计的对象是每一个分组 -- 分别统计性别为男/女的人年龄平均值 select gender,avg(age) from students group by gender;
-- 在最后新增一行,来记录当前表中该字段对应的操作结果,一般是汇总结果 -- 分别统计性别为男/女的人的个数 select gender,count(*) from students group by gender with rollup;
-- 连接查询 -- 连接查询语法 -- select * from 表1 inner或left或right join 表2 on 表1.列 运算符 表2.列
-- 查询结果是返回两个表的交集 -- 使用内连接查询班级表与学生表 select * from students inner join classes on students.cls_id=classes.id;
-- 使用左连接查询班级表与学生表 select * from students left join classes on students.cls_id=classes.id;
-- 使用右连接查询班级表与学生表 select * from students right join classes on students.cls_id=classes.id;
下面是原始数据:
- 创建数据库
create database python_test_1 charset=utf8;
-- 使用数据库
use python_test_1;
-- students表
create table students(
id int unsigned primary key auto_increment not null,
name varchar(20) default '',
age tinyint unsigned default 0,
height decimal(5,2),
gender enum('男','女','中性','保密') default '保密',
cls_id int unsigned default 0,
is_delete bit default 0
);
-- classes表
create table classes (
id int unsigned auto_increment primary key not null,
name varchar(30) not null
);
-- 向students表中插入数据
insert into students values
(0,'张三',18,180.00,2,1,0),
(0,'李四',18,180.00,2,2,1),
(0,'王五',29,185.00,1,1,0),
(0,'赵六',59,175.00,1,2,1),
(0,'冯远征',38,160.00,2,1,0),
(0,'金星',28,150.00,4,2,1),
(0,'王刚',18,172.00,2,1,1),
(0,'周杰伦',36,NULL,1,1,0),
(0,'曹操',27,181.00,1,2,0),
(0,'刘备',25,166.00,2,2,0),
(0,'孙权',33,162.00,3,3,1),
(0,'周瑜',12,180.00,2,4,0),
(0,'鲁肃',12,170.00,1,4,0),
(0,'马超',34,176.00,2,5,0);
-- 向classes表中插入数据
insert into classes values (0, "python_01期"), (0, "python_02期"); |
|