精品面试题_07--SQL语句的应用

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;

猜你喜欢

转载自blog.csdn.net/weixin_44850984/article/details/89761270