一、选择题 1. View the Exhibits and examine the structures of the PRODUCTS, SALES, and CUSTOMERS tables. You issue the following query:
A.It executes successfully. B.It produces an error because the NATURAL join can be used only with two tables. C.It produces an error because a column used in the NATURAL join cannot have a qualifier. D.It produces an error because all columns used in the NATURAL join should have a qualifier.
A B C D
C
[解析] 题目问的是对于SQL语句查询输出哪项是正确的,自然连接查询结果列不能有别名限定词,实验如下:
去掉“p.”即可正确查询。
本题中,对于选项A,可以正常执行,说法错误,会产生ORA-25155错误。
对于选项B,自然连接只能用于2个表中,也可以用于2个视图中。所以,选项B错误。
对于选项C,经过以上实验,选项C说法正确。
对于选项D,选项说所有列必须要有别名,说法错误,不能含有别名。
二、简答题 1. 请使用ON子句连接查询SCOTT.EMP和SCOTT.DEPT表,要求显示EMPNO、ENAME、JOB和SAL字段。
题目要求使用ON子句,这是一个考查点,SQL语句如下:
情景设计:很多“八零后”、“九零后”都有属于自己的QQ空间,在登陆QQ空间中时候,有一个重要信息就是“谁来看过我”,换句话说,就是哪位好友曾经访问过自己的空间,普通用户好像只能查看最近访问过空间的100个人,“黄钻”等级的可以看的人更多,对此假设有如下的表,在SQL中“--”表示注释: 基于上面的情景设计,用SQL语句来完成如下的笔试题目,假设自己的QQ号码为100:2. 查询自己QQ号码的昵称,创建日期。
考查单表查询。SQL语句以及运行结果如下:
3. 查询去年有多少人申请了QQ号码。
考查函数的运用、COUNT和WHERE子句的过滤。SQL语句以及运行结果如下:
4. 查询QQ号码中含有3的QQ号。
考查模糊查询。SQL语句以及运行结果如下:
5. 假设想知道昨天有谁来看过自己的QQ空间,该如何书写,要求展示看过我空间的QQ号码和昵称。
考查多表连接查询。SQL语句以及运行结果如下:
6. 查询近一周之内来自己空间浏览的好友频度,要求展示好友昵称和来自己空间次数。
考查分组函数GROUP BY的运用。SQL语句以及运行结果如下:
7. 查询近一周之内来自己空间次数大于1的人有哪些?要求展示来访者昵称和来自己空间次数。
考查HAVING和GROUP BY的运用。SQL语句以及运行结果如下:
8. 查询近一周之内来自己空间次数大于1且不是自己QQ好友的人有哪些?要求展示好友昵称和来自己空间次数。
考查子查询。
9. 查询近一周之内来自己空间最频繁的一位好友是谁?要求展示好友昵称和来自己空间次数。
主要考查TOPN的查询。SQL语句以及运行结果如下:
10. 删除自己看过QQ号码为102的记录。
考查DELETE删除数据的运用。SQL语句以及运行结果如下:
11. 更新自己的ee昵称为“^_^”。
考查UPDATE更新数据的运用。SQL语句以及运行结果如下:
12. 什么是SQL注入?
所谓SQL注入(SQL Injection)就是通过把SQL命令插入到WEB表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令的目的。例如,在代码中使用下面的SQL语句:SQL="SELECT TOP 1*FROM USER WHERE NAME='''+NAME+'''AND PASSWORD='''+PASSWORD+'''"”来验证用户名和密码是否正确,其中,NAME和PASSWORD是用户输入的内容,当用户输入用户名为AA,密码为“BB或'A'='A'”,那么拼接出来的SQL语句就为“SELECT TOP 1*FROM USER WHERE NAME='AA' AND PASSWORD='BB' OR 'A'='A'”,那么只要USER表中有数据,这条SQL语句就会有返回结果。这就达到了SQL注入的目的。 作为DBA,永远不要信任用户的输入,相反,必须认定用户输入的数据永远都是不安全的,对用户输入的数据必须都进行过滤处理。 为了防止SQL注入,需要注意以下几个要点: (1)永远不要信任用户的输入。可以通过正则表达式或限制长度的方式对用户的输入进行校验;对单引号进行转换等。 (2)永远不要使用动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询、存取。 (3)永远不要使用管理员权限的数据库连接,建议为每个应用赋予单独的权限。 (4)不要把机密信息直接存放,建议对密码或敏感信息进行加密或HASH处理。 (5)应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。 (6)SQL注入的检测一般采取辅助软件或借助网站平台,软件一般采用SQL注入检测工具JSKY,网站平台就有安全平台检测工具:MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效地防御SQL注入、XSS(Cross Site Scripting,跨站脚本攻击,为了不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS)攻击等。
13. 热备份和冷备份的区别是什么?
热备份是在数据库运行的情况下,采用归档方式备份数据的方法,针对归档模式的数据库,在数据库仍旧处于工作状态时进行备份,而冷备份是指在数据库已经正常关闭后,将关键性文件复制到另外位置的一种备份方式,适用于所有模式的数据库。冷备份和热备份的优缺点见表所示。
14. 什么是OLAP和OLTP?
数据处理大致可以分成两大类:OLTP(On-Line Transaction Processing,联机事务处理)和OLAP(On-Line Analytical Processing,联机分析处理)。
OLTP是传统的关系型数据库的主要应用,即记录实时的增、删、改,主要是执行基本的、日常的事务处理,例如,在银行存取一笔款,就是一个事务交易。OLTP系统强调数据库处理效率,强调内存各种指标的命中率,强调绑定变量,强调并发操作。一般情况下,OLTP系统数据量少,DML操作比较频繁,并行事务处理多,但是一般都比较短。OLTP表示事务性非常高的系统,一般都是高可用的在线系统,以小的事务以及小的查询为主。评估其系统的时候,一般看其每秒执行的事务数以及SQL执行的数量。在OLTP系统中,单个数据库每秒处理的事务数往往超过几百个,或者是几千个,SELECT语句的执行量每秒几千甚至几万个。典型的OLTP系统有电子商务系统、银行、证券等,例如,美国eBay的业务数据库,就是很典型的OLTP数据库。在Oracle中创建OLTP系统时,使用一般用途或事务处理(General Purpose or Transaction Processing)模板。
具体而言,OLTP的特点一般有以下几点:①实时性要求高。②数据量不是很大。③交易一般是确定的,所以,OLTP是对确定性的数据进行存取,例如存取款都有一个特定的金额。④并发性要求高,但是有严格的事务完整性和安全性要求。例如,有可能你和你的家人同时在不同的银行取同一个账号的存款。
OLAP的概念最早是由关系型数据库之父E.F.Codd于1993年提出的,他认为OLTP己不能满足终端用户对数据库查询分析的需要,SQL对大型数据库进行的简单查询也不能满足终端用户分析的要求。用户的决策分析需要对关系数据库进行大量计算才能得到结果,而查询的结果并不能满足决策者提出的需求。OLAP是DSS(Decision Support System,决策支持系统)的一部分,是数据仓库的核心部分。DSS是辅助决策者通过数据、模型和知识,以人机交互方式进行半结构化或非结构化决策的计算机应用系统。DSS是管理信息系统(Management Information System,MIS)向更高一级发展而产生的先进信息管理系统,它为决策者提供分析问题、建立模型、模拟决策过程和方案的环境,调用各种信息资源和分析工具,帮助决策者提高决策水平和质量。所谓数据仓库是对于大量已经由OLTP形成的数据的一种分析型的数据库,用于处理商业智能、决策支持等重要的决策信息;数据仓库是在数据库应用到一定程序之后而对历史数据的加工与分析。OLAP是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。数据量大,DML少。典型的应用就是复杂的动态报表系统。在Oracle中创建OLAP系统时,使用数据仓库(Data Warehouse)模板。
具体而言,OLAP的特点一般有以下几点:①实时性要求不是很高,很多应用都是每天晚上更新一次数据。②数据量大,因为OLAP支持的是动态查询,所以,用户需要统计很多数据以后才能得到想要知道的信息,OLAP处理的数据量很大。③因为重点在于决策支持,所以,OLAP查询一般是动态的,也就是说允许用户随时提出查询的要求。于是在OLAP中通过一个重要概念“维”来搭建一个动态查询的平台(或技术),供用户自己去决定需要知道什么信息。
OLAP和OLTP的区别见表。