已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java.Net 面试题库数据库面试题库数据库 第 1 页 Java.Net 面试题库数据库面试题库数据库 2016 年年 12 月面试题库月面试题库 1 1 、 有如下几张表有如下几张表 1 1)、)、customerscustomers 存放顾客信息表:存放顾客信息表: cid cid 唯一标识顾客唯一标识顾客/ /行行 cnamecname 顾客名称顾客名称 citycity 顾客所在城市顾客所在城市 discntdiscnt 每个顾客的折扣每个顾客的折扣 2 2)、)、agentsagents 存放代理商信息表:存放代理商信息表: aidaid 唯一标识一个代理商唯一标识一个代理商/ /行行 aname aname 代理商名称代理商名称 citycity 代理商所在城市代理商所在城市 percent percent 每笔交每笔交 易代理所能获得的佣金百分比易代理所能获得的佣金百分比 3 3)、)、productsproducts 存放商品信息的表:存放商品信息的表: pidpid 唯一标识一件商品唯一标识一件商品 pnamepname 商品名称商品名称 citycity 商品库所在的城市商品库所在的城市 quantityquantity 目前可销售的商品库存的数量目前可销售的商品库存的数量 priceprice 每单位商品的批发价每单位商品的批发价 4 4)、)、ordersorders 存放订单信息的表:存放订单信息的表: ordnoordno 唯一标识一份订单唯一标识一份订单 cidcid 购买商品的顾客购买商品的顾客 aidaid 经由代理商订货经由代理商订货 ordDate ordDate 订单时间订单时间 pid pid 所订购的商品所订购的商品 qty qty 订购商品的数量订购商品的数量 dollarsdollars 商品的总价商品的总价 实现如下题目:实现如下题目: 1 1)找出通过住在广州或佛山的代理商订购了商品名称为)找出通过住在广州或佛山的代理商订购了商品名称为pp0505的顾客的名字的顾客的名字 2) 2) 求出商品名称为求出商品名称为p03p03的订购总量的订购总量 3) 3) 当某个代理商所订购的某样产品的总量超过当某个代理商所订购的某样产品的总量超过 10001000 时,列出所有满足条件的商品名称和时,列出所有满足条件的商品名称和 代理商代理商 IDID 以及这个总量以及这个总量 答案解析: 1) select ame from orders o left join customers c on o.cid=c.cid left join products p on o.pid=p.pid left join agents a on o.aid=a.aid where a.city in (广州,佛山) and p.pname=p05 2) Java.Net 面试题库数据库面试题库数据库 第 2 页 select sum(o.qty) from orders o left join products p on o.pid=p.pid where p.pname=p03 3) select o.aid,sum(o.qty) from orders o left join customers c on o.cid=c.cid left join products p on o.pid=p.pid left join agents a on o.aid=a.aid group by o.aid,o.pid having sum(o.qty)1000 2 2 、 删除姓名、年龄重复的记录删除姓名、年龄重复的记录( (只保留只保留 IdId 最大的一条最大的一条) )(常考!)(常考!) Id Id name name age age salarysalary 1 1 yzk yzk 80 80 10001000 2 2 yzk yzk 80 80 20002000 3 3 tom tom 20 20 2000020000 4 4 tom tom 20 20 2000020000 5 5 im im 20 20 2000020000 答案解析: 思路:思路: 首先取得不重复的数据首先取得不重复的数据 select * fromselect * from PersonsPersons where Id inwhere Id in ( ( SELECT SELECT MAX(Id) AS Expr1MAX(Id) AS Expr1 FROM FROM PersonsPersons GROUP BY Name,GROUP BY Name, AgeAge ) ) Java.Net 面试题库数据库面试题库数据库 第 3 页 根据姓名、年龄分组,取出每组的根据姓名、年龄分组,取出每组的 IdId 最大值,然后将最大值,然后将 IdId 最大值之外的排除。最大值之外的排除。 删除重复的数据(最终结果):删除重复的数据(最终结果): delete from Personsdelete from Persons where Id not inwhere Id not in ( ( SELECT SELECT MAX(Id) AS Expr1MAX(Id) AS Expr1 FROM FROM PersonsPersons GROUP BY Name,GROUP BY Name, AgeAge ) ) 3 3 、 left joinleft join、right joinright join、inner join inner join 的区别?的区别? 答案解析: (1)比如 t1 left join t2 on t1.xx=t2.xx ,此时 t1(左边的)表中的数据会被全部查 询出来,如果 t2 中没有使 t1.xx=t2.xx 成立的行,则以 null 的形式出现在结果集中 (2)right join 和 left join 情况相反 (3)inner join 是等值连接,只有连接条件成立时才把当前连接放入结果集 注意,有时候会听到“左外连接 left outer joint”、“右外连接 right outer joint” 的说法,其实“左连接 left join”就是“左外连接 left outer joint”的简写而已,是 等价的,“右外连接”也同理。 4 4 、 在在 sqlsql 语言中授权的操作是通过什么实现的?语言中授权的操作是通过什么实现的? A:create B:revoke C:grant D:insert 正确答案是:C 5 5 、 有有 studentsstudents 学生表如下:学生表如下: id id name name age age scorescore 1 1 abc abc 18 18 9090 2 2 abc abc 18 18 100100 Java.Net 面试题库数据库面试题库数据库 第 4 页 3 3 tom tom 20 20 8080 4 4 tom tom 20 20 9090 5 5 imm imm 20 20 7070 问:问: (1)(1)查询学生的信息查询学生的信息 , , 若有姓名、年龄重复的记录若有姓名、年龄重复的记录, ,则保留则保留 IdId 最大的一条(常考!)最大的一条(常考!) (2)(2)删除多余的记录删除多余的记录( (姓名姓名, ,年龄重复年龄重复),),保留保留 idid 最大的记录最大的记录 (3)(3)查询查询 scorescore 最高的前最高的前 3 3 人人 建表语句(方便测试):建表语句(方便测试): createcreate tabletable students(students( id intid int primaryprimary keykey auto_increment,auto_increment, name varchar(100),name varchar(100), age int,age int, score intscore int ) ) insertinsert intointo students values(null,abc,18,90);students values(null,abc,18,90); insertinsert intointo students values(null,abc,18,100);students values(null,abc,18,100); insertinsert intointo students values(null,tom,20,80);students values(null,tom,20,80); insertinsert intointo students values(null,tom,20,90);students values(null,tom,20,90); insertinsert intointo students values(null,imm,20,70);students values(null,imm,20,70); 答案解析: (1)查询学生的信息 , 若有姓名、年龄重复的记录,则保留 Id 最大的一条(常考!) select * from students where id in ( select max(id) from students group by name,age ) Java.Net 面试题库数据库面试题库数据库 第 5 页 思路:根据姓名、年龄分组,取出每组的 Id 最大值,然后将 Id 最大值之外的排除。最后按 照 id 查询出来就可以了。 (2)删除多余的记录(姓名,年龄重复),保留 id 最大的记录 #oracle 中 delete from students where id not in ( select max(id) from students group by name,age ) #mysql 中,由于 mysql 不能先查询这个表再删除这个表,通过给中间表起别名再查询一遍 的方式解决 delete from students where id not in ( select s.id from ( select max(id) id from students group by name,age ) s ) (3)查询 score 最高的前 3 人 select * from students order by salary desc limit 0,3 6 、 union 和 union all 的区别? Java.Net 面试题库数据库面试题库数据库 第 6 页 答案解析: union 会自动合并多个结果集合中的重复结果, 而 union all 则将所有的结果全部显示出来, 不管是不是重复。 7 7 、 有一张成绩表有一张成绩表 grade( studentId, courseId, score ) grade( studentId, courseId, score ) ,查询出每门课程都大于,查询出每门课程都大于 8080 分的分的 学生的学号学生的学号 答案解析: select studentId from grade group by studentId having min(score) =80 对于分组数据的过滤要用 having,不能用 where 8 8 、 表表 employeesemployees 的结构的结构: : create table employees (create table employees ( employee_id employee_id int int primary key,primary key, first_name varchar(25),first_name varchar(25), last_name varchar(25),last_name varchar(25), salary double,salary double, hired_date date,hired_date date, department_id intdepartment_id int ) ) 表表 departmentsdepartments 的结构的结构 create table departments (create table departments ( department_id int primary key,department_id int primary key, department_name department_name varchar(25)varchar(25) ) ) 问:问: (1 1)查询出工资在)查询出工资在1000,20001000,2000之间,或者员工姓名(之间,或者员工姓名(last_namelast_name)以)以TimTim打头的员工的打头的员工的 全部个人信息。全部个人信息。 (2 2) 查询出部门平均工资大于) 查询出部门平均工资大于 18001800 元的部门的所有员工, 列出这些员工的全部个人信息。元的部门的所有员工, 列出这些员工的全部个人信息。 (3 3)查询出个人工资高于其)查询出个人工资高于其所在部门平均工资的员工,列出这些员工的全部个人信息。所在部门平均工资的员工,列出这些员工的全部个人信息。 Java.Net 面试题库数据库面试题库数据库 第 7 页 (4 4)基于上述)基于上述 employees employees 表写出查询:查出个人工资高于其所在部门平均工资的员工,列表写出查询:查出个人工资高于其所在部门平均工资的员工,列 出这些员工的全部个人信息及该员工工资高出部门平均工资百分比。出这些员工的全部个人信息及该员工工资高出部门平均工资百分比。 答案解析: (1)查询出工资在1000,2000之间,或者员工姓名(last_name)以Tim打头的员工的全 部个人信息。 select * from employees where (salary between 1000 and 2000) or (last_name like Tim%); (2)查询出部门平均工资大于 1800 元的部门的所有员工,列出这些员工的全部个人信息。 (思路:先把平均工资大于 1800 的部门查出来 , 再看员工的部门是否在其中) select * from employees where department_id in ( select department_id from employees group by department_id having avg(salary) 1800 ) (3)查询出个人工资高于其所在部门平均工资的员工,列出这些员工的全部个人信息。 select e1.* from employees as e1 where e1.salary ( select AVG(e2.salary) from employees as e2 where e1.department_id=e2.department_id ) (4) 基于上述 employees 表写出查询:查出个人工资高于其所在部门平均工资的员工, 列出这些员工的全部个人信息及该员工工资高出部门平均工资百分比。 select e1.* , (e1.salary-tmp.avgsalary)*100/tmp.avgsalary as “高出平均工 资百分比“ from employees as e1, ( Java.Net 面试题库数据库面试题库数据库 第 8 页 select department_id, avg(salary) avgsalary from employees group by department_id ) as tmp where e1.salary tmp.avgsalary and e1.department_id=tmp.department_id 9 9 、 数据库三范式是什么数据库三范式是什么? ? 答案解析: 第一范式:字段不能有冗余信息,所有字段都是必不可少的。 第二范式:满足第一范式并且表必须有主键。 第三范式:满足第二范式并且表引用其他的表必须通过主键引用。 10 10 、 筛选不重复记录的筛选不重复记录的 SQLSQL 关键字是?关键字是? A:Group by B:Union C:Distinct D:Having 正确答案是:C 1 11 1 、 要获得数据库系统当前时间,请基于要获得数据库系统当前时间,请基于 T T- -SQLSQL 和和 PLPL- -SQLSQL 写出相关写出相关 SQLSQL 语句语句 答案解析: T-SQL 指的是 SQLServer 中的 SQL 语法,PL-SQL 指的是 Oracle 中的 SQL 语法; SQLServer使用select GETDATE()获取当前时间; Oracle中使用select SYSDATE() from dual 获取; 另外 MySQL 中使用 select now()获得当前时间; 1 12 2 、 SQLSQL 中中 de
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效利用ERP提升企业竞争力的全面布局
- 电子商务平台运营推广与数据分析报告
- 营销策划员中级的工作策略与实践
- 中小企业产品增长实战策略与资源分配方案
- 庆典策划中音效与灯光的技术要求
- 环境工程师高级环境治理规划与实施方案
- 安全生产安全操作指导
- 企业市场营销的年度策略及安排
- 幼师拒绝调岗通知书
- 广东省电站停电通知书
- 急救药品知识及护理应急预案考试题(附答案)
- 抗衰老培训课件
- 妊娠剧吐护理常规课件
- 民兵应急抢险培训课件
- 小餐饮许可管理制度
- 设备吊装安装方案(3篇)
- 传热设备创新创业项目商业计划书
- 传销宣传课件
- 2025年安徽省城市更新投资集团有限公司招聘笔试冲刺题(带答案解析)
- JG/T 503-2016承插型盘扣式钢管支架构件
- DB62T 3231-2022 地面辐射供暖施工及验收标准
评论
0/150
提交评论