`
mamacmm
  • 浏览: 200552 次
  • 性别: Icon_minigender_1
  • 来自: 河北
社区版块
存档分类
最新评论

oracle-学习笔记-1

    博客分类:
  • J2EE
阅读更多

本文如同题目,只是学习笔记 

1.1查看控制文件

SQL> desc v$controlfile
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 STATUS                                             VARCHAR2(7)
 NAME                                               VARCHAR2(513)
 IS_RECOVERY_DEST_FILE                              VARCHAR2(3)
 BLOCK_SIZE                                         NUMBER
 FILE_SIZE_BLKS                                     NUMBER

SQL> select * from v$controlfile;

1.2查看数据文件

SQL> desc v$datafile;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 FILE#                                              NUMBER
 CREATION_CHANGE#                                   NUMBER
 CREATION_TIME                                      DATE
 TS#                                                NUMBER
 RFILE#                                             NUMBER
 STATUS                                             VARCHAR2(7)
 ENABLED                                            VARCHAR2(10)
 CHECKPOINT_CHANGE#                                 NUMBER
 CHECKPOINT_TIME                                    DATE
 UNRECOVERABLE_CHANGE#                              NUMBER
 UNRECOVERABLE_TIME                                 DATE
 LAST_CHANGE#                                       NUMBER
 LAST_TIME                                          DATE
 OFFLINE_CHANGE#                                    NUMBER
 ONLINE_CHANGE#                                     NUMBER
 ONLINE_TIME                                        DATE
 BYTES                                              NUMBER
 BLOCKS                                             NUMBER
 CREATE_BYTES                                       NUMBER
 BLOCK_SIZE                                         NUMBER
 NAME                                               VARCHAR2(513)
 PLUGGED_IN                                         NUMBER
 BLOCK1_OFFSET                                      NUMBER
 AUX_NAME                                           VARCHAR2(513)
 FIRST_NONLOGGED_SCN                                NUMBER
 FIRST_NONLOGGED_TIME                               DATE
 
SQL> select file#,status from v$datafile;

     FILE# STATUS
---------- -------
         1 SYSTEM
         2 ONLINE
         3 ONLINE
         4 ONLINE
         5 ONLINE
        
        
        
1.3 查看命令帮助
help index

1.4 查看某个命令的帮助
? set

set sqlbl on   开启sqlplus支持空行

1.5使用替代变量
SQL> select * from dept where deptno=&tt;
输入 tt 的值:  10
原值    1: select * from dept where deptno=&tt
新值    1: select * from dept where deptno=10

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
 
1.5 查看、修改、执行缓冲区的sql
查看:list(简写 l )
修改:c
执行:/

SQL> l
  1* select * fron dept
SQL> c/n/m
  1* select * from dept
SQL> /

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

1.6 删除和追加 缓冲区的sql

删除:
SQL> l
  1  select *
  2  from
  3  dept
  4* where deptno=10
SQL> del 4
SQL> l
  1  select *
  2  from
  3* dept
SQL> del 2 3
SQL> l
  1* select *

追加:
SQL> l
  1* select *
SQL> a from dept
  1* select *from dept
SQL> /

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON


1.7保存缓冲区的sql
SQL> save c:\test.txt
已创建 file c:\test.txt
SQL> l
  1* select *from dept

1.8调用已保存的脚本并执行
SQL> @test1.txt

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK

SQL> l
  1* select * from dept where deptno=10
SQL> get test1.txt
  1* select * from dept where deptno=10
SQL> /

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK


1.9 编辑缓冲区
SQL> select * from dept;

    DEPTNO DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

SQL> edit
已写入 file afiedt.buf

  1* select * from dept where deptno=20
SQL> /

    DEPTNO DNAME          LOC
---------- -------------- -------------
        20 RESEARCH       DALLAS

1.10使用col命令
SQL> col deptno heading "编号"
SQL> select * from dept;

      编号 DNAME          LOC
---------- -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
SQL> col dname format a10 heading "部门名称"
SQL> select * from dept;

      编号 部门名称   LOC
---------- ---------- -------------
        10 ACCOUNTING NEW YORK
        20 RESEARCH   DALLAS
        30 SALES      CHICAGO
        40 OPERATIONS BOSTON

SQL> connect sys/ora as sysdba
已连接。
SQL> select bytes from v$datafile;

     BYTES
----------
 503316480
  26214400
 262144000
   5242880
 104857600

SQL> col bytes format 999,999,999
SQL> select bytes from v$datafile;

       BYTES
------------
 503,316,480
  26,214,400
 262,144,000
   5,242,880
 104,857,600

 

1.11查看表结构
SQL> desc dept
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 DEPTNO                                    NOT NULL NUMBER(2)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(13)
 

1.12设置报表
SQL> connect scott/tiger
SQL> set linesize 50
SQL> ttitle center "我的标题" 1-
> left "测试报表" right "页" -
> format 999 sql.pno skip 2
SQL> select * from dept;

测试报表             我的标题1              页   1

      编号 部门名称   LOC
---------- ---------- -------------
        10 ACCOUNTING NEW YORK
        20 RESEARCH   DALLAS
        30 SALES      CHICAGO
        40 OPERATIONS BOSTON

SQL> ttitle off
SQL> select * from dept;

      编号 部门名称   LOC
---------- ---------- -------------
        10 ACCOUNTING NEW YORK
        20 RESEARCH   DALLAS
        30 SALES      CHICAGO
        40 OPERATIONS BOSTON


1.13设置报表

先在scott用户下创建一个表
CREATE TABLE "SCOTT"."BOOKS"
   ( "BOOKS_ID" NUMBER,
 "BOOKS_NAME" VARCHAR2(30),
 "PRICE" NUMBER,
 "QTY" NUMBER,
 "PUB" VARCHAR2(50)
   ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
  TABLESPACE "USERS" ;
 

SQL> set linesize 300
SQL> select * from books;

  BOOKS_ID BOOKS_NAME                          PRICE        QTY PUB
---------- ------------------------------ ---------- ---------- --------------------------------------------------
         1 中国文学                               39         12 人民大学
         2 外国文学                             12.5         22 人民大学
         3 英语阅读                               33         21 清华大学
         4 建筑艺术                                6         33 清华大学
         5 计算机入门                           44.8         24 电子工业
         6 数据结构                             54.7         65 电子工业
         7 语文                                   43          5 电子工业

已选择7行。
SQL> break on pub
SQL> select * from books;

  BOOKS_ID BOOKS_NAME                          PRICE        QTY PUB
---------- ------------------------------ ---------- ---------- --------------------------------------------------
         1 中国文学                               39         12 人民大学
         2 外国文学                             12.5         22
         3 英语阅读                               33         21 清华大学
         4 建筑艺术                                6         33
         5 计算机入门                           44.8         24 电子工业
         6 数据结构                             54.7         65
         7 语文                                   43          5

已选择7行。

进行统计:
SQL> comp count label "计数" of books_name on pub
SQL> select * from books;

  BOOKS_ID BOOKS_NAME                          PRICE        QTY PUB
---------- ------------------------------ ---------- ---------- --------------------------------------------------
         1 中国文学                               39         12 人民大学
         2 外国文学                             12.5         22
           ------------------------------                       **************************************************
                                        2                       计数
         3 英语阅读                               33         21 清华大学
         4 建筑艺术                                6         33
           ------------------------------                       **************************************************
                                        2                       计数
         5 计算机入门                           44.8         24 电子工业
         6 数据结构                             54.7         65
         7 语文                                   43          5
           ------------------------------                       **************************************************
                                        3                       计数

已选择7行。
SQL> col pub format a15
SQL> col books_name format a15
SQL> select * from books;

  BOOKS_ID BOOKS_NAME           PRICE        QTY PUB
---------- --------------- ---------- ---------- ---------------
         1 中国文学                39         12 人民大学
         2 外国文学              12.5         22
           ---------------                       ***************
                         2                       计数
         3 英语阅读                33         21 清华大学
         4 建筑艺术                 6         33
           ---------------                       ***************
                         2                       计数
         5 计算机入门            44.8         24 电子工业
         6 数据结构              54.7         65
         7 语文                    43          5
           ---------------                       ***************
                         3                       计数

已选择7行。

1.14 保存查询的数据(结果集)
SQL> spool c:\spool.txt
SQL> select * from books;

  BOOKS_ID BOOKS_NAME           PRICE        QTY PUB
---------- --------------- ---------- ---------- ---------------
         1 中国文学                39         12 人民大学
         2 外国文学              12.5         22
           ---------------                       ***************
                         2                       计数
         3 英语阅读                33         21 清华大学
         4 建筑艺术                 6         33
           ---------------                       ***************
                         2                       计数
         5 计算机入门            44.8         24 电子工业
         6 数据结构              54.7         65
         7 语文                    43          5
           ---------------                       ***************
                         3                       计数

已选择7行。

SQL> spool off
SQL> edit spool.txt

SQL>

确实已经保存为spool.txt的文本文件了。 

 

 

2.1语言分类
2.1.1数据定义语言 DDL
create
alter
drop
SQL> create table abc (a varchar2(10),b char(10));

表已创建。

SQL> select table_name from user_tables;

TABLE_NAME
------------------------------
DEPT
EMP
BONUS
SALGRADE
ABC
BOOKS

已选择6行。

SQL> alter table abc add c number;

表已更改。

SQL> desc abc
 名称
                                               是否为空? 类型
 -----------------------------------------------------------------------------------------------------------------------
------------------------------------------------------ -------- --------------------------------------------------------
------------------------------------------------------------
 A
                                                        VARCHAR2(10)
 B
                                                        CHAR(10)
 C
                                                        NUMBER
SQL> alter table abc drop column c;

表已更改。

 

2.1.2数据控制语言 DCL
grant
revoke


SQL> connect decoration/decoration
已连接。
SQL> select * from scott.dept;
select * from scott.dept
              *
第 1 行出现错误:
ORA-00942: 表或视图不存在


SQL> connect scott/tiger
已连接。
SQL> select * from dept;

      编号 部门名称   LOC
---------- ---------- -------------
        10 ACCOUNTING NEW YORK
        20 RESEARCH   DALLAS
        30 SALES      CHICAGO
        40 OPERATIONS BOSTON

SQL> grant select on dept to decoration;

授权成功。

SQL> connect decoration/decoration
已连接。

SQL> select * from scott.dept;

      编号 部门名称   LOC
---------- ---------- -------------
        10 ACCOUNTING NEW YORK
        20 RESEARCH   DALLAS
        30 SALES      CHICAGO
        40 OPERATIONS BOSTON

SQL>

SQL> connect scott/tiger
已连接。

SQL> revoke select on dept from decoration;

撤销成功。

SQL> connect decoration/decoration
已连接。
SQL> select * from scott.dept;
select * from scott.dept
                    *
第 1 行出现错误:
ORA-00942: 表或视图不存在


2.1.3数据操纵语言 DML
select
insert
delete
update

SQL> insert into abc values ('aa','bb');

已创建 1 行。

SQL> select * from abc;

A          B
---------- ----------
aa         1
aa         bb

SQL> update abc set a='haha' where b='1';

已更新 1 行。

SQL> delete  abc where b='bb';

已删除 1 行。

SQL> select * from abc;

A          B
---------- ----------
haha       1

SQL>

2.2系统函数
2.2.1字符
length,lengthb,ltrim,replace,rtrim,substr,trim

SQL> select length('abcdef') from dual;

LENGTH('ABCDEF')
----------------
               6

SQL> select length('abc好ef') from dual;

LENGTH('ABC好EF')
-----------------
                6

SQL> select lengthb('abc好ef') from dual;

LENGTHB('ABC好EF')
------------------
                 7
                
               
SQL> select lengthb('  abc好e f ') from dual;

LENGTHB('ABC好EF')
------------------
                11

SQL> select ltrim('  abc好e f ') from dual;

LTRIM('AB
---------
abc好e f

SQL> select ltrim('  abc好e f ') l from dual;

L
---------
abc好e f

SQL> select lengthb(a.l) from (select ltrim('  abc好e f ') l from dual) a;

LENGTHB(A.L)
------------
           9

SQL> select lengthb(ltrim('  abc好e f ')) from dual;

LENGTHB(LTRIM('ABC好EF'))
-------------------------
                        9

SQL> select lengthb(rtrim('  abc好e f ')) from dual;

LENGTHB(RTRIM('ABC好EF'))
-------------------------
                       10

SQL> select lengthb(trim('  abc好e f ')) from dual;

LENGTHB(TRIM('ABC好EF'))
------------------------
                       8
SQL> desc aa
 名称
                                               是否为空? 类型
 -----------------------------------------------------------------------------------------------------------------------
------------------------------------------------------ -------- --------------------------------------------------------
------------------------------------------------------------
 A1
                                                        VARCHAR2(10)
 A2
                                                        VARCHAR2(10)
 A3
                                                        CHAR(10)
SQL> insert into aa values('avx','ssw','aaa');

已创建 1 行。

SQL> insert into aa values('avx','swx','bfd');

已创建 1 行。

SQL> insert into aa values('aeex','ddswx','ffbfd');

已创建 1 行。

SQL> update aa set a3='aa';

已更新3行。

SQL> select *from aa;

A1         A2         A3
---------- ---------- ----------
avx        ssw        aa
avx        swx        aa
aeex       ddswx      aa                                                       
                                                      
SQL> select length(a2),length(a3) from aa;

LENGTH(A2) LENGTH(A3)
---------- ----------
         3         10
         3         10
         5         10

SQL> select substr('abcdefrdsg',2,3) from dual;

SUB
---
bcd


SQL> select substr('abcdefrdsg',length('abcdefrdsg')-3+1,3) from dual;

SUB
---
dsg

2.2.2日期
SQL> select sysdate from dual;

SYSDATE
--------------
04-12月-10

SQL> select current_date from dual;

CURRENT_DATE
--------------
04-12月-10

SQL> alter session set NLS_DATE_FORMAT='dd-mon-yyyy hh:mi:ss';

会话已更改。

SQL> select sysdate from dual;

SYSDATE
-------------------------
04-12月-2010 11:30:37

SQL> select current_date from dual;

CURRENT_DATE
-------------------------
04-12月-2010 11:30:42

SQL> select next_day(sysdate,'星期一') as n from dual;

N
-------------------------
06-12月-2010 11:34:13

 

2.2.3转换函数
to_char,to_date,to_number

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2010-12-04 11:37:32

SQL> select to_date('4-12月-10') from dual;

TO_DATE('4-12月-10')
-------------------------
04-12月-0010 12:00:00

SQL> select to_number('4-12月-10') from dual;
select to_number('4-12月-10') from dual
                 *
第 1 行出现错误:
ORA-01722: 无效数字


SQL> select to_number('410') from dual;

TO_NUMBER('410')
----------------
             410

SQL> select to_number('000410') from dual;

TO_NUMBER('000410')
-------------------
                410


2.2.4聚集函数
sum , avg , max , min ,count

SQL> select sum(price) from books;

SUM(PRICE)
----------
       233
SQL> select max(price) from books;

MAX(PRICE)
----------
      54.7

SQL> select min(price) from books;

MIN(PRICE)
----------
         6

SQL> select avg(price) from books;

AVG(PRICE)
----------
33.2857143

SQL> select count(price) from books;

COUNT(PRICE)
------------
           7
          
SQL> commit;

提交完成。

SQL> select * from aa;

A1         A2         A3
---------- ---------- ----------
avx        ssw        aa
avx        swx        aa
aeex       ddswx      aa
esd
ddd                   er
ee         ssss       ee

已选择6行。

SQL> select count(*) from aa;

  COUNT(*)
----------
         6

SQL> select count(a2) from aa;

 COUNT(A2)
----------
         4

 

2.2.5其他

user decode nvl

SQL> select user from dual;

USER
------------------------------
SCOTT

SQL> connect decoration/decoration;
已连接。
SQL> select user from dual;

USER
------------------------------
DECORATION

SQL> connect scott/tiger;
已连接。
SQL> select user from dual;

USER
------------------------------
SCOTT

SQL> select user from dual;

USER
------------------------------
SCOTT

SQL> select * from e;

未选定行

SQL> desc e;
 名称
                                               是否为空? 类型
 -----------------------------------------------------------------------------------------------------------------------
------------------------------------------------------ -------- --------------------------------------------------------
------------------------------------------------------------
 EID
                                                        NUMBER
 ENAME
                                                        VARCHAR2(30)
 SEX
                                                        NVARCHAR2(2)

SQL> select * from e;

       EID ENAME                          SEX
---------- ------------------------------ ----
         1 赵1                            男
         2 钱1                            女
         3 孙1                            女
         3 李1                            男
         3 周1                            女

SQL> select sum(decode(sex,'男',1,0)) as "男",sum(decode(sex,'女',1,0)) as "女" from e;

        男         女
---------- ----------
         2          3

SQL> select sum(decode(sex,'男',1,0)) as 男人数,sum(decode(sex,'女',1,0)) as 女人数 from e;

    男人数     女人数
---------- ----------
         2          3

SQL> select * from aa;

A1         A2         A3
---------- ---------- ----------
avx        ssw        aa
avx        swx        aa
aeex       ddswx      aa
esd
ddd                   er
ee         ssss       ee

已选择6行。

SQL> select a1,nvl(a2,'未输入') a2 from aa;

A1         A2
---------- ----------
avx        ssw
avx        swx
aeex       ddswx
esd        未输入
ddd        未输入
ee         ssss

已选择6行。

SQL> select * from aa where a2 is null;

A1         A2         A3
---------- ---------- ----------
esd
ddd                   er

SQL> select * from aa where a2 is not null;

A1         A2         A3
---------- ---------- ----------
avx        ssw        aa
avx        swx        aa
aeex       ddswx      aa
ee         ssss       ee

SQL> select * from aa order by a1 asc;

A1         A2         A3
---------- ---------- ----------
aeex       ddswx      aa
avx        swx        aa
avx        ssw        aa
ddd                   er
ee         ssss       ee
esd

已选择6行。

SQL> select * from aa order by a1 desc;

A1         A2         A3
---------- ---------- ----------
esd
ee         ssss       ee
ddd                   er
avx        ssw        aa
avx        swx        aa
aeex       ddswx      aa

已选择6行。

SQL> select distinct a1 from aa;

A1
----------
esd
ee
ddd
avx
aeex

 

3.1分组语句

SQL> select sum(price*qty) from books;

SUM(PRICE*QTY)
--------------
        6479.7
SQL> select pub,sum(price*qty) from books group by pub;

PUB             SUM(PRICE*QTY)
--------------- --------------
清华大学                   891
人民大学                   743
电子工业                4845.7

SQL> select pub,sum(price*qty) from books where sum(price)>30 group by pub;
select pub,sum(price*qty) from books where sum(price)>30 group by pub
                                           *
第 1 行出现错误:
ORA-00934: 此处不允许使用分组函数


SQL> select pub,sum(price*qty) from books having sum(price) > 30 group by pub;

PUB             SUM(PRICE*QTY)
--------------- --------------
清华大学                   891
人民大学                   743
电子工业                4845.7

SQL> select pub,sum(price*qty) from books group by pub having sum(price) > 30;

PUB             SUM(PRICE*QTY)
--------------- --------------
清华大学                   891
人民大学                   743
电子工业                4845.7

SQL> select a1,count(a1) from aa where count(a1) > 1;
select a1,count(a1) from aa where count(a1) > 1
                                  *
第 1 行出现错误:
ORA-00934: 此处不允许使用分组函数


SQL> select a1,count(a1) from aa group by a1 having count(a1) > 1;

A1          COUNT(A1)
---------- ----------
avx                 2

3.2模糊查询
SQL> select * from aa where a1 like 'a_';

未选定行

SQL> select * from aa where a1 like 'a__';

A1         A2         A3
---------- ---------- ----------
avx        ssw        aa
avx        swx        aa

SQL> select * from aa where a1 like 'a%';

A1         A2         A3
---------- ---------- ----------
avx        ssw        aa
avx        swx        aa
aeex       ddswx      aa

SQL> select * from aa where a1 like '_a';

A1         A2         A3
---------- ---------- ----------
da         ccc        xxx

SQL> select * from aa where a1 like '__a';

A1         A2         A3
---------- ---------- ----------
sda        xxx        xxx

SQL> select * from aa where a1 like '%a';

A1         A2         A3
---------- ---------- ----------
ddda       dcc        xxx
sda        xxx        xxx
da         ccc        xxx

SQL> select * from aa where a1 like '%a%';

A1         A2         A3
---------- ---------- ----------
avx        ssw        aa
avx        swx        aa
aeex       ddswx      aa
ddda       dcc        xxx
sda        xxx        xxx
da         ccc        xxx

已选择6行。

SQL> select * from e where ename like '赵%';

       EID ENAME                          SEX
---------- ------------------------------ ----
         1 赵1                            男


3.3表的连接

SQL> col 姓名 format a10
SQL> select eid 编号,ename 姓名,sex 性别,id 所在部门 from e;

      编号 姓名       性别   所在部门
---------- ---------- ---- ----------
         1 赵1        男            1
         2 钱1        女            2
         3 孙1        女            3
         3 李1        男            4
         3 周1        女            5
SQL> select e.eid 编号,e.ename 姓名,e.sex 性别,d.name 所在部门 from e,d where e.id=d.id;

      编号 姓名       性别 所在部门
---------- ---------- ---- ------------------------------
         1 赵1        男   A部门
         2 钱1        女   B部门
         3 孙1        女   C部门
         3 李1        男   D部门
         3 周1        女   E部门
SQL> select e.eid 编号,e.ename 姓名,e.sex 性别,d.name 所在部门 from e join d on e.id=d.id;

      编号 姓名       性别 所在部门
---------- ---------- ---- ------------------------------
         1 赵1        男   A部门
         2 钱1        女   B部门
         3 孙1        女   C部门
         3 李1        男   D部门
         3 周1        女   E部门

这是内连接,两个表数据完全匹配。

如果不完全匹配,那就是外连接,有左外连接和右外连接。

SQL> select e.eid 编号,e.ename 姓名,e.sex 性别,d.name 所在部门 from e,d where e.id=d.id(+);

      编号 姓名       性别 所在部门
---------- ---------- ---- ------------------------------
         1 赵1        男   A部门
         2 钱1        女   B部门
         3 孙1        女   C部门
         3 李1        男   D部门
         3 周1        女   E部门
         4 周2        女

已选择6行。

这是左外连接。

SQL> select e.eid 编号,e.ename 姓名,e.sex 性别,d.name 所在部门 from e,d where e.id(+)=d.id;

      编号 姓名       性别 所在部门
---------- ---------- ---- ------------------------------
         1 赵1        男   A部门
         2 钱1        女   B部门
         3 孙1        女   C部门
         3 李1        男   D部门
         3 周1        女   E部门
                           F部门
                           G部门

已选择7行。

这是右外连接。


3.4子查询
无关子查询 和 相关子查询

SQL> select * from e where id in (select id from d);

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         1 赵1        男            1
         2 钱1        女            2
         3 孙1        女            3
         3 李1        男            4
         3 周1        女            5
上面是无关子查询。

SQL> select * from e where id in (select id from d where id = e.id and id = '03');

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         3 孙1        女            3
这是相关子查询。

可以取反:
SQL> select * from e where id not in (select id from d where id = e.id and id = '03');

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         1 赵1        男            1
         2 钱1        女            2
         3 李1        男            4
         3 周1        女            5
         4 周2        女

子查询不可用 *

 

SQL> select * from e where exists (select id from d);

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         1 赵1        男            1
         2 钱1        女            2
         3 孙1        女            3
         3 李1        男            4
         3 周1        女            5
         4 周2        女

已选择6行。

SQL> select * from e;

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         1 赵1        男            1
         2 钱1        女            2
         3 孙1        女            3
         3 李1        男            4
         3 周1        女            5
         4 周2        女

已选择6行。


SQL> select * from e where exists (select id from d where id = e.id);

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         1 赵1        男            1
         2 钱1        女            2
         3 孙1        女            3
         3 李1        男            4
         3 周1        女            5

SQL> select * from e where not exists (select id from d where id = e.id);

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         4 周2        女


做子查询 的时候,用 in 的时候 不能用 * ,用 exists 可以使用 * 。

SQL> select * from e where not exists (select * from d where id = e.id);

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         4 周2        女

SQL> select * from e where not in (select * from d where id = e.id);
select * from e where not in (select * from d where id = e.id)
                          *
第 1 行出现错误:
ORA-00936: 缺失表达式


3.5使用union

SQL> select eid,ename from e
  2  union
  3  select id,name from d;

       EID ENAME
---------- ----------
         1 A部门
         1 赵1
         2 B部门
         2 钱1
         3 C部门
         3 李1
         3 孙1
         3 周1
         4 D部门
         4 周2
         5 E部门
         6 F部门
         7 G部门

已选择13行。

SQL> select eid from e
  2  union
  3  select id from d;

       EID
----------
         1
         2
         3
         4
         5
         6
         7

已选择7行。

这样使用union可以去除重复行。

3.6使用intersect可以返回两个表中都出现的行。
SQL> select eid from e
  2  intersect
  3  select id from d;

       EID
----------
         1
         2
         3
         4
3.7一次插入多条记录
SQL> insert into e(eid,ename) select id,name from d;

已创建7行。

SQL> select * from e;

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         1 A部门
         2 B部门
         3 C部门
         4 D部门
         5 E部门
         6 F部门
         7 G部门
         1 赵1        男            1
         2 钱1        女            2
         3 孙1        女            3
         3 李1        男            4
         3 周1        女            5
         4 周2        女

已选择13行。

3.8依赖已经有的表来创建表

SQL> create table tt as (select * from e);

表已创建。

SQL> select * from tt;

       EID ENAME      SEX          ID
---------- ---------- ---- ----------
         1 A部门
         2 B部门
         3 C部门
         4 D部门
         5 E部门
         6 F部门
         7 G部门
         1 赵1        男            1
         2 钱1        女            2
         3 孙1        女            3
         3 李1        男            4
         3 周1        女            5
         4 周2        女

已选择13行。

SQL> create table t as select eid,ename from e where eid = '001';

表已创建。

SQL> select * from t;

       EID ENAME
---------- ----------
         1 A部门
         1 赵1

 

 

分享到:
评论
3 楼 pizza823 2011-01-17  
shangtang004 写道
you need do some introduction about data dictionary,

example, where i log in to oracle bye sqlplus, how to find tables?

how to find databases? maybe the how to find databaes question is wrong.
thanks

you're right
2 楼 mamacmm 2010-12-30  
shangtang004 写道
you need do some introduction about data dictionary,

example, where i log in to oracle bye sqlplus, how to find tables?

how to find databases? maybe the how to find databaes question is wrong.
thanks


I write it just for my study,so,this is only my study notes.
Thanks for your suggestion!
1 楼 shangtang004 2010-12-30  
you need do some introduction about data dictionary,

example, where i log in to oracle bye sqlplus, how to find tables?

how to find databases? maybe the how to find databaes question is wrong.
thanks

相关推荐

    【源代码】《涂抹Oracle-三思笔记之一步步学Oracle》

    1. Oracle数据库基础:Oracle是世界上最广泛使用的数据库管理系统之一,它支持事务处理、数据仓库、分布式数据库等复杂应用。学习Oracle,首先要了解其基本架构,包括数据库实例、数据文件、控制文件、重做日志文件...

    涂抹Oracle--三思笔记

    《涂抹Oracle--三思笔记》是一份专注于Oracle数据库技术的学习资料,主要涵盖了Oracle数据库系统的基础知识、高级特性和常见问题的解决策略。这份文档可能是由一位经验丰富的IT专家撰写,旨在帮助读者深入理解和掌握...

    oracle dba学习笔记

    Oracle DBA 学习笔记 标题:Oracle DBA 学习笔记 描述:学习使用维护 Oracle 数据库数年,对认为值得记录的 Oracle 维护脚本进行记录总结,存起来,虽然今后开源是方向,但不可否认 Oracle 仍然非常有水平的,在...

    涂抹Oracle—三思笔记之一步一步学Oracle

    《涂抹Oracle—三思笔记之一步一步学Oracle》很好的学习oracle书籍,值得一看

    ORACLE-----ORACLE笔记

    1. 数据库概念:Oracle数据库是一个存储结构化数据的系统,它允许用户创建、查询、更新和管理数据。数据库由表、视图、索引、存储过程、触发器等组成。 2. 数据类型:Oracle支持多种数据类型,如VARCHAR2(可变长度...

    最全的ORACLE-SQL笔记

    1. **登录Oracle数据库**:通常以超级管理员(sysdba)身份登录,如`sqlplus sys/bjsxt as sysdba`,这允许执行系统级别的操作。 2. **解锁用户**:`alter user scott account unlock;`用于解除用户账户的锁定状态...

    oracle安装-卸载-初识oracle-笔记

    【Oracle安装-卸载-初识Oracle-笔记】 Oracle是一种广泛应用的关系型数据库管理系统,尤其在企业级应用中占据重要地位。对于初次接触Oracle的人来说,理解其安装、卸载过程及基本操作是至关重要的。 一、下载地址 ...

    Oracle学习笔记 PDF

    ### Oracle学习笔记知识点详解 #### 一、Oracle简介 Oracle是一家知名的软件公司,以其数据库管理系统闻名全球。该公司成立于1977年,总部位于美国加利福尼亚州。Oracle不仅提供数据库解决方案,还涉及中间件、...

    oracle-SQL笔记

    总结来说,Oracle SQL的学习涵盖了数据控制(权限管理)、数据定义(对象创建与修改)和数据操纵(数据增删改查)等核心概念。对于初学者,理解和熟练掌握这些基本语句是成为合格的数据库管理员或开发者的第一步。...

    oracle-PROC编程学习笔记

    Oracle PROC编程学习笔记涵盖了对这一技术的深入理解和实践应用。 Oracle PROC允许程序员在C程序中嵌入PL/SQL代码,通过预编译过程将PL/SQL块转换为C函数或过程,然后在C程序中调用这些函数,从而实现高效的数据...

    oracle-ADF开发笔记,值得学习的资料

    oracle-ADF开发笔记,值得学习的资料

    oracle-MySQL笔记整理资料 适合初学者

    学习Oracle,你需要了解以下关键点: 1. 数据库安装与配置:包括Oracle的安装过程、环境变量设置和数据库实例创建。 2. SQL基础:学习SQL DML语句(INSERT, UPDATE, DELETE)和DDL语句(CREATE, ALTER, DROP)。 3....

    Oracle 10g 学习笔记

    │ Oracle学习笔记.pdf │ Oracle学习笔记.wps │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置listener.ora【避免出现ORA-12514错误】.txt │ 贴子树状态存储结构.jpg │ 贴子树状态存储结构.sql │ ├─01...

    ORACLE新体系-学习笔记.rar

    "ORACLE新体系-学习笔记.rar"显然是一份详细整理的Oracle数据库学习资料,旨在帮助用户深入理解Oracle的新特性和体系结构。这份笔记可能涵盖了从基础概念到高级技术的各个方面,为提升数据库管理技能提供了全面的...

    Oracle学习笔记-日常应用、深入管理、性能优化

    资源名称:Oracle学习笔记-日常应用、深入管理、性能优化内容简介:Oracle学习笔记-日常应用、深入管理、性能优化Oracle 11g是最具代表性的高端关系型数据库管理系统,它在世界各地的大型商务数据库应用系统中被广泛...

    oracle学习笔记(从入门到精通)

    03-基本查询语句学习笔记.txt 04-高级查询语句学习笔记.txt 05-锁和表分区学习笔记.txt 06-同义词和序列学习笔记.txt 07-视图和索引学习笔记.txt 08-PLSQL和游标结合学习笔记.txt 09-游标学习笔记.txt 10-重要的函数...

    Oracle10g学习笔记

    Oracle10g学习笔记,Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记Oracle10g学习笔记

    Oracle-ERP开发笔记

    ### Oracle-ERP开发笔记知识点概览 #### 一、Oracle Forms基础 **1. 设置ITEM为必填项** - 在Oracle Forms中,可以为特定的ITEM(字段)设置必填属性,确保用户在提交表单之前必须填写这些字段。这通常通过属性...

Global site tag (gtag.js) - Google Analytics