内容简介:
mysql部分:
一、数据据基本概念
二、Mysql经典例题20道
Oracle部分:
一、Oracle经典例题50道
二、Oracle相关概念
前言
本文'主要受众为开发人员,所以不涉及到MySQL的服务部署等操作,且内容较多,大家准备好耐心和瓜子矿泉水.
前一阵系统的学习了一下MySQL,也有一些实际操作经验,偶然看到一篇和MySQL相关的面试文章,发现其中的一些问题自己也回答不好,虽然知识点大部分都知道,但是无法将知识串联起来.
因此决定搞一个MySQL灵魂100问,试着用回答问题的方式,让自己对知识点的理解更加深入一点.
此文不会事无巨细的从select的用法开始讲解mysql,主要针对的是开发人员需要知道的一些MySQL的知识点,主要包括索引,事务,优化等方面,以在面试中高频的问句形式给出答案.
索引相关
关于MySQL的索引,曾经进行过一次总结,文章链接在这里 Mysql索引原理及其优化.
1. 什么是索引?
索引是一种数据结构,可以帮助我们快速的进行数据的查找.
2. 索引是个什么样的数据结构呢?
索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引.
3. Hash索引和B+树所有有什么区别或者说优劣呢?
首先要知道Hash索引和B+树索引的底层实现原理:
hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据.
那么可以看出他们有以下的不同:
- hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询.
因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围.
- hash索引不支持使用索引进行排序,原理同上.
- hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测. AAAA和 AAAAB的索引没有相关性.
- hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件(聚簇索引,覆盖索引等)的时候可以只通过索引完成查询.
- hash索引虽然在等值查询上较快,但是不稳定.性能不可预测,当某个键值存在大量重复的时候,发生hash碰撞,此时效率可能极差.而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低.
因此,在大多数情况下,直接选择B+树索引可以获得稳定且较好的查询速度.而不需要使用hash索引.
4. 上面提到了B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据,什么是聚簇索引?
5. 非聚簇索引一定会回表查询吗?
6. 在建立索引的时候,都有哪些需要考虑的因素呢?
7. 联合索引是什么?为什么需要注意联合索引中的顺序?
8. 创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因?
9. 那么在哪些情况下会发生针对该列创建了索引但是在查询的时候并没有使用呢?
事务相关
1. 什么是事务?
理解什么是事务最经典的就是转账的栗子,相信大家也都了解,这里就不再说一边了.
事务是一系列的操作,他们要符合ACID特性.最常见的理解就是:事务中的操作要么全部成功,要么全部失败.但是只是这样还不够的.
2. ACID是什么?可以详细说一下吗?
A=Atomicity
原子性,就是上面说的,要么全部成功,要么全部失败.不可能只执行一部分操作.
C=Consistency
系统(数据库)总是从一个一致性的状态转移到另一个一致性的状态,不会存在中间状态.
I=Isolation
隔离性: 通常来说:一个事务在完全提交之前,对其他事务是不可见的.注意前面的通常来说加了红色,意味着有例外情况.
D=Durability
持久性,一旦事务提交,那么就永远是这样子了,哪怕系统崩溃也不会影响到这个事务的结果.
3. 同时有多个事务在进行会怎么样呢?
多事务的并发进行一般会造成以下几个问题:
- 脏读: A事务读取到了B事务未提交的内容,而B事务后面进行了回滚.
- 不可重复读: 当设置A事务只能读取B事务已经提交的部分,会造成在A事务内的两次查询,结果竟然不一样,因为在此期间B事务进行了提交操作.
- 幻读: A事务读取了一个范围的内容,而同时B事务在此期间插入了一条数据.造成”幻觉”.
4. 怎么解决这些问题呢?MySQL的事务隔离级别了解吗?
5. Innodb使用的是哪种隔离级别呢?
6. 对MySQL的锁了解吗?
7. MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了?
表结构设计
1. 为什么要尽量设定一个主键?
2. 主键使用自增ID还是UUID?
3. 字段为什么要求定义为not null?
4. 如果要存储用户的密码散列,应该使用什么字段进行存储?
密码散列,盐,用户身份证号等固定长度的字符串应该使用char而不是varchar来存储,这样可以节省空间且提高检索效率.
存储引擎相关
1. MySQL支持哪些存储引擎?
MySQL支持多种存储引擎,比如InnoDB,MyISAM,Memory,Archive等等.在大多数的情况下,直接选择使用InnoDB引擎都是最合适的,InnoDB也是MySQL的默认存储引擎.
InnoDB和MyISAM有什么区别?
- InnoDB支持事物,而MyISAM不支持事物
- InnoDB支持行级锁,而MyISAM支持表级锁
- InnoDB支持MVCC, 而MyISAM不支持
- InnoDB支持外键,而MyISAM不支持
- InnoDB不支持全文索引,而MyISAM支持。
零散问题
1. MySQL中的varchar和char有什么区别.
2. varchar(10)和int(10)代表什么含义?
3. MySQL的binlog有有几种录入格式?分别有什么区别?
4. 超大分页怎么处理?
5. 关心过业务系统里面的sql耗时吗?统计过慢查询吗?对慢查询都怎么优化过?
6. 上面提到横向分表和纵向分表,可以分别举一个适合他们的例子吗?
7. 什么是存储过程?有哪些优缺点?
8. 说一说三个范式
9. MyBatis中的#
MYSQL的20例
一、单选题
1、SQL 指的是?
A、Strong Question Language
B、Structured Question Language
C、Structured Query Language
答案:C
2、哪个 SQL 语句用于从数据库中提取数据?
A、EXTRACT
B、SELECT
C、OPEN
D、GETB
答案:B
3.哪条 SQL 语句用于更新数据库中的数据?
A、MODIFY
B、SAVE AS
C、UPDATE
D、SAVE
答案:C
4、哪条 SQL 语句用于删除数据库中的数据?
A、COLLAPSE
B、DELETE
C、REMOVE
答案:B
5、哪条 SQL 语句用于在数据库中插入新的数据?
A、INSERT NEW
B、ADD RECORD
C、ADD NEW
D、INSERT INTO
答案:D
6、通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列?
A、SELECT Persons.FirstName
B、SELECT FirstName FROM Persons
C、EXTRACT FirstName FROM Persons
答案:B
7、通过 SQL,您如何从 "Persons" 表中选取所有的列?
A、SELECT [all] FROM Persons
B、SELECT Persons
C、SELECT * FROM Persons
D、SELECT *.Persons
答案:C
8、通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值等于"Peter" 的所有记录?
A、SELECT [all] FROM Persons WHERE FirstName='Peter'
B、SELECT * FROM Persons WHERE FirstName LIKE 'Peter'
C、SELECT [all] FROM Persons WHERE FirstName LIKE 'Peter'
D、SELECT * FROM Persons WHERE FirstName='Peter'
答案:D
9、通过 SQL,您如何从 "Persons" 表中选取 "FirstName" 列的值以 "a" 开头的所有记录?
A、SELECT * FROM Persons WHERE FirstName LIKE 'a%'
B、SELECT * FROM Persons WHERE FirstName='a'
C、SELECT * FROM Persons WHERE FirstName LIKE '%a'
D、SELECT * FROM Persons WHERE FirstName='%a%'
答案:A
10、请判断下列说法是否正确:当所列出的某个条件为 true 时,OR 运算符会显示记录。当列出的所有条件为 true 时,AND 运算符会显示记录。
A、正确
B、错误
答案:A
11、通过 SQL,您如何在表 Persons 中选择 FirstName 等于 Thomas 而 LastName 等于 Carter 的所有记录?
A、SELECT * FROM Persons WHERE FirstName LIKE 'Thomas' AND LastName LIKE 'Carter'
B、SELECT FirstName='Thomas', LastName='Carter' FROM Persons
C、SELECT * FROM Persons WHERE FirstName='Thomas' AND LastName='Carter'
答案:C
12、通过 SQL,您如何按字母顺序选取 Persons 表中 LastName 介于 Adams 和 Carter 的所有记录?
A、SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
B、SELECT * FROM Persons WHERE LastName>'Adams' AND LastName<'Carter'
C、SELECT LastName>'Adams' AND LastName<'Carter' FROM Persons
答案:A
13、哪条 SQL 语句可返回唯一不同的值?
A、SELECT DIFFERENT
B、SELECT DISTINCT
C、SELECT UNIQUE
答案:B
14、哪个 SQL 关键词用于对结果集进行排序?
A、ORDER
B、SORT BY
C、SORT
D、ORDER BY
答案:D
15、通过 SQL,您如何根据 "FirstName" 列降序地从 "Persons" 表返回所有记录?
A、SELECT * FROM Persons SORT 'FirstName' DESC
B、SELECT * FROM Persons ORDER BY FirstName DESC
C、SELECT * FROM Persons ORDER FirstName DESC
D、SELECT * FROM Persons SORT BY 'FirstName' DESC
答案:B
16、通过 SQL,您如何向 "Persons" 表插入新的记录?
A、INSERT ('Jimmy', 'Jackson') INTO Persons
B、INSERT VALUES ('Jimmy', 'Jackson') INTO Persons
C、INSERT INTO Persons VALUES ('Jimmy', 'Jackson')
答案:D
17、通过 SQL,您如何向 "Persons" 表中的 "LastName" 列插入 "Wilson" ?
A、INSERT INTO Persons (LastName) VALUES ('Wilson')
B、INSERT ('Wilson') INTO Persons (LastName)
C、INSERT INTO Persons ('Wilson') INTO LastName
答案:A
18、您如何把 "Persons" 表中 "LastName" 列的 "Gates" 改为 "Wilson" ?
A、MODIFY Persons SET LastName='Wilson' WHERE LastName='Gates'
B、UPDATE Persons SET LastName='Wilson' WHERE LastName='Gates'
C、UPDATE Persons SET LastName='Wilson' INTO LastName='Gates'
D、MODIFY Persons SET LastName='Wilson' INTO LastName='Gates'
答案:B
19、通过 SQL,您如何在 "Persons" 表中删除 "FirstName" 等于 "Fred" 的纪录?
A、DELETE FROM Persons WHERE FirstName = 'Fred'
B、DELETE FirstName='Fred' FROM Persons
C、DELETE ROW FirstName='Fred' FROM Persons
答案:A
20、通过 SQL,您如何返回 "Persons" 表中记录的数目?
A、SELECT COLUMNS() FROM Persons
B、SELECT COLUMNS(*) FROM Persons
C、SELECT COUNT() FROM Persons
D、SELECT COUNT(*) FROM Persons
答案:D
Oracle的50例
一、单选题
1. Oracle发出下列select语句:
SQL> select e.empno, e.ename, d.loc
from emp e, dept d
where e.deptno = d.deptno
and substr(e.ename, 1, 1) = ‘S’;
下列哪个语句是Oracle数据库中可用的ANSI兼容等价语句?
A.select empno, ename, loc from emp join dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’;
B.select empno, ename, loc from emp, dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’;
C.select empno, ename, loc from emp join dept where emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’;D.select empno, ename, loc from emp left join dept on emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’;
答案:A
2. 你要对操纵Oracle数据库中的数据。下列哪个选项表示Oracle中select语句的功能,并且不需要使用子查询?
A.可以用select语句改变Oracle中的数据
B.可以用select语句删除Oracle中的数据
C.可以用select语句和另一个表的内容生成一个表
D.可以用select语句对表截断
答案:C
3. Oracle数据库中发出一个查询。下列哪个选项不能查询对用户定义静态表达式执行数学运算时的查询组件?
A.列子句
B.表子句
C.DUAL表
D.where子句
答案:D
4. 你要操纵Oracle数据,下列哪个不是SQL命令?
A.select * from dual;
B.set define
C.update emp set ename = 6543 where ename = ‘SMITHERS’;
D.create table employees(empid varchar2(10) primary key);
答案:B
5. 你要在Oracle中定义SQL查询。下列哪个数据库对象不能直接从select语句中引用?
A.表
B.序列
C.索引
D.视图
答案:C
6. 你要根据PRODUCT_NAME列从PROFITS表查询中过滤返回的数据。下列哪个子句包含相应过滤条件的引用?
A.select
B.from
C.where
D.having
答案:C
7. 下列代码显示了PROFITS表输出的局部:
PRODUCT_NAME PRODUCT_TYPE QTR_END_DATE PROFIT
------------ ------------ ------------ -------------
BARNEY DOLL TOY 31-MAR-2001 6575430.30
GAS GRILL APP 31-MAR-2001 1234023.88P
ENCIL OFFICE 30-JUN-2001 34039.99
下列查询的where子句哪个能正确计算2001年1月1日到6月1日六个月内销售的所有家电总利润?
A.where product_name = ‘GAS GRILL’ and qtr_end_date between ’01-JAN-2001’ and ‘01-JUN-2001’;
B.where proeuct_type = ‘APPLIANCE’ and name = ‘GAS GRILL’ and qtr_end_date = ’31-JAN-2001’ or ‘30-JUN-2001’;
C.where proeuct_type = ‘APPLIANCE’ and qtr_end_date between ’01-JAN-2001’ and ’01-JUN-2001;
D.where proeuct_name = ‘GAS GRILL’ and qtr_end_date = ’01-JAN-2001’ or ‘01-JUN-2001’;
答案:C
8. 以下选项中哪个是下列查询返回的值:select sum(sal) + sum(comm) from emp where
job = ‘ANALYST’ or ename like ‘J%’ ?
A.6000
B.9925
C.9975
D.NULL
答案:D
9. 以下选项中哪个是下列查询返回的值:select count(mgr) from emp where deptno = 10 ?
A.1
B.2
C.3
D.NULL
答案:C
10. 以下选项中哪个是下列查询返回的值:select count(*) from emp where mgr = 7700-2 ?
A.5
B.6
C.7
D.NUL
答案:A
11. 以下选项中哪个是下列SQL命令产生的第三个员工:select ename, sal from emp where
job= ‘SALESMAN’ order by empno desc ?
A.ALLEN
B.MARTIN
C.TURNER
D.WARD
答案:D
12. 以下选项中哪个是下列SQL命令产生的第三个员工:ename, sal from emp where job=
‘SALESMAN’ order by 1 desc ?
A.ALLEN
B.MARTIN
C.TURNER
D.WARD
答案:B
13. 以下选项中哪个是发出下列查询后Oracle返回的值:select substr(job, 1, 3) from
emp where ename like upper(‘__ar%’) ? 14.
A.ANA
B.CLE
C.MAN
D.SAL
答案:C
14. 以下选项中哪个是发出下列查询后Oracle返回的值:select
trunc(months_between(min(hiredate), max(hiredate))) from emp ?
A.24
B.25
C.-24
D.-25
答案:C
15. 以下选项中哪个是发出下列查询后Oracle返回的值:select * from emp where
hiredate > ’23-JAN-82’ ?(选择两个答案)
A.ADAMS
B.MILLER
C.SCOTT
D.SMITH
答案:AC
16. TEST表包含两个列,TESTCOL定义为数据类型NUMBER(10),TESTCOL_2定义为数据类型
VARCHAR2(10)。在Oracle中发出下列语句:insert into test(testcol, testcol_2) values (null, ‘FRANCIS’),然后对表进行下列查询:select nvl(testcol, ‘EMPTY’) as testcol from test where testcol_2 = ‘FRANCIS’。下列选项哪个是得到的结果?
A.Oracle返回结果0
B.Oracle返回结果EMPTY
C.Oracle返回结果NULL
D.Oracle返回错误结果
答案:D
17. 要从ORDERS表中取得数据,其中包括三个列CUSTOMER、ORDER_DATE与ORDER_AMT。可
以用下列哪个where子句查询ORDERS表,取得客户LESLIE超过2700的订单?
A.where customer = ‘LESLIE’;
B.where customer = ‘LESLIE’ and order_amt < 2700;
C.where customer = ‘LESLIE’ or order_amt > 2700;
D.where customer = ‘LESLIE’ and order_amt > 2700;
答案:D
18. 用下列输出回答问题(假设这里的信息来自本章使用的EMP表):
EMPNO
----------
SMITH-dog-
ALLEN-dog-
WARD-dog-d
JONES-dog-
MARTIN-dog
BLAKE-dog-
CLARK-dog-
SCOTT-dog-
KING-dog-d
TURNER-dog
JAMES-dog-
FORD-dog-d
MILLER-dog
下列哪个SQL语句产生这个输出?
A.select trim(trailing ‘-dog’ from ename) as ename from emp;
B.select rpad(ename, 10, ‘-dog’) as ename from emp;
C.select substr(ename,1 , 10) as ename from emp;
D.select lpad(ename, 10, ‘-dog’) as ename from emp;
答案:B
19. 用下列代码块回答问题:
SQL> select ______(-45) as output from dual;
OUTPUT ------
-45
下列哪个单行函数无法产生这个输出?
A.abs()
B.ceil()
C.floor()
D.round()
答案:A
20. 对表中的某一行,VARCHAR2列包含数值SMITHY,应用程序在右侧填充七个空格。length()
函数处理这个列值时,返回什么值?
A.6
B.13
C.30
D.60
答案:B
21. SQL *Plus中发出的下列语句:
SQL> select ceil(-97.342),
floor(-97.342),
round(-97.342),
trunc(-97.342)
from dual;
下列哪个函数不返回结果-97?
A.ceil()
B.floor()
C.round()
D.trunc()
答案:B
22. SQL *Plus中发出的下列语句:
SQL> select ceil(256.342),
floor(256.342),
round(256.342),
trunc(256.342)
from dual;
下列哪个函数不返回结果256?
A.ceil()
B.floor()
C.round()
D.trunc()
答案:A
23. 在Oracle中发出的下列查询:
SQL> select months_between(‘15-MAR-83’,’15-MAR-97’) form dual;
Oracle返回什么?
A.14
B.-14
C.168
D.-168
答案:D
24. 你要在Oracle中使用日期信息的格式掩码。下列哪种情形不适合这个格式掩码?
A.to_date()
B.to_char()
C.alter session set nls_date_format
D.to_number()
答案:D
25. 数据库中有两表PRODUCT与STORAGE_BOX,PRODUCT表中列出各个产品的惟一ID号、产
品名和特定产品所在的箱子。另一个表中列出各个存储箱(用数字标识)可以包含许多产品,但每个箱子只能在一个地方。下列哪个语句能正确显示这个数据库中所有产品ID、名称和箱子地址?
A.select p.prod_id, p.prod_name, b.box_loc from product p, storage_box b where p.prod_id = b.prod_id and prod_name=’WIDGET’;
B.select p.prod_id, p.prod_name, b.box_loc from product p, storage_box b where prod_name=’WIDGET’;
C.select p.prod_id, p.prod_name, b.box_loc from product p, storage_box b where p.stor_box_num = b.stor_box_num and prod_name=’WIDGET’;
D.select prod_id, prod_name, box_loc from product , storage_box wherestor_box_num = stor_box_num and prod_name=’WIDGET’;
答案:C
26. 开发报表时,要连接三个表的信息,这些表为EMP、DEPT与SALGRADE。只需要公司10
级以上员工相应的员工、部门地址与工资范围的记录。这个查询需要多少比较运算?
A.2
B.3
C.4
D.5
答案:B
27. 要连接两个表PRODUST与STOTAGE的内容,列出所有包含产品的箱子地址。PRODUCT有
三列ID、NAME与BOX#;STORAGE有两列BOX#与LOC。下列哪个选项无法得到想要的结果?
A.select product.id, product.name, storage.loc from product, storage where product.box#=storage.box#;
B.select product.id, product.name, storage.loc from product join storage on product.box#=storage.box#;
C.select product.id, product.name, storage.loc from product natural join storage on product.box#=storage.box#;
D.select product.id, product.name, storage.loc from product natural join storage;
答案:C
28. 你要定义外连接,下列哪个选项正确描述了外连接语句?
A.由于外连接操作允许一个表中有NULL值,因此连接这些表时不必指定相等性比较。
B.在表A与B的外连接语句中,如果不管B表有无相应记录,都要显示表A的所有行, 则可以使用右外连接。
C.在表A与B的外连接语句中,如果不管A表有无相应记录,都要显示表B的所有行, 则可以使用左外连接。
D.尽管外连接操作允许一个表中有NULL值,但连接这些表时仍要指定相等性比较。
答案:D
29. 数据库中有两个表PRODUCT与STORAGE_BOX,表中列出各个产品的惟一ID号、产品名和
特定产品所在的箱子。另一个表中列出各个存储箱(用数字标识)可以包含许多产品,
但每个箱子只能在一个地方。下列哪个语句能正确显示这个数据库中所有产品ID、名称和箱子地址,不管有没有指定存储箱?
A.select p.prod_id, p.prod_name, b.box_loc from product p left outer join storage_box b on p.stor_bax_num = b. stor_bax_num where prod_name=’WIDGET’(+);
B.select p.prod_id, p.prod_name, b.box_loc from product p left outer join storage_box b on p.stor_bax_num = b. stor_bax_num where prod_name=’WIDGET’ ;
C.select p.prod_id, p.prod_name, b.box_loc from product p right outer join storage_box b where b.stor_bax_num = p. stor_bax_num(+) and prod_name=’WIDGET’(+);
D.select p.prod_id, p.prod_name, b.box_loc from product p full outer join storage_box b on p.stor_bax_num = b. stor_bax_num where b.stor_box_num is NULL ;
答案:B
30. Oracle中发出下列命令:
SQL> select e.ename,a.street_address,a.city,a.post_code
from emp e,addr a
where e.empno = a.empno(+)
and a.state = ‘TEXAS’;
下列哪个选项显示等价ANSI/ISO语句?
A.select e.ename, a.street_address, a.city, a.state, a.post_code from emp e outer join addr a on e.empno = a.empno where a.state = ‘TEXAS’;
B.select e.ename, a.street_address, a.city, a.state, a.post_code from emp e left outer join addr a on e.empno = a.empno where a.state = ‘TEXAS’;
C.select e.ename, a.street_address, a.city, a.state, a.post_code from emp e right outer join addr a on e.empno = a.empno where a.state = ‘TEXAS’;
D.select e.ename, a.street_address, a.city, a.state, a.post_code from emp e right outer join addr a where e.empno = a.empno(+) and a.state = ‘TEXAS’;
答案:C
31. 检查SQL *Plus的下列输出:
PRODUCT.ID PRODUCT.NAME BOX.LOCATION
---------- ------------ ------------
578-X WIDGET IDAHO
TENNESSEE
456-Y WIDGET
下列哪个选项是产生这个结果的查询类型?
A.全外连接
B.左外连接
C.右外连接
D.等连接
答案:A
32. PROFITS表存储公司不同地区、产品类型和季度的利润信息。下列哪个SQL语句显示不
同地区、产品类型和季度的利润的交叉表输出?
A.select region, product_type, time, sum(profit) from profits group by region, prod_type, time;
B.select region, product_type, time from profits group by rollup(region, prod_type, time);
C.select region, product_type, time, from profits group by cube(region, prod_type, time);
D.select region, product_type, time,sum(profit) from profits group by cube(region, prod_type, time);
答案:D
33. 对数据库运行下列哪个group by查询时会从Oracle产生错误?
A.select deptno, job, sum(sal) from emp group by job, deptno;
B.select sum(sal), deptno, job from emp group by job, deptno;
C.select deptno, job, sum(sal) from emp;
D.select deptno, sum(sal), job from emp group by job, deptno;
答案:C
34. 检查下列SQL的输出
SQL> select a.deptno,a.job,b.loc,sum(a.sal)
from dmp a,dept b
where a.deptno = b.depton
group by a.deptno,a.job,b.loc
order by sum(a.sal);
这个查询按哪个列的顺序返回输出?
A.A.DEPTON
B.A.JOB
C.B.LOC
D.SUM(A.SAL)
答案:D
35. 要查询的PROFITS表存储公司不同地区、产品类型和季度的利润信息。下列哪个SQL语
句按不同地区、产品类型和季度求出平均利润大于100000美元的利润?
A.select region, prod_type, period, avg(profits) from profits where avg(prodit) > 100000 group by region, prod_type, period;
B.select region, prod_type, period, avg(profits) from profits where avg(prodit) > 100000 order by region, prod_type, period;
C.select region, prod_type, period, avg(profits) from profits group by region, prod_type, period having avg(prodit) > 100000;
D.select region, prod_type, period, avg(profits) from profits group by region, prod_type, period having avg(prodit) < 100000;答案:C
36. 公司的员工费用应用程序有两表,一个是EMP,包含所有员工数据,一个是EXPENSE,
包含公司每个员工提交的费用票据。下列哪个查询取得提交的费用总和超过其工资值的员工ID与姓名?
A.select e.empno, e.ename from emp e where e.sal < (select sum(x.vouch_amt) from expense x) and x.empno = e.empno;
B.select e.empno, e.ename from emp e where e.sal < (select x.vouch_amt from expense x where x.empno = e.empno);
C.select e.empno, e.ename from emp e where e.sal < (select sum(x.vouch_amt) from expense x where x.empno = e.empno);
D.select e.empno, e.ename from emp e where exists (select sum(x.vouch_amt) from expense x where x.empno = e.empno);
答案:C
37. 看看下列语句:
SQL> select ename
from emp
where empno in
( select empno
from expense
where vouch_amt > 10000 );
下列哪个SQL语句产生与上面相同的输出,改写成使用运算符?
A.select e.ename from emp e where exists(select x.empno from expense x where x.vouch_amt>10000) and x.empno = e.empno;
B.select e.ename from emp e where exists(select x.empno from expense x where x.vouch_amt>10000 and x.empno = e.empno);
C.select e.ename from emp e where x.empno = e.empno and exists(select x.empno from expense x where x.vouch_amt>10000);
D.select e.ename from emp e, expense x where x.empno = e.empno and x.vouch_amt>10000 and exists(select x.empno from expense x where);
答案:B
38. 用下列代码块回答问题:
SQL> select deptno,job,avg(sal)
from emp
group by deptno,job
having avg(sal)>
( select sal
from emp
where ename = ‘MARTIN’ );
上述语句使用下面哪种子查询?
A.单行子查询
B.多行子查询
C.from子句子查询
D.多列子查询
答案:A
39. 公司销售数据库有两个表,PROFITS存储不同地区不同季度的产品销售利润,REGIONS
存储每个部门地区名称、该地区总部地址和该地区副总裁姓名。下列哪个查询取得SMITHERS、FUJIMORI与LIKKARAJU领导的地区的 玩具销售利润?
A.select sum(profit) from profits where region in (select region froms regions where reg_head in (‘SMITHERS’, ‘FUJMORI’, ‘LAKKARAJU’)) and product =’TOYS’;
B.select sum(profit) from profits where region like (select region froms regions where reg_head in (‘SMITHERS’, ‘FUJMORI’, ‘LAKKARAJU’) and product =’TOYS’ );
C.select sum(profit) from profits where region = (select region froms regions where reg_head in (‘SMITHERS’, ‘FUJMORI’, ‘LAKKARAJU’)) and product =’TOYS’;
D.select sum(profit) from profits where region is (select region froms regions where reg_head in (‘SMITHERS’, ‘FUJMORI’, ‘LAKKARAJU’)) and product =’TOYS’;
答案:A
40. 下列代码块显示的查询包含一个子查询:
SQL> select dname, avg(sal) as dept_avg
from emp, deptwhere emp.deptno = dept.deptno
group by dname
having avg(sal) >( select avg(sal)*1/4from emp,deptwhere emp.deptno = dept.deptno )
order by avg(sal);
可以用下列哪个子句重新定义这个查询,删除子查询与主查询中组函数执行的重复?
A.group by
B.order by
C.with
D.having
答案:C
41. 用下列代码块回答问题:
SQL> select e.deptno,e.ename,e.job,e.sal
from emp e
where e.sal = ( select max(e2.sal) from emp e2* where nvl(e.deptno,99)
= nvl(e2.deptno,99));
DEPTNO ENAME JOB SAL--------- ---------- ---------- ---------30 BLAKE MANAGER 285010 CLARK MANAGER 245020 SCOTT ANALYST 3000KING PRESIDENT 500020 FORD ANALYST 3000要在上述返回集的DEPTNO列中显示99,可以用下列哪个SQL语句?
A.select nvl(e.deptno,99), e.ename, e.sal from emp e where (e.deptno, e.sal) = (select max(e2.sal) from emp e2 where nvl(e.dept, 99) = nvl(e2.deptno, 99));
B.select nvl(e.deptno,99), e.ename, e.sal from emp e where e.sal = (select max(e2.sal) from emp e2 where nvl(e.dept, 99) = nvl(e2.deptno, 99));
C.select nvl(e.deptno,99), e.ename, e.sal from emp e where (e.deptno, e.sal) = (select e2.deptno,max(e2.sal) from emp e2 where nvl(e.dept, 99) = nvl(e2.deptno,99));
D.select nvl(e.deptno,99), e.ename, e.sal from emp e where (e.deptno, e.sal) = (select e2.deptno,max(e2.sal) from emp e2 where nvl(e.dept, 99) = nvl(e2.deptno,99) group by e1.deptno);
答案:B
42. 公司销售数据库包含一个PROFITS表,按产品名、销售地区和季度列出利润信息。如果
要取得公司五个最畅销产品清单,可以用下列哪个SQL语句:
A.select p.prod_name, p.profit from (select prod_name, profit from profits order by profit desc) where rownum <= 5;
B.select p.prod_name, p.profit from (select prod_name, sum(profit) from profits group by prod_name order by sum(profit) desc) subq where p.prod_name = subq.prod_name;
C.select p.prod_name, p.profit from (select prod_name, sum(profit) from profits group by prod_name order by sum(profit) desc) where rownum <= 5;
D.select p.prod_name, p.profit from (select prod_name, sum(profit) from profits order by sum(profit) desc) where rownum <= 5;
答案:C
43. 检查下列代码段中的脚本dates.sql:
accept v_hiredate prompt ‘enter hire date => ’
select empno, ename, job
from emp
where trunc(hiredate) = trunc(‘&v_hiredate’);
为了使脚本正确工作,要改变哪个方面?
A.变量v_hiredate应变成接受DATE信息。
B.查询中的trunc()函数应删除。
C.accept命令中的prompt子句是多余的。
D.这个脚本很好。
答案:A
44. Oracle中要生成数据库表,下列哪个选项是无效表生成的语句?
A.create table cats(c_name varchar2(10), c_weight number, c_owner varchar2(10));
B.create table my_cats as select * from cats where owner = ‘ME’;
C.create global temporary table temp_cats(c_name varchar2(10), c_weight number, c_owner varchar2(10));
D.create table 51cats as select c_name, c_weight from cats where c_weight > 5;
答案:D
45. 试图在Oracle生成表时遇到下列错误:ORA-00955-name is already used by existing
object。下列哪个选项无法纠正这个错误?
A.以不同的用户身份生成对象。
B.删除现有同名对象
C.改变生成对象中的列名。
D.更名现有同名对象。
答案:C
46. SALES表中的PROFITS列声明为NUMBER(10, 2)。下列哪个值无法在这个列中存储?
A.5392845.324
B.871039453.1
C.75439289.34
D.60079829.25
答案:B
47. 员工KING于1981年11月17日聘用,你对Oracle数据库发出下列查询:select
vsize(hiredate) from emp where ename = ‘KING’。下列哪个选项是返回的值?
A.4
B.7
C.9
D.17
答案:B
48. SALES表中将PRODUCT_NAME列定义为CHAR(40)。后面要在表中增加一行,PRODUCT_NAME
值为CAT_TOYS。然后发出下列命令:select vsize(product_name) from sales。下列哪个选项是返回的值?
A.8
B.12
C.40
D.4000
答案:C
49. JOB表有三个列JOB_NAME、JOB_DESC和JOB_WAGE。用下列命令在JOB_DESC表中插入新
行:
SQL> insert into job(job_name, job_desc)
values (‘LUCKEY’, ‘MAKES COFFEE’);
之后查询这个表时得到的结果:
SQL> select * from job where job_name = ‘LUCKEY’;
JOB_NAME JOB_DESC JOB_WAGE
--------- ------------ --------
LUCKEY MAKES COFFEE 35
数据是如何填信JOB_WAGE表的?
A.JOB表中的LACKEY行已经存在,JOB_WAGE设置为35。
B.生成表时JOB_WAGE列定义的default子句指定插入行时的值。
C.insert语句的values子句包含隐藏值,在插入行时加入。
D.惟一理由是对JOB表发出的后一个update语句增加了JOB_WAGE值
答案:B
50. 删除Oracle数据库中父/子关系中的父表。在删除父表时下列哪个对象不会删除?
A.相关约束
B.子表
C.相关触发器
D.相关索引
答案:B
二、问答题
1. 什么是事务、特点、在Oracle中具体的应用?
答案:事务是数据库中最小的一个逻辑工作单元。 特点:ACID,分别指
事务的原子性:就是事务所包含的数据库操作要么都做,要么都不做;
事务的一致性:是事务原子性的体现,事务所对应的数据库操作要么成功要么失败没有第三种情况。事务不管是提交成功与否都不能影响数据库数据的一致性状态;
事务的隔离性:事务对数据的操作不能够受到其他事务的影响; 事务的持续性:也就是说事务对数据的影响是永久的。
在oracle中已commit或rollback作为上一个事务的结束标志及下一个新事物开始的标志。
2. oracle中如何获取系统时间?
答案:select sysdate from dual;
3. Truncate与 delete的区别?
答案: delete一般用于删除少量记录的操作,而且它是要使用回滚段并且要进行显示的提交事务。而truncate则使用于大量删除数据,而且隐式提交事务,其速度要比使用delete快的
4. DDL和DML分别代表什么?
答案: DDL表示数据定义语言,在ORACLE中主要包括CREATE,ALTER,DROP;
DML表示数据操作语言,主要的DML有SELECT,INSERT,UPDATE,DELETE. 5. GRANT 权限列表TO 用户;
5. Oracle使用什么语句给用户分配权限?
答案:GRANT 权限列表TO 用户;
相关原文链接:1、http://www.itpub.net/2019/09/11/3115/
2、https://blog.csdn.net/xq2768637066/article/details/50697315