DDL:数据定义语言,用于创建、修改、删除数据对象。包括create/alter/drop/truncate
create:
create table sc(
name varchar2(10),
id number(4)
)
create table sc2
as
select name,pno
from sc
where dept=30;
创建表时名字在前,类型在后,小括号里面是大小。用空格隔开,前面的都要有逗号,最后一个没有逗号。
alter:
删除里面的字段:
alter table sc drop(name);
添加里面的字段:
alter table sc add(name varchar(10));
修改里面的字段:
alter table sc modify ()
修改表,可以删除,可以添加,可以修改。
rename:
rename sc1 to sc;
修改表的名字
truncate:
truncate table sc;
截断表,删除表里的数据,释放里面的空间,不可以回退。
comment:
comment on table sc
is "this is good";
注释可以通过以下方式来看:
all_col_comments
user_col_comments
all_tab_commments
user_tab_comments
DML:数据库操作语句
insert:
insert into sc (id,name)values(1.'张三');
update:
update sc set name='李四‘ where name='张三';
delete:
delete from sc where name='李四';
drop table sys_photo1;如果里面有数据将不能删除。但是用delete sys_photo1;将会将表里面的数据删除,表还在
select:
oracle的里面的数据类型:
字符类型:
char(n):用于标识固定的长度的字符串,当实际数据不足定义长度是,右边自动用空格补全。
varchar(n):可变字符串类型,数据库必须实现的数据类型,可以储存空字符串。
varchar2(n):可变字符串类型,当作为列来使用时,最大长度为4000。当做为变量类型使用时可定义为32767.不可储存空的字符串。
数值类型:
number(m,n):m表示有效数字为多少位,n表示小数位数
日期时间类型:
date:包含year(年),month(月),day(天),hour(小时),minute(分钟),second(秒)
(yyyy表示年份,mm表示月份,dd表示天,hh表示小时,min表示分,ss表示秒)
select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;
大对象数据类型:
lob用于储存大数据类型,文本长度冲过4000,二进制文件,最大容量为4000.
blob:用于储存二进制数据(图片文件)
bfile:独立文件的二进制数据
oracle里面的约束类型:
not null非空
unique key唯一
primary key主键
1):直接在后面加上primary key(列级约束)
2):在最后面加上 constraint emp_empno_pk primary key (empno)(表及约束)emp_empno_pk相当于重命名,后面是主键的名称
foreign key外键
check:表示输入的数据之只能是check约束里面的数据类型
create table sc(
id int,
name varchar2(10),
sex varchar2(10) check (sex in ('男‘,'女'))
)
数据库本身没有int,integer和long但是sql里面有,说以oracle也是兼容的。
删除表:
删除表时要先删除外键约束才能删除表。drop table sc cascade constraints;
查找当前用户的所有表:
select table_name from user_tables;
select * from all_tables where owner='SCOTT';用户名必须大写
select * from user_tables ;后面不能有用户名了,因为user已经是用户了
select * from dba_tables;不能再下面的用户使用
查找一张表的所有列名:
select column_name from user_table_columnwhere table_name='表名' order by column_id
(all_table_column) (dba_table_column)
数字和空值相加是空值。如select sum(sal)+sum(comm) from emp where job='' or ename='';如果comm是null,计算结果就会为空但是加上nvl就会解决这一问题。 select sum(sal)+sum(nvl(comm,0)) from emop where job='' or ename='';相当于把空值用0替换。此计算结果为一个数字,而不是想象中的几个数字,几个数字要去掉sum求和,就会把几个值给显现出来。就和汉族和回族女孩的信息一样。
去掉sum后就会显示出sal和comm的求和的几条数据。也可以用sum但后面要加上group by ename。但这样感觉逻辑上怪怪的,因为sum指的是所有的求和。
select a.ename 员工名字,b.ename 上级名字 from emp a,emp b where a.mgr=b.empno(+);查询员工名字和上级名字,后面加上(+)表示最后一个员工也会显示出来
select b.ename 员工姓名,a.ename 直接上级 from (select empno, ename from emp) a, (select ename,mgr from emp) b where a.empno=b.mgr;和上面一个意思是一样的。
查找最晚入职的员工 select * from emp where hiredate=(select max(hiredate) from emp); select * from emp order by hiredate desc limit 0,1;如果是m,n从m开始取m条数据,如果是1就是从零开始取一条数据