1、限定查詢與排序顯示
1.1限定查詢的認識:
列:表中有大數據的信息,對數據進行篩選,查詢到自己想要的信息。
(數據過多顯示過慢,或者死機,在已有的樣本數據庫容器CDB轉換為PDB之中)
如:以nolog 的方式打開 sqlplus
Win+R 出現運行框 輸入“sqlplus /nolog”
使用“SYS”管理員進行登陸:CONN sys/chang_on_install AS SYSDBA; 進行連接。
找到: ALTER SESSION SET CONTAINER=pdbmidn; 進行切換到 PDB 數據庫。
數據庫未打開,打開數據庫pdb: ALTER DATABASE pdbmidn OPEN;
查看 sh用戶的數據表內容:SELECT COUNT(*) FROM SH.SALES;
數據表中有9萬多條數據。
直接查看數據表內容: select * from sh.sales; 數據一直顯示,根本無法觀看。
大數據情況下往往可以進行篩選, 篩選 就是 限定查詢 的功能。
Select[distinct] * |列表名[as][列別名],列表名[as][列別名],… FROM列表名[表別名]
[WHERE 條件(S)];
出現了 WHERE 子句,可以設置一系列的過濾條件,而這些條件可以設置多個,多個條件之間可以用 邏輯運算
(與AND 多個條件同時滿足即可
或 OR 一個條件滿足即可
非NOT) 真變假,假變真
列; 基本工資高于1500的全部員工信息。
SELECT * FROM emp WHERE sal>1500;(滿足sal>1500 條件的員工)
滿足條件語句的員工信息全部出來了。
對于 sql 語法而言,具備三個子句:
1、執行 from ,來控制數據來源。
2、執行 where , 使用限定符進行數據的過濾。
3、執行 select , 確定要顯示的數據列。
1.2對數據進行限定查詢
關系運算符:
基本工資‘sal’小于等于2000: select * from emp where sal<=2000;
注: 注意大小寫
調查‘SMITH’員工的信息,
select * from emp where ename=‘SMITH’;
查出所有辦事員 [此處辦事員為job] (CLERK)的雇員信息。
select * from emp where job=‘CLERK’;
不等于符號(<> !=)
實現一:select * from emp where job<>‘CLERK’;
實現二:select * from emp where job!=‘CLERK’;
查詢工資在15003000(包含15003000)之間的全部雇員信息
select * from emp where sal>=1500 and sal<=3000;
查詢職位是銷售人員 SALESMAN ,并且基本工資高于1200的所有員工信息:
select * from emp where sal>1200 and job=‘SALESMAN’;
查出10部門中經理或者是20部門中的業務員信息。
SELECT * FROM emp WHERE (deptno=10 and job=‘MANAGER’) OR (deptno=20 and job=‘CLERK’);
兩個條件:
1、10部門的經理。
2、20部門的辦事員。
兩個條件滿足一條即可,兩個條件之間用 or 連接。
考慮的條件:
1: 職位
2: 工資
實現一:職位不是辦事員,工資大于2000.
SELECT * FROM emp WHERE job!=‘CLERK’ AND SAL>2000;
SELECT * FROM emp WHERE job<>‘CLERK’ AND SAL>2000;
實現二:職位是辦事員,工資小于等于2000.
求反: SELECT * FROM emp WHERE NOT (job=‘CLERK’ OR SAL <=2000);
1.3范圍查詢
SELECT * FROM emp WHERE sal between 1500 and 3000;
查詢出生在1981年雇傭的全部雇員信息:
SELECT * FROM emp WHERE hiredate BETWEEN ‘01-1月-81’and’31-12月-81’;
Hiredate(入職時間)
時間表示為:日-月-年。 [日期和字符串的轉換]
1.4 null(空)判斷
Null 是一個未知的數據,所以對于null的處理,如果直接利用關系運算判斷,是不會有結果的,利用 = 來判斷null 比較。
select * from emp WHERE comm=null AND empno=7369 ;
此處看出 null 不能用 = 進行判斷。
一、
實現一:select * from emp WHERE comm is not null;
實現二: select * from emp WHERE not comm is null;
select * from emp WHERE comm is null;
select * from emp WHERE comm is null and sal>2000;
select * from emp WHERE comm is null or sal<100;
select distinct job from emp WHERE comm is not null;
1: select * from emp WHERE empno=7369 or empno=7788 or empno=7566;
修改為 in 輸入:
2: select * from emp WHERE empno in(7369, 7788,7566 ) ;
select * from emp WHERE empno not in(7369, 7788,7566 ) ;
不能存在‘null’查詢。
select * from emp WHERE ename LIKE ‘S%’ ;
select * from emp WHERE ename LIKE ‘M%’ ;
select * from emp WHERE ename LIKE ‘%F%’ ;
select * from emp WHERE ename LIKE '_____%’ ;
下環線 _ 為6個。
select * from emp WHERE ename LIKE ‘%1%’ or hiredate LIKE ‘%81%’ ;
條件一: 10部門的經理
條件二: 20部門的辦事員
條件三: 不是經理和辦事員,但是月工資大于等于2000
條件四: 以上的所有條件滿足后再過濾,包含字母 ‘S’或字母‘K’。
select * from emp WHERE
( (deptno=10 AND JOB=‘MANAGER’) OR (deptno=20 AND JOB=‘CLERK’) )
OR (JOB NOT IN (‘MANAGER’,‘CLERK’) AND SAL>2000 )
and (ename LIKE ‘%S%’ OR ENAME LIKE ‘%K%’);
一、排序顯示
對指定的列進行排序的操作,那么就必須通過 ORDER BY 子句。
ORDER BY 兩種排序模式:
1、升序: ASC
2、降序: DESC 需要編寫
ORDER BY 子句是放在查詢語句的最后一行,最后一個執行的。
順序為:FROM, SHERE, SELECR,ORDER BY, 既然ORDER BY 在SELECT之后執行,那么表示ORDER BY 子句可以使用 select子句之中設置的別名。
select * from emp order by sal desc;
1: select * from emp order by sal;
2: select * from emp order by sal asc;
select * from emp where job=‘CLERK’ order by sal;
select * from emp order by sal DESC,hiredate ASC;
語法沒問題,問題在于數據上,現在的數據是后期處理的結果。想要正常觀察數據,那么可以數據庫切換到PDB之中,找到原始的Scott 。
ALTER SESSION SET CONTAINER=pdbmidn;
ALTER DATABASE pdbmidn OPEN;
select * from scott.emp order by sal DESC,hiredate ASC;