数据库程序员面试分类真题6.docx
数据库程序员面试分类真题6筒答题1. 什么是多表连接查询?正确答案:多表连接查询是指基于两个或两个以上的表或视图的查询。在实际应用中,查洵单表不可能满足业务的需求,只能通过多表的连接来获取所需要的(江南博哥)数据。多表连接查询主要分为等值连接、非等值连接、外连接和Fl连接四类。需要注意的是,WHERE子句中的连接条件的个数不能少于FROM后表的个数减1,这样可以确保不会形成笛卡儿积。即为了连接n个表,至少需要nT个连接条件。例如,为了连接5个表,至少需要4个连接条件。考点SQ1.编写2. 笛卡儿积是什么?正确答案:笛k儿积是把表中所有的记录做乘枳操作,生成大量的结果,而通常结果中可用的值有限.笛K儿积出现的原因多种多样,通常是由于连接条件缺失造成的。对笛卜儿积的使用,需要注意以卜.几点:1)笛卡儿积会在下面条件下产生:省略连接条件或连接条件缺失。连接条件无效,例如,&A和表B进行连接,但连接条件为A.ID=A.ID,这里的连接条件无效。统计信息不准确,例如,&A有100OW的数据量,但是在统计信息中记泉的是0行,这种情况下表的连接易形成笛卡儿积。2)由于笛卡儿积中的所有表中的所有行互相连接,所以,形成笛卡儿积的结果集的记录数是组成它的各个子集的乘积。3)为了避免笛卡儿积,需要在WHERE字句中加入有效的连接条件。4)默认情况卜.,查询会返回全部行,包括重复行。考点SQ1.编写3. 什么是FoP-N查询?正确答案:在数据库查询中,“T。PT分析”也称“T。P-N查询”,就是获取某一数据集合(表或查询结果集)中的前N条记录,例如,考试成绩前三名的学生信息、销量前十名的畅销书信息、从当前时刻开始最早起飞的五次航班信息等,实际应用中Top-N分析经常会用到。以下几点是Top-N的性质:DTop-N分析就是查询前几名的意思。2)在OraCle数据库中,Top-N分析通过ROWNUM实现。3)Top-N分析中必须使用ORDERBY排序子句。4)Top-N分析中通常会有内建视图,一般的方法是先对内建视图的某一列或某些列排序,然后对此内建视图使用RoWNUM取前多少行数据。如果要按照某种规则对符合条件的雀询结果进行排序,再返回爸询结果中的全部记录行,那么这是很容易做到的。例如,要查询10号和20号部门所有员工的工资信息,可采用如卜方式:SE1.ECTEMPNO,EYAME,S1.FROMSCOTT.EMPDWHEREDEPTNOIN(10,20)0RDERBYD.EMPNO;如果是要在排序查询中进行ToP-N分析,那么情况要夏杂一些。例如,要求按照工资降序排列,查询10号和20号部门工资最高前五名员工的信息,则SQ1.语句为SY%ftrib>SE1.ECTROWNUM的RN原断界MPNo员尊空NAME姓名JSA1.工炎2FROM(SElRTROWNUMRNIEMPNaENAMErSA1.FRoMSCOnfMPftHEREDEPTNOIN(Ii)1MiORDERBYSA1.DESqTA3WEREROWNfM<=5;相雕居虹轴枚名工费157839KING500024788三113000377902F三30W427566JONES2975537782C1.ARK2450在以上结果中,“原始行号”RN的含义为子查询结果排序前的行号(子查询执行了WHERE子句之后,但尚未执行ORDERBY子句排序时的行号)。ROWNUM是OraCIe数据库对查询结果Fl动添加的一个伪列。简单地说,就是在每一次查询操作中,Oracle都会对符合条件的查询结果中的每一条记录行自动进行编号,该编号总是从1开始,并保存在伪列ROWNUM中。之所以称之为“伪列”,是因为它在物理上(查询目标表中)并不是真的存在,而是在每一次查询过程中动态生成的。此外,由于伪列ROWNUv在物理上并不存在,因此,不允许以任何查询基表的名称作为前缀。考点SQ1.编写4. 什么是子查询?子查询包括哪儿种类型?正确答案:所谓子查询是指嵌套在其他查询中的查询语句,又称为内部查询或嵌套查询。主查询又称为外部查询,是包含其他子查询的查询语句。按照子查询与主查询的关联关系,可以将子查询分为“标量子查询(SCaIarSU美Uery系和“关联子查询”两种,其中,关联子查询乂可以分为相关子查询(CorreIaICdSubqucry)和非相关子查询(UnCoITeIaICdSubquery),IE相关子查询也叫独立子查询。子雀询根据返回的行数分为单行子查询和多行子查询,若根据返回的列数则分为单列子查询和多列子查询。子查询的分类可以参考卜图。在向卜T主充沟H考点SQ1.编写5. 什么是合并查询(集合查询)?正确答案:有时在实际应用中,为了合并多个SE1.ECT语句的结果,可以使用集合操作符UNION、UNIONA1.1.INTERSECT,MINUS,这些集合操作符多用于数据量比较大的数据库,运行速度快,称为合并查询,也叫集合查询。以下分别对这几个命令进行分析与讲解。DUNION:该操作符用于计算两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行,只保留重复行的一行结果。需要注意的是:当执行联合查询时,必须保证它们具有相同个数的结果列,否则报如卜.的错误:ORA-01789:查询块的结果列数。列的数据类型不同也报错:ORA-01790:expressionmusthavesamedatatypeScorrespondingexpression,数据类型的长度不一样是nJ以的,但是必须保证是相同的数据类型。2)UNIONA1.1.:该操作符与UNlON相似,但是它不会取消重复行,而且不会排序。3) INTERSECT(相交):该操作符用于计算两个结果集的交集。4)MlNUS(相减):该操作符用于计算两个结果集的差集,它只会显示存在第一个集合中,而不存在第二个集合中的数据,而且第一个集合中的相同数据只输出一个。MINUS具有如下的实用功能:1)比较两个表中的某一个字段中的不同的数据。2)比较两个表的结构的不同。示例如卜NSYSlhrdb>CREATETAB1.ET_1.HR_01(IDNUMBER):Tabletreated.SYSlhrdb>CRETETAB1.ET_1.HR_02(IDNUMBER,NAMEVRCHR2(255):Tablecreated.SYSlhrdb>SE1.ECTC.CO1.UMN_NAMEEROMCO1.SCWHEREC.TAB1.E_NAME='T1.1.HRJ)2'2 MINUS3 SE1.ECTC.CO1.UMZNAVEFROMCo1.SCWHEREC.TAB1.E_NAME=,T_1.HR_011;CO1.UMNNAMENAME可见,表T_1.HR_02比表T_1.HR_01多出一列NAME=考点SQ1.编写6. SQ1.:1999语法是什么?正确答案:Oracle除了自己的连接语法外,同时支持ANSKAmericanNationalStandardsInstitute,美国国家标准协会)的SQ1.:1999标准的连接语法。SQ1.:1999是ANSI制定的通用标准,各数据库厂商都支持的一个标准。SQ1.:1999语法格式如下:SE1.ECTtable,column,table2.columnFROMtablelCROSSJ0INtable21NATURA1.JOINtable2J0INtable2USING(column_name)IJOINtable2ON(tablel.colmn-name=table2.column_name)leftIrightIfullouterjointabie2ON(tablel.column_name=table2.colunin_name)WHERE.;其中,INNERJOlN表示内连接;1.EFTJoIN表示左外连接:RlGHTJoIN表示右外连接;FUI.1.JolN表示完全外连接;ON子句用于指定连接条件。连接分类图如下图所示。各种表之间的连接方式见卜表。定义甑标好笛卡儿K)±OHU!它不胧任何戢看遍条件,第跳翻INM蹲中的M与务个WW中储行新TESEIKTAJD&1AMEFKOMNB:内谶(ImcrJomzJoin)研物的条麻匹18左右两个表中的斤,3假连据俩帏衣格山携抵分雕般赧桶连接SE1.ECTAjDBNAMEFROMAXXNBONAJD=RID;蝴侬使用驰财解麻酸左右两个表中加GSE1.fCTA.ID3.NAMEROMAJOINBONA.lDoB.lD外趟就跳(1.ffTJoW)的赫中舲斯(稀右神艮否存在与它地18的行)减右或中金SMtf00SE1.ECTAjD即AMEFROMA1.OTJO(NBONU>B.ID;右横(RlGHTJOfN)包含右表中雌即(稀碳睢杳存在与它憾IE的行)以及左表中全00SE1.ECTAJDBNAMEFKOMARlGKTJoinbonajd=BJD;钦赧(FU1.1.JOW)的左确株触断,不管在另泣轴快将在驼屈KMQDSE1.ECTA.IDANAMeFROMAFU1.1.x>inbonaji>b.id:考点SQ1.编写7. 什么是交叉连接(CrOSSJoin)?正确答案:交叉连接(CroSSJoin)子句是在SQ1.:1999标准中开始支持的,为了生成笛卡儿积而设计。连接语法中,交叉连接不使用WHERE子句,而是在FROM子句中的两个连接表之间使用CRoSSJON显式标明。例如:SE1.ECTEMPNO,ENAME,SA1.,EMP.DEPTNO,DNAMEFROMSCOTT.EMPCROSSJOINSCOTT.DEPT;上述语句返回的是被连接的两个表所有符合查询条件记录行的笛k儿积,其结果集合中的记录行数等于第一个表中符合查询条件的记录行数乘以第二个表中符合查询条件的记录行数,其效果等同于如下语句:SE1.ECTEMPNO,ENAME,SA1.,EMP.DEPTNO,DNAMEFROMSCOT1.EMP1SC011.DEP:考点SQ1.编写8. 什么是内连接(InnerJoinZJoin)?正确答案:内连接(InnCrJoin/Join)是常用的杳询方式,也叫简单连接,是从两个或更多的表中筛选出符合连接条件的数据(记录行),对其连接后再进行杳询并返回结果,如果遇到无法满足连接条件的数据,那么将之丢弃。内连接在FROM子句中使用INNERJoIN或JOIN关键字标识,并使用ON子句指定连接条件以及其他的查询限定条件。内连接可以分为等值连接和非等值连接。例如,“SE1.ECT*FROMA,BWHEREA.FIE1.Dl=B.FIE1.D2”属于等值连接,它返回满足左表输入与右表输入连接的每一行。考点SQ1.编写9. 请使用ONr句连接查询SCOTT.EMB和SCOTT.DEPT表,要求显示EMPN0、ENAME、JOB和SA1.字段。正确答案:题目要求使用0子句,这是一个考查点,SQ1.语句如下:SYSmJIRDB>SE1.ECTEMPNO,ENME,JOB,S1.FROMSC011.EMPEJOINSCOTT.DEPTDONE.