SQL-进阶1

1.分组查询:将查询结果按照一个或者多个字段进行分组,字段值相同的为一组。(单独使用时,只显示每一组的第一条记录)

                    select department from student3 group by department	;

展示分组中指定字段的内容:
select gender, group_concat(name) from student3 group by gender;
select name,gender from student3 group by gender,name;(对两个字段进行分组)
select gender,group_concat(salary) ,avg(salary)from student3 group by gender;(查看每个性别下的平均工资)
– 查询每种性别以及每种性别下的人数
select gender ,group_concat(name ),count() from student3 group by gender;
– 查询每种性别的名称以及每种性别下工资大于50的人数
select gender,group_concat(salary),count(
) from student3 where salary>50 group by gender;(先查询条件,再分组,最后统计数量)

              ***select后面的字段一般都会跟在group by后面**
              * **group_concat():**分组后,根据分组结果,显示每一组中某个字段的集合,前面一般有逗号。

group by + having:用来分组查询后指定一些条件来输出查询结果
(作用与where一样,但仅用于group by 中)
(having是在分组后对数据进行过滤,它后面还可以使用一些聚合函数)

– 查询工资总和大于1200的部门
首先,查询部门分类:select department from student3 group by department ;
其次,查询各部门工资总和:select department,group_concat(salary),sum(salary) from student3 group by department;
最后,查询工资总和大于1200的部门:select department,group_concat(salary),sum(salary) from student3 group by department having sum(salary)>1200;

– 查询工资大于1000且工资总和大于1200的部门名称以及工资和
首先,查询工资大于1000的人: select department from student3 where salary>2000;
其次,显示各部门的工资: select department ,group_concat(salary) from student3 where salary>2000 group by department;
然后求各分组部门薪资总和: select department ,group_concat(salary) ,sum(salary) from student3 salary>2000 group by department;
最后查询工资大于1000且工资总和大于1200的部门名称以及工资和: select department ,group_concat(salary) ,sum(salary) from student3 salary>2000 group by department having sum(salary)>3000000;

*如果需要排序,直接在后面增加语句: order by sum(salary) desc;

2.语法书写顺序
select--------from-------where----------group by------------having-----------order by----------limit

语句执行顺序:
from---------where-------group by-------having----------select---------order by-------limit
(先从表中找到满足条件的数据,再分组得出一组数据,对得出的数据再进行筛选,把最终数据排序,从里面取出几条)

3.limit:从哪一行开始查,总共要查几行(*角标是从0开始的
limit 参数,参数2(参数一表示从哪一条开始查询,参数二表示一共查询多少条)

可以实现分页操作:limit 0,10
limit 10,10
limit 20,10
limit 30,10等等
思路: int curentpage=1;(当前页)
int pagesize=10;(每页多少条数据)
select * from student3 limit (curpage-1)*pagesize , pagesize;

4.数据完整性
保证用户输入数据库中的数据在保存时是正确的
方法: 在一开始创建表时,添加一些约束
分类:
实体完整性:数据库的一行=一条记录=一个实体
用于标识每一行数据不重复,是一种行级约束。
分类:主键约束;唯一约束;自动增长列
主键约束:每个表都有一个主键字段,数据唯一,且不能为null
法一:create table student1(id int primary key,name varchar,age int);
法二:create table student5 (id bigint, name varchar(50), age int, primary key(id));
法三:先创建表,再添加主键
create table new2(id bigint,name varchar(50));
alter table new2 add constraint primary key(id);
建立联合主键:create table person2 (id bigint,number bigint,name varchar(50),primary key(id,number));
域完整性
引用完整性

出现的错误:当使用varchar时,一般加括号,即正确使用方式:name varchar(50)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值