1、数据库查询题
要求:
1) 查出“计算机系”的所有学生信息;
2) 查出“孙悟空”所在的院系信息;
3) 查出在“行政楼”办公的院系信息;
4) 查出男生女生各多少人;
5) 查出人数最多的院系信息(注意会有相同人数的情况出现);
6) 查出人数最多的院系的男女生各多少人(注意会有相同人数的情况出现);
7) 查出跟“孙悟空”同籍贯的所有人;
8) 查出有“河北”人就读的院系信息;
9) 查出跟“河北女生”同院系的所有学生的信息。
1.查出“计算机系”的所有学生信息;
select * from 学生表 as x inner join 院系表 as y on x.院系ID=y.院系ID and 院系名称='计算机系';
2.查出“孙悟空”所在的院系信息;
方法1:
select * from 院系表 where 院系ID=(select 院系ID from 学生表 where 姓名='孙悟空');
方法2:
select 院系表.* from 院系表 inner join 学生表 on 学生表.院系ID=院系表.院系ID where 姓名='孙悟空';
3.查出在“行政楼”办公的院系信息;
select 院系名称 from 院系表 where 系办地址 like '行政楼%';
4.查出男生女生各多少人;
select 性别,count(*) as c from 学生表 group by 性别;
5.查出人数最多的院系信息(注意会有相同人数的情况出现);
select * from 院系表 where 院系ID in(
select 院系ID from 学生表 group by 院系ID having count(*)=(
select count(*) from 学生表 group by 院系ID order by count(*) desc limit 1
)
);
6.查出人数最多的院系的男女生各多少人(注意会有相同人数的情况出现);
select 院系ID,性别,count(*) as 人数 from 学生表 where 院系ID in (
select 院系ID from 学生表 group by 院系ID having count(*)=(
select count(*) from 学生表 group by 院系ID order by count(*) desc limit 1
)
)group by 院系ID,性别;
7.查出跟“孙悟空”同籍贯的所有人;
select 姓名 from 学生表 where 籍贯=(
select 籍贯 from 学生表 where 姓名='孙悟空'
);
8.查出有“河北”人就读的院系信息;
方法1:
select * from 院系表 where 院系ID in(
select 院系ID from 学生表 where 籍贯='河北'
);
方法2:
select distinct y.* from 院系表 as y inner join 学生表 as x on y.院系ID=x.院系ID where 籍贯='河北';
9.查出跟“河北女生”同院系的所有学生的信息。
select * from 学生表 where 院系ID in(
select 院系ID from 学生表 where 籍贯='河北' and 性别='女'
);
2、数据库查询题
下面是数据库表CHARGE的表结构,其中有3000多万条数据。请按要求完成任务。
字段 | 数据类型 | 是否主键 | 意义 |
---|---|---|---|
Msisdn | Char(13) | Yes | 手机号码 |
UserType | Char(1) | No | 用户类型:1 神州行,2 全球通,0 其他用户 |
CallStartTime | Char(14) | No | 通话时间开始:YYYYMMDDHHMMDD |
CallOverTime | Char(14) | No | 通话时间结束:YYYYMMDDHHMMDD |
Fee | Integer | No | 本次通话费用,单位:分 |
1)写出该表的建标SQL语句。
2)请写SQL语句,创建该表三个字段(Msisdn,CallStartTime,CallOverTime)的复合索引。
3)写出一条语句,向该表里面添加一条数据。
4)请写SQL语句,将该表中“其他用户”的“本次通话费用”清零。
5)请写SQL语句,将用户类型为“全球通”且本次通话费用大于1000且小于9000的记录删除。
1.写出该表的建标SQL语句;
create table charge
(Msisdn Char(13) primary key not null,
UserType Char(1),
CallStartTime Char(14),
CallOverTime Char(14),
Fee Integer
);
2.请写SQL语句,创建该表三个字段(Msisdn,CallStartTime,CallOverTime)的复合索引;
create index i_charge_MCC on charge(Msisdn,CallStartTime,CallOverTime);
3.写出一条语句,向该表里面添加一条数据;
insert into charge value('13510108779','0','20080112080000','20080112081000',200);
4.请写SQL语句,将该表中“其他用户”的“本次通话费用”清零;
update charge set fee=0 where UserType='0';
5.请写SQL语句,将用户类型为“全球通”且本次通话费用大于1000且小于9000的记录删除。
delete from charge where UserType='0' and fee>1000 and fee<9000;