子查询注意的问题:
1.将子查询放入括号中
2.采用合理的换行和缩进
3.可以在主查询的where from select having 放子查询
3.1 select 后面的子查询必须是单行子查询
select ename,(select job from emp where empno=‘‘)
from emp;
3.2 where,having 后面的子查询 用
= > >= < <= <> 必须是单行子查询
in any all not in 可以是单行子查询 也 可以是多行子查询
3.3from 后面的子查询 是一张虚拟表
3.4 查询每个部门最小工资 大于 部门Id是 50 最小工资的部门
select department_id, min(salary)
from employees
group by department_id
having min(salary) > (select min(salary)
from employees
where department_id =50)
多行查询符
1.any :和子查询的任意一个值比较
--查询工资比10号部门任意一个员工工资都高的员工信息
select * from emp
where sal > any (select sal from emp where deptno = 10);
--其实大于 就是大于一个部门薪资最小值
-- 小于 就是小于一个部门薪资最大值
2.all:和集合的所有值进行比较
select * from emp
where sal > all (select sal from emp where deptno = 10);
--其实大于 就是大于一个部门薪资最大值
-- 小于 就是小于一个部门薪资最小值
子查询中的空值问题
not in(10,20,null) 查不出数据
使用not in 不能有空值。。 因为not in 是跟所有值做比较
in (10,20,null)能有数据
因为 in 是跟任意一个值做比较
集合运算
并集 union/union all
交集intersect
差集minus
集合运算的问题
1.参与运算的各个集合必须列数相同,且类型一致
2.采用第一个集合的表头作为最终的表头
3.order by 必须放在每个集合后
group by rollup(A,B)
=group by a,b;
uoion
group by a;
uoion
group by null;
打开sql执行的时间
set timing on
隐式插入空值 把隐藏的列空出来 insert into (ename,age)values(‘HAH‘,18)其他未有的列默认都插入空值
显式插入空值 insert into emp(‘xx‘,‘xx‘,null,.....)
& 地址符
insert into emp(empno,ename,sal,deptno) values (&empno,‘&ename‘,&sal,&deptno);
select empno,ename,&sal from emp;
地址符可以放入所有的 (DML)操作语句中
往一个表中插入一个集合
insert into emp10 select * from emp where deptno =10
--插入要注意列的个数类型必须一致。。。
数据类型
varchar2(size) 可变长字符数据
char(size) 定长字符数据
number(p,s) 可变长数值数据
date 日期型数据
long 可变长字符数据,最大可达到2G
clob 字符数据,最大可达到4G
raw and long raw 原始的二进制数据
blob 二进制数据,最大可达4G
bfile 存储外部文件的二进制数据,最大可达4G
rowid 行地址
--使用子查询快速建表
create table empincome
as
select empno,ename,sal from emp;
--快速建表不要数据
create table empincome
as
select empno,ename,sal from emp where 1<>1;
--create 创建 alter 修改 drop 删除 (表)
--追加列 ,修改列 , 删除列 ,重命名列 (列)
1.追加列
alter talbe test2 add image blob; --add 增加
2.修改列
alter table test2 modify tname varchar2(30);--modify 修改
3.删除列
alter talbe test2 drop column image;--drop 删除
4.重命名列
alter table test2 rename column tname to username;--rename 重命名
--修改约束
--not null
alter table tableName modify columnName constraint 约束名 not null;
--defalut
alter table tableName modify columnName char(2) DEFAULT ‘M‘;
create view view1
as
select * from emp where deptno=10
with check option; --只能插入满足视图条件的数据
insert into view1(**,10);--ok
insert into view1(**,20);--error