内容简介:

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

吊打面试官!MySQL和Oracle灵魂100问,你能答出多少?相关推荐

  1. 吊打面试官!MySQL灵魂100问,你能答出多少?

    推荐阅读: 面试机会不等人,资料看精不看多!史上最全Java技术资料合集! 2019年中总结,400道一线大厂高频精选面试题合集(JVM+Spring+RabbitMQ+Mybatis+Redis+分 ...

  2. 【转】MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余(收藏系列)

    MySQL 三万字精华总结 + 面试100 问,吊打面试官绰绰有余(收藏系列) 本文公众号来源:JavaKeeper作者:派大新 写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术 ...

  3. mysql 触发器条件判断偶尔失效_mysql┃多个角度说明sql优化,让你吊打面试官!...

    ​正文约: 4744字 预计阅读时间: 12分钟 文章首发于我的微信公众号:moon聊技术,欢迎大家关注 mysql┃多个角度说明sql优化,让你吊打面试官! 目录 目录 前言 正文 1.表结构优化● ...

  4. 写给程序员的 MySQL 面试高频 100 问,看完吊打面试官!

    点击上方"五分钟学算法",选择"星标"公众号 重磅干货,第一时间送达 来源 | juejin.im/post/5d351303f265da1bd30596f9 ...

  5. 别看是面试问烂的题目,一面试你照样还是不会系列MySQL四种隔离级别,看完吊打面试官!

    别看是面试问烂的题目,一面试你照样还是不会系列MySQL四种隔离级别,看完吊打面试官! 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也 ...

  6. 吊打面试官系列之---吃透MySQL mvcc机制--锁模块

    目录 事务四大特性(ACID) 事务并发访问引起的问题以及如何避免 1.更新丢失--mysql所有事务隔离级别都可以在数据库层面上均可避免 2.脏读--read-committed事务隔离级别以上可避 ...

  7. ❤️手撕这十道HiveSQL题还不能吊打面试官,却能保你不被吊打❤️【推荐收藏】

    全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 HiveSQL十题 第一题 1.需求 2.数据准备 3. ...

  8. Spring事务失效的 8 大原因,这次可以吊打面试官了!

    今天再来一篇<吊打面试官>系列,这次真的要吊打了,哈哈!(看往期吊打系列请在后台回复:吊打,我会陆续更新--) 前几天栈长不是发了一篇文章,里面有一个关于事务失效的问题: 用 Spring ...

  9. 吊打面试官!Redis 常见面试题请收好 | 原力计划

    作者 | 敖丶丙 责编 | Elle 出品 | CSDN 博客 你知道的越多,你不知道的越多 GitHub地址 https://github.com/AobingJava/JavaFamily 已经开 ...

最新文章

  1. leetcode算法题--数组中数字出现的次数
  2. mac下修改mysql默认字符集为utf8
  3. java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...
  4. 华为手机连接电脑显示无法连接服务器,无法连接到服务器电脑
  5. 迭代器生成器可迭代对象_使用迭代器时如何避免ConcurrentModificationException
  6. 解决IDEA Maven项目无法下载依赖
  7. JavaScript中调皮的undefined
  8. Mac 下安装Redis
  9. 转: Oracle AWR 报告 每天自动生成并发送邮箱
  10. Maven实战(六)依赖
  11. Ubuntu软件安装新选择—星火应用商店(QQ、微信等一网打尽)
  12. APP测试基本流程以及APP测试要点
  13. 【微信小程序】常用组件及基本使用详解
  14. video 圆角 html,圆形视频和圆角视频的一种实现方式
  15. matlab 倒谱ceptrum,倒谱法求共振峰
  16. My Fifteenth Page - 快乐数 - By Nicolas
  17. WEB安全之:Mysql 数据库 SQL 注入(三)
  18. 阿里的 P8 和 P9 到底是什么水平
  19. C#datagrid与datagridview的区别
  20. python使用百度aip文字识别

热门文章

  1. 爱情还能找人托管?| 搞笑囧图
  2. 一节前端课:html+css+js做个计算器
  3. Typora搭建图床解决上传md文档图片无法加载的问题
  4. 【牛顿迭代逼近】求根号2的快速方法
  5. IntelliJ启动项目特别慢(包括JRebel启动),可以说是非常慢的解决办法,智量终端安全就是一个坑爹软件呀,坑,坑,坑
  6. 购买汽车都有哪些费用,以及计算公式
  7. Java核心技术卷一读书笔记
  8. 使用Javascript无限添加QQ好友原理解析
  9. 搭建node版本下载服务器(node版本高速镜像)
  10. 中国非处方彩色美瞳隐形眼镜行业销售动态与营销前景预测报告2022-2027