SQL語言的分類參考word_第1頁
SQL語言的分類參考word_第2頁
SQL語言的分類參考word_第3頁
SQL語言的分類參考word_第4頁
SQL語言的分類參考word_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、窗體底端SQL語言的四大組成部分DQL DML DDL DCLSQL語言共分為四大類: DQL(數據查詢語言),DML(數據操縱語言),DDL(數據定義語言),DCL(數據控制語言)。1 數據查詢語言(DQL)v 查詢語句的一般結構v 單表查詢v 多表查詢v 嵌套查詢v 分組查詢v 集合查詢查詢語句的一般結構 SELECT ALL|DISTINCT, FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC;單表查詢:無條件、有條件、排序無條件:SELECT中的可以是表中的列,也可以是表達式,包括算術表達式、字符串常數、函數等。(字符串用單引號定界)1. 使

2、用算術表達式(+、-、*、/)Select empno,sal*0.8 from emp;2. 使用字符常量Select empno,Name is:, ename from emp;3.使用函數Select empno,UPPER( ename) from emp;4. 改變列標題Select empno employeename,sal AS salary , job,dept from emp;5.使用連接字符串Select ename | : | 1 | month salary= | sal as monthy from emp 6.消除重復行推薦精選 SQL select ALL

3、ename from emp; SQL select DISTINCT ename from emp;有條件:WHERE常用的查詢條件 查詢條件謂詞比較大小=, , =, =, 確定范圍BETWEEN AND,NOT BETWEEN AND確定集合IN,NOT IN字符匹配LIKE,NOT LIKE空值IS NULL,IS NOT NULL多重條件AND,OR確定范圍: select empno,ename,sal ,deptno from emp where deptno between 10 and 20;確定集合: select empno,ename,sal,deptno from e

4、mp where deptno in (10,30); 等于select empno,ename,sal,deptno from emp where deptno=10 or deptno=30;字符匹配:NOT LIKE 1. 可以是一個完整的字符串,也可以含有通配符的字符串。通配符包括%、_。2. %(百分號)代表任意長(長度為0)字符串。3. _(下劃線)代表任意單個字符。 SQL select empno,ename,sal,deptno from emp where ename like S%;SQL select ename from emp where ename like _S

5、%;空值:涉及空值查詢時使用IS NULL或 IS NOT NULL,這里的IS不能用=替代多重條件:用邏輯運算符NOT、AND和OR來聯(lián)結多個查詢條件。優(yōu)先級:NOT、AND、OR(用戶可以用括號改變優(yōu)先級)。 IN謂詞實際上是多個OR運算的縮寫。 SELECT的交互查詢: 使用替代變量 Select * from emp where ename= &name推薦精選 排序: ORDER BY 從句要放在 SELECT語句的最后. 表達式排序:SQL select empno,ename,sal,sal*12 from emp order by sal*12 desc; 多列排序: SQL

6、select empno,deptno,sal from emp order by deptno asc,sal desc;顯示:按部門號升序,相同部門號內的工資降序排列。 別名排序:SQL select empno,ename,sal*12 annsal from emp order by annsal desc;多表查詢 連接條件寫在 WHERE 從句中. 同一列名出現在多個表中時,列名前要加上表名來區(qū)分.連接類型: 交叉連接:笛卡爾積。 內連接:使用比較運算符進行表間某列或某些列數據的比較操作,并列出這些表中與連接條件相匹配的數據行。內連接分為等值連接、非等值連接和自身連接。例: 查詢所

7、有工資大于2000的雇員的姓名和他的經理的名字。(自身連接例子)SQL select first.ename,second.ename,first.sal from emp first,emp second where first.sal 2000 and first.deptno =second.deptno and second.job = MANAGER; 結果 ENAME ENAME SAL - - - CLARK CLARK 2450 KING CLARK 5000 JONES JONES 2975 CLARK JONES 3000 SCOTT JONES 3000 BLAKE BL

8、AKE 2850 推薦精選 外連接:外連接不僅要列出與連接條件相匹配的數據行,還要列出左表、右表或兩個表中所有不符合查詢條件的數據行。外連接分為左外連接、右外連接和全外連接。1) 用外連接可以看見通常不符合連接條件的行.2)外連接操作符: (+).外連接:與內連接相比,可以避免信息丟失現象。 嵌套查詢v 概念 查詢塊:一個select-from-where語句稱為一個查詢塊。 嵌套查詢:將一個查詢塊嵌套在另一個查詢塊的where子句或having子句中的查詢。子查詢的結果用于建立主查詢的查找條件。v 處理步驟 一般由里向外進行處理。v 注意 子查詢可以有多層,所存取的表可以是父查詢沒有存取的表

9、。 子查詢中不能有ORDER BY子句。 子查詢選出的記錄不顯示。單行嵌套查詢示例查詢所有工資高于Jones的雇員的姓名、工資等信息。SQL select ename,job,sal from emp where sal (select sal from emp where ename = JONES);結果ENAME JOB SAL推薦精選- - -SCOTT ANALYST 3000KING PRESIDENT 5000CLARK ANALYST 3000l 子查詢中使用組函數 l HAVING 從句中使用子查詢 l 多行嵌套查詢(子查詢的結果是多行的)多值比較運算符 in、exists、

10、not in、not exists之間的區(qū)別 all、any(some替代)、not in、in之間的區(qū)別來看下面這樣一條SQL語句:select * from student where 20 all (select score from student)其中,(select score from student)返回的是所有分數的記錄集只有當記錄集中的所有分數都大于20后,才會執(zhí)行前面的SQL語句。顯然,任何一條記錄都大于20.如果把它改成50,則查不到任何數據,因為只要有一條記錄小于50,條件都不成立。但是,如果把all改面any就不一樣了:select * from student w

11、here 50 推薦精選 any (select score from student)它的意思是,只要記錄集中的記錄有一條大于50,條件就成立。1 、ALL與ANY的關系就是,AND 與 OR 的關系。2 、ANY與SOME等價,據說搞這兩個不同的詞出來是為了遷就英語語法。例如,在用= ANY 的地方在(英語) 語法上就應該是= SOME。 some是新版本的SQL中取代any的關鍵字,用法基本一樣。3、 IN 與= ANY等價 ,均表示,變量在(子查詢)列表之中,即 a IN (table B) 表示 a = ANY B.b4、 NOT IN 與 ALL 等價,而不等于 ANY,前兩者均表

12、示,變量不在(子查詢)列表之中,即 a NOT IN (table B) 表示 a ALL B.b。而如果a ANY B.b,則只要任意一個ba就true了。5、 IN 與 EXISTS 的性能區(qū)別主要來自,IN 會編列子查詢的每行記錄,然后再返回,而EXISTS 則只要遇到第一個滿足條件的記錄就馬上返回。6 、NOT IN 與 NOT EXISTS 并不能完全等價,只有當子查詢中,select 關鍵字后的字段有not null約束或者有這種暗示時才用NOT IN。例查詢所有雇員的工資都不低于1000的部門的所有人員信息SQL select ename,sal,job from emp whe

13、re deptno not in (select deptno from emp where sal select ename,sal,job from emp where deptno != all (select deptno from emp where sal select ename,sal,job from emp where deptno = any (select deptno from emp where sal between 4000 and 5000);結果? ENAME SAL JOB? - - -推薦精選? CLARK 2450 MANAGER? KING 5000

14、 PRESIDENT? MILLER 1300 CLERK例3查找那些雇員的部門號在部門表中沒有的雇員的信息。SQL select ename, sal, job from emp where not exists (select * from dept where deptno = emp.deptno);常用統(tǒng)計函數(一般where后不用統(tǒng)計函數)v 函數AVG 和 SUM 應用于數值型v MIN 和 MAX 可用于任意類型.v 函數AVG 和 SUM 應用于數值型v COUNT(*) 返回符合條件的記錄數.(包括含null的所有行數)v COUNT(expr) 返回的非NULL的行數.v

15、 集合函數忽略列中的 null 值(COUTN除外).SQL SELECT AVG(comm) FROM emp;v 在組函數中使用 NVL函數,NVL 函數強制集合函數包括 null 值.SQL SELECT AVG(NVL(comm,0) FROM emp;總結:當NVL(comm,0)時,傭金值賦0值,顯示結果為0,不空 當NVL(comm,-1)時,傭金值賦-1值,不顯示結果,為空NVL 函數: 功能:把可能包含了空值的表達式1,轉換成有實際意義的數據表達式2 。 格式:NVL(表達式1,表達式2) 作用的數據類型:可用于字符型、數值型、日期型.推薦精選 注意事項:轉換前后的類型必須一

16、致: NVL(comm,0) NVL(hiredate,01-JAN-97) NVL(job,No Job Yet)分組查詢(一般句中有每個、各個字樣的要用到分組查詢)Having后一般是統(tǒng)計函數,不能是emp.depno=dept.depno這樣的等式常用統(tǒng)計函數常與分組查詢一塊用 在包含GROUP BY子句的查詢語句中,SELECT子句后面的所有字段列表(除聚集函數外),均應該包含在GROUP BY 子句中。 在 GROUP BY 從句中使用多個列 SQL SELECT deptno, job, sum(sal) FROM emp GROUP BY deptno, jobv 使用 HAVI

17、NG 從句選擇滿足條件分組v 執(zhí)行次序: 對行進行分組. 對每組數據執(zhí)行組函數. 返回符合 HAVING 從句的分組結果. WHERE與HAVING的區(qū)別v 作用對象不同。WHERE 作用于基本表或視圖,從中選擇滿足條件的元組HAVING短語作用于組,從中選擇滿足條件的組。 v 例查詢平均工資超過2000的部門,并按部門號進行排序v SQL SELECT deptno, avg(sal) from emp v GROUP BY deptno v HAVING AVG(SAL)2000 v ORDER BY deptno; 結果v DEPTNO AVG(SAL) 10 3725 20 2175集

18、合查詢:查詢結果的集合運算v 并集(UNION ALL)推薦精選v 交集(INTERSECT ALL) v 差集(MINUS ALL )2 數據操縱語言數據操縱語言DML主要有三種形式:1) 插入:INSERT2) 更新:UPDATE3) 刪除:DELETEv INSERT 語句 插入單個元組格式:INSERT INTO (,)VALUES (,);注意:1)在表定義時說明了NOT NULL的屬性列不能取空值,否則會出錯。2)如果INTO子句中沒有指明任何列名,則新插入的紀錄必須在每個屬性列上均有值。3)指定列名時,列名順序任意,列值與列名對應. 4) 字符型和日期型數據在插入時要加單引號。例

19、SQL INSERT INTO DEPT VALUES (60,PRODUCTION,SAN FRANCISCO);SQL INSERT INTO DEPT(DNAME,DEPTNO) VALUES(TEST,70); 插入子查詢結果 例向表中插入一條與SMITH的內容相同的記錄,但姓名改為了FAN,雇員號改為了8000.SQL INSERT INTO EMP (EMPNO, ENAME, JOB, MGR ,HIREDATE, SAL, COMM, DEPTNO) SELECT 8000, FAN,JOB,MGR, HIREDATE, SAL, COMM, DEPTNO FROM EMP W

20、HERE ENAME = SMITH;v UPDATE語句 修改某一個元組的值 格式:UPDATE SET =,=WHERE;例將雇員號為8000的雇員提升為部門20的經理,工資增加1000。.SQL UPDATE EMP SET JOB = MANAGER,SAL = SAL + 1000,DEPTNO = 20 WHERE EMPNO = 8000; 修改多個元組的值 推薦精選例將部門號為20的所有的雇員的工資加10%.SQL UPDATE EMP SET SAL = SAL + 0.1*SAL WHERE DEPTNO = 20; 帶子查詢的修改語句 例將20號部門的所有雇員的工資都變?yōu)?/p>

21、該部門平均工資加1000.SQL UPDATE EMP SET SAL = 1000 + (SELECT AVG (SAL) FROM EMP WHERE DEPTNO = 20) WHERE DEPTNO = 20;v DELETE語句 刪除某一個元組的值 格式:DELETE FROM WHERE;例刪除名字為FAN的雇員.SQL DELETE FROM EMP WHERE ENAME = FAN; 刪除多個元組的值 例刪除EMP表中的所有數據.SQL DELETE FROM EMP ; 帶子查詢的刪除語句 例刪除所有與雇員FAN相同部門的雇員信息。SQL DELETE FROM EMP W

22、HERE DEPTNO = (SELECT DEPTNO FROM EMP WHERE ENAME = FAN);3 數據定義語言DDL數據定義語言DDL用來創(chuàng)建數據庫中的各種對象-表、視圖、索引、同義詞、聚簇等如:CREATE TABLE/VIEW/INDEX/SYN/CLUSTER| | | | |表 視圖 索引 同義詞 簇創(chuàng)建表(CREATE)的一般格式:CREATE TABEL (列級完整性約束條件,列級完整性約束條件,);推薦精選CREATE TABEL 的總結:1、實體完整性規(guī)則:主鍵(所有主屬性)非空。2、參照完整性規(guī)則:不得引用不存在的外鍵(定義外鍵)。3、用戶定義的約束(CH

23、ECK,UNIQUE,NOT NULL)。例 創(chuàng)建學生表SQL CREATE TABLE STUDENT(sno CHAR(5) primary key,sname CHAR(20) not null,ssex CHAR(2) CHECK(ssex IN(男,女) ,sage NUMBER(2) CHECK(sage between 16 and 20),Sclass CHAR(7) not null,);創(chuàng)建課程表SQL CREATE TABLE COURCE (CNO CHAR(4) PRIMARY KEY, CNAME CHAR(16) NOT NULL); 創(chuàng)建成績表SQLCREATE

24、 TABLE score ( SNO CHAR(4), CNO CHAR(16) , SCORE1 NUMBER(5,2), PRIMARY KEY(SNO,CNO), FOREIGN KEY(SNO) REFERENCES STUDENT(SNO), FOREIGN KEY(CNO) REFERENCES COURCE(CNO);例創(chuàng)建新表,結構與STUDENT相同,并拷貝數據。SQL CREATE TABLE Student_COPY AS SELECT * FROM STUDENT;例創(chuàng)建新表,結構與STUDENT相同,不拷貝數據。SQL CREATE TABLE Student_COP

25、Y AS SELECT * FROM STUDENT where1=2;v 基本表的修改一般格式:推薦精選l ALTER TABLE ADD 完整性約束DROP MODIFY ; 說明? ADD子句用于新增列及其完整性約束條件;? DROP子句用于刪除指定的完整性約束條件;? MODIFY子句用于修改原有的列定義,包括修改列名和數據類型。? SQL沒有提供刪除屬性列的語句,用戶只能間接實現這一功能。方法是先將表中要保留的列及其內容復制到一個新表中,然后刪除原表,再將新表重新命名為原表。例刪除STUDENT表上SNAME列上的唯一約束。 ALTER TABLE STUDENT DROP UNIQ

26、UE(SNAME);例刪除STUDENT表上建立的主鍵約束。 ALTER TABLE STUDENT DROP PRIMARY KEY;例 為表STUDENT添加一個新的列。 ALTER TABLE STUDENT ADD(SID CHAR(18) NULL); ? 注意:新增加的字段只能作為表的最后一個字段。例將剛添加的列SID改為DATE類型。 ALTER TABLE STUDENT MODIFY SID DATE;v 基本表的刪除l DROP TABLE ; ALTER TABLE的補充:(constraint 或constraint )推薦精選索引的創(chuàng)建(INDEX)一般格式:(uni

27、que對應表,distinct對應列)? CREATE UNIQUE INDEX ON (column1,column2 )? tablespace 表空間名? storage storage_clause); 說明? 是要建立索引的基本表名字。? 索引可建立在一列或多列上,割裂名之間用逗號分隔。? 索引值的排列次序缺省為ASC。? UNIQUE指明此索引的每一個索引值只對應唯一的數據記錄。(唯一性)例為表EMP建立以ENAME為索引列的索引,索引名為emp_index, 索引存放的表空間為index 。 SQL CREATE INDEX emp_index ON EMP(ENAME DESC

28、) tablespace index ;例在表DEPT的DNAME列上建立唯一性索引,索引名為ON_DNAME。SQL CREATE UNIQUE INDEX ON_DNAME ON DEPT(DNAME DESC); 當表中有數據時,建立索引將檢查數據的唯一性, 如果出現重復,將有下列提示: ORA-01452: 無法 CREATE UNIQUE INDEX; 找到重復的關鍵字 建立了唯一性索引后,以后對數據的修改將自動進行 唯一性驗證。索引的刪除:推薦精選 一般格式:? DROP INDEX ;總結索引:索引一旦建立,就由系統(tǒng)使用和維護,不需要用戶干預。索引的建立是為了減少查詢時間,但如果

29、數據增刪頻繁,系統(tǒng)將會花費很多時間來維護索引,因此應該刪除一些不必要視圖的創(chuàng)建(VIEW)一般格式:CREATE VIEW (,)AS SELECT 語句 WITH CHECK OPTION;說明 其中子查詢可以是任意復雜的SELECT 語句,但通常不允許含有ORDER BY子句和DISTINCT短語。 WITH CHECK OPTION表示對視圖進行UPDATE, INSERT和DELETE操作時要保證更新、插入和刪除的行滿足視圖定義中的謂詞條件。 屬性列名或者全部省略或者全部指定,沒有第3種選擇。例建立一個視圖,使它包含所有工資高于3000的雇員的姓名、工資、部門以及部門地址SQL CRE

30、ATE VIEW HIGHSAL (NAME, SAL, DEPT, LOC) AS SELECT ENAME, SAL, DNAME, LOC FROM EMP, DEPT WHERE SAL3000 AND DEPT.DEPTNO =EMP.DEPTNO;v 視圖的刪除 一般格式:? DROP VIEW ; 例刪除TEST視圖。? DROP VIEW TEST; 總結:視圖是保存select語句的,為了下一次懶得寫而存在的,下一次只需select * from HIGHSAL;4 數據控制語言DCL數據控制語言DCL用來授予或回收訪問數據庫的某種特權,并控制數據庫操縱事務發(fā)生的時間及效果,

31、對數據庫實行監(jiān)視等。如:1) GRANT:授權。2) ROLLBACK WORK TO SAVEPOINT:回退到某一點。回滾-ROLLBACK回滾命令使數據庫狀態(tài)回到上次最后提交的狀態(tài)。其格式為:SQLROLLBACK;推薦精選ROLLBACK后的數據狀態(tài): 數據改變被取消(Undo). 數據恢復到以前狀態(tài). 被影響的行的鎖被釋放.Rollback到某一點: 用SAVEPOINT在當前事務中指定該點. 使用ROLLBACK TO SAVEPOINT 回退至該點.SQL UPDATE EMP SET SAL = SAL + 0.1*SAL WHERE DEPTNO = 20;SQLSAVEPOINT UPDATE

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論