Oracle笔记

Oracle:持久化保存数据,保存数据的仓库,重点方便操作数据(增删改查),使用SQL语言

1.保存数据,以及操作数据

2.在项目开发中基本都会使用数据库,数据库是项目的后台开发。

         前台开发:界面

         后台开发:保存数据

 

层次模型数据库:相当于树

网状模型数据库:相当于蜘蛛网

关系模型数据库:就是二维表

 

PK:primary key主键,用来唯一标识表中的数据,不能重复,不能为空

FK:foreign key 外键,用来维护表与表之间的关系,一般情况会把一张表的主键作为另一张 表的外键,FK的值可以为空,如果不为空,它的值必须存在于依赖的那张表的主键的         值

 

视图:是一张虚表,就是一个查询语句,从一张或者多张表查询出的结果。

序列:是Oracle数据库特有的,主要用来生成主键的值

索引:提高检索的效率

同义词:给对象取别名

PL/SQL:将一条或者多条SQL使用循环语句,判断语句等连接起来的

 

数据完整性约束:规定/规范

(1)实体性完整性约束:针对主键,非空唯一

(2)参照性完整性约束:针对外键,可以为空,值依赖于主键

(3)列级完整性约束:针对列的数据类型,数据的值必须匹配定义的数据类型

(4)用户自定义完整性约束:check完整性约束,gender check(‘男’,’女’)    规定用户的取值     范围

 

大型数据库:Oracle,db2…开发银行系统,保存数据量大,安全性高,要收费

中型数据库:SQL Server,MySQL…保存数据量比较大,安全性比较高,免费

小型数据库:sqlite,access…就是文件,保存数据量小,安全性低

 

SQL:结构化的查询语句,针对所有的数据库。

         第四代语言,只关心做什么,而不关心怎么做

SQL*Plus:一个工具。用来执行SQL或者PL/SQL语句。还会用来线束执行的结果

PL/SQL:存储单位

 

sqlplus “as sysdba”

show user 显示当前用户

数据库安装之后的默认的两个管理员用户:

SYS:数据库的系统管理员,权限最高

System:数据库的管理员,权限非常高     system 123456

 

 

conn system/system        切换到system用户下

create user briup identified by briup;      创建用户为briup,密码也为briup

create user oracle identified by oracle; 创建用户为oracle,密码也为oracle

grant resource,connect tobriup;          给briup用户授权

conn briup/briup

 

alter session setnls_date_language=English;                  修改语言模式为英文

start D:\1杰普培训视频\oracle\oracle.sql

select table_name from user_tables;

select count(*) from s_emp;

 

 

 

1.select 语句的格式

select [distinct] *|字段名1,字段名2…….

from 表名s;

distinct 去除重复的数据,*代表所有字段,建议不写*,效率低

         *先查询所有的字段名,再根据字段名查询数据

 

2.使用算术运算(+-*/)

         针对数字的类型(number)+-*/

                   selectlast_name,salary*12  from s_emp;

                   selectlast_name,(salary+100)*12  from s_emp;

                   selectlast_name,(salary+commission_pct)*12 from s_emp;

         针对日期类型(date)+-,单位是天

                   selectstart_date,start_date+1      from s_emp;

 

3.给字段取别名

         (1)在需要去别名的字段后空格直接加上别名

                   selectlast_name,(salary+100)*12 sal  from s_emp

         (2)使用as关键字

                   selectlast_name,(salary+100)*12 as sal  froms_emp

         (3)使用“ ”,可以区分大小写和特殊字符

 

4.处理空值nvl

         该字段有空值的情况,会影响表达式的结果的时候

nvl(字段名,默认值)      如果字段值为null,nvl处理之后的结果为默认值

                                               如果字段值不为null,nvl处理之后的结果为字段本身的值

 

5.字段的拼接:把多个字符创拼接成一个字符串 用 “||”

         查询员工的全名(last_name,first_name)

         selectlast_name||‘,’||first_name

         froms_emp;

 

 

l/list:显示

/

a:在行尾追加文本

c:替换   先定位1,再替换 c/旧串/新串

i:在下一行插入一行文本

del:删除一行,定位    del

 

save filename 将缓冲区内容保存到文件中                  (以下都不需要分号)

get filename 将文件的内容取出到缓冲区

start filename 将文件的内容取出到缓冲区并执行

@filename   同startfilename

edit filename   将文件以编辑的方式打开

spool  spool filename:将缓冲区中所有内容都写入到文件中,结束用spool off

   如: spool D:/test1.sql  (开始)

        select last_name froms_emp;

                   show user

                   select *from s_dept;

                   spool off;                   (结束)

         注意:spool必须和spool off一起使用。

exit:退出

 

col:设置字段的显示格式

select last_name,first_name,salary,start_date

from s_emp;

col last_name format a15;

col first_name format a15;

注意:format不能通过a来设置数字类型

col salary format a10;

select salary from s_emp;

清除salary显示格式:

col salary clear;

 

col 字段名[ heading 别称] format a20                            heading设置别称

col salary justify left或right [format $99,990.00]          justify可以将字段的标题居左或居右

col 字段名format a20 null ‘Not hired’          如果为空,值为Nothired

 

 

 

 

 

 

 

 

第二章

一:排序order by

         1.升序排序ASC(默认),降序排序DESC,

         2.order by 放在select语句最后的位置

         3.order by 跟字段名或者别名或者出现在select语句后的序列号(从1开始的)

         4.字符串的排序使用ASCII进行排序

         5.多个字段进行排序时,用逗号进行隔开,排序规则:先按第一个字段进行排序,如果 第一个字段的值相同,把相同的这些数据按照第二个字段排序,以此类推

         6.对于空值的排序规则:空值看做无穷大

 

         例:查询所有员工的工资,按照工资进行降序排序

         selectlast_name,salary  from s_emp  order by salary DESC;

        

 

二:限定性的查询where

         1将查询结果进行过滤

         2.where放在from的后面

         3.where后面跟表达式  字段名,常量

                   不等于     !=  <> ^=

                   (not)betweenand    (not)in      (not)like            is(not)null

                   and            or              

         like中的%,_,表示匹配到的字符数据,不在like中只表示百分号,下划线

         escepe ‘任意字符’:组合起来就是转义字符,将任意字符后面的字符进行转义。常用’\’

                   select *from s_dept where name like ‘\_%’ escape ‘\’;

 

第三章

单值函数:不会影响数据个数

         在字符串上的单值函数:

                   LOWER:将字符串转化为小写

                   UPPER:将字符串转化成大写

                   INITCAP:将字符串转换成首字母大写,其他字母小写

                   CONCAT:将字符串进行拼接

                   SUBSTR:求字符串的子串

                   LENGTH:求字符串的长度

                   NVL:处理空值的函数 

         在数值上的单值函数

                   round:四舍五入

                   trunc:只舍不取

                   mod:取余

         在日期上的单值函数

                   MONTHS_BETWEEN:两个日期之间相差多少个月

                   ADD_MONTHS:在一个日期上加一个月数之后的日期

                   NEXT_DAY(date,'friday'):指定日期的下一个星期五是哪天

                   LAST_DAY:一个日期所在月最后一天是多少?

                   ROUND:四舍五入

                   TRUNC:只舍不取

 

         转换函数

                   (1)to_char:将数字类型和日期类型转换成字符串

                            1将数字类型转换成字符串         to_char(数字,格式)

                                     selectto_char(salary,’fmL99,999.00’)

                                     from s_emp;

                                     9:不足位的时候不会强制补齐

                                     0:不足位的时候会强制补齐

                                     $:西方人显示货币符号

                                     L:显示本地的货币符号

                                     fm:会清除前面的空格

                            2将日期类型转换成字符串

                                     to_char(时间,格式)      to_char(sysdate,’YYYY MM DD’)

                   (2)to_number:将字符串类型的数字转换成数值类型to_number(‘10‘)’

                   (3)to_date:将字符串类型的日期转换成日期类型                   to_date(’29-AUG-17’)

         dual:哑表,该表没有任何实际意义,用来处理函数,还用来满足select语句的格式

        

多值函数:会影响数据个数

 

 

第五章 组函数

AVG:求平均值

COUNT:求非空的个数

MAX:求最大值

MIN:求最小值

SUM:求和

STDDEV:求标准差

VARIANCE:求方差

 

集合连接

union:并集,重复的列只显示一行

union all:并集,不会消除重复的行

minus:差集

intersect:交集

rownum:位列where rownum=1                   rownum<=10   rownum<20

group by 用来分组,跟字段名,放在where后面

组函数不能出现在where条件中,对组函数进行过滤要使用having,having放在group by后面

         出现在select后的字段,如果该字段没有出现在组函数中,就必须出现在group by后面

         多个字段同时分组,多个字段的值同时相同时才分为一组。

 

sql执行流程:sql引擎解析sql语句

select------------5

from-------------1

where-----------2

group by--------3

having---------- 4

order by--------6

 

第六章:子查询 一条select语句嵌套一个或者多个select语句

         子查询的值必须与外围查询条件对应

 

第九章:创建表

create table [schema.]table

(column data

 

create table:创建表固定语句

schema:可有可无,指定该表创建在谁的用户下的。不写,放在当前用户下

 

create table stu(

                   字段名 数据类型 [默认值] [列级约束],

                   ……

                   [表级约束]

);

 

(1)命名规则

         以字母开头

         长度1-30个字符

         由字母,数字,_$#组成

         同一个用户下不能出现相同的名字

         不能使用Oracle保留字

(2)数据类型

         字符的数据类型    

                   varchar:         可变长字符串,是所有数据库可用的

                   varchar2  :     可变长字符串,是Oracle特有的

                            1节省内存空间

                            2检索效率不高

                            保存字符串长度不固定

                            备注信息

                   char:               不可变字符串         浪费内存空间,检索效率高,保存字符串长度固定,                                          长度相差不打的字符串。保存电话号码,身份证号

                   clob:                定义大数据的字符串,最大2GB

         数字的数据类型

                   Number 定义整数

                   number(5,2) 定义小数,小数位:2位,整数位:5-2位

         日期的数据类型

                   date

         二进制的数据类型

                   blob

默认值

 

 

 

 

 

 

create table s_stu(

         id number(7)constraint s_stu_id_pk primary key,

         name varchar2(10) constraints_stu_name_nn not null,

         age number(2) default0,

         phone char(11) constraints_stu_phone_uk unique,

         gender char(2) constraints_stu_gender_ck check(gender in('f','m')),

         c_id number(7) constraints_stu_c_id_fk references s_dept(id)

);

(4)列级约束和表级约束

         (1)约束的类型

                   primarykey---主键PK               not null----非空NN

                   unique----唯一键UK                  check----选择性CK

                   foreign key----外键FK

         (2)查看约束的名字

                   selectconstraint_name

                   fromuser_constraints

                   wheretable_name=’S_STU’;

 

(3)列级约束:约束类型直接放在字段的后面,只能作用于一个字段

          表级约束:约束和字段之间有逗号隔开,可以作用于多个字段

          规则:非空约束只能用列级约束

                            联合主键,联合外键,联合唯一键只能用表级约束

                            其他情况自选

create table s_stu(

         id number(7),

         name varchar2(10)constraint s_stu_name_nn not null,

         age number(2) default0,

         phone char(11),

         gender char(2),

         c_id number(7)

         ,

         constraint s_stu_id_pkprimary key(id),

         constraints_stu_phone_uk unique(phone),

         constraints_stu_gender_ck check(gender in('f','m')),

         constraints_stu_c_id_fk foreign key(c_id) references s_dept(id)

);

 

 

 

 

(5)创建表时约束如何写

         主键约束

         列级约束:字段 数据类型 取名字 约束类型

         表级约束:constraint约束名 约束类型(字段),

         联合主键:字段1 数据类型,

                   字段2 数据类型,

                   取名字 约束类型(字段1,字段2),

唯一键约束:unique

非空约束:not null列级约束

选择性约束 列级约束:字段名 数据类型 取名字 check(字段名 in(值1,值2)),

                      表级约束:字段名 数据类型, 取名字 check(字段名 in(值1,值2)),

外键约束

         列级约束:字段名 数据类型 取名字 references 表(字段)

         表级约束:字段名 数据类型, 取名字 foreign key(字段)references 表(字段)      

 

 

 

 


ER图

#代表唯一性

*代表非空

o代表没有任何要求,可以为null

实体之间的关系,通过外键来维护,创建表的时候需要给某张表增加外键

         一对一:把外键放在任何一方,如果出现了must be,应该把外键放在must be的一方

         一对多:把外键放在多的一方

         多对多:创建一张桥表,通过桥表把多对多的关系转换成2个一对多的关系。

         may be可能依赖和must be必须依赖,must be外键的值不能为空

 

 

 

数据库开发的步骤

需求分析:将客户的想法转化为系统相关的设计,设计哪些实体,实体包含哪些字段,实体与实体有哪些关系

设计阶段:将需求分析分析出来的数据转化成ER图,直观,很容易了解

建立文档:对实体和关系的属性进行详细的说明,直接给客户看,更方便进行交流

建立表实例图:将ER图转换成表实例图

 

第十一章

1.插入数据insert

insert into 表名[(字段名,字段名)]

values(值1,值2……)

注意:如果表后没有跟字段,需要给表中的所有字段插入值

         注意值和表中的字段的顺序和数据类型,不要违反完整性约束

                   先插入父表的数据,再插入子表的数据

2.插入多条数据      insert into 表名(字段)   子查询;

如:insert intos_stu(id,name)

         select id,last_name

         from s_emp

         where id>10;

 

3.更新数据,更新已经存在的数据

         update 表名

         set 字段名=值,字段名=值

         where 条件;

         注意:不加where,修改表中所有数据,加where,修改表中满足where条件的数据

 

4.删除数据delete

         delete [from]表名

         where 条件;

不加where,删除表中所有数据,加where,删除表中满足where的数据

删除表中的数据,不会删除表结构

先删除子表的数据,再删除父类的数据

在创建表的时候,给外键加了ondelete cascade,就可以直接删除父表的数据

 

5.事务

         事务是一个操作单元中的一个一系列操作,这些操作是不可再分的原子操作,要么同时成功,要么同时失败。

         事务开始         打开SQL*PLUS工具时,事务开始

                                     前一个事务结束,新的事务开始

         事务结束         commit,rollback

                                     执行DDL,DCL语句会自动提交

                                     非正常情况(系统错误,退出工具,系统崩溃)

         事务特点:ACID   

                            原子性:事务不可再分

                            一致性:事务操作前后的数据总量保持一致

                            隔离性:一个事务不能看到另外一个事务数据

                            持久性:数据要持久化的保存

 

 

 

 

增加列

alter table 表名

add(列名列的数据类型)                //增加一列

作用:增加表级约束,不能加notnull

 

修改列

 

alter table 表名

modify(属性名数据类型 [default 默认值] [not null])

作用:可以改变数据类型将number(7)增加为number(10),或者改小

         改变默认值,仅当默认值

添加了默认值只对后面添加的内容赋予默认值,前面的内容不会将它变成默认值

如果想添加非空约束,必须保证该列的数据为非空,添加非空约束只能用modify语言添加

如果这列为空值,可以改变数据类型,如果不为空值,注意原来的数据的类型要和修改的类型匹配

 

删除列

         alter table 表名 drop(列名)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值