當前位置:首頁 » 編程語言 » 精通sql結構化查詢語言詳解pdf
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

精通sql結構化查詢語言詳解pdf

發布時間: 2023-08-21 16:10:31

A. sql是什麼

SQL是英文Structured Query Language的縮寫形式,它的意思是表示結構化查詢語言。SQL語言的主要功能就是同各種資料庫建立聯系。此外,SQL是被當成為關系型資料庫管理系統的標准語言。其是由Microsoft開發和推廣的關系資料庫管理系統。

(1)精通sql結構化查詢語言詳解pdf擴展閱讀:

SQL Server的特點如下:

1、具有真正的客戶機和伺服器體系結構。

2、圖形化用戶界面,使系統管理和資料庫管理更加直觀。

3、豐富的編程介面工具,為用戶進行程序設計提供了更大的選擇餘地。

4、其完全集成,利用了NT的許多功能,如發送和接受消息等。

B. SQL實戰新手入門:獲取數據-SELECT語句(1)

獲取數據 SELECT語句( )

現在MYLIBRARY表中已經有了數據 可以對該表執行查詢 以精確地查找所具有的圖書 SELECT語句用於從表中獲取數據 要使用SELECT語句獲取數據 只需要告訴它表名和列名

SELECT all_my_books FROM myLibrary;

盡管該查詢可以產生一個圖書信息的列表 但它還不是特別有用 該圖書信息是一大堆的數據 將其存儲在一個關系型資料庫中的唯一好處就是可以輕而易舉地重新獲取或列印這些信息 如果要搜索數據呢?要查找是否有某一本特定的圖書 必須獲取所有的記錄 然後人工地逐一遍歷每一條記錄!這並不是我們期望從一個復雜的RDBMS軟體獲得的結果

需要採用某種辦法來標識存儲在表中的記錄的特殊關鍵詞 例如圖書名稱或ISBN號 對於該問題 一個標準的程序設計方式的答案就是對記錄進行解析 將記錄切分為多個片段 並在一個循環中遍歷查找特定的目標詞彙 對於表中的每一條記錄重復執行這一過程 如果沒有特定於廠商的過程化擴展 SQL無法執行任何類似的操作 這種方式違背了SQL語言是一種聲明性語言的本質 並要求深刻地理解數據結構 下面讓我們再看一看輸入到MYLIBRARY表中的第一條記錄

SQL Bible by Alex Kriegel Boris M Trukhnov Paperback: pages

Publisher: Wiley; edition (April ) Language: English

ISBN :

如何才能將記錄切分為不同的信息片段呢?每一個片段之間的標記是什麼呢?如何區分圖書的名稱和作者呢?如果使用空格符作為分隔符 那麼SQL和Bible將被切分為不同的片段 但在邏輯上SQL和Bible屬於同一個信息片段 如何才能知道by是一個介詞 而不是作者姓名中的一部分?解決的辦法來自SQL結構化的本性 畢竟SQL是一種結構化的查詢語言 要解決這一問題 需要更多的列來存儲不同片段的信息 將一個笨重的字元串拆分為多個語義上有著密切聯系的數據片段就可以獨立地標識每一個數據片段 因為每一個片段都成為一個單獨的列 回到CREATE TABLE語句(首先刪除現有的表)

DROP TABLE myLibrary;

根據上面的討論創建一個新表

CREATE TABLE myLibrary

title VARCHAR( )

author VARCHAR( )

author VARCHAR( )

publisher VARCHAR( )

pages INTEGER

publish_date VARCHAR( )

i *** n VARCHAR( )

book_language VARCHAR( )

在新表的結構中 將原來的單個列拆分為 個列 另外還可以添加第 個列 將作者的名和姓拆分到兩個單獨的列中(這就是將在第 章中討論的數據建模過程) 就目前而言 除了將PAGES列的數據類型設置為INTEGER類型以表示圖書包含多少頁之外 對於其他所有的列都使用了相同的數據類型 並縮短了每一個列中所能包含的字元數量 本章後面將進一步解釋將PAGES列設置為INTEGER類型的原因 讀者或許還會考慮到修改PUBLISH_DATE列的數據類型 通常情況下 日期數據的行為與字元數據不同 DBMS提供了專門用於日期和時間的數據類型

現在 無須將所有的數據都保存在同一個桶中 對於各個列的數據類型可以有更多的選擇 可以將不同的列定義為不同的數據類型 當插入或更新各個列中的數據(本章後面將對此進行介紹)時 建議不要將數據類型搞混

本章後面還將重新審視數據類型 第 章也將詳細地介紹數據類型

讀者可能已經注意到 在新的MYLIBRARY表中有兩個作者列 這是為了適應一本圖書有兩個作者的情形 這也提出了另外一個問題 當一本圖書只有一個作者或者一本圖書有 個作者時 該如何處理呢?該問題將在第 章和第 章的數據建模小節中進行深入的探討 這里 讀者只需要注意對於未使用的列將自動使用默認值進行填充 如果讀者發現經常需要在表中添加新的列 那麼最好花時間閱讀一下關於資料庫規范化方面的內容(請參見第 章)

接下來將向新表中插入數據 這一步驟與之前介紹的插入操作完全相同 唯一的差別在於VALUES列表變得更長 因為原來只包含一個列 而現在包含了 個列 在VALUES列表中 除了PAGES列的值之外 所提供的所有其他數據都必須用單引號括起來 引號表明了這些數據是字元數據 沒有引號則表示數值數據

INSERT INTO myLibrary VALUES (

SQL Bible

Alex Kriegel

Boris M Trukhnov

Wiley

April

English )

返回目錄 SQL實戰新手入門

編輯推薦

Oracle索引技術

高性能MySQL

lishixin/Article/program/SQL/201311/16484

C. sql語言(結構化查詢語言)簡介

SQL是英文Structured Query Language的縮寫,意思為結構化查詢語言。SQL語言的主要功能就是同各種資料庫建立聯系,進行溝通。按照ANSI(美國國家標准協會)的規定,SQL被作為關系型資料庫管理系統的標准語言。SQL語句可以用來執行各種各樣的操作,例如更新資料庫中的數據,從資料庫中提取數據等。目前,絕大多數流行的關系型資料庫管理系統,如Oracle, Sybase, Microsoft SQL Server, Access等都採用了SQL語言標准。雖然很多資料庫都對SQL語句進行了再開發和擴展,但是包括Select, Insert, Update, Delete, Create,以及Drop在內的標準的SQL命令仍然可以被用來完成幾乎所有的資料庫操作。

SQL Server

SQL Server 是一個關系資料庫管理系統它最初是由Microsoft Sybase 和Ashton-Tate三家公司共同開發的於1988 年推出了第一個OS/2 版本在Windows NT 推出後Microsoft與Sybase 在SQL Server 的開發上就分道揚鑣了Microsoft 將SQL Server 移植到Windows NT

系統上專注於開發推廣SQL Server 的Windows NT 版本Sybase 則較專注於SQL Server在UNIX 操作系統上的應用在本書中介紹的是Microsoft SQL Server 以後簡稱為SQL Server或MS SQL Server

SQL Server 2000 是Microsoft 公司推出的SQL Server 資料庫管理系統的最新版本該版本繼承了SQL Server 7.0 版本的優點同時又比它增加了許多更先進的功能具有使用方便可伸縮性好與相關軟體集成程度高等優點可跨越從運行Microsoft Windows 98 的膝上型電腦到運行Microsoft Windows 2000 的大型多處理器的伺服器等多種平台使用

D. SQL查詢語句

SQL查詢語句大全

SQL語句無論是種類還是數量都是繁多的,很多語句也是經常要用到的,SQL查詢語句就是一個典型的例子,無論是高級查詢還是低級查詢,SQL查詢語句的需求是最頻繁的。那麼SQL查詢語句有哪些?下面跟我一起來看看吧!

一、簡單查詢語句

1. 查看錶結構

SQL>DESC emp;

2. 查詢所有列

SQL>SELECT * FROM emp;

3. 查詢指定列

SQL>SELECT empmo, ename, mgr FROM emp;

SQL>SELECT DISTINCT mgr FROM emp; 只顯示結果不同的項

4. 查詢指定行

SQL>SELECT * FROM emp WHERE job='CLERK';

5. 使用算術表達式

SQL>SELECT ename, sal*13+nvl(comm,0) FROM emp;

nvl(comm,1)的意思是,如果comm中有值,則nvl(comm,1)=comm; comm中無值,則nvl(comm,1)=0。

SQL>SELECT ename, sal*13+nvl(comm,0) year_sal FROM emp; (year_sal為別名,可按別名排序)

SQL>SELECT * FROM emp WHERE hiredate>'01-1月-82';

6. 使用like操作符(%,_)

%表示一個或多個字元,_表示一個字元,[charlist]表示字元列中的任何單一字元,[^charlist]或者[!charlist]不在字元列中的任何單一字元。

SQL>SELECT * FROM emp WHERE ename like 'S__T%';

7. 在where條件中使用In

SQL>SELECT * FROM emp WHERE job IN ('CLERK','ANALYST');

8. 查詢欄位內容為空/非空的語句

SQL>SELECT * FROM emp WHERE mgr IS/IS NOT NULL;

9. 使用邏輯操作符號

SQL>SELECT * FROM emp WHERE (sal>500 or job='MANAGE') and ename like 'J%';

10. 將查詢結果按欄位的值進行排序

SQL>SELECT * FROM emp ORDER BY deptno, sal DESC; (按部門升序,並按薪酬降序)

二、復雜查詢

1. 數據分組(max,min,avg,sum,count)

SQL>SELECT MAX(sal),MIN(age),AVG(sal),SUM(sal) from emp;

SQL>SELECT * FROM emp where sal=(SELECT MAX(sal) from emp));

SQL>SELEC COUNT(*) FROM emp;

2. group by(用於對查詢結果的分組統計) 和 having子句(用於限制分組顯示結果)

SQL>SELECT deptno,MAX(sal),AVG(sal) FROM emp GROUP BY deptno;

SQL>SELECT deptno, job, AVG(sal),MIN(sal) FROM emp group by deptno,job having AVG(sal)<2000;

對於數據分組的總結:

a. 分組函數只能出現在選擇列表、having、order by子句中(不能出現在where中)

b. 如果select語句中同時包含有group by, having, order by,那麼它們的順序是group by, having, order by。

c. 在選擇列中如果有列、表達式和分組函數,那麼這些列和表達式必須出現在group by子句中,否則就是會出錯。

使用group by不是使用having的前提條件。

3. 多表查詢

SQL>SELECT e.name,e.sal,d.dname FROM emp e, dept d WHERE e.deptno=d.deptno order by d.deptno;

SQL>SELECT e.ename,e.sal,s.grade FROM emp e,salgrade s WHER e.sal BETWEEN s.losal AND s.hisal;

4. 自連接(指同一張表的連接查詢)

SQL>SELECT er.ename, ee.ename mgr_name from emp er, emp ee where er.mgr=ee.empno;

5. 子查詢(嵌入到其他sql語句中的select語句,也叫嵌套查詢)

5.1 單行子查詢

SQL>SELECT ename FROM emp WHERE deptno=(SELECT deptno FROM emp where ename='SMITH');查詢表中與smith同部門的人員名字。因為返回結果只有一行,所以用「=」連接子查詢語句

5.2 多行子查詢

SQL>SELECT ename,job,sal,deptno from emp WHERE job IN (SELECT DISTINCT job FROM emp WHERE deptno=10);查詢表中與部門號為10的工作相同的員工的姓名、工作、薪水、部門號。因為返回結果有多行,所以用「IN」連接子查詢語句。

in與exists的區別: exists() 後面的子查詢被稱做相關子查詢,它是不返回列表的值的。只是返回一個ture或false的結果,其運行方式是先運行主查詢一次,再去子查詢里查詢與其對 應的結果。如果是ture則輸出,反之則不輸出。再根據主查詢中的每一行去子查詢里去查詢。in()後面的子查詢,是返回結果集的,換句話說執行次序和 exists()不一樣。子查詢先產生結果集,然後主查詢再去結果集里去找符合要求的欄位列表去。符合要求的輸出,反之則不輸出。

5.3 使用ALL

SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ALL (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MAX(sal) FROM emp WHERE deptno=30);查詢工資比部門號為30號的所有員工工資都高的員工的姓名、薪水和部門號。以上兩個語句在功能上是一樣的,但執行效率上,函數會高 得多。

5.4 使用ANY

SQL>SELECT ename,sal,deptno FROM emp WHERE sal> ANY (SELECT sal FROM emp WHERE deptno=30);或SQL>SELECT ename,sal,deptno FROM emp WHERE sal> (SELECT MIN(sal) FROM emp WHERE deptno=30);查詢工資比部門號為30號的任意一個員工工資高(只要比某一員工工資高即可)的員工的姓名、薪水和部門號。以上兩個語句在功能上是 一樣的,但執行效率上,函數會高得多。

5.5 多列子查詢

SQL>SELECT * FROM emp WHERE (job, deptno)=(SELECT job, deptno FROM emp WHERE ename='SMITH');

5.6 在from子句中使用子查詢

SQL>SELECT emp.deptno,emp.ename,emp.sal,t_avgsal.avgsal FROM emp,(SELECT emp.deptno,avg(emp.sal) avgsal FROM emp GROUP BY emp.deptno) t_avgsal where emp.deptno=t_avgsal.deptno AND emp.sal>t_avgsal.avgsal ORDER BY emp.deptno;

5.7 分頁查詢

資料庫的每行數據都有一個對應的行號,稱為rownum.

SQL>SELECT a2.* FROM (SELECT a1.*, ROWNUM rn FROM (SELECT * FROM emp ORDER BY sal) a1 WHERE ROWNUM<=10) a2="" where="" rn="">=6;

指定查詢列、查詢結果排序等,都只需要修改最里層的子查詢即可。

5.8 用查詢結果創建新表

SQL>CREATE TABLE mytable (id,name,sal,job,deptno) AS SELECT empno,ename,sal,job,deptno FROM emp;

5.9 合並查詢(union 並集, intersect 交集, union all 並集+交集, minus差集)

SQL>SELECT ename, sal, job FROM emp WHERE sal>2500 UNION(INTERSECT/UNION ALL/MINUS) SELECT ename, sal, job FROM emp WHERE job='MANAGER';

合並查詢的執行效率遠高於and,or等邏輯查詢。

5.10 使用子查詢插入數據

SQL>CREATE TABLE myEmp(empID number(4), name varchar2(20), sal number(6), job varchar2(10), dept number(2)); 先建一張空表;

SQL>INSERT INTO myEmp(empID, name, sal, job, dept) SELECT empno, ename, sal, job, deptno FROM emp WHERE deptno=10; 再將emp表中部門號為10的數據插入到新表myEmp中,實現數據的批量查詢。

5.11 使用了查詢更新表中的數據

SQL>UPDATE emp SET(job, sal, comm)=(SELECT job, sal, comm FROM emp where ename='SMITH') WHERE ename='SCOTT';

簡介

SQL語言1974年由Boyce和Chamberlin提出,並首先在IBM公司研製的關系資料庫系統SystemR上實現。由於它具有功能豐富、使用方便靈活、語言簡潔易學等突出的優點,深受計算機工業界和計算機用戶的歡迎。1980年10月,經美國國家標准局(ANSI)的資料庫委員會X3H2批准,將SQL作為關系資料庫語言的美國標准,同年公布了標准SQL,此後不久,國際標准化組織(ISO)也作出了同樣的決定。

SQL從功能上可以分為3部分:數據定義、數據操縱和數據控制。

SQL的核心部分相當於關系代數,但又具有關系代數所沒有的許多特點,如聚集、資料庫更新等。它是一個綜合的、通用的、功能極強的關系資料庫語言。其特點是:

1、數據描述、操縱、控制等功能一體化。

2、兩種使用方式,統一的語法結構。SQL有兩種使用方式。一是聯機交互使用,這種方式下的SQL實際上是作為自含型語言使用的。另一種方式是嵌入到某種高級程序設計語言(如C語言等)中去使用。前一種方式適合於非計算機專業人員使用,後一種方式適合於專業計算機人員使用。盡管使用方式不向,但所用語言的語法結構基本上是一致的。

3、高度非過程化。SQL是一種第四代語言(4GL),用戶只需要提出「干什麼」,無須具體指明「怎麼干」,像存取路徑選擇和具體處理操作等均由系統自動完成。

4、語言簡潔,易學易用。盡管SQL的'功能很強,但語言十分簡潔,核心功能只用了9個動詞。SQL的語法接近英語口語,所以,用戶很容易學習和使用。

功能

SQL具有數據定義、數據操縱、和數據控制的功能。

1、SQL數據定義功能:能夠定義資料庫的三級模式結構,即外模式、全局模式和內模式結構。在SQL中,外模式又叫做視圖(View),全局模式簡稱模式(Schema),內模式由系統根據資料庫模式自動實現,一般無需用戶過問。

2、SQL數據操縱功能:包括對基本表和視圖的數據插入、刪除和修改,特別是具有很強的數據查詢功能。

3、SQL的數據控制功能:主要是對用戶的訪問許可權加以控制,以保證系統的安全性。

語句結構

結構化查詢語言包含6個部分:

1、數據查詢語言(DQL: Data Query Language):其語句,也稱為「數據檢索語句」,用以從表中獲得數據,確定數據怎樣在應用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其它類型的SQL語句一起使用。

2、數據操作語言(DML:Data Manipulation Language):其語句包括動詞INSERT、UPDATE和DELETE。它們分別用於添加、修改和刪除。

3、事務控制語言(TCL):它的語句能確保被DML語句影響的表的所有行及時得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存點)命令、ROLLBACK(回滾)命令。

4、數據控制語言(DCL):它的語句通過GRANT或REVOKE實現許可權控制,確定單個用戶和用戶組對資料庫對象的訪問。某些RDBMS可用GRANT或REVOKE控制對表單個列的訪問。

5、數據定義語言(DDL):其語句包括動詞CREATE,ALTER和DROP。在資料庫中創建新表或修改、刪除表(CREATE TABLE 或 DROP TABLE);為表加入索引等。

6、指針控制語言(CCL):它的語句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用於對一個或多個表單獨行的操作。

語言特點

SQL風格統一

SQL可以獨立完成資料庫生命周期中的全部活動,包括定義關系模式、錄入數據、建立資料庫、査詢、更新、維護、資料庫重構、資料庫安全性控制等一系列操作,這就為資料庫應用系統開發提供了良好的環境,在資料庫投入運行後,還可根據需要隨時逐步修改模式,且不影響資料庫的運行,從而使系統具有良好的可擴充性。

高度非過程化

非關系數據模型的數據操縱語言是面向過程的語言,用其完成用戶請求時,必須指定存取路徑。而用SQL進行數據操作,用戶只需提出「做什麼」,而不必指明「怎麼做」,因此用戶無須了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統自動完成。這不但大大減輕了用戶負擔,而且有利於提高數據獨立性。

面向集合的操作方式

SQL採用集合操作方式,不僅查找結果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合。

以同一種語法結構提供兩種使用方式

SQL既是自含式語言,又是嵌入式語言。作為自含式語言,它能夠獨立地用於聯機交互的使用方式,用戶可以在終端鍵盤上直接輸入SQL命令對資料庫進行操作。作為嵌入式語言,SQL語句能夠嵌入到高級語言(如C、C#、JAVA)程序中,供程序員設計程序時使用。而在兩種不同的使用方式下,SQL的語法結構基本上是一致的。這種以統一的語法結構提供兩種不同的操作方式,為用戶提供了極大的靈活性與方便性。

語言簡潔,易學易用

SQL功能極強,但由於設計巧妙,語言十分簡潔,完成數據定義、數據操縱、數據控制的核心功能只用了9個動詞:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL語言語法簡單,接近英語口語,因此容易學習,也容易使用。

;

E. SQL語句怎樣查詢一個范圍

SQL語句通過「BETWEEN…AND…」語法來查詢一個范圍。

WHERE子句設置查詢條件,過濾掉不需要的數據行。其范圍運算符「BETWEEN…AND…」表示表達式值是否在指定的范圍內,類似的「NOT BETWEEN…AND…」表示表達式值是否不在指定的范圍內。

例如:SELECT * FROM user WHERE age BETWEEN 10 AND 30,用於查詢出user表中age值介於10~30間的數據記錄。

(5)精通sql結構化查詢語言詳解pdf擴展閱讀:

SQL中WHERE子句其它運算符:

1、比較運算符

>、>=、=、<、<=、<>

2、列表運算符

IN (項1,項2……)

NOT IN (項1,項2……)

3、模式匹配符

LIKE、NOT LIKE

4、空值判斷符

IS NULL、IS NOT NULL

5、邏輯運算符

NOT、AND、OR