-
主查詢和子查詢可以不是一張表
即涉及到多表操作時,有兩種解決方案,方案一是子查詢,方案二是多表查詢
例:查詢部門名稱是sales的員工信息
方法一
select *
from emp
where emp_no = ( select emp_no
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?from dept
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?where dept_name = ' sales');
方法二
select e.*?
from emp e,dept d?
where e.deptno=d.deptno and d.dname='SALES';
查看全部 -
select子查詢必須是單行子查詢,單行子查詢只能返回一行記錄
from后面的子查詢是把子查詢的內容當作一個新表
查看全部 -
。。。。。
查看全部 -
自連接 核心:通過別名,將同一張表視為多張表
select e.ename 員工姓名,b.bname 老板姓名?
from emp e,emp b?
where e.mgr=b.empno;
自連接? 一張表取兩個別名
查看全部 -
不等值連接
select e.empno,e.ename,e.sal,s.grade?
from emp e,salgrade s?
where e.sal between s.losal and s.hisal;
運用between and 查詢條件? 小值在前and 大值在后
查看全部 -
等值連接
select e.empno,e.ename,e.sal,d.dname
?from emp e,dept d?
where? e.deptno = d.deptno;
查看全部 -
每張表的列數相加,行數相乘就得到了笛卡爾積最終表
多表查詢進行笛卡爾集運算時,產生的所有結果中并不是完全正確的,有部分結果是不需要的,為了避免笛卡爾全集中的一些錯誤,需要在where中使用連接條件,然而連接條件的個數與參加進行笛卡爾集運算的表的個數存在一定關系: ? ? ? ? ? ? ? 連接條件個數=n-1 ?(n為參加笛卡爾集運算的表的總個數)
查看全部 -
分組函數可以進行嵌套,例子如下:
求部門平均工資的最大值
select max(avg(sal)) from emp group by deptno;
查看全部 -
orderby可以根據列,別名,表達式,序號進行排序
1.select deptno,avg(sal)平均工資 from emp group by deptno?
order?by ? 平均工資
*平均工資是avg(sal)的別名,order by語句可以直接使用別名,默認按升序排序
2.select?deptno,avg(sal)平均工資 from emp group by?deptno?
order?by ? 2
*select語句第二列是平均工資,所以order by語句后面直接寫2也是跟第一條語句執行結果一樣
a命令-append
a命令表示在上一條命令后面追加語句
a命令后必須跟兩個或兩個以上的空格,若只打一個空格則表示追加語句緊跟上一條語句
實例 a desc:order by 2desc
實例 a? desc:order by 2 desc
查看全部 -
1 having 作用是過濾分組,因此having排在group后面
格式:select column, group_function
from table
where..
group by..
having...
order by...;
2 where, having功能相似,但是區別在于where不能使用組函數而having能,沒有組函數的情況下,where和having可以互換,盡量使用where
查看全部 -
select a, 組函數(x)
from table?
group by a;
select 列表中所有未包含在組函數中的列都要包含在GROUP BY 子句中;而GROUP BY子句中的列不必包含在SELECT列表中,此時查詢結果也只有select中的列
select a,b,c,avg(sal)
from emp
group by a,b,c;
查看全部 -
找到員工表中薪水大于本部門平均薪水的員工
select empno,ename,sal
from emp e
where sal>(select avg(sal) from emp where deptno=e.deptno);
查看全部 -
group by rollup(a,b)
????相當于
????????group by a,b??
????????+
????????group by a?
????????+
????????group by null?
例:
????select deptno,job,sum(sal) from emp group by rollup(deptno,job);
????????先按照不同部門不同職位查出薪資總和顯示(deptno,job,sum(sal))
????????再按照不同部門查出薪資總和顯示(deptno,sum(sal))
????????再查出薪資總和顯示(sum(sal))
????修改報表格式(只在sqlplus中有效):
????????break on deptno skip 2; 相同的deptno只顯示一次,不同的跳過兩行
????????set pagesize 30;
查看全部 -
求部門平均工資的最大值
select max(avg(sal)) from emp group by deptno;
查看全部 -
select count(*) as total,
? ?sum(case to_char(t.hiredate,'yyyy') ?when'1981' then 1 else 0 end) "1981",
? ?sum(case to_char(t.hiredate,'yyyy') ?when'1980' then 1 else 0 end) "1980",
? ?sum(case to_char(t.hiredate,'yyyy') ?when'1987' then 1 else 0 end) "1987",
? ?sum(case to_char(t.hiredate,'yyyy') ?when'1982' then 1 else 0 end) "1982"
?from emp t;
查看全部
舉報