十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
進行篩選的基本運算符號:
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供五龍口網(wǎng)站建設(shè)、五龍口做網(wǎng)站、五龍口網(wǎng)站設(shè)計、五龍口網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、五龍口企業(yè)網(wǎng)站模板建站服務(wù),10年五龍口做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
--查詢月薪高于2000的員工的姓名和其月薪
--查詢員工SMITH的員工信息
--關(guān)鍵字,表名,列名:大小寫是不敏感(隨意寫)
--數(shù)據(jù):大小寫是敏感(不能隨意寫)
--查詢不在20號部門工作的員工信息
--查詢在20號部門工作并且月薪高于2000的員工信息
--查詢職位是MANAGER或者月薪不低于3000的員工信息
--查詢在10號部門工作月薪低于2000并且職位不是CLERK的員工信息
--查詢在10號部門工作或(20號部門工作并且月薪不低于1500)的員工信息
--and的優(yōu)先級要高于or 如果兩者混合使用,需要注意優(yōu)先級的問題
--加括號解決優(yōu)先級問題
--SQL注入:利用了and的優(yōu)先級高于or完成無密碼進行登錄
--SQL片段:通過在密碼框中輸入下方的SQL片段,更改了原有SQL語句的邏輯 ' or lname = 'admin --or前的邏輯:賬號隨意,密碼為空 (登錄失敗) --or后的邏輯:用戶名是admin的賬號 (調(diào)取了admin的信息)
--1.查詢10號部門職位是MANAGER的員工信息
--2.查詢月薪低于2000或月薪高于3000的員工信息
--3.查詢員工編號是7902的員工的所有下屬的員工信息
--4.查詢職位是CLERK或SALESMAN,并且月薪不低于1000的員工信息
--5.查詢月收入不低于2500的員工信息
--6.查詢30號部門年收入低于10000的員工信息
--7.查詢員工SCOTT的月薪,獎金和月收入
--8.查詢在1982年之前入職的員工信息(選做)
--相當(dāng)于 = A and = B
--查詢月薪在1000-2000區(qū)間的員工信息
--82年入職的員工
--like '特定字符'
-- 特定字符:由轉(zhuǎn)義字符和搜索文本組成
-- 轉(zhuǎn)義字符: %: 0-n個字符(任意長度的任意字符)
-- : 1個字符(1個長度的任意字符)
-- 比如 姓李 特定字符的寫法 '李%'
-- 第二個字符是哈 特定字符的寫法 ' 哈%'
--查詢員工名字首字母是S的員工
--查詢名字中倒數(shù)第2個字符是T的員工
--查詢名字中包含字母T的員工
--查詢名字中包含兩個字母T的員工
--查詢有兩個連續(xù)的T
--查詢名字中有%字符的員工
--聲明標(biāo)識字符
--相當(dāng)于 = A or = B or = C...
--查詢在10號部門或20號部門工作的員工
--查詢在10號部門工作或月薪高于1200的員工
-- = null 無法篩選任何數(shù)據(jù)
-- is null 篩選null值
-- not between A and B 不在A與B區(qū)間內(nèi)
-- not like '%A%' 名字里面沒有A
-- not in(A,B,C) 不是A,B,C其中之一
-- is not null 不為null
--查詢月薪不在1000-2000區(qū)間內(nèi)并且名字中不包含字母T的員工信息
--order by 列名 或 列別名 或 表達式 或 列序號
--ASC 升序 由小到大
--DESC 降序 由大到小
--不寫 默認(rèn)是升序
--## 書寫順序:select...from...where...order by...
--## 執(zhí)行順序:from...where...select...order by...
--查詢所有員工的信息,按照月薪的升序排序
--再按照月薪的降序排序
--利用表達式排序
--利用列別名進行排序
--利用列序號進行排序(第4列)
--排序的原則:
--1.數(shù)值按照數(shù)值的大小
--2.文本按照字典順序
--3.日期按照未來的大
--#####order by 可以修飾多個列
-- ## order by A, B 先A的升序排序,如果A相同,再按B的升序排序
-- ## order by A desc, B desc 先A的降序排序,如果A相同,再按B的降序排序
--查詢月薪高于1000的員工,按照部門的升序排序,再按照入職日期降序排序
--推薦在order by中使用列名或列別名
--1.查詢名字中包含字母T,并且月薪在1500-3000之間的員工姓名和月薪
--2.查詢公司的BOSS信息(mgr值為null的人)
--3.查詢員工姓名,月薪,獎金,年收入,按照年收入降序進行排序顯示
--4.查詢職位中包含MAN并且有獎金收入(不是null不是0)的員工信息
--5.查詢在在1981年期間入職的員工信息,并按照月薪降序排序
--6.查詢員工信息,并按照職位升序,部門升序進行排序顯示
--7.查詢不在10號或20號部門工作,月薪低于1500的員工信息
--8.查詢所有的職位名稱,去掉重復(fù)后按照名稱的升序排序顯示
--9.查詢員工SCOTT和ADAMS的員工信息
--10.查詢年收入高于45000的員工信息,并按照年收入降序排序顯示
第一步:取出各個部門第一高工資的員工的empno
select a.empno from emp where a.deptno=b.deptno and a.sal=b.sal
(select deptno,max(sal) sal from emp group by deptno) a;
第二步:取出各個部門第一高工資除了上述的empno,即第二高工資
select deptno,max(sal) from emp where empno not in
)select a.empno from emp where a.deptno=b.deptno and a.sal=b.sal
(select deptno,max(sal) sal from emp group by deptno) )
group by deptno;
如果是scott下的那幾張表的話
select?t1.deptno,
t1.dname,
t1.avgsal,
max(case
when?t1.avgsal?between?t2.losal?and?t2.hisal?then
t2.grade
end)?grade
from?(select?a.deptno,?b.dname,?round(avg(a.sal),?2)?avgsal
from?emp?a,?dept?b
where?a.deptno?=?b.deptno
group?by?a.deptno,?b.dname)?t1,
salgrade?t2
group?by?t1.deptno,?t1.dname,?t1.avgsal
order?by?t1.deptno;
查詢結(jié)果
每個部門俯場碘渡鄢盜碉醛冬互大于所有人平均工資的員工:
Select BM,YG From TB WHERE Salary(Select Avg(Salary) From TB)
每個部門大于所在部門所有人平均工資的員工:
Select BM,YG From TB
Join (Select BM,Avg(Salary) as AvgSalary From TB
Group By BM) As Temp
On TB.BM=Temp.BM
where SalaryTemp.AvgSalary
SELECT DEPT.DNAME, EMP.ENAME, (EMP.SAL + NVL(EMP.COMM, 0)) AS SC
FROM EMP,
DEPT,
(SELECT DEPT.DEPTNO AS D, AVG(EMP.SAL + NVL(EMP.COMM, 0)) ESC
FROM DEPT, EMP
WHERE EMP.DEPTNO = DEPT.DEPTNO
GROUP BY DEPT.DEPTNO) T
WH俯場碘渡鄢盜碉醛冬互ERE EMP.DEPTNO = DEPT.DEPTNO
AND EMP.DEPTNO = T.D
AND (EMP.SAL + NVL(EMP.COMM, 0)) T.ESC;
select a.empname, b.deptname ,a.salary
from emp as a,
( select d俯場碘渡鄢盜碉醛冬互eptid,deptname ,avg(salary) c from dept group by deptid,deptname ) b
where a.deptid=b.deptid?
and a.salary b.c
一、單行子查詢:
1、單行子查詢指在子查詢中只返回單行值,這種子查詢需要使用單行比較運算符,包括=、、=、、=、。
2、單行子查詢出現(xiàn)在WHERE子句中,如下所示:
3、單行子查詢中有分組函數(shù),要求分組函數(shù)返回的是單行數(shù)據(jù)。如下圖為查詢出薪水比本部門平均薪水高的員工信息:
4、單行子查詢出現(xiàn)在HAVING子句中,如下圖為查詢出平均薪水高于部門30最高薪水的部門信息。
二、多行子查詢:
如果子查詢返回了多行,則主查詢中的比較操作符應(yīng)該使用多行比較操作符。Oracle數(shù)據(jù)庫中的多行比較操作符包括IN、ALL、ANY,其中ALL和ANY不能單獨使用,需要配合單行比較操作符、=、、=一起使用。
1、多行子查詢中使用IN:
IN后面是值的列表,只不過這里的值是子查詢查出來的多個數(shù)據(jù)。如下圖:
三、多行子查詢中使用ANY操作符:
ANY操作符不能單獨使用,必須和、等比較操作符一起使用。ANY表示大于列表中任何一個數(shù)據(jù)即為TRUE;ANY表示小于列表中的任何數(shù)據(jù)即為TRUE。具體實現(xiàn)如下圖:
select 工資級別,sum(工資) from 工資表 group by 工資級別
這樣就出來了
這是oracle中默認(rèn)用戶scott下的表。
本問題涉及到三張表,數(shù)據(jù)分別如下:
emp表:
dept表:
salgrade表:
按題目要求,sql語句如下:
select b.dname 部門名稱,b.counts 部門員工數(shù),b.avgsal 部門平均工資,b.minsal 部門最低工資,a.ename 姓名,c.grade 工資等級
from emp a,
(select b.deptno,b.dname,count(*) counts,round(avg(sal),2) avgsal,min(sal) minsal
from emp a,dept b,salgrade c
where a.deptno=b.deptno and a.deptno=b.deptno
and a.sal between c.losal and hisal
group by ?b.deptno,b.dname) b,
salgrade c
where a.sal=b.minsal
and a.sal between c.losal and c.hisal
結(jié)果如圖: