L查看缓冲区中的语句
/执行
save 目录 保存脚本文件
get 目录
ed 目录
@路径
show echo
set echo on;
foodback 超过6条显示行数
initcap 首字母大写
lower
upper
concat 把第一个字符川和第二个字符串连成一个
substr (str,m,n) 把str从第m个开始截取n个字符
instr (列名|表达式,'字符串',【m】,【n】) 返回所给字符串的数字位置,从m开始,n表示出现的次数
TRIM(【trailing】要去掉的字符 FROM 源字符串)
replace(正文表达式,要搜索的字符串,替换字符串)
数字型函数
round(列名|表达式,n)四舍五入到小数点n位。
TRUNC(列名|表达式,n)截取到小数点后n位。
MOD(m,n)将m除以n并取余数。
select sysdate-22/24 from dual; 减去22个小时
日期函数
MONTHS_BETWEEN(日期1, 日期2) 返回日期1和日期2之间的月数
ADD_MONTHS(日期,n)函数是把n个月加到日期上
NEXT_DAY(日期,字符串)返回下一个字符串(星期几)指定的日期。
LAST_DAY返回该日期所在月的最后一天。
不同数据类型之间的显式转换
TO_CHAR(日期,‘fmt’)fmt为日期格式 DD/MM/YYYY DY:用三个字母表示的星期几 MONTH, DAY:星期几的完整英文表示
SP和TH 分别为数字的英文表示和数字的序数表示
TO_CHAR(数字,‘fmt’)L:显式本地货币符号 MI:在数的右边显式减号 PR:把负数用尖括号括起来
TO_NUMBER(字符串,【,‘fmt’】) 把字符串转换数字
TO_DATE(字符串【,‘fmt’】) 转换日期
HAVING 分组 得到的分组应用于分组的函数 满足条件的结果
最好把having应用于group by之后
分组函数的嵌套(只能嵌套两层)
分组函数的控制问题
除了COUNT(*)之外,其他分组函数都不处理NULL
主键(primary key)某一列或某几列的集合,能唯一标任一行。
实体完整性(Entity Integrity)主键不能包含空值(NULL)
第一范式(1NF)
1、所有的键属性(列)都已定义。
2、没有任何重复组,每行每列交汇处可以且只能包含一个值,而不能包含一组值。
3、所有的属性都依赖于主键。
消除部分依赖:外键(foreign key)关系数据库表中的某一列或几列的组合,其值与另一个表中的某一列相匹配,或为NULL。
引用完整性(Referential Integrity)
1、外键必须为空或者有相匹配的项。
2、外键可以没有相对应的键属性(列),但不可以有无效的项。
第二范式(2NF)
1、该表为第一范式(1NF)的表。
2、该表不包含部分依赖。
第三范式(3NF)
1、该表为第二范式的表。
2、该表不包含传递依赖。
传递依赖(transitive dependency)指一个或多个属性(列)依赖于非主键的属性(列)。
自连接
外连接:连接运算符(+),一定要放到一个表中,缺少响应信息的那一面。
connect system/password
ALTER TABLE 表名 ADD
ALTER TABLE 表名 MODIFY
ALTER TABLE 表名 DROP COLUMN 列名 从一个表中删除一行
ALTER TABLE 表名 SET UNUSED [COLUMN] 列名 从一个表中把某一列置成无用(unused)
RENAME 原表名 TO 新表名 改变对象的名称
截断表和删除表
TRUNCATE TABLE 表名 删除所有数据行,保留表结构 无法恢复
DROP TABLE 表名 删除所有数据航和表结构、索引 无法恢复
select * from cat;
select INDEX_NAME,INDEX_TYPE,TABLE_NAME,UNIQUENESS from user_indexes; 查看索引
select * from user_ind_columns; 查看索引列
create index empcon_job_sal_idx on empcon(job,sal); 创建索引
select * from user_ind_columns; 查看索引列
COLUMN_POSITION 应该是同时创建索引的个数
DML(Data Manipulation Language)数据操纵语言:
适用范围:对数据库中的数据进行一些简单操作,如insert,delete,update,select等.
DDL(Data Definition Language)数据定义语言:
适用范围:对数据库中的某些对象(例如,database,table)进行管理,如Create,Alter和Drop.
当下列条件之一成立时,应该为表建立索引:
1、表很大而且大多数的返回数据量很少(oracle推荐为小于总行数的2%~4%),因为如果返回数据量很大的话,就不如顺序的扫描这个表了。
2、此列的取值范围很广,一般为随机分布。比如年龄
3、一列或多列经常出现在where子句或连接条件中。
4、表上的DML操作较少
5、此列中包含大量的空值NULL
6、此列不经常作为select语句中某个表达式的一部分。
删除索引:DROP INDEX 索引名
以&开始的替代变量
set verify on;
select empno,ename,sal,job,deptno from emp where job='&v_job';
select ename,job,&&v_col from emp order by &v_col;
undefind v_col; 取消变量
使用DEFINE定义替代变量
SQL> define v_clo;
SP2-0135: 符号 v_clo 未定义
SQL> define v_col=CLERK;
SQL> l
1 select ename,sal,job
2 from emp
3 where job='&v_col'
4* order by sal
SQL> /
原值 3: where job='&v_col'
新值 3: where job='CLERK'
ENAME SAL JOB
-------------------- ---------- ------------------
SMITH 800 CLERK
JAMES 950 CLERK
ADAMS 1100 CLERK
MILLER 1300 CLERK
SQL> define v_job
SP2-0135: 符号 v_job 未定义
SQL> define v_col;
DEFINE V_COL = "CLERK" (CHAR)
SQL> define
DEFINE _DATE = "23-2月 -20" (CHAR)
DEFINE _CONNECT_IDENTIFIER = "test" (CHAR)
DEFINE _USER = "SCOTT" (CHAR)
DEFINE _PRIVILEGE = "" (CHAR)
DEFINE _SQLPLUS_RELEASE = "1102000100" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options" (CHAR)
DEFINE _O_RELEASE = "1102000100" (CHAR)
DEFINE V_COL = "CLERK" (CHAR)
ACCEPT定义替代变量
SQL> set line 150;
SQL> l
1 select ename,sal,job
2 from emp
3 where job=UPPER('&v_job')
4* order by sal
SQL> /
原值 3: where job=UPPER('&v_job')
新值 3: where job=UPPER('clerk')
SQL> define v_job
DEFINE V_JOB = "clerk" (CHAR)
SQL> undefine v_job;
SQL> /
输入 v_job 的值: Clerk
原值 3: where job=UPPER('&v_job')
新值 3: where job=UPPER('Clerk')
ACCEPT 变量名(存储传入值的变量名,如果不存在,自动创建) 【数据类型(数字型、日期型和字符型,字符型最大长度240字节)】【format 格式化模式(99,999.00或A28)【prompt 正文(在用户输入之前的系统提示)】【HIDE(系统不显示用户的输入值)】】
第六章 数据的维护 包括数据操作语言DML和事务控制(Transaction Control)两大部分,
DML只包含了INSERT、update和delete3个语句。
INSERT
insert into dept_dml(deptno,dname,loc) values(66,'美容','煤球胡同');
select * from dept_dml;
insert into dept_dml values(88,'','牛街');
insert into dept_dml values(44,NULL,'安静大街');
create table sales(code,name,salary,commission) as select empno,ename,sal,comm from emp;
select * from sales;
truncate table sales;
insert into sales(code,name,salary,commission)
select empno,ename,sal,comm from emp where job like 'SALE%';
insert into emp_dml(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(&id,'&name','&job',7689,TO_DATE('&hiredate','YYYY MM DD'),666,77,88);
save e:studyinsert
oracle 系统的约束
非空(not null)
唯一(UNIQUE)在表中所定义的这列或者这些列的值都不能相同
主键(primary key) 唯一的标识表中的每一行,用来维护一个表的实体完整性
外键(Foreign key)用来维护从表和主表之间的引用完整性。
条件约束(CHECK),表中每一行都要满足该约束条件。
select owner,CONSTRAINT_NAME,TABLE_NAME 查询约束
C:代表CHECK(条件约束)和NOT NULL约束
P:代表Primary key 主键约束
R:代表REFERENTIAL INTEGRITY,即Foreign key(外键约束)
U:代表Unique (唯一约束)。
约束类型:
UK:UNIQUE KEY (唯一)约束
PK:PRIMARY KEY (主键)约束
FK:FOREIGN KEY(外键)约束
CK:CHECK KEY (条件)约束
NN:NOT NULL (非空)约束
select * from user_constraints where table_name='DEPTCON';
select * from user_cons_columns where table_name='DEPTCON';
主键约束不允许插入NULL,唯一约束可以插入NULL;
找到索引
select * from user_indexes;
select * from user_ind_columns;
外键约束
alter table empcon
add constraint empcon_deptno_fk
foreign key(deptno) references deptcon(deptno)
外键约束对DML语句和DDL语句的影响
1、在进行插入操作时,只有当操作是在子表或从表这一端时才会产生违反引用完整性(referential intergrity)的问题;当操作是在父表或主表端时则不会产生。
2、在进行删除操作时,只有当操作时在父表或主表(parent table)这一端时才会产生违反引用完整性(referential intergrity)的问题;当操作时在子表或从表(chile table)端时则不会产生。
3、在进行修改操作时,操作无论是在父表还是在子表端,都可能产生违反引用完整性的问题。
4、在删除整个表时,只有当删除的是父表或主表时才会产生违反引用完整性的问题,当操作子表或从表时则不会。
alter table empcon add constraint empcon_deptno_fk foreign key(deptno) references deptcon(deptno) on delete cascade; 如果删除主表deptcon中的记录会把从表中相关的记录全部删掉。
alter table empcon
add constraint empcon_deptno_fk
foreign key(deptno) references deptcon(deptno) on delete set null;
约束的维护
关闭约束的命令:
ALTER TABLE 表 disable constraint 约束名 【cascade】其中cascade子句用来关闭存在引用完整性关系的约束,disable子句即可以用在create table语句中,也可以用在ALTER TABLE 语句中。
开启约束的 命令:
ALTER TABLE 表 enable constraint 约束名
删除约束
ALTER TABLE 表 DROP CONSTRAINT 约束名