--子查询
---单行子查询
--使用:需要查询的数据存在不明确的条件时考虑使用
--注意:可以直接在where子句中书写,作为条件使用
---多行子查询
--使用:当查询的结果是多个值的时候,考虑使用
--关键字:all 所有 any 任意 in或者,在其中
--查询所有比雇员“CLARK”工资高的员工信息
select * from emp where sal>(select sal from emp where ename='CLARK' );
--查询工资高于平均工资的员工的名字和工资
select ename,sal from emp where sal>(select avg(sal) from emp);
--查询和scott属于同一部门且工资比他低的员工资料
select * from emp where deptno=(select deptno from emp where ename='SCOTT') and sal<(select sal from emp where ename='SCOTT');
--查询工资最高的员工资料
select * from emp where sal=(select max(sal) from emp);
--查询职务和scott相同,雇佣时间早的员工信息
select * from emp where job=(select job from emp where ename='SCOTT') and hiredate<(select hiredate from emp where ename='SCOTT');
--查询工资比scott高或者雇佣时间早的员工编号和名字
select empno,ename from emp where sal>(select sal from emp where ename='SCOTT') and hiredate<(select hiredate from emp where ename='SCOTT');
--查询工资高于任意一个CLERK的所有员工信息
select * from emp where sal>(select min(sal) from (select sal from emp where job='CLERK'))and job<>'CLERK'order by sal desc;
select * from emp where sal>any (select sal from emp where job='CLERK') and job<>'CLERK';
--查询工资高于所有SALESMAN的员工信息
select * from emp where sal>(select max(sal) from (select sal from emp where job='SALESMAN')) order by sal desc;
select * from emp where sal>all(select sal from emp where job='SALESMAN')order by sal desc;
--查询部门20中同部门10的雇员工作一样的雇员信息
select * from emp where job in(select job from emp where deptno='10') and deptno='20'; --使用in关键字
select * from emp where job=any(select job from emp where deptno='10') and deptno='20'; --将in转换为=any关键字
--用户操作
--系统用户介绍
--scott 普通用户
-- system 系统用户
--sys超级用户
--创建用户
create user linkcyzk identified by oracle;
--用户名 --密码
--给创建的用户分配角色和权限
grant connect to linkcyzk;
grant resource to linkcyzk;
grant dba to linkcyzk;
--删除用户权限
revoke dba from linkcyzk;
--删除用户
drop user linkcyzk;
--操作表
--创建表
--明确表个数(业务和范式结合考虑)
--明确表名:z_user
--明确字段名及字段个数
--明确字段类型
--varchar2是字节长度,指定的是最大长度
--char是字符长度,指定长度,效率高,空间利用率低
--创建
--create table 表名(字段名 字段类型,字段名 字段类型,……)
create table usre(
usid varchar2(10),
uname varchar2(50),
pwd varchar2(40)
);
--修改表
--查看表结构
desc usre;--在命令窗口查看
--修改表名
rename usre to userer;
--添加字段
alter table usre add usex varchar2(4);
--修改字段
--修改字段类型(使用modify关键字)
alter table usre modify pwd char(16);
--修改字段名(使用rename column oldname to newname)
alter table usre rename column pwd to passwd;
--删除表
drop table usre;
--删除字段
alter table usre drop column pwd;
--约束学习
--主键约束
--非空约束
--检查约束
--唯一约束
--添加的方法有3种,建议采用第三种
--1.直接在字段后添加
create table usre(
usid varchar2(10) primary key,
uname varchar2(50) not null,
age number(3) check(age>0 and age<300),
sex char(4) default '男'check(sex='男'or sex='女'),--默认为男
phone varchar2(11) unique
);
--2.在创建表的最后加
create table usre(
usid varchar2(10) ,
uname varchar2(50),
age number(3) ,
sex char(4) ,
phone varchar2(11),
constraints pk_usre_usid primary key(usid),
constraints ck_usre_uname check(uname is not null),
constraints ck_usre_age check(age>0 and age<300),
constraints ck_usre_sex check(sex='男'or sex='女'),
constraints uq_usre_phone unique(phone)
);
--3.在创建表后添加
create table usre(
usid varchar2(10) ,
uname varchar2(50),
age number(3) ,
sex char(4) ,
phone varchar2(11),
);
--第一种方法
alter table usre add constraints pk_usre_usid primary key(usid);
alter table usre add constraints ck_usre_uname check(uname is not null);
alter table usre add constraints ck_usre_age check(age>0 and age<300);
alter table usre add constraints ck_usre_sex check(sex='男'or sex='女');
alter table usre add constraints uq_usre_phone unique(phone);
--第二种方法(从一定含义上是进一步改变它的类型,建议采用第一种)
alter table usre modify usid primary key;
alter table usre modify uname not null;
alter table usre modify age check(age>0 and age<300);
alter table usre modify sex check(sex='男'or sex='女');
alter table usre modify phone unique;
--删除约束:
alter table usre drop constraints pk_usre_usid;
alter table usre drop constraints ck_usre_uname;
alter table usre drop constraints ck_usre_age;
alter table usre drop constraints ck_usre_sex;
alter table usre drop constraints uq_usre_phone;