JAVA企业面试题精选 数据库31-40
1.31.两个表情况如下:
表名:wu_plan
ID plan model corp_code plannum prixis
1 00001 exx22 nokia 2000 0
2 00002 lc001 sony 3000 0
表名:wu_bom
ID plan pact amount
1 00001 aa1 300
1 00001 aa2 200
3 00002 bb1 500
4 00002 bb2 800
5 00002 bb3 400
查询这两个表中plan唯一,每一个plan中,amount最少的,plannum大于prixis的记录.结果为:
ID plan model corp_code plannum prixis pact amount
1 00001 exx22 nokia 2000 0 aa2 200
2 00002 lc001 sony 3000 0 bb3 400
参考答案:
在Oracle数据库中,创建测试表和测试数据,代码如下所示:
CREATE TABLE wu_bom(id number(20),plan varchar2(20),pact varchar2(20),amount number(11)
);insert into wu_bom(id,plan,pact,amount) values(1,'00001','aa1',300);
insert into wu_bom(id,plan,pact,amount) values(2,'00001','aa2',200);
insert into wu_bom(id,plan,pact,amount) values(3,'00002','bb1',500);
insert into wu_bom(id,plan,pact,amount) values(4,'00002','bb2',800);
insert into wu_bom(id,plan,pact,amount) values(5,'00002','bb3',400);CREATE TABLE wu_plan(id number(20),plan varchar2(20),model varchar2(20),corp_code varchar2(20),plannum number(11),prixis number(11)
);insert into wu_plan(id,plan,model,corp_code,plannum,prixis) values(1,'00001','exx22','nokia',2000,0);
insert into wu_plan(id,plan,model,corp_code,plannum,prixis) values(2,'00002','lc001','sony',3000,0);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
查询这两个表中plan唯一,每一个plan中,amount最少的,plannum大于prixis的记录,SQL语句如下所示:
select A.*,B.pact,B.minamount as amount from wu_plan A,
(select plan,max(pact) pact,min(amount) as minamount from wu_bom group by plan) B where A.plan=B.plan and A.plannum>A.prixis;
- 1
- 2
1.32.数据库方面:
create table tb1 threat(pk_threat_id int unsigned not null auto_increment,dt_log_time datetime, //发生时间i_severity int, //严重程度i_device_id int, //设备idstr_tr_type varchar(64), //告警类型str_tr_name varchar(256), //类型名称i_work_id int unsigned, //工单iddt_complete_time datetime, //完成时间i_status tinyint default 0 comment '0-新分派,1-重新激活,2-完成',//告警状态primary key (pk_threat_id)
);create table tb1_work(pk_work_id int not null auto_increment,str_title varchar(256), //工单名称i_owner_org_id int unsigned, //负责人组织idi_owner_id int, //负责人iddt_dispatch_time datetime, //派单时间dt_finish_time datetime, //完成时间i_is_history tinyint default 0, //是否为历史工单dt_expect_time datetime, //期望完成时间i_in_time tinyint(1) default 0, //及时性i_priority tinyint(1) //优先级primary key (pk_work_id)
);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
ps:threat为告警,work为工单,i_severity严重程度(0代表一般,1代表低危,2代表中危,3代表高危).
1.请查出当前日期前三天发生的告警的类型名称,告警类型,发生时间,严重程度及派单时间用日期按照降序排列.
2.请查出当前日期前三天发生的告警的数量最多的告警类型及数量,数量按降序排列的前5个.
参考答案:
在MySQL数据库中,创建测试表和测试数据,代码如下所示:
insert into tb1_threat values(2,'20131028',1,1,'s','s',1,'20131029',0);
insert into tb1_threat values(3,'20131027',1,1,'s','s',1,'20131029',0);
insert into tb1_threat values(4,'20131025',1,1,'s','s',1,'20131029',0);
insert into tb1_threat values(5,'20131025',1,1,'r','r',1,'20131029',0);
insert into tb1_threat values(6,'20131027',1,1,'r','r',1,'20131029',0);
insert into tb1_threat values(7,'20131027',1,1,'r','r',1,'20131029',0);
insert into tb1_threat values(8,'20131027',1,1,'r','r',1,'20131029',0);
insert into tb1_threat values(9,'20131027',1,1,'r','r',1,'20131029',0);
insert into tb1_threat values(10,'20131027',1,1,'y','y',1,'20131029',0);
insert into tb1_work values(1,'e',1,1,'20131027','20131027',0,'20131027',0,1);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
1.查出当前日期前三天发生的告警的类型名称,告警类型,发生时间,严重程度及派单时间用日期按照降序排列,SQL语句如下所示:
select str_tr_name,str_tr_type,dt_log_time,i_severity,dt_dispatch_time
from tb1_threat thread join tb1_work work
on work.pk_work_id=thread.i_work_id
and(dt_log_time=(CURRENT_DATE-1) or dt_log_time=(CURRENT_DATE-2) or dt_log_time=(CURRENT_DATE-3)
order by dt_dispatch_time;
- 1
- 2
- 3
- 4
- 5
2.查出当前日期前三天发生的告警的数量最多的告警类型及数量,数量按降序排列的前5个,如下所示:
select * from (select str_tr_type,count(str_tr_type) quantity
from tb1 threat
where dt_log_time=(CURRENT_DATE-1) or dt_log_time=(CURRENT_DATE-2) or dt_log_time=(CURRENT_DATE-3)
group by str_tr_type) s
order by quantity desc
limit 5;
- 1
- 2
- 3
- 4
- 5
- 6
1.33.设有图书管理数据库:
图书(总编号C(6),分类号C(8),书名C(16),作者C(6),出版单位C(20),单价N(6,2).
1.检索书价在15元至25元(含15元和25元)之间的图书的书名,作者,书价和分类号,结果按分类号生序排列.
2.为图书表建立一个视图.
参考答案:
在Oracle数据库中,创建测试表和测试数据,代码如下所示:
create or replace view v book
as
select * from book;
- 1
- 2
- 3
1.34.写一个oracle函数,输入参数(字符串str,整型len,字符c)返回字符串rstr
要求:如果字符串str的长度小于len,则返回的字符串rstr为在字符串str前填充字符c达到长度为len的字符串.如果字符串str的长度大于等于len,则返回的字符串rstr为str.
参考答案:
在oracle数据库中创建get_str函数的SQL语句如下所示:
create or replace function get_str(str in varchar2,len in int,c in char) return varchar2 is Result varchar2(1000);v len int;
rsrt varchar2(1000);
beginrstr := str;v_len := length(str);if v_len < len thenwhile(v_len < len) looprstr := c||rstr;v len := v len + 1;end loop;end if;Result := rstr;return(Result);
end get_str;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
1.35.表结构如下:
1.表名:g_cardapply
字段(字段名/类型/长度):
g_applyno varchar 8; //申请单号(关键字)
g_applydate bigint 8; //申请日期
g_state varchar 2; //申请状态
2.表名:g_cardapplydetail
字段(字段名/类型/长度):
g_applyno varchar 8;//申请单号
g_name varchar 30;//申请人姓名
g_idcard varchar 18;//申请人身份证号
g_state varchar 2;//申请状态
其中,两个表的关联字段为申请单号.详细要求如下:
1.查询身份证号码为440401430103082的申请日期;
2.查询同一个身份证号码有两条以上记录的身份证号码及记录个数;
3.将身份证号码为440401430103082的记录在两个表中的申请状态改为07;
4.删除g_cardapplydetail表中的所有李姓记录.
参考答案:
在MySQL数据库中,创建测试表和测试数据的SQL语句如下所示:
create table g_cardapply(g_applyno varchar(8),g_applydate bigint(8),g_state varchar(2)
);create table g_cardapplydetail(g_applyno varchar(8),g_name varchar(30),g_idcard varchar(18),g_state varchar(2)
);insert into g_cardapply values(1,'20130909','Y');
insert into g_cardapplydetail values(1,'张三','440401430103082','01');
insert into g_cardapplydetail values(2,'张三','440401430103082','01');
insert into g_cardapplydetail values(2,'李四','440401430103083','02');
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
1.查询身份证号码为440401430103082的申请日期,SQL语句如下所示:
select apply.g_applydate
from g_cardapply apply join g_cardapplydetail detail
on apply.g_applyno=detail.g_applyno and detail.g_idcard='440401430103082';
- 1
- 2
- 3
2.查询同一个身份证号码有两条以上记录的身份证号码及记录个数,SQL语句如下所示:
select g_idcard,count(g_idcard) as xcount from g_cardapplydetail
Group by g_idcard having count(g_idcard)>=2;
- 1
- 2
3.将身份证号码为440401430103082的记录在两个表中的申请状态改为07,更新g_cardapplydetail表的SQL语句如下所示:
update g_cardapplydetail set g_state='07' where g_idcard='440401430103082';
- 1
更新g_cardapply表的SQL语句如下所示:
update g_cardapply set g_state='07';
where g_applyno in(select g_applyno
from g_cardapplydetail where g_idcard='440401430103082');
- 1
- 2
- 3
4.删除g_cardapplydetail表中的所有李姓记录,SQL语句如下所示:
delete from g_cardapplydetail where g_name like '李%';
- 1
1.36.参见如下表结构回答问题
出版社:
出版社代码 char(2),
出版社名称 varchar2(32)
图书:
图书编号 char(8),
图书名称 varchar2(128),
出版社代码 char(2),
作者代号 char(4),
图书简介 varchar2(128)
作者:
作者代号 char(4),
作者名称 varchar2(10),
性别 char(1),
年龄 number(3),
文学方向 varchar2(64)
获奖名单:
获奖日期 date,
获奖人员 char(4)
详细要求如下:
1.编写SQL语句,找出”作者”库中没有出现在”获奖名单”库中所有作者信息的SQL语句,要求使用not in,not exists以及外关联三种方法,并说明哪种方法最优.
2.”获奖名单”表,写出SQL语句,查询在上一个月获奖的人员.
参考答案:
在oracle数据库中,创建测试表和测试数据:
create table author(aid char(4),aname char(10),sex char(1)
);insert into author values('1','John','1');
insert into author values('2','Karl','0');
insert into author values('3','Foul','0');
insert into author values('4','Jell','1');create table award(adate date,aid char(4)
);insert into award values(sysdate,'1');
insert into award values((sysdate-1),'4');
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
1.当数据量比较大时not exists的方式效率较高.
使用not in的SQL语句写法如下所示:
select * from author where aid not in (select aid from award);
- 1
使用not exists的SQL语句写法如下所示:
select * from author a where not exists (select 1 from award b where b.aid=a.aid);
- 1
使用外联的SQL语句写法如下所示:
select a.*from author a left join award b on a.aid=b.aid where b.aid is null;
- 1
2.查询出在上一个月获奖的人员的SQL语句如下所示:
select a.aname from award w join author a on a.aid=w.aid
where to_char(adate,'yyyy-mm')=to_char(add_months(sysdate,-1),'yyyy-mm');
- 1
- 2
1.37.某公司信息管理系统的需求分析和部分关系模式的结果描述如下:
1.公司有多个部门,每个部门有一名负责人,一间办公室,一部电话,多名职员,每个职员最多属于一个部门,负责人也是公司一名职员.
2.数据库的部分关系模式设计如下:
职员(职员号,职工姓名,月工资,部门号,办公室,电话)
部门(部门号,部门名,负责人代码,任职时间)
请回答下述问题:
1.根据上述说明,请分别给出”职员”和”部门”关系模式的主键及外键.
2.请编写SQL语句,针对人数大于等于10的部门创建视图D_View(Dept,D_num,D_Avgpay),其中,Dept为部门号,D_num为部门人数,D_Avgpay为平均工资.
3.目前的”职员”关系模式存在什么问题?在不增加新关系模式的前提下,请给出修改后的”职员”和”部门”关系模式.
参考答案:
职员表的职员号作为主键,部门表的部门号作为主键,职员表的部门号作为外键.
针对人数大于等于10的部门创建视图D_View的SQL语句如下所示:
create or replace view D_View
as
select部门号as dept,count(职员号) as d_num,avg(月工资) as D_Avgpay from 职员表 group by 部门号 having count(职员号)>=10;
- 1
- 2
- 3
3.无法从职员表中查询出职员的领导和任职时间,修改后的关系模型如下:
职员(职员号,职工姓名,月工资,部门号,办公室,电话,负责人代码,任职时间)
部门(部门号,部门名)
1.38.请看如下数据库操作要求:
1.建一个员工信息表employee,表中id(员工代码),sex(员工性别),name(姓名),department(部门代码),address(地址),birthday(生日),postcode(邮编),salary(薪水),workdate(入职时间),remark(备注信息),其中postcode,remark可以为空,薪水需为number类型,生日,入职日期为date类型.以员工代码作为主键.
2.插入两条记录,id分别为0023,1023,其余信息自己编造.
3.查询员工总数,薪水总额.
4.查询出各部门的最小年龄,最大年龄.
5.创建入职日期(workdate)索引employee_idx.
6.修改id为0023的员工的入职日期为2007-12-31.
7.删除id为1023的员工信息.
8.使前面所做的修改,删除生效(假定数据库设置不是自动生效).
9.假定还有一表结构和employee完全一样的表employee_bak,把employee表的数据完全导入employee_bak表.
10.假设还有一表duty,其记录为员工的级别level,也是以员工id为主键,根据表employee,duty查询出级别在10级以上的所有员工详细信息.
11.不区分部门查询出入职日期最早的10位员工信息.
12.删除索引employee_idx.
参考答案:
1.创建employee表的SQL语句如下:
create table employee(id number(10) primary key,sex char(2) not null,name varchar2(20) not null,deptmentid number(4) not null,address varchar2(50) not null,birthdate date not null,postcode number(6),salary number(10,2) not null,workdate date not null,remark varchar2(100)
);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2.向employee表中插入测试数据的SQL语句如下所示:
insert into employee(id,sex,name,deptmentid,address,birthdate,postcode,salary,workdate,remark) values(0023,'女','黄蓉',12,'北京市',to_date('1985-12-1','yyyy-mm-dd'),100000,2345,to_date('2013-6-1','yyyy-mm-dd','共产党好');
insert into employee(id,sex,name,deptmentid,address,birthdate,postcode,salary,workdate,remark) values(1023,'男','郭靖',12,'北京市',to_date('1985-12-1','yyyy-mm-dd'),100000,5345,to_date('2013-7-1','yyyy-mm-dd','共产党好');
- 1
- 2
3.查询员工总数,薪水总额的SQL语句如下所示:
select count(*),sum(salary) from employee;
- 1
4.查询出各部门的最小年龄,最大年龄的SQL语句如下所示:
select min(birthdate),max(birthdate) from employee;
- 1
5.创建入职日期(workdate)索引employee_idx的SQL语句如下所示:
create index employee_idx on employee(workdate);
- 1
6.修改id为0023的员工的入职日期为2007-12-31的SQL语句如下所示:
update employee set workdate=to_date('2007-12-31','yyyy-mm-dd') where id=0023;
- 1
7.删除id为1023的员工信息的SQL语句如下所示:
delete from employee where id=1023;
- 1
8.使前面所做的修改,删除生效,SQL语句如下所示:
commit;
- 1
9.把employee表的数据完全导入employee_bak表,SQL语句如下所示:
create table employee_bak
as
select * from employee;
- 1
- 2
- 3
10.根据employee,duty查询出级别在10级以上的所有员工详细信息,SQL语句如下所示:
select * from employee e join duty d on e.id=d.id and level>10;
- 1
11.不区分部门查询入职日期最早的10位员工信息,SQL语句如下所示:
select * from (select * from employee order by workdate)
where rownum<=10;
- 1
- 2
12.删除索引employee_idx,SQL语句如下所示:
drop index employee_idx;
- 1
1.39.有一表格(T_user)有如下数据:
Id name age gender
- - - - - - - - - - - - - - - - - - - - - - - - -
1 张三 20 男
2 李四 22 男
3 张三 20 男
4 王五 21 男
5 王五 20 男
请用SQL查询出姓名相同而且年龄也相同的人员姓名.
参考答案:
在oracle数据库中,创建测试表和测试数据,代码如下所示:
create table t_user(id number,name varchar2(20),age number(3),gender char(2)
);
insert into t_user values(1,'张三',20,'男');
insert into t_user values(2,'李四',22,'男');
insert into t_user values(3,'张三',20,'男');
insert into t_user values(4,'王五',20,'男');
insert into t_user values(5,'王五',21,'男');
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
查询出姓名相同而且年龄也相同的人员姓名,SQL语句如下所示:
select distinct a.name from t_user a join t_user b on a.name=b.name and a.age=b.age and a.id<>b.id;
- 1
1.40.下面是某班级进行期末考试的相关数据表:
学生信息表(T_Student)
学生ID | 学生姓名 |
---|---|
1 | 小明 |
2 | 小刚 |
3 | 小红 |
课程信息表(T_Course)
课程编号 | 课程名称 |
---|---|
A | 语文 |
B | 数学 |
C | 英语 |
考试成绩表(T_Score)
学生ID | 课程编号 | 分数 |
---|---|---|
1 | A | 82 |
1 | C | 95 |
2 | A | 54 |
2 | C | 62 |
1.按照区间对学生成绩进行优良评级,>=85对应”优”;>=75并且<85对应”良”;>=60并且<75对应”及格”,<60对应”不及格”(输出列:学生姓名,课程名称,成绩级别)
2.找出本次考试平均分高于70的学生姓名(输出列:学生姓名)
参考答案:
在Oracle数据库中,创建测试表和测试数据,代码如下所示:
create table t_student(stu_id number primary key,name varchar2(20)
);insert into t_student values(1,'小明');
insert into t_student values(2,'小刚');
insert into t_student values(3,'小红');create table t_course(course_id varchar2(20) primary key,name varchar2(20)
);insert into t_course values('A','语文');
insert into t_course values('B','数学');
insert into t_course values('C','英语');create table t_score(stu_id number references t student(stu_id),course_id carchar2(20) references t_course(course_id),score number(5,2)
);insert into t_score values(1,'A',82);
insert into t_score values(1,'C',95);
insert into t_score values(2,'A',54);
insert into t_score values(2,'C',62);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
1.按照区间对学生成绩进行优良评级,>=85对应”优”;>=75并且<85对应”良”;>=60并且<75对应”及格”,<60对应”不及格”,SQL语句如下所示:
select stu.name,cour.name,case when sc.score>=85 then '优'when sc.score>=75 and sc.score<85 then '良'when sc.score>=60 and sc.score<75 then '及格'when sc.score<60 then '不及格' endas "成绩级别"
from t_student stu
join t_score sc
on stu.stu_id=sc.stu_id
join t_course cour
on sc.courese_id=cour.course_id;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2.找出本次考试平均分高于70的学生姓名,SQL语句如下所示:
select stu.name
from t_student stu
join t_score sc
on stu.stu_id=sc.stu_id
group by stu.name
having avg(sc.score)>70;
- 1
- 2
- 3
- 4
- 5
- 6
JAVA企业面试题精选 数据库31-40相关推荐
- JAVA企业面试题精选 数据库21-30
1.21.表名:高考信息表 准考证号 科目 成绩 2006001 语文 119 2006001 数学 108 2006002 物理 142 2006001 化学 136 2006002 数学 149 ...
- JAVA企业面试题精选 JDBC 1-10
2.JDBC 2.1.Java数据库编程包含哪些类和接口?Java数据库编程的基本过程是什么? 参考答案: 题目中各问题的答案如下: 1.Java数据库编程包含Connection,Resul ...
- JAVA企业面试题精选 Servlet和JSP 1-10
2.Servlet和JSP 2.1.什么是B/S结构?什么是C/S结构? 参考答案: B/S是Browser/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape ...
- JAVA企业面试题精选 Java SE 91-100
3.91.一个图书管理系统的面向对象设计方法如下图所示: Book代表书,有"Name(书名)","Author(作者名)","Price(单价) ...
- JAVA企业面试题精选 Web基础 11-20
1.11.谈谈innerHTML,outerHTML,innerText之间的区别 参考答案: innerHTML,outerHTML,innerText之间的区别如下: 1.innerHTM ...
- Java企业面试题及答案资料大全
Java企业面试题及答案资料大全,想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢? 本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的 ...
- 程序员面试题精选(31):从尾到头遍历链表
题目:输入一个链表的头结点,从尾到头反过来输出每个结点的值.链表结点定义如下: struct ListNode { int m_nKey; ListNode* m_ ...
- Java基础面试题精选汇总,备战面试突破篇--直击offer
前言 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的语法,虚拟机方面的语法. 在开篇之前我们思考下,如果我们是面试官会问些什么问题呢 ...
- 【Java常见面试题】数据库篇
导航: [黑马Java笔记+踩坑汇总]JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+设计模式+牛客面试题 ...
最新文章
- PCL深度图像(1)
- (转)C#创建数字证书并导出为pfx,并使用pfx进行非对称加解密
- 最新开源JavaScript 图表库 ECharts推荐
- C++和C#编写调用COM组件
- 两个月新手的几点 storyboard 心得
- Iframe的高级操作
- 路长全讲座免费在线学习 免费下载
- Window CE 驱动开发流程(Windows CE.5.0系统、pxa270平台)
- MyBatis的XML配置文件(三)
- android 查看cad方案,安卓手机可以CAD看图吗?怎么查看接收的CAD图纸文件?
- Java并发编程——创建线程的三种方法以及区别
- 微信公众号支付 java_微信支付之公众号支付(java实现)
- CNN结构:色温-冷暖色的定义和领域区分(一)
- python实现舒尔特方格
- 【RL】3.基于表格方法求解RL
- PCAT 点云标注软件
- 游戏安全资讯精选 2017年第十六期:房卡式棋牌游戏涉赌博风波,抓娃娃火爆市场背后的安全隐患需警惕,Linux内核的Huge Dirty Cow权限提升漏洞...
- Lenovo笔记本各类型触控板,触摸部分只能移动无法点击的问题汇总
- 大数据开发,真的这么香吗?
- 计算机网络跟Internet的区别和联系,互联网和因特网的区别与联系