
SQL
追赶的蜗牛
一个程序就是一个世界。。。
展开
-
同一时间范围内并发数统计
酒店系统的相关问题:统计每天在同一时间段内服务房间最多的服务生。分析:当一个房间的服务开始之后,只要第2个房间的服务开始时间小于(早于)或者等于第1个房间的开始时间,并且结束时间大于(晚于)第1个房间的开始时间的,就说明存在重叠部分。首先查出同一时间范围内的:SELECT * FROM waiters a,waiters bwhere a.waiter_nam原创 2013-12-08 02:05:31 · 2835 阅读 · 0 评论 -
Oralce数据库的优化(面试必问题)
(1) 选择最有效率的表名顺序(只在基于规则的优化器中有效):ORACLE 的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先处理,在FROM子句中包含多个表的情况下,你必须选择记录条数最少的表作为基础表。如果有3个以上的表连接查询, 那就需要选择交叉表 (intersection table)作为基础表, 交叉表是转载 2015-12-17 22:56:29 · 606 阅读 · 0 评论 -
点击父节点将其下所有叶子节点都查出来
场景是这样的:我们的树形导航展示的是三级类目(不显示文章),每一级下有2级,二级下有三级,三级下是文章,即只能在三级类目上添加文章,其他类目下添加的是子类目。我们点击任意一个节点,都能将该类目下的所有文章都查到展示出来。如果采用常规思路,需要用递归的思想,每次都要遍历到最底层的子节点,这样有些麻烦。可以在数据库层面上做文章:在类目表中增加一个字段,如levels,用来表示该节点所处的层级深原创 2015-09-01 00:29:40 · 1117 阅读 · 0 评论 -
mysql中使用case when 做where条件筛选表记录
平时我们项目中经常用到 where 字段名=值 来筛选查询结果,但实际也会遇到这样的情况,如果表中某个字段code的值是“_1”结尾的,那么就查全部,否则,根据输入的参数查询。这时 case when 就派上用途了:select * from table_name twhere t.status='1' and (case when instr(right(t.code,2原创 2015-08-13 00:04:11 · 29230 阅读 · 3 评论 -
事物处理机制---乐观锁(version详细使用)和悲观锁
下面先就乐观锁与悲观锁的概念及基本用法做下介绍,因为网上的已经比较详细,就直接摘抄了 锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算 处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机 制来保证这些数据在某个转载 2014-09-16 23:01:42 · 9459 阅读 · 0 评论 -
Oracle按日/周/月统计语句--GROUP BY TO_CHAR(T.MODIFIEDTIME,'YYYY-MM')
Oracle按月统计语句--创建表 TestCTEATE TABLE TEST(ID NUMBER NOT NULL,MODIFIEDTIME DATE NOT NULL)--按月统计SELECT TO_CHAR(T.MODIFIEDTIME,'YYYY-MM') TIME,COUNT(*) COUNTFROM TEST T w转载 2014-02-12 15:59:32 · 12495 阅读 · 0 评论 -
Oracle 索引及索引失效的原因
Oracle 索引的目标是避免全表扫描,提高查询效率,但有些时候却适得其反。例如一张表中有上百万条数据,对某个字段加了索引,但是查询时性能并没有什么提高,这可能是 oracle 索引失效造成的。oracle 索引有一些限制条件,如果你违反了这些索引限制条件,那么即使你已经加了索引,oracle还是会执行一次全表扫描,查询的性能不会比不加索引有所提高,反而可能由于数据库维护索引的系统开销造成性能更差转载 2014-02-24 23:21:19 · 1404 阅读 · 0 评论 -
Oracle编辑数据时提示:这些查询结果不可更新,请使用ROWI或者SELECT……FOR UPDATE获得可更新结果。
我们在对Oracle数据库进行操作时,有时会在查询完结果后想要对其中的某些数据进行操作,当我们点击编辑(一个锁标志)是,会提示我们上述问题中的错误:这些查询结果不可更新,请使用ROWI或者SELECT……FOR UPDATE获得可更新结果。按照错误提示的信息我们可以采用两种解决办法:解决办法1:在查询语句后面写上for update,如:select * from 表名 for updat转载 2013-12-19 09:52:22 · 3338 阅读 · 0 评论 -
统计每组中最初测量值和最末测量值,并求差
一直以为对SQL中group by 语句都有畏惧感,主要是用的太少,最近同学让我帮忙写个sql,竟然当时没写出来,挺丢人的,都工作那么就了。现在我开始认真想了下,总结如下问题及sql语句: 问题是这样的: 如上图, 统计每个点(或人)中最出测量值和最末测量值,并求差。效果如下:首先建表(随便拿以前的表来改的),字段如下:其中room_id 为主原创 2013-12-07 22:21:54 · 1002 阅读 · 0 评论 -
详细剖析SQL查询(select语句)的每一步的逻辑处理---查询顺序及逻辑处理过程
查询的逻辑处理过程是分阶段完成的,每个阶段都会产生一个虚拟表,该表会作为一个阶段的输入。但是,这些过程中间阶段生成的虚拟表对于查询用户时不可用的,只有最后阶段所生成的虚拟表(即查询结果)才返回给查询用户。 下图中(1)-(6)代表执行顺序:未完待续。。。原创 2013-12-11 23:34:51 · 1064 阅读 · 0 评论 -
COUNT(*)与COUNT(某个字段)的区别,及count(null)和count(distinct 某字段)的用法
由于Oracle在count()的时候,并不计算null(空值)部分,所以和空值结合起来进行统计的时候还是有一些意思。 count这个函数应用的太频繁,有必要深究一番。 测试表格及其数据: SQL> desc student; Name Type Nullable Default Comments转载 2013-12-11 23:15:52 · 8416 阅读 · 0 评论 -
sql中distinct 的使用及 distinct null 的特殊处理
1.当select语句中包含distinct时,无论遇到多少个空值,结果中只返回一个null原创 2013-12-11 23:00:35 · 14148 阅读 · 0 评论 -
同一期间(日期或时间)内表中是否存在数据的处理
针对上一篇写的同一时间范围内并发数统计我发现我们系统也存在类似的问题的处理,为了对比学习,先将总结如下: 我们项目中主要为了筛选同一期间(日期或时间)内,某张表中是否存在了数据,如果不存在,则可以插入改变,否则不可插入。。。具体的java代码就不写了,写主要的逻辑。 public void getData(String beginDate,Strin原创 2013-12-11 22:42:09 · 917 阅读 · 0 评论 -
sql中exists,not exists的用法
exists : 强调的是是否返回结果集,不要求知道返回什么, 比如: select name from student where sex = 'm' and exists(select 1 from grade where ...) ,只要exists引导的子句有结果集返回,那么exists这个条件就算成立了,大家注意返回的字段始终为1,如果改成“select 2 from grad转载 2016-02-18 23:42:57 · 532 阅读 · 0 评论