SQL笔记备忘

 

Sql
Structure query language

Dml
	Insert update select merge delete
	不隐含commit
Ddl
	Create drop
Dcl
Grant revoke
Crud

单表查询

select ename,sal from emp where empno = 7521
单表查询
and or not 逻辑运算符

+ - * / mod
> = < >= <= between and
like
in   is null

select * from emp where sal >2000 and sal < 5000
select * from emp where sal between 2000 and  5000
select * from emp where sal in (800,1600,1250)
select * from emp where sal=800 or sal=1600
select * from emp where ename like '%S'
select * from emp where ename like '__A%'

select * from emp;

select * from dept;

select distinct deptno from emp;

select * rom emp order by sal desc;

select * from emp order by sal desc wehere rownum<6;

select * from emp order by deptno,sal desc

dual 

select field from table
select field from dual

select lower('aaaBBBcCdDDD') from dual
select upper('adafFFddfdfdf') from dual
select initcap('aaaAAAd') from dual  --首字母大写
select concat('aaa','bbbb') from dual --连接
select concat(ename,deptno) from emp
select substr('abcdfghigjklmn',3,3) from dual
select substr('abcdfghigjklmn',-3,3) from dual
select substr('abcdfghigjklmn',-3,-2) from dual

select length('adbc') from dual
select instr('abcdefg','f') from dual
select trim('   hello everyon  !!   ') from dual
select trim(leading ' ' from '   hello everyon  !!   ') from dual --去掉左边的空格
select trim(trailing ' ' from '   hello everyon  !!   ') from dual --去掉右边的空格
replace 
select replace('AAAAaaBBBBB','a','z') from dual

round
trunc
mod

select round(25.56,1) from dual
select round(25.56,-1) from dual
select round(254.56,-1) from dual
select trunc(25.56),trunc(25.536,2),trunc(25.56,-1) from dual
select mod(10,3) from dual
select trunc(10/3) from dual

--转换
to_char

select to_char('aaaa') from dual
select sysdate from dual
select to_char(sysdate) from dual

to_date
select to_date('2010-10-10 17:41','yyyy-mm-dd hh24:mi:ss') from dual
--聚合函数
count
sum
avg
max
min

select count(empno) from emp
select sum(sal),max(sal),min(sal) from emp;

第二课 多表查询 子查
询
select deptno,avg(sal) from emp group by deptno

select deptno,sum(sal) from emp group by deptno

select deptno,job,sum(sal) from emp group by deptno,job

--1.查询每个部门的员工数量
select deptno,count(deptno) from emp group by deptno
--2.查询每个部门的员工数量大于4
select deptno,count(deptno) from emp group by deptno having count(deptno)>4
--3.查询每个部门的员工数量大于4,部门要显示部门名称
select e.deptno,d.dname,count(e.deptno) from emp e,dept d where e.deptno=d.deptno group by e.deptno,d.dname having count(e.deptno)>4

select * from emp e,dept d where e.deptno=d.deptno;
--4.查询每个部门的员工数量,没有的也要显示[外连接,不写加号的为主]
select d.deptno,count(e.empno) from emp e,dept d where e.deptno(+)=d.deptno group by d.deptno
--5.列出所有员工的姓名及其直接上级的姓名[自连接]
select e.ename empname, m.empno mgrname  from emp e,emp m where e.mgr=m.empno(+)
--6.查询高于平均工资的员工工资[相关子查询]
select avg(sal) from emp 
select * from emp where sal > (select avg(sal) from emp)
--7.查询低于10号部门工资的所有员工
select * from emp where sal<all(select sal from emp where deptno=10)
select * from emp where sal<any(select sal from emp where deptno=10)

第三课 高级查询
集合操作符
Case
层次化查询
扩展的group by函数
分析函数

union --不包含重复行
union all  --返回所有的,包含重复行,并集
intersect  --返回共有的,交集
minus      --差集

create table dept1 as select * from dept;
create table dept1 as select * from dept where 1=2
select * from dept2
delete frmo
drop table dept1
create table dept2 as select * from dept

insert into dept2 values(60,'bbb','bbb')

select * from emp union select from emp2

case
  case search_expression
    when ... then result
    when ... then result
    else
end

select * from emp;
select ename,job,deptno,
       case deptno
         when 10 then 'aaa'
           when 20 then 'bbb'
             else 'ccc'
               end
               from emp;
select ename,deptno,
       case 
         when deptno=10 then 'aaa'               
           when deptno=20 then 'bbb'
             else 'ccc'
               end
              from emp;
              
select ename,sal,
       case
              when sal>4000 then 'AAA'              
              when sal<4000 and sal>200 then 'BBB'
              else  'CCC'
       end
from emp




--层次化查询  
     --根节点:顶端节点
     --父节点:
     --子节点:
     --叶节点:
     
select level,column,expression
from table
where condition
start with condition connect by prior condition   

  
select * from emp;
select * from emp
start with empno=7839 connect by prior empno=mgr

select count(distinct level) from emp
start with empno=7839 connect by prior empno=mgr

select  level from emp
start with empno=7839 connect by prior empno=mgr

select  level,lpad('     ',2*level-1)||ename as ename  from emp
start with empno=7839 connect by prior empno=mgr

第四课
Group by扩展函数
分析函数
rollup cube

group by rollup(A,B)
(A,B)
(A)

group by cube(A,B,C)
(A,B,C)
(A,B)(A,C)(B,C)(A)(B)(C)

--最终都会对全表进行group by


select * from imp;
select deptno,job,count(*) from emp group by (deptno,job)
select deptno,job,count(*) from emp group by (deptno,job) order by deptno

select deptno,job,count(*) from emp group by rollup(deptno,job)
select deptno,job,count(*) from emp group by cube(deptno,job)

--1.每个部门的平均薪资,总平均薪资
select deptno,round(avg(sal),2)  from emp group by rollup(deptno) 
--2.每个部门每年每种工作的平均薪资,总平均薪资
select deptno,to_char(hiredate,'yyyy'),job,avg(sal)  from emp group by cube(deptno,to_char(hiredate,'yyyy'),job)
--3.工资最低的后4名员工
select * from (select * from emp order by sal asc) where rownum <5

--分析函数
function_name(<arg0>,<arg1>...)
over 
(<partition-clause><order-by-clause><window-clause>)

--4.查询每个部门中每个岗位的收入和
select deptno,job,sum(sal) from emp group by job,deptno order by deptno
--5.查询每个部门中每个岗位的收入和并且同时查询每个部门的收入总和
select deptno,job,sum(sal) as sum_dept_job,sum(sum(sal)) over(partition by deptno) as sum_dept 
 from emp group by job,deptno order by deptno

第五课
--1.查询每个部门中岗位的总工资占部门40%以上的部门,并显示具体占百分之多少
select t.*,100*round(sum_dept_job/sum_dept,2)||'%' as percent from(
select deptno,job, sum(sal) as sum_dept_job,
sum(sum(sal)) over(partition by deptno) as sum_dept
from emp group by job,deptno order by deptno) t
where t.sum_dept_job > t.sum_dept * 0.4

--2.查询工资最低的后4名员工
select * from
(select * from emp order by sal) where rownum <5
800
900
1100
1250
1259
1300
评级
rank
1,2,3,4,4,6
dense_rank
1,2,3,4,4,5
row_number
1,2,3,4,5,6

select e.*,rank() over(order by sal) as rank   from emp e 
select * from (
select e.*,rank() over(order by sal) as rank   from emp e)
where rank <=4

select e.sal,rank() over(order by sal) as rank,dense_rank() over(order by sal) as dense_rank,
row_number() over(order by sal) as row_number from emp e

--3.查询工资最高的两名
select * from (select e.* ,rank() over(order by sal desc) as rank from emp e)
where rank<=2
select * from (select e.* ,rank() over(order by sal desc nulls last) as rank from emp e)
where rank<=2

--4.查询总薪水最高的部门和最低的部门

第六课
--4.查询总薪水最高的部门和最低的部门
select
      min(deptno) keep(dense_rank first order by sum(sal) desc) first,
      min(deptno) keep(dense_rank last order by sum(sal) desc) last
from emp group by deptno
--1.滚动 效果
--2.查询所有人的工资,并查询比该员工高的员工中最低的那个员工的工资,和比该员工工资低的最高的那个人工资。
select ename,sal,lead(sal) over(order by sal),lag(sal) over(order by sal)
from emp;
--3.查询所有人的工资,并查询比该员工高的员工中最低的那个员工的工资,和比该员工工资低的最高的那个人工资。,
--如果出现最高或最低,取反数
nvl(a,b)
select ename,sal,nvl(lead(sal) over(order by sal),min(sal) over()),nvl(lag(sal) over(order by sal),max(sal) over())
from emp;
--通过制定一批记录,

--查询每个部门发的工资并同时查询所有部门发的工资
select deptno,sum(sal),sum(sum(sal)) over() all_sal from emp 
group by deptno
  
rows between ... preceding and ... following

select deptno,sal,sum(sal),sum(sum(sal)) over(order by deptno 
rows between unbounded preceding and unbounded following) all_sal
from emp group by deptno

select sum(sal)
from emp
group by

select empno,sum(sal) over(order by deptno) from emp
select empno,sum(sal) over(order by deptno rows between unbounded preceding and 
unbounded following) from emp

--查询每个部门发的工资,并同时查询截止至当前部门发的工资
select deptno,sum(sal),sum(sum(sal)) over(order by deptno rows between unbounded preceding and current row)
from emp group by deptno

select deptno,sum(sal),sum(sum(sal)) over(order by deptno rows between unbounded preceding and 0 following)
from emp group by deptno  

你可能感兴趣的:(sql,C++,c,F#,C#)