日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

sql查询百分之20到百分之40的数据_数据库基础学习——SQL语言知识总结(6)

發(fā)布時(shí)間:2024/9/30 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql查询百分之20到百分之40的数据_数据库基础学习——SQL语言知识总结(6) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1 視圖(View)

1.1什么是視圖

可以通過(guò)創(chuàng)建表的視圖來(lái)表現(xiàn)數(shù)據(jù)的邏輯子集或數(shù)據(jù)的組合。視圖是基于表或另一個(gè)視圖的邏輯表,一個(gè)視圖并不包含它自己的數(shù)據(jù),它象一個(gè)窗口,通過(guò)該窗口可以查看或改變表中的數(shù)據(jù)。視圖基于其上的表稱為基表。

1.2視圖的優(yōu)越性

? 視圖限制數(shù)據(jù)的訪問(wèn),因?yàn)橐晥D能夠選擇性的顯示表中的列。

? 視圖可以用來(lái)構(gòu)成簡(jiǎn)單的查詢以取回復(fù)雜查詢的結(jié)果。例如,視圖能用于從多表中查詢信息,而用戶不必知道怎樣寫(xiě)連接語(yǔ)句。

? 視圖對(duì)特別的用戶和應(yīng)用程序提供數(shù)據(jù)獨(dú)立性,一個(gè)視圖可以從幾個(gè)表中取回?cái)?shù)據(jù)。

1.3視圖類型

簡(jiǎn)單視圖和復(fù)雜視圖

1.4簡(jiǎn)單視圖 和 復(fù)雜視圖的區(qū)別

視圖有兩種分類:簡(jiǎn)單和復(fù)雜,基本區(qū)別涉及 DML (INSERT、UPDATE 和 DELETE)操作。

簡(jiǎn)單視圖:

? 數(shù)據(jù)僅來(lái)自一個(gè)表

? 不包含函數(shù)或數(shù)據(jù)分組

? 能通過(guò)視圖執(zhí)行 DML 操作

復(fù)雜視圖:

? 數(shù)據(jù)來(lái)自多個(gè)表

? 包含函數(shù)或數(shù)據(jù)分組

? 不允許通過(guò)視圖進(jìn)行 DML 操作

1.5創(chuàng)建簡(jiǎn)單視圖

create view temp_emp as select e.employee_id,e.last_name,e.salary from employees e;

1.6用子查詢中的列別名創(chuàng)建視圖

如果在創(chuàng)建視圖的查詢語(yǔ)句中含有列別名,那么列別名將作為視圖的列名。

create view emp as select e.employee_id id,e.last_name name,12*e.salary sal from employees e;

1.7 創(chuàng)建復(fù)雜視圖

create view dept_name1(name,minsal,maxsal,avgsal) as select d.department_name,min(e.salary) ,max(e.salary) ,avg(e.salary)avg from employees e,departments d where e.department_id =d.department_id group by d.department_name;

1.8視圖中 DML 操作的執(zhí)行規(guī)則

如果視圖中包含下面的部分就不能修改數(shù)據(jù):

? 組函數(shù)

? GROUP BY 子句

? DISTINCT 關(guān)鍵字

? 用表達(dá)式定義的列

1.9拒絕 DML 操作

創(chuàng)建一個(gè)簡(jiǎn)單視圖,包含 employees 表中的所有數(shù)據(jù),單該視圖拒絕 DML 操作。

create view v_emp as select * from employees with read only;

1.10內(nèi)建視圖

? 內(nèi)建視圖是一個(gè)帶有別名 (或相關(guān)名) 的可以在 SQL 語(yǔ)句中使用的子查詢。

? 一個(gè)主查詢的在 FROM 子句中指定的子查詢就是一個(gè)內(nèi)建視圖。

內(nèi)建視圖:內(nèi)建視圖由位于 FROM 子句中命名了別名的子查詢創(chuàng)建。該子查詢定義一個(gè)可以在主查詢中引用數(shù)據(jù)源。

示例

顯示那些雇員低于他們部門(mén)最高薪水的雇員的名字、薪水、部門(mén)號(hào)和他們部門(mén)最高的薪水。

select em.last_name,em.salary,em.department_id, e.maxsal from employees em ,(select e.department_id, max(e.salary) maxsal from employees e group by e.department_id)e where em.department_id = e.department_id and em.salary < e.maxsal;

1.11Top-N 分析

Top-N 查詢?cè)谛枰谝粋€(gè)條件,從表中顯示最前面的 n 條記錄或最后面的 n 條記錄時(shí)是有用的。該結(jié)果可以用于進(jìn)一步分析,例如,用 Top-N 分析你可以執(zhí)行下面的查詢類型:

1.11.2 執(zhí)行“Top-N”分析

Top-N 查詢使用一個(gè)帶有下面描述的元素的一致的嵌套查詢結(jié)構(gòu):

?子查詢或者內(nèi)建視圖產(chǎn)生數(shù)據(jù)的排序列表,該子查詢或者內(nèi)建視圖包含 ORDER BY 子句來(lái)確保排序以想要的順序排列。為了取回最大值,需要用 DESC 參數(shù)。

? 在最后的結(jié)果集中用外查詢限制行數(shù)。外查詢包括下面的組成部分:

——ROWNUM 偽列,它為從子查詢返回的每一行指定一個(gè)從 1 開(kāi)始的連續(xù)的值

—— 一個(gè) WHERE 子句,它指定被返回的 n 行,外 WHERE 子句必須用一個(gè)<或者<=操作。

示例

從 EMPLOYEES 表中顯示掙錢(qián)最多的 3 個(gè)人的名字及其薪水。

select rownum ,last_name,salary from(select last_name, salary from employees order by salary desc) where rownum <=3;

1.12Oracle 的分頁(yè)查詢

當(dāng)查詢的結(jié)果集數(shù)據(jù)量過(guò)大時(shí),可能會(huì)導(dǎo)致各種各樣的問(wèn)題發(fā)生,例如:服務(wù)器資源被耗盡,因數(shù)據(jù)傳輸量過(guò)大而使處理超時(shí),等等。最終都會(huì)導(dǎo)致查詢無(wú)法完成。解決這個(gè)問(wèn)題的一個(gè)策略就是“分頁(yè)查詢”,也就是說(shuō)不要一次性查詢所有的數(shù)據(jù),每次只查詢一部分?jǐn)?shù)據(jù)。這樣分批次地進(jìn)行處理,可以呈現(xiàn)出很好的用戶體驗(yàn),對(duì)服務(wù)器資源的消耗也不大。

分頁(yè)查詢?cè)瓌t:

在內(nèi)建視圖中通過(guò) rownum 偽劣值的判斷來(lái)指定獲取數(shù)據(jù)的數(shù)量。

示例

查詢雇員表中數(shù)據(jù),每次只返回 10 條數(shù)據(jù)。

select * from (select rownum rn,e.* from employees e) em where em.rn between 11 and 20;

2 序列(Sequence)

2.1什么是序列

序列是用戶創(chuàng)建的數(shù)據(jù)庫(kù)對(duì)象,序列會(huì)產(chǎn)生唯一的整數(shù)。序列的一個(gè)典型的用途是創(chuàng)建一個(gè)主鍵的值,它對(duì)于每一行必須是唯一的。序列由一個(gè) Oracle 內(nèi)部程序產(chǎn)生并增加或減少。

序列是一個(gè)節(jié)省時(shí)間的對(duì)象,因?yàn)樗梢詼p少應(yīng)用程序中產(chǎn)生序列程序的代碼量。序列號(hào)獨(dú)立于表被存儲(chǔ)和產(chǎn)生,因此,相同的序列可以被多個(gè)表使用。

2.2創(chuàng)建序列

在語(yǔ)法中:

increment by n 指定序列號(hào)之間的間隔,在這兒 n 是一個(gè)整數(shù) (如果該子句被省

略,序列增量為 1)

start with n 指定要產(chǎn)生的第一個(gè)序列數(shù) (如果該子句被省略,序列從 1 開(kāi)始)

maxvalue n 指定序列能產(chǎn)生的最大值

nomaxvalue n對(duì)于升序序列指定 10^27 為最大值,對(duì)于降序序列指定-1 為最大值(這是默認(rèn)選項(xiàng))

minvalue n 指定最小序列值

nominvalue n 對(duì)于升序序列指定 1 為最小值,對(duì)于降序序列指定-(10^26)為最小值(這是默認(rèn)選項(xiàng))

cycle/nocycle 指定序列在達(dá)到它的最大或最小值之后,是否繼續(xù)產(chǎn)生(NOCYCLE是默認(rèn)選項(xiàng))

cache/nocache 指定 Oracle 服務(wù)器預(yù)先分配多少值,并且保持在內(nèi)存中(默認(rèn)情況下,Oracle 服務(wù)器緩沖 20 個(gè)值)

示例

創(chuàng)建一個(gè)序列名稱為:dept_seq,增長(zhǎng)間隔為 10,從 120 開(kāi)始,最大值為 9999,不緩存。不循環(huán)使用。

create sequence dept_seq increment by 10 start with 120 maxvalue 9999 nocache nocycle;

2.3查詢序列

通過(guò)數(shù)據(jù)字典表user_sequences查詢。

select sequence_name,increment_by,max_value,min_value,last_number from user_sequences;

2.4使用序列

NEXTVAL 和 CURRVAL 偽列

? NEXTVAL 返回下一個(gè)可用的序列值,它每次返回一個(gè)唯一的被引用值,即使對(duì)于不同的用戶也是如此

? CURRVAL 獲得當(dāng)前的序列值

? 在 CURRVAL 獲得一個(gè)值以前,NEXTVAL 對(duì)該序列必須發(fā)布

示例

在 location ID 2500 中插入一個(gè)新部門(mén)名稱 Support。

insert into departments(department_id,department_name,location_id) values(dept_seq.nextval,'Support',2500);

查詢當(dāng)前序列號(hào)

select deptseq.nextval,dept_seqval from dual;

3 索引(Index)

3.1什么是索引

在關(guān)系型數(shù)據(jù)庫(kù)中,索引是一種單獨(dú)的、物理的對(duì)數(shù)據(jù)庫(kù)表中一列或多列的值進(jìn)行排序的一種存儲(chǔ)結(jié)構(gòu),它是某個(gè)表中一列或若干列值的集合和相應(yīng)的指向表中物理標(biāo)識(shí)這些值的數(shù)據(jù)頁(yè)的邏輯指針清單。索引的作用相當(dāng)于圖書(shū)的目錄,可以根據(jù)目錄中的頁(yè)碼快速找到所需的內(nèi)容。

索引提供對(duì)表中行的直接和快速訪問(wèn),它的目的是用已索引的路徑快速定位數(shù)據(jù)以減少磁盤(pán) I/O。索引由 Oracle 服務(wù)器自動(dòng)使用和維護(hù),索引邏輯地和物理地獨(dú)立于他們索引的表,這意味者索引可以在任何時(shí)候被創(chuàng)建或刪除,并且不影響基表或其它的索引。當(dāng)刪除表時(shí),相應(yīng)的索引也被刪除。

3.2索引的類型

唯一性索引:當(dāng)你在一個(gè)表中定義一個(gè)列為主鍵,或者定義一個(gè)唯一鍵約束時(shí) Oracle服務(wù)器自動(dòng)創(chuàng)建該索引,索引的名字習(xí)慣上是約束的名字。

非唯一索引:由用戶創(chuàng)建,例如,可以創(chuàng)建一個(gè) FOREIGN KEY 列索引用于一個(gè)查詢中的連接來(lái)改進(jìn)數(shù)據(jù)取回的速度。

3.3創(chuàng)建索引的方式

? 自動(dòng):在一個(gè)表的定義中,當(dāng)定義一個(gè) PRIMARY KEY 或 UNIQUE 約束時(shí),一個(gè)

唯一索引被自動(dòng)創(chuàng)建

? 手動(dòng):用戶能夠在列上創(chuàng)建非唯一的索引來(lái)加速對(duì)行的訪問(wèn)。

3.4使用索引

過(guò)多也是件壞事在表上建立更多的索引并不意味者更快地查詢,在帶索引的表上被提交的每個(gè) DML 操作意味者索引必須更新;與表聯(lián)系的索引越多,對(duì) Oracle 數(shù)據(jù)庫(kù)的影響越大,Oracle 數(shù)據(jù)庫(kù)在每次 DML 操作之后必須更新所有的索引。

3.4.1什么時(shí)候創(chuàng)建索引

? 一個(gè)列包含一個(gè)大范圍的值

? 一個(gè)列包含很多的空值

? 一個(gè)或多個(gè)列經(jīng)常同時(shí)在一個(gè) WHERE 子句中或一個(gè)連接條件中被使用

? 表很大,并且經(jīng)常的查詢期望取回少于百分之 2 到 4 的行。

3.4.2什么時(shí)候不創(chuàng)建索引

? 表很小

? 不經(jīng)常在查詢中作為條件被使用的列

? 大多數(shù)查詢期望取回多于表中百分之 2 到 4 的行

? 表經(jīng)常被更新

? 被索引的列作為表達(dá)式的的一部分被引用

3.5操作索引

3.5.1非唯一性索引的類型

oracle 的非唯一性索引:單行索引,復(fù)合索引(組合索引),函數(shù)索引。

3.5.2創(chuàng)建索引語(yǔ)法

創(chuàng)建單行索引

create index emp_index on employees(last_name);

創(chuàng)建復(fù)合索引

create index dept_man_loc on departments(manager_id,location_id);

創(chuàng)建函數(shù)索引

create index dept_upper2 on departments(upper(department_name));

3.6查詢索引

利用數(shù)據(jù)字典表

示例

select IC.INDEX_NAME ,ic.COLUMN_NAME,ic.COLUMN_POS ITION,ix.uniqueness from user_indexes ix ,user_ind_columns ic where ix.index_name = ic.INDEX_NAME and ic.TABLE_NAME ='DEPARTMENTS'; select * from user_indexes where table_name='表名'; select * from user_ind_columns where index_name='索引名';

4 同義詞(Synonym)

4.1什么是同義詞

同義詞可以除去對(duì)象名必須帶的方案限制,并提供給你一個(gè)可替換表名、視圖名、序列名和存儲(chǔ)過(guò)程名或其它對(duì)象名。該方法對(duì)具有特別長(zhǎng)的對(duì)象的名字很有用。

4.2創(chuàng)建和刪除同義詞

create synonym em for employees; drop synonym em;

5 創(chuàng)建用戶(User)

5.1什么是 Oracle 用戶

Oracle 用戶是用來(lái)連接數(shù)據(jù)庫(kù)和訪問(wèn)數(shù)據(jù)庫(kù)對(duì)象的。

5.2創(chuàng)建用戶

需要具備創(chuàng)建用戶的權(quán)限可以使用 sys 或者 system 用戶來(lái)創(chuàng)建新用戶

create user u_test identified by 123456;

5.3使用指定表空間創(chuàng)建用戶

create user u_bjsxt identified by 123456 default tablespace bjsxt temporary tablespace temp;

5. 數(shù)據(jù)控制語(yǔ)言(DCL)

grant...授予用戶權(quán)限

revork..撤銷用戶權(quán)限

5 .1授予系統(tǒng)權(quán)限

5.1.1授予創(chuàng)建其他對(duì)象權(quán)限

– CREATE SESSION (會(huì)話)

– CREATE TABLE (創(chuàng)建表)

– CREATE SEQUENCE(創(chuàng)建序列)

– CREATE VIEW(創(chuàng)建視圖)

– CREATE PROCEDURE

– UNLIMITED TABLESPACE(永久表空間權(quán)限)

為 u_bjsxt 用戶分配創(chuàng)建表、創(chuàng)建視圖、創(chuàng)建序列權(quán)限以及使用永久表空間權(quán)限。

grant create table ,create view ,create sequence ,unlimited tablespace to u_bjsxt;

5.2 撤銷權(quán)限

Revoke 權(quán)限 from 用戶。

revoke create table from u_bjsxt;

5.3 Oracle 中的角色

角色是命名的可以授予用戶的相關(guān)權(quán)限的組,該方法使得授予、撤回和維護(hù)權(quán)限容易的

多。一個(gè)用戶可以使用幾個(gè)角色,并且?guī)讉€(gè)用戶也可以被指定相同的角色。

5.4創(chuàng)建角色并且授予權(quán)限給角色

創(chuàng)建角色

create role manager;

授予權(quán)限給一個(gè)角色

grant create session,create table,create view,create sequence to manager;

5.5授予一個(gè)角色給用戶

create user newbjsxt identified by oracle default tablespace bjsxt; grant unlimited tablespace to newbjsxt; grant manager to newbjsxt;

5.6撤銷用戶角色

revoke manager from newbjsxt;

總結(jié)

以上是生活随笔為你收集整理的sql查询百分之20到百分之40的数据_数据库基础学习——SQL语言知识总结(6)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。