1.查询和关闭锁表session
Select v2.username, v2.sid, v2.serial#, v2.logon_time
From v$locked_object v1, v$session v2
Where v1.session_id = v2.sid
order by v2.logon_time;
alter system kill session '26,6469';
2.统计 (相当于查找选了所有课程的学生)
select distinct(test.person_age)
from test
where test.person_age in
(select test.person_age
from test
group by test.person_age
having count(*) = (select count(distinct(test.person_sex)) from test));
3.复制表(只复制结构,源表名:a 新表名:b)
SQL: SELECT * INTO b FROM a WHERE 1<>1
4.拷贝表(拷贝数据,源表名:a 目标表名:b)
SQL: INSERT INTO b(a, b, c)
SELECT d, e, f FROM b
5.找出表中某一列相同的数据行
select *from table where (column in(select column from table group by column having count(*)> 1)
6.如何取得表中第6到第10条记录的值
假设ddl语句如下:
CREATE TABLE T(ID VARCHAR2(4) PRIMARY KEY, VALUE INT)
那么第一种方法就是取出前5条,再取出前10条,然后采用集合运算的方法把前10条减去前5条就OK了,SQL语句如下:
SELECT * FROM T WHERE ROWNUM <= 10
MINUS
SELECT * FROM T WHERE ROWNUM <= 5;
另外一种方法,采用子查询:
子查询的这种方法相对比较复杂一点,不过性能要比刚才的集合相减要好一些。这种方法首先在子查询中得到前10条数据,顺路也取得前10条数据的rownum,然后再一次查询的时候取得刚才查询的rownum大于5的那些数据。SQL语句如下:
SELECT ID, VALUE FROM
(SELECT ID, VALUE, ROWNUM R FROM T WHERE R <=10)
WHERE
R > 5;
通过上面的语句,就得到了6到第10条数据了。
8.分数大于80分的记录赋给A,60至80的赋给B,小于60的赋给C
select t.id,t.score, (case when t.score>=80 then 'A' when t.score>=60 and t.score < 80 then 'B' when t.score < 60 then 'C' end) as dd from test t;
或者
select t.id,t.score, (case when t.score>=80 then 'A' when t.score between 60 and t 80 then 'B' when t.score < 60 then 'C' end) as dd from test t;
9.基表、视图的拷贝,包含了表结构和数据
create table emp2 as select * from emp1;
10.如何用SQL快捷的获取Oracle版本信息,可以用以下两句SQL:
select * from PRODUCT_COMPONENT_VERSION;
- select * from v$version;
两句SQL语句都可以取得Oracle版本信息,只是信息展现的方式不一样