Oracle数据库学习

Oracle数据库由甲骨文公司开发,是基于对象的关系型数据库;下面是简单的学习数据库操作等知识。   

1.SQL单表查询(设一个表名为tab

      1)查询所有记录

           select * from tab(一般格式:用户名.表名;如果不输入用户名,则默认为当前用户)。

      2)查询某些字段

           select f_z from tab f_z为查询字段,可以查询多个字段,以‘,’隔开)。

      3)distinct(返回不同值)

           select distinct f_z from tab distinct必须放在前面,可以查询多个字段,以‘,’隔开)。

      4)单条件查询

           select * from tab where f_z like ‘47%’1.in(not in)、like(not like)、between(not between)、is null(is not null)运算符;2.like和not like适合字符型字段查询;3.%表示任意长度字符串,_表示一个长度的字符串。4.f_z是字段)。

      5)组合条件查询(and、or、not)

            select * from tab where f_z = 2 and f_y > 100

select * from tab where f_d not like ‘%47%’

select * from tab where not f_m like '47%'

      6)排序查询

           select * from tab order by f_zAsc(默认)为升序排列,Desc降序排列;order by 要放在where语句后面)。

      7)分组查询

           select f_z,f_a from tab group by f_z,f_a having f_z is not null(where检查每条记录是否符合条件;having检查分组后的各组是否满足条件,having只能与group by配合使用)。

      8)字段运算查询(+、-、*、/)

           select ‘汽车名称--’|| f_z from tab||字符串合并)。

      9)变换查询显示

           select f_z as f_a from tabas命名字段的别名,可以不用;group by不能用别名,order by可以用。)。

表别名不用as,例如:select t.f_z from tab t。

for update用于锁定行,例如:select for update

2.用SQL进行多表查询

  1)无条件多表查询

       笛卡尔集:总记录数=table1记录数×table2记录数

       select * from table1, table2

  2)等值连接

       内连接:select tab1.f_z, tab2.* from table1 tab1, table2 tab2 where tab1.f_z = tab2.f_c。

       左外连接(包括没有单位的机型):select tab1.f_z, tab2.* from table1 tab1, table2 tab2 where tab1.f_z = tab2.f_c(+)。

       右外连接(包括没有机型的单位):select tab1.f_z, tab2.* from table1 tab1, table2 tab2 where tab1.f_z(+) = tab2.f_c。

       实际使用中,建议外连接统一使用左外连接;查询字段和连接条件中,若两表都有相同的字段名,必须指定字段对应的表名。

3.用SQL进行嵌套查询

也叫子查询,子查询形成的结果又成为父查询的条件。

in、exists:如果子查询得出的结果集记录较少,主查询中的表较大且又有索引时应该用in;反之如果外层的主查询记录较少,子查询中的表大,又有索引时使用exists。

not in、not exists:不推荐not in,会导致两个表的全表扫描,尽量转换为minus重写;not exists效率一般比较高;根据实际执行计划调试。

union(并集):select 1 as f_id, ‘是’ as f_m from tab union select 0 as f_id, ‘否’ as f_m from tab

intersect(交集)、minus(差集)

并、交和差操作的嵌套查询要求属性具有相同的定义,包括类型和取值范围。

 

4.用SQL进行函数查询

 

  1)函数:

Round、Count、Sum、Avg、Min、Max

 

  2)条件表达式:nvl、decode、case when

 

       select nvl(f_z, 0) from table;如果f_z为空,返回0;否则为f_z。

 

       select decode(f_z, 1 , '客机', '货机') from table

 

       select case when f_z = 1 then '客机' else '货机' end from table

 

case语句在处理相似问题就显得比较简捷灵活。另外,当需要匹配少量数值时,选用decode会更加方便一些。

5.Dual的使用

Dual是Oracle中实际存在的一种表,任何用户都可以使用,常用在没有目标表的select语句中。可用于查看时间、用户、计算等;select user from dualselect sysdate from dual

6.关于null

数据库中null是一个未知数,没有任何值;进行运算时使用nvl,但是结果仍为空;在聚集函数中只有全部记录为空才会返回null。

7.insert插入

1)单行记录插入

insert into tab (f_z,f_a) values (1,to_date(‘2017-10-11’,’yyyy-mm-dd’)).

语法:语法insert into 数据表(字段名1,字段名2,……) values(字段名1的值, 字段名2的值,……)。

字段名和值要一一对应,时间日期要用单引号,非空列必须要有值对应。

(2)多行记录插入

insert into table1 (f_id, f_m, f_r) select table2.nextval as f_id, 'new user', sysdate from table1 where f_r <= to_date('2017-10-01', 'yyyy-mm-dd').

语法:insert into 数据表(字段名1,字段名2,……) (select(字段名1或运算, 字段名2或运算,……) from 数据表 where 条件)。

子查询和insert中的数据表既可以相同,也可以不同,但要求查询结果的字段和insert插入的数据表中字段属性完全一致。

8.delete

delete from tab where f_a >= 5;truncate table table1truncate是删除整个表,并且删除后不能恢复数据,但是保留数据表结构;delete删除数据可以恢复。

9.update

直接赋值更新:1)语法:update tab set f_a = new1,f_b = new2... where 条件;

              2)update tab set f_a = ‘新名称’where f_id = 2。

嵌套更新:1)语法:set 字段名1=(select 字段列表 from 数据表 where 条件),字段名2=(select 字段列表 from 数据表 where 条件),……。

          2)update table1 set table1.f_a=(select table2.f_b from table2 where table1.f_id=table2.f_id) where table1.f_id=5。

10.merge into

Merge into table1 using table2 on(table1.f_id=table2.f_id) when matched then update set table1.f_a = ‘new’ when not matched then insert(table1.f_id) values(table2.f_id)

11.创建表

crate table tab1(f_id number not null,f_a varchar2(7) not null,f_b number(6,2) not null);

主键:字段不能为空,唯一性;

外建:可以重复,但是是另外一个表的主键;

索引:索引是若干数据行的关键字的列表,查询时可以根据索引查询,提高搜索性能;有普通索引和唯一索引之分。

 

12.数据语言

 

1)数据操纵语言(DML)

 

      对数据进行增、删、改、查等操作;

 

命令:SELECT、INSERT、UPDATE、DELETE、CALL。

 

 

 

2)数据描述语言(DDL)

 

        描述和管理 SQL 数据库中的所有对象;

 

命令:CREATE(创建)、ALTER(修改)、DROP(删除)等。

 

3)数据控制语言(DCL)

 

是用来设置或更改数据库用户或角色权限的语句

 

命令:GRANT(授权)、REVOKE(撤销)、COMMIT(提交)、ROLLBACK(回滚)、SAVEPOINT(保存点)等。

13.sequence

    创建:create sequence table1

          INCREMENT BY 1 -- 每次加几个
          START WITH 1 -- 1开始计数
          NOMAXvalue -- 不设置最大值
          NOCYCLE -- 一直累加,不循环
          CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE.

    使用sequence.CURRVAL(返回当前值);sequence.NEXTVAL(增加sequence的值,并返回值)。

14.视图VIEW

    创建:create or replace view p_view as select tab1.f_id,tab1.f_a,tab2.f_id,tab2.f_z from tab1,tab2 where tab1.f_id=tab2.f_id(or replace:如果视图存在,替换旧视图)

    删除:drop p_view

15.PL/SQL程序语法基本要素

   1)常量、变量等

        常量:语法:常量名 constant 类型标识符 [not null]:=值常量,包括后面的变量名都必须以字母开头,不能有空格,不能超过30个字符长度,同时不能和保留字同名,常(变)量名称不区分大小写,在字母后面可以带数字或特殊字符。括号内的not null为可选参数,若选用,表明该常(变)量不能为空值。

        pi constant number(4):=3.14。

类型标识符

说明

Number

数字型

Int

整数型

Pls_integer

整数型,产生溢出时出现错误

Binary_integer

整数型,表示带符号的整数

Char

定长字符型,最大255个字符

Varchar2

变长字符型,最大2000个字符

Long

变长字符型,最长2GB

Date

日期型

Boolean

布尔型(TRUE、FALSE、NULL三者取一)

          变量:age number(3):=26;基本常见变量如上。


猜你喜欢

转载自blog.csdn.net/chang_guo/article/details/80982626