oracle数据库语句2

******表连接****
给emp表取别名为e
select * from emp e;

查询emp表和dept表中的数据
select * from emp e, dept d order by empno;

****等值连接*****

查询每一个员工的信息以及所在部门的信息
select * from emp e, dept d where e.deptno=d.deptno ;

查询出每一个有员工存在部门信息和部门人数
--统计有员工的的部门的员工人数:select count(*), deptno from emp group by deptno;
select * from dept d, (select count(*), deptno from emp group by deptno) c where d.deptno = c.deptno;

*****非等值连接*****
! =  >  <  <>  between and

查询每一个员工的姓名,工资金额,入职时间及工资等级
select ename, sal ,hiredate, grade from emp e, salgrade s where e.sal between losal and hissal;


****外连接****
主表:只要在主表中出现的记录,就必须出现在结果中。从表后面有+

外连接可以是左向外连接、右向外连接活完整外部连接


列出每一个有上级的员工的信息和上级信息
select * from emp e, emp m where e.mgr = m.empno(+)


*********99语法*******

cross join  :交叉连接,实现笛卡尔积
natural join :自然连接,等值连接(必须要有同名的列)
join using(必须要有同名的列或者存在主外键关系)
join on: 可做等值连接、非等值连接、自然连接  
---同名列是否需要加限定词,如果使用的自然连接 using连接,不能加。如果不是则需要加

*************************

cross join  :交叉连接,实现笛卡尔积
select * from dept cross join emp;

natural join :自然连接,等值连接(会自己做等值连接)
查看所有员工,员工编号,所属部门的编号及所属的部门的名称
select ename, empno, deptno, dname from emp natural join dept; 

join using(必须要有同名的列)
using连接,等值连接
查看所有员工,员工编号,所属部门的编号及所属的部门的名称
select ename, empno, deptno, dname from emp join dept using(deptno);

查询10部门的员工名称, 部门编号,部门名称(natural join 与using join分别实现)
自然连接实现:select * from  ename, dname, from emp natural join dept where deptno=10;
using实现:select  * from emp join dept using(deptno) where deptno=10;

join on: on 连接,可做等值连接、非等值连接、自然连接

查看所有员工的姓名 ,编号, 以及所属的部门编号和部门名称----等值连接
select ename ,dept, e.deptno ,dname  from emp e join dept  d on e,dept
查看每一个员工的姓名,工资,所属的部门编号,工资等级---非等值连接
select ename, sal, deptno, grade from emp e join salgrede s on sal betwwen losal on hissal;


***三张表的连接****
查询30部门员工姓名,工资,部门编号,工资等级,部门名称
--查询数据:员工姓名,工资,部门编号,工资等级,部门名称
--数据来源:emp e ,salgrade s, dept d
--连接条件:sal between losal and hisal      e.deptno=d.deptno
--题意条件:e.deptno=30 || d.deptno=30

select ename, sal, e.deptno, grade ,dname from emp e join dept d on e.deptno=d.deptno join salgrade on e.sal between losal and hisal where e.deptno=30;

outer join :外连接,有主表从表一说
left [outer] join on 
right [outer] join on
例子:
查看每一个员工编号,员工名称,上级编号,上级名称
-- on 连接实现  外连接****
slect e.empno 员工编号
      e.ename 员工名称
      e.mgr   上级编号
      e.ename 上级名称
    from emp e
    left outer join emp m
    on e.mgr=m.empno
    
**********************************
92标准
内连接:
select ... from table1,table2 where table1.xx=table2.xx and table1.xx=1;
外连接:
select ... from table1,table2 where table1.xx=table2.xx(+);


99标准
内连接:
select ... from table1 corss join table2 where ...
select ... from table1 natural  join table2 where ...
select ... from table1 join table2 using(同名字段)  where ...
select ... from table1 join table2 on 连接条件 where ...
外连接:
select ... from table1  left  outer join table2  on 连接条件 where ...

--全连接

select ... from table1 full join table2  on 连接条件 where ...

***********************************************

******集合操作******
Union,并集(去重)对两个结果集进行并集操作,不包括重复的行同时进行默认规则的排序
Union all,全集(不去重)对两个结果集进行并集操作,包括重复行,不进行排序
intersect,交集(找出重复)对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序
Minus,差集(减去重复)对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序


**********************
集合操作  ----》 两个结果集 字段个数和字段类型一一对应
select 'a', 'b'from dual
union
select 'c', 'd'from dual;


******表操作******
**创建表**
创建新表:
create table 表名(
    字符名 类型(长度),
    ...其他字段...
    
);

从其他表拷贝结构
create table 表名 as select 字段列表 from 已有表 where 1!=1;


*******修改表结构*******
1)修改表名
rename 原表名 to  新表名
2)修改列名
alter table 表名 rename column 列名 to 新列名 
3)修改字符段类型
alter table 表名 modify(字段 类型)
4)添加列
alter table 表名 add 字段 类型
5)删除列
alter table 表名 drop column 字段
6)删除表
drop table 表名

****************************

数据库五种约束
主键约束:primary key.确保字段的值是唯一的且是非空的,一个表里只有一个主键
唯一约束:unique
非空约束:not null
外键约束:foreign key
检查约束:check

默认值:default
唯一:unique
*****************
创建表的同时,将约束进行创建,约束不设定名称
create table tb_user(
        userid number(5) primary key,
        username varchar2(30)  check(length(username) between 4 and 20) not null,
        userpwd     varchar2(20) not null check(length(userpwd) between 4 and 18),
        age number(3)  default(18) check(age>=18),
        gender char(3) default('男') check(gender in('男','女')),
        email varchar2(30) unique,
        regtime date default(sysdate)
)


****************************************************
创建表的同时,将约束进行创建,给出约束的名字
create table tb_user(
        userid number(5),
        username varchar2(30)  constraint nn_user_name  not null,
        userpwd     varchar2(20) constraint nn_user_pwd not null ,
        age number(3)  default(18),
        gender char(3) default('男') ,
        email varchar2(30),
        regtime date default(sysdate),
        constraint pk_user_id  primary key(userid),
        constraint ch_user_name check(length(usename) between 4 and 20),
        constarint ck_use_pwd check(length(userpwd) between 4 and 18),
        constarint ck_usere_age  check(age>=18),
        constarint ck_usr_gender check(gender in('男','女')),
        constarint ck_user_emali unique(emali),
        
)

**************************************
追加约束---创建完表,未曾追加约束,现在追加上约束。

create table tb_user(
        userid number(5),
        username varchar2(30),
        userpwd     varchar2(20)  ,
        age number(3),
        gender char(3),
        email varchar2(30),
        regtime date default(sysdate)
)
-- 开始追加约束
alter table tb_user add  constraint pk_user_id primary key(userid);-- 追加的主键约束
alter table tb_user add  constraint ck_user_name chck(
        length(username) between 4 and 20
); -- 追加的一般检查约束
alter table tb_user add constraint ck_user_gender check( gender in('男','女'));
alter table tb_user add constraint uq_user_email unique(email);  --追加唯一约束
alter table tb_user modify(username constraint nn_user_name not null); -- 追加非空约束
alter table tb_user modify(age default(18));  --追加默认约束


外键的追加约束
-- 强制不让删
-- 自动设为null
-- 级联删除

create table tb_txt(
            txtid number(10),
            title varchar2(32),
            txt varchar2(1024),
            putime date,
            userid number(5)
);

alter table tb_txt add constarint fk_user_id foreign key(userid)
references tb_user(userid);   -- 强制不让删
alter table tb_txt add constarint fk_user_id foreign key(userid)
references tb_user(userid) on delete set null;  -- 自动设为null
alter table tb_txt add constarint fk_user_id foreign key(userid)
references tb_user(userid) on delete cascade;   -- 级联删除

禁用/启用约束(enable/disable):是否对新变更的数据启用约束验证
验证/非验证(validate/novalidate):是否对表中已客观存在的数据进行约束验证


删除约束
alter table 表名 drop constraint  约束名 cascade;

*******************************
DML:数据操作语言
insert:向表中插入一条数据
delete:删除数据表中的一条或多条数据,也可以删除数据表中的所有记录,但是,他的操作对象仍是记录
update:用于修改已存在表中的记录的内容

************insert插入的个数跟字段要跟表结构一样********
insert into 表名 [(字段列表)] values(值列表);

******默认添加方式******
insert into 表名 values (值列表)

-- 使用默认添加的方式插入记录,数据必须和表结构里面字段顺序和个数一致
-- 当某个字段存在默认值时,也必须给出值,不能不给


insert into tb_user values
(1001,'marry','12313','女',to_date('1901-1-1','yyy-mm-dd'));
commit;

-- 在创建表的同时,添加记录
create table trmp as select empno, ename, deptno, sal from emp;

-- 从其他表当中拷贝数据
insert into temp1 value(selecr * from temp where deptno=30);
commit;

-- 从其他表当中拷贝数据(从emp表中拷贝)
insert into temp1 value(selecr empno, ename, deptno, sal from emp where deptno=20);
commit;

****添加指定的列和顺序********

insert into 表名 (指定列) values(值列表)   添加完,别忘记commit提交。

如果某些字段,值可以为空或者有默认值,此时,我们可以不指定
如果某个字段有默认值,则未指定时使用默认值
如果某个字段没有默认值,但是可以为null,未指定时使用null填充
如果某个字段既可以为null,又有默认值,若未指定,则使用默认值填充,想要设为null,必须手动指定

****************************************************
-- 通过指定列的方式,从其他表中查询数据,添加到表当中 **********
-- 查询emp表中所以10部门的员工
-- empno-userid ename-username ename-userpwd hiredate-regtime

insert into tb_user(userid, username ,userpwd, regtime)
(select empno,ename, ename, hiredate from emp where deptno=10);
commit;

知道tmoi这个人发布了一篇文章
insert into tb_txt(titid,title,putime,userid)
values(000003,'title3',to_date('1901-1-3','yyy-mm-dd')),
(select userid from tb_user where username='tomi');
commit;

****************update***********************
通过update语句可以更新(修改)表中的记录值
update 表名 set 字段1=值1, [字段2=值2,...] where 过滤行记录;

******
-- 在更新时一定记得加上where条件

update tb_txt set txt='aaaa' where txtid=3;
commit;

修改两个字段:
方式1:一个字段一个字段修改
update tb_txt set txt='bbbb', userid=10002 where txtid=2;

方式2:先列出修改的字段,通过查询子句设定
update tb_txt set(txt,userid)=(select 'ccccc',10001 from dual) where txtid=3;
commit;

修改多条记录。将所有的的title修改成title0
update tb_txt set title='title0' where 1=1;
commit;


**************************delete***********************
通过delet语句可以删除表中的记录。(注意存在主外键约束的记录)
delete from 表名 where 条件

delete from tb_user where userid=7782;
commit;

delete  from tb_user  where userid<10000;
commit;

-- 当两张表存在主外键关系时,如果删除主表(被参考的表)中被引用的记录时,会出现下面三组情况:
-- 如果默认外键处理方式,强制不让删
-- 如果是 on delete cascade 一起删除
-- 如果是 on delete set null  自动设为null


-- 修改约束   先删除 后添加即可
-- 删除约束 修改表结构 alter table
alter table tb_txt drop  constraint fk_txt_ref_user_id;
-- 添加约束 修改表结构 alter table
alter table tb_txt add constraint fk_txt_ref_user_id
foreign key(userid) references tb_user(userid);

-- 先删从表,后删主表。先创建主表,后创建从表。

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...