《数据库程序员面试分类真题27.docx》由会员分享,可在线阅读,更多相关《数据库程序员面试分类真题27.docx(12页珍藏版)》请在第壹文秘上搜索。
1、数据库程序员面试分类真题27倚答题1.Oracle和MySQ1.中的分组(GROUPBY)有什么区别?正确答案:OraCIe对于GROUPBY是严格的,所有要SE1.ECT出来的字段必须在GRO(江南博哥)UPBY后边出现,否则会报错:u0R-00979:notaGROUPBYexpressiono而MySQ1.则不同,如果SE1.ECT出来的字段在GRoUPBY后面没有出现,那么会随机取出一个值,而这样查询出来的数据不准确,语义也不明确。所以,作者建议在写SQ1.语句的时候,应该给数据库一个非常明确的指令,而不是让数据库去猜测,这也是写SQ1.语句的一个非常良好的习惯。下面给出一个示例。有一
2、张T_MAX_1.HR表,数据如下图所示,有3个字段ARTIC1.E.AUTHOR和PRICE。请选出每个AUTHOR的PRICE最高的记录(要包含所有字段)。ARTIC1.EAUTHORPRICE0001B3.99000210.990003C1.690004B19.9500056.96首先给出建表语句:CREATETAB1.ET_MAX_1.HR(ARTIC1.EVRCHR2(30),AUTHORVARCHR2(30),PRICENUMBER)OracteCREATETAB1.ET_MAX_1.HK(ARTIC1.EVARCHAR(30),AUTHORVARCHAR(30),PRICEF1.
3、OAT);MySQ1.OraCIe通用INSERTINTOT_MAX_1.HRVA1.UES(0001,B,3.99);INSERTINTOT_MAX_1.HKVA1.UES(,0002,A,10,99);INSERTINTOT_MAX_1.HRVA1.UESC0003,C,.1.69);INSERTINTOT_MAX_1.HRVA1.UESC0004,B,19.95);INSERTINTOT_MAX_1.HRVA1.UESC0005,A,6.96);COMMIT;SE1.ECT*FROMTMAX1.HR;在OraCIe中的数据:-AUTHORBRlCE1.HRgOrchSnSE1.ECTFR
4、OM1.MAX_1.HRlAKiK1.EAUTHORPRICEOOOIB3.99OOO2A10.990003CIJ0004B19.95啷A6.96在MySQ1.中的数据:mysqlSE1.ECT,FROMT_MAX_1.HR;IARn(IE:.U三Fffl(IIIIMIselnw11O;wsion5.6.21-HiteTprise-Coeercial-advanced-logmjqSE1.ECTTAKnC1.ElAIJrHOKMAXlT,PR1CE)FROMT_MAX_1.HRTGROUPBY1.ITIIOR:三IOEA11三WX(T-PRICE)MO2A10.99MOIB19.95W03!C
5、1.693rowsint(Q(Osa)11i)SlSE1.ECT*FROMT_MAX_1.HRTGROUPBYTA(JTHOR;IARIiafIIIM三IKICE100Q2IA,111!10.99,100oiIBI199I三!C1.693Wiinjet(0.00sec)虽然执行不报错,可以查询出数据,但是从结果来看数据并不是最终想要的结果,甚至数据是错乱的。卜.面给出几种正确的写法(在OraCle和IMySQ1.中均可执行:(1)使用相关子查询SE1.ECT*1ROMT_MAX_1.HKTWHERE(T.AUTHOR.T.PRICE)IN(SE1.ECTNT.AUTHOR,MAX(NT.PRI
6、CE)PRICE1ROMT_MAX_1.HRNTGROUPBYNT.AUTHOR)ORDERBYT.ARTIC1.E;SE1.ECT*FROMT_MAX_1.HRTWHERET.PRICE=(SE1,ECTMAX(NT.PRICE)PRICEFROMT_MAX_1.HRNTWHERET.AUTlIOR=NT.AUTHOR)ORDERBYT.ARTIC1.E;(2)使用非相关子查询SE1.ECTT.*FROMT_MAX_IJIRTJOIN(SE1.ECTNT.AUTHOR,MAX(NT.PRICE)PRICEFROMT_MAX_1.HRNTGROUPBYNT.AUTHOR)TlONT.AUTHO
7、R=T1.AUTHORANDT.PRlCE=Tl.PRICEORDERBYT.ARTIC1.E;(3)使用1.EFTJOIN语句SE1.ECTT.*FR0MT_MAX_1.HRT1.EFTOUTERJOINT_MAX_1.HRTlONT.AUTHOR=T1.AUTHORANDT.PRICESE1.三T.2 FRoM1.MW1.HRT3 1.EFTourERJOlN1.MAX-UiRTI4 ONrAirnKS-TlJWnKOR5 ANDTJ,RiaSE1.ECTT.,- FRoM1.MAX一1.HRT- 1.HT0U三JOINT_MAX_1.HRTI- ONT.AIIHOR-TlAUTHOR-
8、Andtprkktlpiuce- Wheretiarticieisnull- ORDERBYTAKnC1.E;,IiARTIQfIMWIPRICEI(三Ia10.99;Ic1.69OW!B务i119.96,Jnwshsct(O.OOjcc)2.Oracle和MySQ1.中的分组(GRO1.PBY)后的聚合函数分别是什么?正确答案:在OraCIe中,可以用Wb1.CoNCAT函数或1.lSTAGG分析函数:在MySQ1.中可以使用GRoUP_C0NCAT函数。示例如下:首见给出建表语句:CREATETAB1.ETJIXJJIR(ARTIC1.EVRCHAR2(30),AUTHORVRCHAR2(
9、30),PRICENUMBER);Oracle-CREATETAB1.ET_MAX_1.HR(ARTIC1.EVARCHAR(30),AUTHORVRCHAR(30),PRICEF1.OAT)MySQ1.OraCIe通用INSERTINTOTMAX1.HRVA1.UES(,000,B,3.99);INSERTINTOTMAX1.HRVA1.UES(,0002,A,10.99)INSERTINTOT_MAX_1.HRVA1.UES(,00031,C,1.69);INSERTINTOT_MAX_1.HRVA1.UES(,00041,B,19.95)INSERTINTOT_MAX_1.HRVA1.U
10、ES(,0005,*/V,6.96);COMMIT;SE1.ECT*ROMT_MAX_1.HK;在MySQ1.中:11wSelecttauihor,GROUPlONCATfrARn(IE)IGROU”oNcAT(TpRKl)-FROM1.MAX_1.HRT-Groupbytauthor;.TOGROl?.(三T(T.ARTIOD;三P.三T(T.PRICE)00Q2,W)5I1(199,6.%0001.0CW,I199,19.950003I1.69Srousinitt(O-Wsoc)在OraCle中:1.HRgcrdBnPSaECrTAUnIOR.啊。赋机TARME)ARTIeIEtWM一CO
11、NCATn,PR1CT)PRICE2 FROM1.M必1.HRT3 GRoIPBYTA加OR;AlTOARTIC1.EPRICEAOXe.000510.W,6.96B0!,00043.99.19.95COKe1.691.HRgorcUsnSE1.ECT!AUTHOR.2 UsTAGG(1.ARTIC1.E.)WlnHNGROtTORDERBYTfRlCE).ARTIC1.E,3 USTAOHT.PRKI,:iWTTHINGRWrderBYTfRlCE)PRICE4 FRoM1.MAI1.HRT5 GRO1.TBYTOfcMWARTIC1.EPRIdAOoO5.00026.96,Id99B000
12、1,0013.99,19.95C00031.693. MySQ1.的分区表是什么?如何查询MySQ1.是否支持分区?正确答案:表分区是指根据一定规则,将数据库中的一张表分解成多个更小的、容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成,每个分区都是一个独立的对象。分区有利于管理大表,体现了“分而治之”的理念。一个表最多支持1024个分区。在MySQ1.5.6.1之前可以通过命令showvariableslike,%have_partitioning%,来查看MySQ1.是否支持分区。若have_partintioning的值为YES,则表示支持分区。从VySQ1.5.6.1开始,该参数已经被去掉1.而是用SHOWP1.UGINS来代替0若有partition行