数据库基础(⾯试常见题)笔试⾯试题
⼀、数据库基础
1. 数据抽象:物理抽象、概念抽象、视图级抽象,内模式、模式、外模式
2. SQL语⾔包括数据定义、数据操纵(Data Manipulation),数据控制(Data Control)
数据定义:Create Table,Alter Table,Drop Table, Craete/Drop Index等
数据操纵:Select ,insert,update,delete,
数据控制:grant,revoke
3. SQL常⽤命令:
CREATE TABLE Student(
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50) NOT NULL);//建表
CREATE VIEW view_name AS
Select * FROM Table_name;//建视图
Create UNIQUE INDEX index_name ON TableName(col_name);//建索引
INSERT INTO tablename {column1,column2,…} values(exp1,exp2,…);//插⼊
INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插⼊视图实际影响表
UPDATE tablename SET name=’zang 3’ condition;//更新数据
DELETE FROM Tablename WHERE condition;//删除
GRANT (Select,delete,…) ON (对象) TO USER_NAME [WITH GRANT OPTION];//授权
REVOKE (权限表) ON(对象) FROM USER_NAME [WITH REVOKE OPTION] //撤权
列出⼯作⼈员及其领导的名字:
Select E.NAME, S.NAME FROM EMPLOYEE E S
WHERE E.SUPERName=S.Name
4. 视图:
5. 完整性约束:实体完整性、参照完整性、⽤户定义完整性
6. 第三范式:
1NF:每个属性是不可分的。 2NF:若关系R是1NF,且每个⾮主属性都完全函数依赖于R的键。例SLC(SID#, CourceID#, SNAME,Grade),则不是2NF; 3NF:若R是2NF,且它的任何⾮键属性都不传递依赖于任何候选键。
7. ER(实体/联系)模型
8. 索引作⽤
9. 事务:是⼀系列的数据库操作,是数据库应⽤的基本逻辑单位。事务性质:原⼦性、
原⼦性。即不可分割性,事务要么全部被执⾏,要么就全部不被执⾏。
⼀致性或可串性。事务的执⾏使得数据库从⼀种正确状态转换成另⼀种正确状态
隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,
持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
10. 锁:共享锁、互斥锁
两段锁协议:阶段1:加锁阶段阶段2:解锁阶段
11. 死锁及处理:事务循环等待数据锁,则会死锁。
死锁处理:预防死锁协议,死锁恢复机制
12. 存储过程:存储过程就是编译好了的⼀些sql语句。
1.存储过程因为SQL语句已经预编绎过了,因此运⾏的速度⽐较快。
2. 可保证数据的安全性和完整性。通过存储过程可以使没有权限的⽤户在控制之下间接地存取数据库,从⽽保证数据的安全。通过存储过程可以使相关的动作在⼀起发⽣,从⽽可以维护数据库的完整性。
3.可以降低⽹络的通信量。存储过程主要是在服务器上运⾏,减少对客户机的压⼒。
4:存储过程可以接受参数、输出参数、返回单个或多个结果集以及返回值。可以向程序返回错误原因
5:存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏了数据逻辑。
13. 触发器:当满⾜触发器条件,则系统⾃动执⾏触发器的触发体。
触发时间:有before,after.触发事件:有insert,update,delete三种。触发类型:有⾏触发、语句触发
14.内联接,外联接区别?
内连接是保证两个表中所有的⾏都要满⾜连接条件,⽽外连接则不然。
在外连接中,某些不满条件的列也会显⽰出来,也就是说,只限制其中⼀个表的⾏,⽽不限制另⼀个表的⾏。分左连接、右连接、全连接三种
SQL试题2
⼀、
教师号  星期号 是否有课
 1    2   有
 1    3   有
 2    1   有
 3    2   有`
 1    2   有
写⼀条sql语句让你变为这样的表
教师号 星期⼀ 星期⼆ 星期三
 1       2   1 
 2   1   
 3       1
各星期下的数字表⽰:对应的教师在星期⼏已经排的课数
⼆、
书表(books)
book_id,book_name,creatdate,Lastmodifydate,decription
001,三个⼈的世界,2005-02-02,2005-07-07,NULL
作者表(authors)
A_id,A_name
01,王纷
02,李尚
03,泰和
部门表(depts)
d_id,d_name
001,编辑⼀部
002,编辑⼆部
003,编辑三部
书和作者关联表(bookmap)
book_id,A_id
001,01
001,02
001,03
部门和作者关联表(depmap)
d_id,a_id
001,01
002,02
基本的sql语句有哪些003,03
出每个部门的所写的总书两,⽐如,⼀本书有3个⼈写,如果三个⼈在不同的部门,则每个部门的总数量就是1.最后结果如下:部门,书量
编辑⼀部,1
编辑⼆部,1
编辑三部,1
三、
两个表情况
表名:wu_plan
ID      plan      model      corp_code    plannum    prixis
1      00001    exx2
2        nokia        2000        0
2      00002    lc001        sony        3000        0
表名:wu_bom
ID    plan      pact          amount
1      00001      aa1            300
2      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    exx2
2        nokia        2000        0      a2      200
2      00002    lc001        sony        3000        0      bb
3      400
四、
表1结构如下:
部门条码品名销售额销售数量销售⽇期
表2结构如下
课别部门
要求:先按部门排序,再按销售额、销售数量排序检索出某个课别每个部门⼀个时期内的商品销售额
的前三名,如查询01课别2007年4⽉15⽇到2007年4⽉22⽇每个部门⼀个周内的商品销售额合计的前三名
SQL ⾯试题⽬汇总
1.触发器的作⽤?
答:触发器是⼀中特殊的存储过程,主要是通过事件来触发⽽被执⾏的。它可以强化约束,来维护数据的完整性和⼀致性,可以跟踪数据库内的操作从⽽不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另⼀个表的数据操作,⽽该操作⼜会导致该表触发器被触发。
2。什么是存储过程?⽤什么来调⽤?
答:存储过程是⼀个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建⼀次,以后在该程序中就可以调⽤多次。如果某次操作需要执⾏多次SQL,使⽤存储过程⽐单纯SQL语句执⾏要快。可以⽤⼀个命令对象来调⽤存储过程。
3。索引的作⽤?和它的优点缺点是什么?
答:索引就⼀种特殊的查询表,数据库的搜索引擎可以利⽤它加速对数据的检索。它很类似与现实⽣
活中书的⽬录,不需要查询整本书内容就可以到想要的数据。索引可以是唯⼀的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录⼊的速度,同时也增加了数据库的尺⼨⼤⼩。
3。什么是内存泄漏?
答:⼀般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,⼤⼩任意的,使⽤完后要显⽰释放内存。当应⽤程序⽤关键字new等创建对象时,就从堆中为它分配⼀块内存,使⽤完后程序调⽤free或者delete释放该内存,否则就说该内存就不能被使⽤,我们就说该内存被泄漏了。
4。维护数据库的完整性和⼀致性,你喜欢⽤触发器还是⾃写业务逻辑?为什么?
答:我是这样做的,尽可能使⽤约束,如check,主键,外键,⾮空字段等来约束,这样做效率最⾼,也最⽅便。其次是使⽤触发器,这种⽅法可以保证,⽆论什么业务系统访问数据库都可以保证数据的完整新和⼀致性。最后考虑的是⾃写业务逻辑,但这样做⿇烦,编程复杂,效率低下。
5。什么是事务?什么是锁?
答:事务就是被绑定在⼀起作为⼀个逻辑⼯作单元的SQL语句分组,如果任何⼀个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执⾏,要么
不执⾏,就可以使⽤事务。要将有组语句作为事务考虑,就需要通过ACID,即原⼦性,⼀致性,隔离性和持久性。
锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实⽣活中锁⼀样,它可以使某些数据的拥有者,在某段时间内不能使⽤某些数据或。当然锁还分级别的。
6。什么叫视图?游标是什么?
答:视图是⼀种虚拟的表,具有和物理表相同的功能。可以对视图进⾏增,改,查,操作,试图通常是有⼀个表或者多个表的⾏或列的⼦集。对视图的修改不影响基本表。它使得我们获取数据更容易,相⽐多表查询。
游标:是对查询出来的结果集作为⼀个单元来有效的处理。游标可以定在该单元中的特定⾏,从结果集的当前⾏检索⼀⾏或多⾏。可以对结果集当前⾏做修改。⼀般不使⽤游标,但是需要逐条处理数据的时候,游标显得⼗分重要。
7。为管理业务培训信息,建⽴3个表:
S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄
C(C#,CN)C#,CN分别代表课程编号,课程名称
SC(S#,C#,G) S#,C#,G分别代表学号,所选的课程编号,学习成绩
(1)使⽤标准SQL嵌套语句查询选修课程名称为’税收基础’的学员学号和姓名?
答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’税收基础’)
(2) 使⽤标准SQL嵌套语句查询选修课程编号为’C2’的学员姓名和所属单位?
答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’
(3) 使⽤标准SQL嵌套语句查询不选修课程编号为’C5’的学员姓名和所属单位?
答:select sn,sd from s where s# not in(select s# from sc where c#=’c5’)
(4)查询选修了课程的学员⼈数
答:select 学员⼈数=count(distinct s#) from sc
(5) 查询选修课程超过5门的学员学号和所属单位?
答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)
⽬前在职场中很难到⾮常合格的数据库开发⼈员。有⼈说:“SQL开发是⼀门语⾔,它很容易学,但是很难掌握。”
在⾯试过程中多次碰到两道SQL查询的题⽬,⼀是查询A(ID,Name)表中第31⾄40条记录,ID作为主键可能是不是连续增长的列,完整的查询语句如下:
select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by A ) T) order by A
另外⼀道题⽬的要求是查询表A中存在ID重复三次以上的记录,完整的查询语句如下:
select * from(select count(ID) as count from table group by ID)T unt>3