> 文章列表 > python-数据库-4

python-数据库-4

python-数据库-4

数据查询

分页(限制查询返回条数)

limit 子句

create table test(id int primary key auto_increment,name char(5),gerden varchar(2),grade double(4 , 1)
);insert into test(name , gerden , grade) values 
('刘水东','男',89),
('曹洪清','男',95),
('轻岚','男',88),
('泽瑞','男',90),
('次元','未知',91),
('尺度','女',80),
('琼野','女',76),
('亡灵','未知',81),
('陆凯','男',79),
('小豆腐','女',80.5),
('sm','女',76);-- 分页select * from 表名 where 条件 limit 返回条数;select * from test;
select * from test limit 4;select * from test where gerden='未知';
select * from test where gerden='未知' limit 1;-- select * from 表名 where 条件 limit 起点 , 返回条数;select * from test limit 1 , 4;select * from test where gerden='女';select * from test where gerden='女' limit 1 , 4;

分组

group by :根据指定的字段进行分组

-- select * from 表名 where 条件 group by 字段名(指定分组的字段名);
select * from test where gerden='女';
select * from test where gerden='男';
select * from test where gerden='未知';
select * from test group by gerden;select gerden , count(name) as num from test group by gerden;

as

as是对字段以及表取别名 , 方便后续操作 , 或者将查询得到表字段名更加有可读性

聚合筛选

having 对分组之后的数据进行筛选 , where只能操作表中的字段 ,having可以和聚合函数联合使用

注意:having必须是跟group by 一起使用(avg , max , min , sum , count)

select gerden , count(name) as num from test 
group by gerden having count(name)> 4;

子查询

在select子句中 , 嵌套另一个select语句

-- 在select子句中 , 嵌套另一个select语句
-- 子句查询得到的结果作为一个新的表交给外层的查询语句,
select * from (select * from 表名 where 条件) as 名字 where 条件;select * from t1 where gerden='男';select * from (select * from test where gerden='男')as n
where grade>90;

在where子句中 , 嵌套一个select语句

-- 在where子句中 , 嵌套一个select语句
-- 该子句查询得到的结果必须是一个确切的数据 , 不能是一个多行多列的表格,返回的结果交过外层进行条件筛选。
select * from 表名 where 条件(select * from 表名 where 条件)select * from test where name='琼野';
select grade from test where name='琼野';select * from test 
where grade>(select grade from test where name='琼野');
select max(grade) from t1;
select * from t1 where grade=(select max(grade) from t1);

表与表的关系

多表之间的关系

1、 一对一 身份证号码:一个人有且只有一个身份证号

2、一对多/多对一 一个班级可以有多个学生 个人跟出生地

3、多对多 大学生——选课 城市 —— 人

外键约束

foreign key : 建立表与表之间的某种约束关系 , 这个关系的存在 ,可以让表与表之间的数据关联性更强。

主表:被外键链接的(要有主键 , 提供给外键进行链接)

从表:设置外键约束的进行链接的表

进行设置链接或被链接的字段都设置成为主键

注意:主表必须先创建 , 才能创建从表进行外键约束

外键字段填充的数据 , 值链接主表对应字段的,相对应的数据

-- 多表
create table test(id int primary key auto_increment,name char(5)
);create table test1(id int primary key auto_increment,age int(3),class char(2),-- 创建一个字段作为外键约束-- 设置唯一约束 , 只要是让表与表之间成为一个一对一的关系test1_id int unique,foreign key (test1_id) references test(id)
);insert into test(name) values 
('刘水东'),
('曹洪清'),
('轻岚'),
('泽瑞'),
('次元'),
('尺度'),
('琼野'),
('亡灵'),
('陆凯'),
('小豆腐'),
('sm');insert into test1(age , class , t3_id) values 
(20 , '一班' , 4),
(22 , '二班' , 2),
(23 , '一班' , 9),
(24 , '三班' , 10),
(25 , '二班' , 7),
(19 , '二班' , 1),
(20 , '二班' , 6);-- 一对多、多对一
-- 在外键创建中,外键要创建在多的一方
-- 部门表
create table test2(id int primary key auto_increment,dep_name char(5),job char(5)
);-- 员工表
create table test3(id int primary key auto_increment,name char(5),test3_id int,foreign key (test3_id) references test2(id)
);insert into test2(dep_name , job) values 
('财务部' , '算钱的'),
('人力部' , '招人的'),
('教学部' , '讲课的');insert into test3(name , test3_id) values 
('阿宸' , 3),
('七零' , 3),
('小沫' , 2),
('青叶' , 1);update test2 set dep_name='行政部' where id=2;delete from test2 where dep_name='行政部';