05 select
select ename||'daiosnad''dase' from emp;
select distinct deptno from emp; //去重复
select distinct deptno,job from emp; //重复的组合去掉
06 where
select * from emp where deptno = 10;//过滤条件
select * from emp where ename = 'CLARK';
select ename,sal from emp where sal > 1500;
select ename,sal,deptno from emp where deptno <>10;
select ename,sal from emp where ename > 'CBA';
select ename,sal from emp where sal between 800 and 1500;
select ename,sal from emp where sal >=800 and <=1500;
空值处理
select ename,sal,comm from emp where comm is null; //选择comm为空值的
select ename,sal,comm from emp where comm is not null; //选择comm不为空值的
select ename,sal,comm from emp where sal in (800,1500,2000);//选择sal为800,1500,2000的
select ename,sal,comm from emp where ename in ('SMITH','KING');//选择ename为SIMTH,KING的
简单日期处理
select ename,sal,hiredate from emp where hiredate > '20-2月-81';//简单日期处理
select ename,sal from emp where deptno = 10 and sal > 1000;
select ename,sal from emp where sal not in (800,1500);
模糊查询
select ename from emp where ename like '%ALL%'; //%表示一个或者多个
select ename from emp where ename like '_A%'; //_表示一个字母
--select ename from emp where ename like '%\%%'; // 默认\为转义字符
--select ename from emp where ename like '%$%%' escape '$'; //指定$为转义字符
07 order by
select * from dept order by deptno desc; //desc 表示降序
select empno, ename from emp order by empno asc; //默认升序,或者asc
select empno, ename from emp where deptno <>10 order by empno asc;
--select ename, sal, deptno from emp order by deptno asc, ename desc;
08 sql function_1
select lower(ename) from emp; //将ename全部变小写;
select ename from emp where lower(ename) like '_a%';
select substr(ename,1,3) from emp;//从第1个字符开始截,截3个字符
select chr(65) from dual; //chr 将asc码转换为字符
select assii('A') from dual; //从字符获得ASC码
select round(23.23) from dual; // 取整
select round(23.231 , 1) from dual ;// 留1位小数
select to_char(sal, 'L99,999.9999') from emp;//将sal转换为99,999.9999的字符串形式 9代表一位数字
select to_char(sal, 'L00000.0000)from emp;// 9没有时不显示,0 强制显示
select to_char(hiredate, 'YYYY-MM-DD HH:MI:SS') from emp; //显示时间
select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual;
09 sql function_2
select ename,hiredate from emp where hiredate > to_date('1981-2-20 12:34:56','YYYY-MM-DD HH24:MI:SS'); //to_date 将 字符串转换为日期
select sal from emp where sal > to_number('$1,250.00','$9,999.99');
select ename, sal*12 + nvl(comm, 0) from emp; // nvl如果comm中的值为空值,以0取代他
10 group gunction //多输入 一输出
max min avg sum count
select max(sal) from emp; //取sal最大值
select min(sal) from emp;
select avg(sal) from emp;
select to_char(avg(sal),'99999999.99') from emp;
select round(avg(sal),2) from emp;
select sum(sal) from emp;
select count(*) from emp; //有多少条记录
select count(*) from emp where deptno =10;
select count(ename) from emp;
select count(comm) from emp;
select count(distinct deptno) from emp;
11 group by
select deptno,avg(sal) from emp group by deptno; //按deptno分组之后求均值
select deptno,job,max(sal) from emp group by deptno, job;//按两个字段deptno,job分组
select ename from emp where sal = (select max(sal) from emp);
12 having
select avg(sal),deptno from emp group by deptno having avg(sal) >2000;
select avg(sal)
from emp
where sal >1200
group by deptno
having avg(sal) > 1500
order by avg(sal) desc;
13 子查询
select ename, sal from emp
where sal > (select avg(sal) from emp);
select ename, sal from emp
join (select max(sal) max_sal, deptno from emp group by deptno) t
on (emp.sal = t.max_sal and emp.deptno = t.deptno);
14 self_table_connections
select e1.ename, e2.ename from emp e1 , emp e2 where e1.mgr = e2.empno;
15 1999sql
select ename,dname from emp join dept on (emp.deptno = dept.deptno);
select ename,grade from emp e join salgrade s on (e.sal between s.losal and s.hisal);
三个表连接
select ename,dname,grade from
emp e join dept d on (e.deptno = d.deptno)
join salgrade s on (e.sal between s.losal and s.hisal)
where ename not like '_A%';
左外连接
select e1.ename, e2.ename from emp e1 left join emp e2 on (e1.mgr = e2.empno);
右外连接
select ename,dname from emp e right join dept d on (e.deptno = d.deptno);
全外连接
select ename,dname from emp e full join dept d on (e.deptno = d.deptno);
部门平均的薪水等级
select deptno,avg_sal,grade from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal);
select deptno ,avg(sal) from
(select deptno ,sal, grade from emp join salgrade s on (emp.sal between s.losal and s.hisal)) t
group by deptno
--19_不用组函数 求薪水最大值
select distinct sal from emp where sal not in
(select distinct e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal));
哪些人是经理人
select ename from emp where empno in (select mgr from emp);
20平均薪水最高部门的编号与名称
select dname,deptno from dept where deptno = (
select deptno from (select deptno,avg(sal) avg_sal from emp group by deptno)
where avg_sal = (select max(avg_sal) from (select deptno,avg(sal) avg_sal from emp group by deptno)))
select deptno,dept.dname from dept where dept.deptno = (
select deptno
from
(select emp.deptno,avg(emp.sal) from emp group by deptno order by avg(sal) desc)
where
rownum =1)
select dname,deptno
from dept where deptno = (
select deptno from
(select deptno,avg(sal) avg_sal from emp group by deptno)
where avg_sal = (select max(avg(sal)) from emp group by deptno))
22 平均薪水的等级最低的部门名称
select dname,t1.deptno,grade,avg_sal from (
select deptno, grade,avg_sal from
(select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal)
)t1
join dept on (t1.deptno = dept.deptno)
where t1.grade = (
select min(grade) from (
select deptno, grade,avg_sal from
(select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal)))
创建视图 -- v$dept_avg_sal_info
create view v$dept_avg_sal_info as
select deptno, grade,avg_sal from
(select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal)
使用视图简化
select dname,t1.deptno,grade,avg_sal from
v$dept_avg_sal_info t1
join dept on (t1.deptno = dept.deptno)
where t1.grade = (
select min(grade) from (
select deptno, grade,avg_sal from
v$dept_avg_sal_info))
24_比普通员工薪水还要高的 经理人的名字
select ename from emp
where empno in (select distinct mgr from emp where mgr is not null)
and sal >
(select max(sal) from emp
where empno not in (select distinct mgr from emp where mgr is not null))
25 rownum
复制备份表
create table emp2 as select * from emp;
26 update /transaction 事务
薪水翻倍
update emp2 set sal = sal*2 ,ename = ename||'-' where deptno = 10;
delete
delete from emp2 where deptno = 10;
commit 提交/ 修改起作用
27_create table
create table
create table stu
2 (
3 id number(6),
4 name varchar2(20) constraint stu_name_nn not null,
5 sex number(1),
6 age number(3),
7 sdate date,
8 grade number(2) default 1,
9 class number(4),
10 email varchar2(50) unique //字段级约束
11 );
desc stu;
28_constraint 非空 唯一 主键 外键 cheak
名字和EMAIL的组合不重复
create table stu
2 (
3 id number(6),
4 name varchar2(20) constraint stu_name_nn not null,
5 sex number(1),
6 age number(3),
7 sdate date,
8 grade number(2) default 1,
9 class number(4),
10 email varchar2(50),
11 constraint stu_name_email_uni unique(email,name) //表级约束
12 );
主键约束 字段级约束
create table stu
2 (
3 id number(6) primary key, //主键 非空,唯一 代表了一条记录
4 name varchar2(20) constraint stu_name_nn not null,
5 sex number(1),
6 age number(3),
7 sdate date,
8 grade number(2) default 1,
9 class number(4),
10 email varchar2(50),
11 constraint stu_name_email_uni unique(email,name)
12 );
主键约束 表级约束
create table stu
2 (
3 id number(6) , //主键 非空,唯一 代表了一条记录
4 name varchar2(20) constraint stu_name_nn not null,
5 sex number(1),
6 age number(3),
7 sdate date,
8 grade number(2) default 1,
9 class number(4) ,
10 email varchar2(50),
11 constraint stu_name_email_uni unique(email,name) ,
12 constraint stu_id_pk primary key (id)
13 );
外键 字段级约束
create table stu
2 (
3 id number(6) , //主键 非空,唯一 代表了一条记录
4 name varchar2(20) constraint stu_name_nn not null,
5 sex number(1),
6 age number(3),
7 sdate date,
8 grade number(2) default 1,
9 class number(4) references class(id),
10 email varchar2(50),
11 constraint stu_name_email_uni unique(email,name) ,
12 constraint stu_id_pk primary key (id)
13 );
外键 表级约束 被参考的字段 必须是主键
create table stu
2 (
3 id number(6) , //主键 非空,唯一 代表了一条记录
4 name varchar2(20) constraint stu_name_nn not null,
5 sex number(1),
6 age number(3),
7 sdate date,
8 grade number(2) default 1,
9 class number(4) ,
10 email varchar2(50),
11 constraint stu_class_fk foreign key(class) references class(id),
12 constraint stu_name_email_uni unique(email,name) ,
13 constraint stu_id_pk primary key (id)
14 );
create table calss
(
id number(4) primary key,
name varchar2(20) not null
)
31_alter
修改表结构
alter table stu add(addr varchar2(100));// 增加字段
alter table stu drop(addr);//删减字段
alter table stu modify(addr varchar2(150));//修改字段 修改后要能容纳原来的数据
alter table stu drop constraint sut_clall_fk;//删除约束条件
alter table stu add constraint stu_class_fk foreign key (class) references class(id);//增加约束条件