随笔分类 -  数据库

摘要:业务问题大概可以这样描述,一个父表,一个子表,查询的结果是找到子表中没有使用父表id的记录,这种情况估计很多系统都会牵涉得到。让我们来举一个例子:   表一: 父表 parent  表二: 子表 childen  父表存储父亲,子表存储孩子,然后通过pid和父表关联,查询需要的结果是找到尚未有孩子的父亲。  我们来看一下查询语句的写法:  select * from parent where id not in (select pid from childen)  这种标准的写法在子表存在50万条的记录的时候,查询时间超过了10秒,远远大于原来的sql server服务器的一秒。我在解决的时候 阅读全文
posted @ 2011-02-15 16:37 iceword 阅读(1604) 评论(0) 推荐(1)
摘要:select * from Awhere id in(select id from B)以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相等,如果相等则将A表的记录加入结果集中,直到遍历完A表的所有记录.它的查询过程类似于以下过程List resultSet=[];Array A=(select * from A);Array B=(select id from B);for(int i=0;i<A.length;i++) { for(int j=0;j<B.length;j++) { if(A[i].id== 阅读全文
posted @ 2011-02-15 16:12 iceword 阅读(50025) 评论(4) 推荐(4)
摘要:1. WHERE子句中的连接顺序。  ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前, 那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。  例如:  (低效,执行时间156.3秒)  (高效,执行时间10.6秒)[代码]  2. SELECT子句中避免使用 ‘ * ’  当你想在SELECT子句中列出... 阅读全文
posted @ 2010-05-20 17:17 iceword 阅读(405) 评论(0) 推荐(1)
摘要:left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录inner join(等值连接) 只返回两个表中联结字段相等的行举例如下: --------------------------------------------表A记录如下:aID     aNum1     a200501112 ... 阅读全文
posted @ 2010-03-24 21:31 iceword 阅读(1949) 评论(0) 推荐(0)
摘要:连接分为:内连接、外连接、交叉连接 一、内连接——最常用 定义:仅将两个表中满足连接条件的行组合起来作为结果集。 在内连接中,只有在两个表中匹配的行才能在结果集中出现 关键词:INNER JOIN 格式:SELECT 列名表 FROM 表名1 [INNER] JOIN 表名2 ON或WHERE 条件表达式 说明: (1)列名表中的列名可以出自后面的两个表,但如果两个表中有同... 阅读全文
posted @ 2010-03-24 21:14 iceword 阅读(4750) 评论(1) 推荐(1)
摘要:下面是对这4个函数的解释:RANK() 返回结果集的分区内每行的排名。行的排名是相关行之前的排名数加一。如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名。例如,如果两位销售员具有相同的SalesYTD值,则他们将并列第一。由于已有两行排名在前,所以具有下一个最大SalesYTD的销售人员将排名第三。因此,RANK 函数并不总返回连续整数。DENSE_RANK()返回结果集分区中行的排名... 阅读全文
posted @ 2010-03-20 07:03 iceword 阅读(907) 评论(0) 推荐(0)