复试_Ex2017_
复试_Ex2017__
一、名词解释或者称为简答题吧
1、解释事务和程序还有他们的区别。
事务:用户定义的一个数据库操作序列,要么全做,要么全不做,是个不可分割的工作单位,具有ACID特性(P293)
程序:程序里有多个事务的组合。
2、完整性约束的含义和内容。
实体完整性:要求每个数据表都必须有主键,而作为主键的所有字段,其属性必须是独一及非空值,使用primary key 进行约束。
参数完整性:不允许引用不存在的实体,在数据库中使用FOREIGN KEY 和REFERENCES进行约束。
用户自定义完整性:根据应用要求定义属性上的约束条件,包括NOT NULL,UNIQUE等等。
3、排它锁,共享锁,死锁,活锁。
排他锁:又称为写锁(X锁),如果事务T对对象A加上了X锁,则只允许T读取和修改对象A,其他任何事务不可以对对象A加上任何类型的锁,直到事务T释放。
共享锁:又称为读锁(S锁),如果事务T对对象A加上了S锁,那么事务T可以对对象A进行读,但是不能改,其他事务只能对对象A加S锁。
死锁:在整个事务集中,每个事务集中的每一个事务都在等待只能由这个事务集中其他事务持有的对象,而造成了循环等待的情况。
活锁:事务T所等待的资源一直被抢用,而导致被无限延后,不能的到满足。
4、几个范式的含义内容?什么时候可以不遵守范式。这题记不太清楚。
https://blog.csdn.net/xhf55555/article/details/7219206
1NF:每个属性值 都是不可再分的最小数据单位
2NF:如果关系模式R为1NF,并且R中的每一个非主属性都完全依赖于R的某个候选关键字
3NF:如果关系模式R为2NF,并且R中的每一个非主属性都不传递依赖于R的某个候选关键字
BCNF:如果关系模式R为1NF,并且R中的每一个函数依赖X→Y(YÏX),必有X是R的超关键字,决定元素必须含有超码。
反范式:七种情况。
5、数据库设计的步骤。
(p205)
- 需求分析:要先准确了解与分析用户需求
- 概念结构设计:对用户需求进行归纳抽象,形成独立于具体数据库的管理系统概念模型
- 逻辑结构设计:将概念模型转换为某个数据库管理系统所支持的数据模型
- 物理结构设计:将逻辑数据模型选取一个最合适的应用环境的物理结构
- 数据库实施:简历数据库,编写调试应用数据,组织数据入库,试着运行
- 数据库运行和维护阶段:正常运行,过程中不断评估、调整修改。
二、SQL编程(简单的SQL编程都没考,考的SQL编程都是没看的,看书还是不能偷工减料,还是要一章一章好好儿看)。
职员表EMP(eno,ename,job,hire,salary,dno)eno是员工编号,dno是部门编号,hire是雇佣日期就是进公司的日期。
部门表DEPT(dno,dname,loc)这个loc是啥意思我也忘了······
①dname=RI的员工工资的中间数。中间数就是若有九个员工,将员工工资从大到小排列,中间数就是第五个,若有十个就是从大到小排列的第五和第六个数的平均数。
②各部门除去最高最低工资外的部门所有员工的平均工资。
③每个部门第一个进部门和最后一个进部门的员工的时间上的时间差换算成年是差几年,换算成月又是差几个月。
④dno,ename,salary,以及与同一部门员工的工资差。
⑤每个部门中所有员工的ename,dno,dname,sal,hire,latest.Salary。latest.Salary是指该员工所在部门最新进来的员工的工资?
中位数问题,对于中位数,Oracle可以使用Median函数可以直接得到结果,但是对于MySQL其他数据库则可以使用一个思想:
自身连接之后,两个数相等的次数不小于第一个大于第二个的数
SELECT AVG(tmp.
Salary)
FROM (SELECT e1.Salary
FROM employee e1,employee e2,department d
WHERE e1.Dno= e2.DnoAND e2.Dno= d.IdAND d.Name= 'IT'
GROUP BY e1.Salary
HAVING SUM(CASE WHEN e1.Salary= e2.SalaryTHEN 1 ELSE 0 END )
= ABS(SUM(SIGN(e1.Salary-e2.Salary)))) tmp;2. ```mysql SELECT e1.`Dno`,AVG(e1.`Salary`) FROM employee e1,(SELECT e.`Dno`,MAX(e.`Salary`) AS ma,MIN(e.`Salary`) AS mi FROM employee e GROUP BY e.`Dno`) e2 WHERE e1.`Dno` = e2.`Dno` AND e1.`Salary` <> e2.ma AND e1.`Salary`<> e2.mi GROUP BY e1.`Dno`;
使用窗口函数
select distinct t.dno,months_between(t.ma,t.mi) as mons,months_between(t.ma,t.mi)/12 as yeas from (select e.dno, max(e.hire)over(partition by e.dno) as ma, min(e.hire)over(partition by e.dno) as mi from employee e) t;什么意思???
窗口牛逼
select e.name,e.dno,d.name,e.salary,e.hire,x.salary as latestSalary from employee e,department d,(select e1.dno,dense_rank()over(partition by e1.dno order by e1.hire desc) as rnk,e1.salary from employee e1) x where x.rnk = 1 and e.dno = x.dno and e.dno = d.id;
三、简答题
1、SQL与NOSQL的区别,各自的特征、应用场景。又各自应用于哪些具体应用中。
SQL是结构化查询语言,SQL风格统一,高度非过程化,面向集合的操作方式,以同一种语法结构提供两种使用方式,语言简洁,易学易用
NOSQL是指非关系型的、分布式的、不保证满足ACID特性的一类数据管理系统
区别:
主流数据库是高度组织化结构化数据,NOSQL不一定是结构化存储
主流数据库有强一致性,NOSQL是弱一致性采用BASE
主流数据库使用结构化查询语言(SQL),NOSQL没有声明性查询语言,可以使用get/put原语
主流数据库数据全都存储在表中,NOSQL可以存在图、文档存储、列存储、键值对存储
主流数据库适用于传统查询,NOSQL适用于大数据、高性能、高可用性
SQL用于对一致性要求高的例如银行
NOSQL适用于大数据、高性能、高可用性的,例如电子商务,网络交际关系等
2、SQL有什么优化策略。从硬件、系统、应用各级分析。
3、大数据和BI数据分析有什么不同,应用大数据的场景、来源、技术架构。
浙公网安备 33010602011771号