编写sql语句完成下列功能

编写sql语句完成下列功能

ID:24374620

大小:74.50 KB

页数:12页

时间:2018-11-14

编写sql语句完成下列功能_第1页
编写sql语句完成下列功能_第2页
编写sql语句完成下列功能_第3页
编写sql语句完成下列功能_第4页
编写sql语句完成下列功能_第5页
资源描述:

《编写sql语句完成下列功能》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编写sql语句完成下列功能SQL语句的良好编写方法SQL语句的良好编写方法Author:InthirtiesDate:2008-11-211.涉及到多个表的JOIN语句的写法很多开发人员对于涉及到多个表的JOIN语句,不知道如何下手,以及好何写出一个效率好的JOIN语句来,在这里,我根据我的一些经验,给出一些建议供大家参考:(1)了解一个SELECT语句的结构通常,一个SELECT语句的结构是这样的:SELECTselect_column_list---------step_4FROMtable_list------

2、---step_1pm_usera,pm_panyb?pm_usercpm_usera,pm_panyb?pm_userc?.表列表pm_usera,pm_panyb?pm_userc?.表列表pm_usera,pm_panyb?pm_userc?.表列表pm_usera,pm_panyb?pm_userc?.表列表pm_usera,pm_panyb?pm_userc?.表列表tab1,tab2?departmentsemployeesDEPARTMENTSENT_IDIN(SELECTDEPARTMENT_IDFR

3、OMEMPLOYEESPLOYEES.SALARY>2500);如果salary字段具有很多相同的字段值即选择性不好,且没有建索引,则采用EXISTS性能会好一些.或者假如department这个表多了一个谓词,且这个谓词很具选择性,则采用EXISTS,这样,在评估EXISTS里面的子查询时,外部的父查询先可以应用这个谓词过滤一些数据,这样就减少了EXISTS内部子查询所需要访问的数据量.IN和EXISTS在ORACLE中都称之为半连接(semi-join).半连接的意思可能是这么来的,查询只能返回(即SELE

4、CTLIST)IN/EXISTS外部表的字段,它消除了连接中来自内表(即IN或EXISTS里面的表)的冗余值。所以,IN和EXISTS在某些情况下也都能达到“去重”的目的,但是ORACLE在处理IN和EXISTS时所采用的方法还是不同的,以下面的SQL为例:SELECTd.*FROMdepartmentsdemployeese)如果ORACLE优化器并没将这个子查询展平成连接,则针对in的外部表DEPARTMENTS的每一行,ORACLE都会执行一下子查询SELECTe.department_idFROMemploy

5、eese,并且将子查询返回的department_id进行排序和去除重复值,然后拿departments的department_id与子查询返回的结果集进行比较,如果是该结果集的成员,则查询返回外部表的记录。所以IN比EXISTS多了一个成本:排序去重。所以要将IN改写成JOIN的话,先要将IN内表作一个排序去重的操作(加上DISTINCT),上面的SQL改写成JOIN就是下面这个样子:SELECTd.*FROMdepartmentsd,(SELECTDISTINCTdepartment_idFROMemployee

6、s)eLOCATIONGROUPBYREGIONHAVINGREGIONREGION!=‘SYDNEY’ANDREGION!=‘PERTH’高效SELECTREGION,AVG(LOG_SIZE)FROMLOCATIONENT_NAMEDepartment,TO_CHAR(NULL)DEPARTMENTSSELECTdistinctLOCATION_ID,TO_CHAR(NULL)Department,EFROME)='RAINNY'上面的SQL中,由于谓词字段:name上有运用一个upper()函数

7、,所以既使我们在pm_role.name上有建一个索引,Oracle也不会用到这个索引,所以我们一般要把函数写到等号(=)的右边.5.不要在创建有索引的谓词字段上运用操作符如果有对谓词字段运用操作符,则ORACLE同样不会用到索引,我们来看下面的例子:SELECT*FROMpm_roleE='RAINNY'上面的SQL中因为对谓词有用到

8、

9、操作符,所以ORACLE优化器也不会用到name字段上的索引6.避免谓词发生隐式的数据类型转换SELECT*FROMPM_ROLE_ROLE.CODE的数据类型是数

10、值型,在上面的SQL中,empempS的特征4)硬件和操作系统的特征3.数据库并发操作主要解决哪三个问题?如何保证并行操作的可串行性。答:1)丢失更新问题2)数据不一致分析问题3)读“脏”数据问题对任何数据集合进行读写操作之前,事务首先应获得对此数据集合的封锁,在释放一个封锁之后,事务不再获得任何其他封锁4.在关系数据库中能完全消除数据冗余吗?

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。