数据库面试题+sql语句解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 数据库面试题+sql语句解析

面试题1 (建表数据也有)


以下为某外卖公司的用户订单表、商户DB表、请写出一下问题的sql语句。

1、1月每笔消费均大于20元的用户的总消费金额


2、1月只吃了麻辣烫和汉堡的人数


3、计算每个人bd_name的BD对应门店的销售额

create table t_user(
  uid varchar(10) not null comment '用户ID',
  order_time timestamp null comment '下单时间',
  order_category varchar(20) not null comment '类型',
  order_amt float not null default '0.00' comment '价格',
  shop_id varchar(10) not null comment '商铺ID'
)comment '用户信息表';
create table t_shop(
  shop_id varchar(10) not null comment '商铺ID',
  bd_name varchar(10) not null comment '销售经理',
  bd_team varchar(10) not null comment '销售团队',
  start_time varchar(10) not null comment '开始时间',
  end_time varchar(10) not null comment '结束时间'
)comment '商铺信息表';
insert into t_shop(shop_id,bd_name,bd_team,start_time,end_time) values
('ZL123','小明','销售A组','2018-01-01','2018-01-14'),
('ZL123','小张','销售B组','2018-01-15','2099-12-31'),
('SM456','小张','销售B组','2016-01-01','2019-01-14'),
('HBW123','小李','销售C组','2015-01-01','2020-12-31'),
('XM456','小李','销售C组','2015-01-01','2016-01-14');
insert into t_user(uid,order_time,order_category,order_amt,shop_id) values
('A123','2018-01-01 12:34:00','麻辣烫',25.30,'ZL123'),
('A123','2018-01-06 12:34:00','粥',34.20,'SM456'),
('B456','2018-01-15 12:34:00','麻辣烫',25.30,'ZL123'),
('B456','2018-01-25 12:34:00','汉堡',36.30,'HBW123'),
('C789','2018-02-01 12:34:00','小龙虾',19.80,'XM456');
select * from t_user;
select * from t_shop; 
#1月每笔消费均大于20元的用户的总消费金额
#条件:1月+大于20+
select month(now()) from daul;
select round(sum(order_amt),2) from t_user where month(order_time)=1
and order_amt>20;
#1月只吃了麻辣烫和汉堡的人数
#条件:1月+('麻辣烫' and '汉堡')
select count(uid) from t_user where month(order_time)=1 and order_category in ('麻辣烫','汉堡');
#计算每个人bd_name的BD对应门店的销售额
select s.shop_id,round(sum(u.order_amt),2) from t_user u,t_shop s where
u.shop_id=s.shop_id GROUP BY s.shop_id;
select shop_id,round(sum(order_amt),2)from t_user GROUP BY shop_id;


面试题2


1.写出表Department增加一条记录 和 更新一条记录的 SQL语句

增加记录值 (‘12’, ‘研发部’, ‘张三’) ;

更新 dept_id=’12’的记录 (‘12’, ‘研发部’, ‘张三新’) ;


2.需要给表Department增加一列字段notes,长度为10的字符串,默认值为‘0’ , 请写出相关SQL语句


3.查找工资大于2000元的员工记录,并按员工号id升序排列


4.查找工资大于2000元的员工所在部门、部门编号、部门经理、员工名称


5.查找张三和李四所在部门所有人员的姓名


6、查看每个部门的部门经理和部门人数,按部门人数排序?


7、删除表Department中的所有记录


8、删除表Department

Create Table Department(
dept_id varchar(2) not null comment '部门编号',
dept_name varchar(20) not null comment '部门名称',
dept_leader varchar(10) comment '部门经理'  
)comment '部门表';
Create Table Personnel(
id varchar(4) not null comment '员工号',       
name varchar(10) not null comment '姓名',      
dept_id varchar(2) not null comment '部门编号',   
age integer comment '年龄',                   
gzsj date comment '参加工作时间',                     
technical_post varchar(10) comment '职称',   
salary integer comment '薪水'                
)comment '员工表';
select * from Department;
select * from Personnel;
#1写出表Department增加一条记录 和 更新一条记录的 SQL语句
#增加记录值 ('12', '研发部', '张三') ; 
#更新 dept_id='12'的记录 ('12', '研发部', '张三新') ;
insert into Department(dept_id,dept_name,dept_leader) values('12','研发部','张三');
insert into Department(dept_id,dept_name,dept_leader) values('13','研发部','李四');
insert into Department(dept_id,dept_name,dept_leader) values('14','研发部','王五');
insert into Department(dept_id,dept_name,dept_leader) values('15','研发部','赵六');
update Department set dept_leader='张三发' where dept_leader='张三';
#2需要给表Department增加一列字段notes,长度为10的字符串,默认值为‘0’ , 请写出相关SQL语句
alter table Department add notes varchar(10) default 0;
#3查找工资大于2000元的员工记录,并按员工号id升序排列
insert into Personnel(id,name,dept_id,age,technical_post,salary) values
('1','小明','12',23,'技术总监',12000),
('2','小张','13',18,'项目经理',10500),
('3','小胡','14',20,'产品经理',20000),
('4','小李','15',21,'执行总裁',30000);
select * from Personnel where salary>2000 order by id;
#4查找工资大于2000元的员工所在部门、部门编号、部门经理、员工名称
select d.dept_name,d.dept_id, d.dept_leader,p.name from Personnel p inner join Department d on p.dept_id=d.dept_id where p.salary>2000;
#5查找张三和李四所在部门所有人员的姓名
select name from Personnel where name ='张三' and name='李四';
select name from Personnel where dept_id in(select dept_id from Personnel where name ='张三' and name='李四');
#6查看每个部门的部门经理和部门人数,按部门人数排序?
select d.dept_leader,count(p.id) from Department d left outer join Personnel p on p.dept_id=d.dept_id group by d.dept_leader order by count(p.id);
#7删除表Department中的所有记录
delete from Department;
#8删除表Department
drop table Department;


面试题3


利用Oracle的case函数,用一句sql查询得到如下结果

1显示每个部门的男生人数、女生人数和总人数


2显示每个部门的男生人数、女生人数和总人数,且该部门的额女生人数>=1,且按部门标号降序排序

drop table kingstar;
select * from kingstar;
create table kingstar(
  dept_no char(4),
  person_no int,
  sex char(1),
  salary decimal(19,4)
);
insert into kingstar(dept_no,person_no,sex,salary) values('H001',1210,'M',1234.00);
insert into kingstar(dept_no,person_no,sex,salary) values('H001',1211,'f',900.00);
insert into kingstar(dept_no,person_no,sex,salary) values('H002',1212,'f',3000.00);
insert into kingstar(dept_no,person_no,sex,salary) values('H002',1213,'M',4500.00);
insert into kingstar(dept_no,person_no,sex,salary) values('H003',1214,'M',6394.00);
insert into kingstar(dept_no,person_no,sex,salary) values('H003',1215,'f',7900.00);
insert into kingstar(dept_no,person_no,sex,salary) values('H004',1216,'M',2300.00);
insert into kingstar(dept_no,person_no,sex,salary) values('H004',1217,'M',3400.00);
insert into kingstar(dept_no,person_no,sex,salary) values('H005',1218,'M',3200.00);
#1显示每个部门的男生人数、女生人数和总人数
select dept_no,
sum(case when sex = 'M' then 1 else 0 end)男生人数,
sum(case  when sex = 'f' then 1 else 0 end)女生人数,
count(*)总人数
from kingstar GROUP BY dept_no;
#2显示每个部门的男生人数、女生人数和总人数,且该部门的额女生人数>=1,且按部门标号降序排序
select dept_no,
sum(case when sex = 'M' then 1 else 0 end)男生人数,
sum(case when sex = 'f' then 1 else 0 end)女生人数,
count(*)总人数
from kingstar GROUP BY dept_no having sum(case when sex = 'f' then 1 else 0 end)>=1 ORDER BY dept_no desc;


面试题4


使用scott/tiger用户下的emp表和dept表完成下列练习题。

1列出薪资高于公司平均薪资的所有员工


2列出薪资高于在部门30工作的所有员工的薪金的员工姓名和薪金


3列出在每个部门工作的员工数量,平均工资和平均服务期限

#发现avgTime,在看看表中的数据,原来sum(avg_time)只是简单的把字符串去掉特殊字符后的结果相加而已。


4列出所有部门的详细信息和部门人数


5列出各种工作的最低工资


6列出各个部门MANAGER(经理)的最低薪金


#1列出薪资高于公司平均薪资的所有员工
select * from emp where sal in(select(sal) from emp);
#2列出薪资高于在部门30工作的所有员工的薪金的员工姓名和薪金
select e.ename,e.sal,d.dname from emp e join dept d on e.deptno = d.deptno where e.sal > (select max(sal) from emp where deptno=30);
#3列出在每个部门工作的员工数量,平均工资和平均服务期限
#发现avgTime,在看看表中的数据,原来sum(avg_time)只是简单的把字符串去掉特殊字符后的结果相加而已。
select d.deptno, count(e.ename) as total_emp, ifnull(avg(sal), 0) as avgsal,ifnull(avg((TO_DAYS(NOW())-TO_DAYS(e.hiredate))/365),0) as avgTime from emp e right join dept d on e.deptno = d.deptno GROUP BY d.deptno;
#4列出所有部门的详细信息和部门人数
select d.*, count(e.ename) from emp e right join dept d on e.deptno = d.deptno GROUP BY d.deptno,d.dname,d.loc;
#5列出各种工作的最低工资
select job,min(sal) 最低工资 from emp GROUP BY job;
#6列出各个部门MANAGER(经理)的最低薪金
select deptno,min(sal) from emp where job='MANAGER' GROUP BY deptno;
相关文章
|
26天前
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
71 2
|
4天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
26 11
|
8天前
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
|
1月前
|
架构师 数据库
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
|
18天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
16天前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
19天前
|
Java 程序员
面试官的加分题:super关键字全解析,轻松应对!
小米,29岁程序员,通过一个关于Animal和Dog类的故事,详细解析了Java中super关键字的多种用法,包括调用父类构造方法、访问父类成员变量及调用父类方法,帮助读者更好地理解和应用super,应对面试挑战。
34 3
|
26天前
|
SQL 存储 Oracle
南大通用GBase 8s数据库游标变量解析:提升数据库操作效率
南大通用GBase 8s 数据库游标变量解析:提升数据库操作效率
|
26天前
|
SQL Java 数据库连接
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象
canal-starter 监听解析 storeValue 不一样,同样的sql 一个在mybatis执行 一个在数据库操作,导致解析不出正确对象

推荐镜像

更多