分頁查詢、檢視、索引
*分頁查詢: -- 需求:當每次查詢的記錄數比較大, 通常一頁顯示不下, 此時我們可以進行分頁查詢。 -- 關鍵字:limit -- 用法: limit begin,size; -- begin:記錄的開始行數. 偏移量 -- size:每頁的最大記錄數。
-- 完整的DQL 書寫順序:select,from,where,group by,having,order by,limit 執行順序:from,where,group by,having,select,order by,limit
-- 注意:limit後可以是一個引數, -- 一個引數時,是指每次最大的查詢記錄數,limit size; -- 預設記錄數從0開始,而不是1.
【第n頁,每頁顯示m條資料的分頁寫法】: select * from tablename limit (n-1)*m,m
--練習1:查詢員工表,查詢第一頁的資料,每頁10條。 select * from emp limit 0,10; --練習2:查詢員工表,查詢第二頁的資料,每頁5條。 select * from emp limit 5,5; --練習3:按照部門號升序排序,查詢第二頁的資料,每頁5條 select * from emp order by deptno limit 5,5; --練習4:按照員工編號降序排序,查詢第二頁的資料,每頁5條。 select * from emp order by empno desc limit 5,5; --練習5:使用子查詢,先排序,再查詢每頁的資料。 -- 按照員工工資降序排序,查詢第二頁的資料,每頁6條。 select e.* from (select * from emp order by sal desc) e limit 6,6;
=====================================================================================
*檢視: VIEW 表的一部分投影 也是資料庫裡一個物件。(表的虛擬部分) -- 檢視的作用: 因為檢視中含有某表中的部分資料, 不在檢視中的欄位有隱藏效果。 相對來說,安全。 --如何操作檢視呢? 檢視可以像表一樣,進行增刪改查。
--如何建立檢視呢? --格式: create view ViewName as subQuery
-- 【通過檢視進行DML操作,一定會對錶有影響】 -- 【通過表進行DML操作,可能會對檢視有影響】
--with check option:對檢視的一種檢查約束選項, 如果在建立檢視有此選項時,表示,只能對檢視DML操作可見資料。 反之,對檢視不可見的資料,是不可以通過檢視進行DML操作的。
--檢視的分類: 簡單檢視:subQuery是一個表中的普通查詢語句 複雜檢視:subQuery是一個可以帶有分組函式的,或者關聯查詢的語句。 【複雜檢視不能對檢視進行DML操作,只能進行DQL操作】
--6.使用emp表中deptno=20的資料做成一個檢視
CREATE VIEW emp_20_view AS select * from emp where deptno=20;
--7.查詢檢視中所有的資料
select * from emp_20_view;
--8.向檢視中插入資料
INSERT INTO emp_20_view VALUES(8110,'ZHANGSAN','MANAGER',
7369,'2010-10-10',5000,null,10);
--9.查詢檢視中所有的資料
select * from emp_20_view
--10.刪除emp表中empno=8010
delete from emp where empno = 8010
--11.建立具有檢查約束的檢視
CREATE VIEW emp_20_view AS
select empno,ename,sal,deptno from emp where deptno=20
WITH CHECK OPTION
--12.查詢檢視資料
select * from emp
--13.向檢視中插入資料
INSERT INTO emp_20_view(empno,ename,sal,deptno) VALUES(8110,'ZHANGSAN',7000,10)
--14.練習:建立一個複雜檢視view_emp_100,
-- 是每個部門的平均工資,最高工資,最低工資,及其部門號。
create view view_emp_100 as
select avg(ifnull(sal,0)) avg_sal,max(sal) max_sal,min(sal) min_sal,deptno
from emp group by deptno;
select * from view_emp_100;
==================================================================================
*索引(Index): 目的是為了提高查詢速度。 相當於一本書的目錄。 索引也是資料庫的物件,佔空間。 每張表每個欄位都可以設定相應的索引 -- 優點: 提高查詢速度。 缺點: 佔空間, 每次進行DML操作時,資料庫都要(自動)重新維護索引,降低效率.
總體來說: 表中有索引可以提高效率, 但不是索引越多越好。 當表中的資料量比較小時, 無需索引(因為直接查詢可以比使用索引更快), 當某個欄位的值比較少時,也不需要索引, 如性別欄位只有'f','m'. 只有當資料量比較大,和欄位值多時,可以使用索引。 --練習1:給emp表中的empno建立索引。 create index index_emp_empno on emp(empno); --練習2:查詢empno為9003的資料。 select * from emp where empno=9003;
/*15.為emp表deptno建立索引 CREATE INDEX emp_dept_index ON emp(deptno) */
--刪除索引,刪除檢視都是用drop: drop index indexName drop view viewName
--可以自學: PLSQL(資料庫程式語言)--觸發器,儲存過程 =======================================================================================================