学习Python的日子MYSQL操作(2)

MySQL
查询单列数据
select name from students
查询所有列的数据
select * from students
去重查询单列
去重只能显示能去重的那一列
select distinct gender from students;
如果查去重所有的,没办法显示去重的效果
select distinct * from  students
条件查询where
①、比较运算符
> < = >= <=  !=
②、逻辑运算符
and  or  not
③、模糊查询
like     _和%
④、范围内查找
连续和不连续  between  in
⑤、空判断查找
is null     is not null
聚合查询
对某一列数据进行统计
count(列名)         求某一列的总行数   count(*) |count(列名)
sum(数字列名)    求某一列的和
avg (数字列名)    求某一列的平均值
max  (列名)         求某一列的最大值
min(列名)           求某一列的最小值
分组  group by
分组是为了更好的去做聚合而出现的,把列的值相同的归为一组
根据一个字段分组之后,无法看到别的字段信息
根据id 字段分组之后,可以查看到分组后其它的字段信息
分组条件筛选having
group by 存在时,select中除了聚集函数外,所有的基本列必须是group by里面存在的;having基本上同group by一起使用的,having类似于where语句,只是having过滤是基于group by 分组后的数据,having一般通过select语句里面的聚集函数进行过滤。
排序  order by  [列1],[列2]
先按照列1去排序,默认是按照asc排序(正序),如果要倒序,在后面加desc。
按照列1排序完成后,如果有顺序相同的,再按照列2进行排序。
Select *from students order by age desc,name  asc;
desc 倒序
asc 正序
限制集(分页)  limit   [start] , [count]
每页显示m条数据,当前显示第n页
查询总条数p1
使用p1除以m得到p2
如果整除则p2为总数页
如果不整除则p2+1为总页数
求第n页的数据
select * from students
where isdelete=0
limit (n-1)*m,m
关系表(多表)
关系:     1对1     1对多     多对多
AB表1对1                      A   ——》  B       1:1
                  B   ——》  A       1:1
AB表1对多                       A   ——》  B       1:1
       B   ——》  A       1:多
AB表多对多                       A    ——》B        1:多
       B    ——》A         1:多
关系怎么表示:  关系字段(外键)
关系表的创建
先创建表和关系字段,再对关系字段添加约束(了解)
alter  table scores add  constraint stu_score  foreign key(stuid)  references students(id);
级联操作的类型包括
使用方法
foreign key(subid) references subjects(id)on delete cascade
restrict(限制):默认值,抛异常
cascade(级联):如果主表的记录删掉,则从表中相关联的记录都将被删除
set null:将外键设置为空
no action:什么都不做
上面这四种方案都不是最好的,最好的还是,推荐使用逻辑删除
创建表的时候创建关系字段和外键约束
mysql> create table scores(
    -> id int auto_increment primary key not null,
    -> score decimal(5,2),
    -> stuid int,
    -> subid int,
    -> is_delete bit default 0,
    -> foreign key(stuid) references students(id),
    -> foreign key(subid) references subjects(id));
关系表的查询
子查询
查询赵丽颖Python的分数
1、select id from students where name = '赵丽颖'
2、select id from subjects where name = 'python';
3、select score from scores where stuid = (select id from students where name = '赵丽颖')and subid =(select id from subjects where name = 'python');
内连接
select students.name as 姓名,subjects.name as 科目,scores.score as 分数 from  scores inner join students on students.id = scores.stuid
inner join subjects on subjects.id = scores.subid;
select students.name as 姓名,subjects.name as 科目,scores.score as 分数 fromstudents inner join scores on scores.stuid = students.id 
inner join subjects on scores.subid = subjects.id;
select students.name,subjects.name,scores.score from subjects
     inner join scores on scores.subid = subjects.id
     inner join students on students.id = scores.stuid;
左连接
select students.name,scores.score from 
    -> students left join scores on students.id = scores.stuid;
右连接
select students.name,scores.score from scores
    -> right join students on students.id = scores.stuid;

猜你喜欢

转载自blog.csdn.net/qq_42240071/article/details/80487028
今日推荐