group by用法多个字段_select的用法
select的用法
--每個員工的所有信息
select * from emp;
--每個人的部門編號,姓名,薪水
select empno, ename, sal from emp;
--每個人的年薪
select ename, sal*12 from emp;
--計算2*3的值
select 2*3 from emp;
--計算2*3的值(dual)
select 2*3 from dual;
--得到當前時間
select sysdate from dual;
--可以給列起別名,比如求每個人的年薪
select ename, sal*12 annual_sal from emp;
--如果別名中有空格,需要用雙引號
select ename, sal*12 "annual sal" from emp;
--如果沒有內容,則為空
select ename, sal, comm from emp; /*null*/
--當空字段參與計算,則結果是null
--例如:計算每個人的全年的收入包括月薪和年終獎
select ename, sal * 12 + comm from emp;
--可以將多個字符串拼在一起。比如:求每個人的薪水,格式為smith-sal-123
select ename || ‘-‘ || sal || ‘-‘ || comm from emp;
--如果字符串中有單引號,需要用另外一個單引號轉義,比如:這樣一個字符串: he‘s friend
select ename || ‘he‘‘s friend‘ from emp;
--------------------------------------------------------
--distinct 關鍵詞的用法
--求有哪些個部門
select deptno from emp;
select distinct deptno from emp;
--可以用來修飾多個字段
--求有哪些個部門和job的組合
select deptno , job from emp;
select distinct deptno , job from emp;
--------------------------------------------------------
where關鍵詞的用法
--可以是數值類型的等值判斷。比如:求10這個部門的所有員工
select * from emp where deptno = 10;
--可以是字符串類型的等值判斷。比如:求叫KING的這個人的信息
select * from emp where ename = ‘KING‘;
--也可以是不等值判斷。比如:求薪水小于2000的員工信息
select * from emp where sal > 2000;
--字符串也可以做不等值判斷,比如:求所有ename大于‘CBA‘的員工信息。
select ename from emp where ename > ‘CBA‘;
--求部門不是10的部門
select * from emp where deptno <> 10;
--求薪水在800和1500之間的員工信息
select * from emp where sal between 800 and 1500;
--也可以寫成
select * from emp where sal >= 800 and sal <= 1500;
/*這樣寫則不可以
--select * from emp where 800 <= sal <= 1500;
*/
--where...in..的用法。比如:求薪水是800或者1500或正2000的員工信息
select ename, empno, sal from emp where sal in (800, 1500, 2000);
--相當于寫成這樣
select ename, empno , sal from emp where sal = 800 or sal = 1500 or sal = 2000;
--再比如求姓名是KING,SMITH,AA的員工信息
select ename, empno , sal from emp where ename in (‘KING‘, ‘SMITH‘, ‘AA‘);
--求入職時間在20-2月-81之后的員工信息
select ename, hiredate from emp where hiredate > ‘20-2月-81‘;
--------------------------------------------------------
--and or not的用法
--求薪水大于1000或者部門在10這個部門的員工信息
select * from emp where sal > 1000 or deptno = 10;
--求薪水不是800或者不是1500或者不是3000的員工信息
select * from emp where sal <> 800 and sal <> 1500 and sal <> 3000;
--也可以這樣來寫
select * from emp where sal not in (800, 1500, 3000);
--------------------------------------------------------
--like的用法
--求名字中包含ALL這三個字符的員工信息
select ename from emp where ename like ‘%ALL%‘;
--求名字中的第二個字母是A的員工
select ename from emp where ename like ‘_A%‘;
--特殊字符需要轉義。比如:求員工中包含特殊字符%的員工信息
select ename from emp where ename like ‘%%%‘ escape ‘‘;
--------------------------------------------------------
--null的用法
--求沒有年終獎的員工
select ename from emp where comm is null;
--求有年終獎的員工
select ename from emp where comm is not null;
--------------------------------------------------------
--order by的用法
--員工信息按照姓名正序排列
select ename, sal from emp order by ename asc; --ascent
--員工信息按照倒敘排列
select ename, sal from emp order by ename desc; --descent
--也可以是多個字段組合排列。例如:員工信息按照部門正序排列,并且按照姓名倒敘排列
select ename, sal, deptno from emp order by deptno asc, ename desc;
--------------------------------------------------------
--function的用法
--把所有姓名變成小寫
select lower(ename) from emp;
--把所有姓名變成大寫
select upper(ename) from emp;
--求所有人名中包含‘a‘的員工信息不區分大小寫
select ename from emp where lower(ename) like ‘%a%‘;
--截取子字符串,比如求Hello的一部分
select substr(‘Hello‘, 2) from dual;
--求Hello的一部分,并指明長度
select substr(‘Hello‘, 2, 3) from dual;
--求ascii碼對應的字符
select chr(65) from dual;
--求字符對應的ascii碼
select ascii(‘中‘) from dual;
--四舍五入
select round(23.652) from dual;
--四舍五入小數點后面多少位
select round(23.652, 1) from dual;
--四舍五入小數點前面多少位
select round(23.652, -1) from dual;
--------------------------------------------------------
--important!日期轉換函數
--------------------------------------------------------
--將當前日期轉換成1981-03-12 12:00:00這種形式的字符串
select to_char(sysdate, ‘YYYY-MM-DD HH24:MI:SS‘) from dual;
--將1981-03-12 12:00:00字符串轉換成日期
select to_date(‘1981-03-12 12:00:00‘, ‘YYYY-MM-DD HH24:MI:SS‘) from dual;
--將每個人的薪水轉換成固定格式的字符串
select to_char(sal, ‘L00,000.9999‘) from emp;
--將固定格式的字符串轉換成數值
select to_number(‘$1,250.00‘, ‘$9,999.99‘) from dual;
--null當null參與計算時候,需要要nvl這個函數
select ename, sal*12+comm from emp;
select ename, sal*12+ nvl(comm, 0) from emp;
--------------------------------------------------------
--group function組函數
--求所有人的薪水的總和,平均值,最大值,最小值
select sum(sal) , avg(sal), max(sal) , min(sal) from emp;
--求總的行數
select count(*) from emp;
--求總的行樹,(可以指定具體的字段)但如果字段有null值的時候需要小心使用
select count(comm) from emp;
--也可以過濾掉重復的行之后統計行數
select count(distinct deptno) from emp;
--可以指明按照哪個字段進行分組.比如;分部門統計最高薪水
select deptno, max(sal) from emp group by deptno;
--也可以按照多個字段來分組統計,比如:分部門和崗位,統計最高薪水和行數
select deptno, job , max(sal), count(*) from emp group by deptno, job;
--------------------------------------------------------
--重要:出現在select列表中的字段,如果沒有在組函數中,那么必須出現在group by 子句中。
--------------------------------------------------------
--select ename, deptno, max(sal) from emp group by deptno;
--select ename, max(sal) from emp;
--求薪水最高的員工姓名
select max(sal) from emp;
select ename, sal from emp where sal = 5000;
select ename from emp where sal = (select max(sal) from emp);
--having從句的用法
--求平均薪水是2000以上的部門
select avg(sal), deptno from emp group by deptno having avg(sal) > 2000;
--------------------------------------------------------
--總結一下select語法
select
from
where
group by
having
order by
--------------------------------------------------------
-- 執行順序very important!
-- 首先執行where語句將原有記錄過濾;
-- 第二執行group by 進行分組;
-- 第三執行having過濾分組;
-- 然后將select 中的字段值選出來;
-- 最后執行order by 進行排序;
--------------------------------------------------------
/*
按照部門分組統計,求最高薪水,平均薪水
只有薪水是1200以上的才參與統計
并且分組結果中只包括平均薪水在1500以上的部門
而且按照平均薪水倒敘排列
*/
select max(sal),avg(sal), deptno
from emp
where sal > 1200
group by deptno
having avg(sal) > 1500
order by avg(sal) desc;
--------------------------------------------------------
/*
把雇員按部門分組,
求最高薪水, 部門號,
過濾掉名字中第二個字母是‘A‘的,
要求分組后的平均薪水>1500,
按照部門編號倒序排列
*/
select deptno, max(sal)
from emp
where ename not like ‘_A%‘
group by deptno
having avg(sal) > 1500
order by deptno desc;
/* very very important! */
select ename, deptno from emp;
select deptno, dname from dept;
----員工姓名以及員工所在部門的名字同時顯示出來
select ename, dname from emp , dept;
select ename, dname from emp , dept where emp.deptno = dept.deptno;
--要求每位雇員的薪水等級
select ename, sal, grade from emp, salgrade where emp.sal >= salgrade.losal and emp.sal <= salgrade.hisal;
select ename, sal, grade from emp e, salgrade s where e.sal between s.losal and s.hisal;
--求工作職位是’PRESIDENT’的雇員姓名,部門名稱和薪水等級時
select ename, dname, grade
from emp e, dept d, salgrade s
where e.deptno = d.deptno and e.sal between s.losal and s.hisal
and job = ‘PRESIDENT‘;
--求每位員工的姓名,及其上級經理的姓名
select empno, ename, mgr from emp;
select e1.ename, e2.ename from emp e1, emp e2 where e1.mgr = e2.empno;
總結
以上是生活随笔為你收集整理的group by用法多个字段_select的用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用“快速开始”功能将旧 iPhon
- 下一篇: 彩礼和聘礼是否一样(结婚时彩礼和嫁妆的用