1 gourp by
select salary from stu_tbl group by S_SEX
GROUP BY 用不好的话会提示一个错误。叫做not group by expression
groupby 还可以跟一个操作,having 这个限制条件真是让我不知道做什么!所以先放弃。
后来知道了,就是group by having count(*)>10 来筛选分组的信息。
2 如何使用 connect by prior 进行递归查询。
SELECT a.*, a.LEVEL
FROM stu_tbl
CONNECT BY PRIOR sno = master_id;
这里可以看到 从sno=5 的记录开始,下一条显示的记录的sno = 当前记录的master_id
以此类推,递归显示。 很容易,无论是自顶向下,自底向上。只要记住 prior后面跟着的是当前的master_id。
可以在递归显示的过程中,加一个where 条件来剪枝。
3 找到最新日期
面对这样的表,为了找到最新的日期。
select name,to_char(tran_date,'yyyy.mm.dd hh24:mi:ss') tran_date
from abc t2 where tran_date in (
select max(t1.tran_date) from abc t1 where
t1.name=t2.name and t1.mod_no=t2.mod_no )
用这样的语句便可以找到最新的日期。
5创建新表结构
oracle 创建表结构并不是简单的声明变量然后说明变量的属性。
create table deptment
(
deptno number(5) primary key,
dname varchar2(20),
loc varchar2(30)
)
PCTFREE 10
PCTUSED 70
STORAGE
(
INITIAL 50K
NEXT 50k
MAXEXTentS 10
)
disable primary key;
有三个字段,是特殊的。PCTFREE, PCTUSED, STORAGE
PCTFREE 是个什么意思呢?
回答:PCTFREE存储参数告诉oracle什么时候应该将数据块从对象的空闲列表中移出。ORACLE的默认参数是PCTFREE=10;
也就是说,一旦一个INSERT操作使得数据块的90%被使用,这个数据块就从空闲列表(free list)中移出。
PCTUSED 是个什么意思 ?
回答:存储参数告诉ORACLE什么时候将以前满的数据块加到空闲列表中。当记录从数据表中删除时。
数据库的数据块就有空间接受新的记录,但只有当填充的空间降到PCTUSED值以下时!
该数据块才被连接到空闲列表中,才可以往其中插入数据。PCTUSED的默认值是PCTUSED=40。
STORAGE 是个什么意思?
INITIAL | 5(数据块) | 2(数据块) | 操作系统限定 | 分配给Segment的第一个Extent的大小,以字节为单位,这个参数不能在alter语句中改变,如果指定的值小于最小值,则按最小值创建。 |
NEXT | 5(数据块) | 1(数据块) | 操作系统限定 | 第二个Extent的大小等于NEXT的初值,以后的NEXT值=前一NEXT大小乘以(1+PCTINCREASE/100),如果指定的值小于最小值,则按最小值创建。 如果在alter语句中改变NEXT的值,则下一个分配的Extent将具有指定的大小,而不管上一次分配的Extent大小和PCTINCREASE参数值。 |
MINEXTENTS | 1(Extent) 回滚段为2个Extent |
1(Extent) 回滚段为2个Extent |
操作系统限定 | Segment第一次创建时分配的Extent数量 |
这个字段的意思,有许多属性可以加。
三个INITIAL NEXT MINEXTENTS
6假如只想查询某一日期
如果是查询某个时间,比如只想知道8月份有谁有档期。需要用to_char(xx,'MM')的方法。
to_char(tran_date,'yyyy.mm.dd hh24:mi:ss')关于时间就是这样。
yyyy 代表年,mm代表月,dd代表日,HH24代表小时,MI代表分钟,SS代表秒。
7 decode 的用法有点类似判断