當前位置:首頁 » 編程語言 » sql語句實例手冊
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql語句實例手冊

發布時間: 2023-05-18 11:00:17

sql語句實現

這是個sql語句的基本學習手冊
你可以自己查一下

SQL語句學習手冊實例版

表操作

例 1 對於表的教學管理資料庫中的表 STUDENTS ,可以定義如下:
CREATE TABLE STUDENTS
(SNO NUMERIC (6, 0) NOT NULL
SNAME CHAR (8) NOT NULL
AGE NUMERIC(3,0)
SEX CHAR(2)
BPLACE CHAR(20)
PRIMARY KEY(SNO))
例 2 對於表的教學管理資料庫中的表 ENROLLS ,可以定義如下:
CREATE TABLE ENROLLS
(SNO NUMERIC(6,0) NOT NULL
CNO CHAR(4) NOT NULL
GRADE INT
PRIMARY KEY(SNO,CNO)
FOREIGN KEY(SNO) REFERENCES STUDENTS(SNO)
FOREIGN KEY(CNO) REFERENCES COURSES(CNO)
CHECK ((GRADE IS NULL) OR (GRADE BETWEEN 0 AND 100)))
例 3 根據表的 STUDENTS 表,建立一個只包含學號、姓名、年齡的女學生表。
CREATE TABLE GIRL
AS SELECT SNO, SNAME, AGE
FROM STUDENTS
WHERE SEX=' 女 ';
例 4 刪除教師表 TEACHER 。
DROP TABLE TEACHER
例 5 在教師表中增加住址列。
ALTER TABLE TEACHERS
ADD (ADDR CHAR(50))
例 6 把 STUDENTS 表中的 BPLACE 列刪除,並且把引用 BPLACE 列的所有視圖和約束也一起刪除。
ALTER TABLE STUDENTS
DROP BPLACE CASCADE
例 7 補充定義 ENROLLS 表的主關鍵字。
ALTER TABLE ENROLLS
ADD PRIMARY KEY (SNO,CNO) ;

視圖操作(虛表)

例 9 建立一個只包括教師號、姓名和年齡的視圖 FACULTY 。 ( 在視圖定義中不能包含 ORDER BY 子句 )
CREATE VIEW FACULTY
AS SELECT TNO, TNAME, AGE
FROM TEACHERS
例 10 從學生表、課程表和選課表中產生一個視圖 GRADE_TABLE , 它包括學生姓名、課程名和成績。
CREATE VIEW GRADE_TABLE
AS SELECT SNAME,CNAME,GRADE
FROM STUDENTS,COURSES,ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO AND
COURSES.CNO=ENROLLS.CNO
例 11 刪除視圖 GRADE_TABLE
DROP VIEW GRADE_TABLE RESTRICT

索引操作

例 12 在學生表中按學號建立索引。
CREATE UNIQUE INDEX ST
ON STUDENTS (SNO,ASC)
例 13 刪除按學號所建立的索引。
DROP INDEX ST

資料庫模式操作

例 14 創建一個簡易教學資料庫的資料庫模式 TEACHING_DB ,屬主為 ZHANG 。
CREATE SCHEMA TEACHING_DB AUTHRIZATION ZHANG
例 15 刪除簡易教學資料庫模式 TEACHING_DB 。(( 1 )選用 CASCADE ,即當刪除資料庫模式時,則本資料庫模式和其下屬的基本表、視圖、索引等全部被刪除。( 2 )選用 RESTRICT ,即本資料庫模式下屬的基本表、視圖、索引等事先已清除,才能刪除本資料庫模式,否則拒絕刪除。)
DROP SCHEMA TEACHING_DB CASCADE
單表操作

例 16 找出 3 個學分的課程號和課程名。
SELECT CNO, CNAME
FROM COURSES
WHERE CREDIT = 3
例 17 查詢年齡大於 22 歲的學生情況。
SELECT *
FROM STUDENTS
WHERE AGE > 22
例 18 找出籍貫為河北的男生的姓名和年齡。
SELECT SNAME, AGE
FROM STUDENTS
WHERE BPLACE = ' 河北 ' AND SEX = ' 男 '
例 19 找出年齡在 20 ~ 23 歲之間的學生的學號、姓名和年齡,並按年齡升序排序。 (ASC (升序)或 DESC (降序)聲明排序的方式,預設為升序。 )
SELECT SNO, SNAME, AGE
FROM STUDENTS
WHERE AGE BETWEEN 20 AND 23
ORDER BY AGE
例 20 找出年齡小於 23 歲、籍貫是湖南或湖北的學生的姓名和性別。(條件比較運算符=、< 和邏輯運算符 AND (與),此外還可以使用的運算符有:>(大於)、>=(大於等於)、<=(小於等於)、<>(不等於)、 NOT (非)、 OR (或)等。
謂詞 LIKE 只能與字元串聯用,常常是 「 <列名> LIKE pattern」 的格式。特殊字元 「_」 和 「%」 作為通配符。
謂詞 IN 表示指定的屬性應與後面的集合(括弧中的值集或某個查詢子句的結果)中的某個值相匹配,實際上是一系列的 OR (或)的縮寫。謂詞 NOT IN 表示指定的屬性不與後面的集合中的某個值相匹配。
謂詞 BETWEEN 是 「 包含於 … 之中 」 的意思。)
SELECT SNAME, SEX
FROM STUDENTS
WHERE AGE < 23 AND BPLACE LIKE' 湖% '

SELECT SNAME, SEX
FROM STUDENTS
WHERE AGE < 23 AND BPLACE IN ( ' 湖南 ' , ' 湖北 ' )
例 22 找出學生表中籍貫是空值的學生的姓名和性別。(在 SQL 中不能使用條件:<列名>= NULL 。在 SQL 中只有一個特殊的查詢條件允許查詢 NULL 值:)
SELECT SNAME, SEX
FROM STUDENTS
WHERE BPLACE IS NULL
多表操作

例 23 找出成績為 95 分的學生的姓名。(子查詢)
SELECT SNAME
FROM STUDENTS
WHERE SNO =
(SELECT SNO
FROM ENROLLS
WHERE GRADE = 95)
例 24 找出成績在 90 分以上的學生的姓名。
SELECT SNAME
FROM STUDENTS
WHERE SNO IN
(SELECT SNO
FROM ENROLLS
WHERE GRADE > 90)

SELECT SNAME
FROM STUDENTS
WHERE SNO = ANY
(SELECT SNO
FROM ENROLLS
WHERE GRADE > 90)
例 25 查詢全部學生的學生名和所學課程號及成績。(連接查詢)
SELECT SNAME, CNO, GRADE
FROM STUDENTS, ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO
例 26 找出籍貫為山西或河北,成績為 90 分以上的學生的姓名、籍貫和成績。(當構造多表連接查詢命令時,必須遵循兩條規則。第一,連接條件數正好比表數少 1 (若有三個表,就有兩個連接條件 ) ;第二,若一個表中的主關鍵字是由多個列組成,則對此主關鍵字中的每一個列都要有一個連接條件(也有少數例外情況))
SELECT SNAME, BPLACE, GRADE
FROM STUDENTS, ENROLLS
WHERE BPLACE IN (『 山西 ' , 『 河北 ') AND GRADE >= 90 AND STUDENTS.SNO=ENROLLS.SNO
例 28 查出課程成績在 80 分以上的女學生的姓名、課程名和成績。( FROM 子句中的子查詢)
SELECT SNAME,CNAME, GRADE
FROM (SELECT SNAME, CNAME , GRADE
FROM STUDENTS, ENROLLS,COURSES
WHERE SEX = ' 女 ')
AS TEMP (SNAME, CNAME,GRADE)
WHERE GRADE > 80
表達式與函數的使用

例 29 查詢各課程的學時數。(算術表達式由算術運算符+、-、 * 、/與列名或數值常量所組成。)
SELECT CNAME,COURSE_TIME = CREDIT*16
FROM COURSES
例 30 找出教師的最小年齡。(內部函數: SQL 標准中只使用 COUNT 、 SUM 、 AVG 、 MAX 、 MIN 函數,稱之為聚集函數( Set Function )。 COUNT 函數的結果是該列統計值的總數目, SUM 函數求該列統計值之和, AVG 函數求該列統計值之平均值, MAX 函數求該列最大值, MIN 函數求該列最小值。)
SELECT MIN(AGE)
FROM TEACHERS
例 31 統計年齡小於等於 22 歲的學生人數。(統計)
SELECT COUNT(*)
FROM STUDENTS
WHERE AGE < = 22
例 32 找出學生的平均成績和所學課程門數。
SELECT SNO, AVG(GRADE), COURSES = COUNT(*)
FROM ENROLLS
GROUP BY SNO

例 34 找出年齡超過平均年齡的學生姓名。
SELECT SNAME
FROM STUDENTS
WHERE AGE >
(SELECT AVG(AGE)
FROM STUDENTS)
例 35 找出各課程的平均成績,按課程號分組,且只選擇學生超過 3 人的課程的成績。( GROUP BY 與 HAVING
GROUP BY 子句把一個表按某一指定列(或一些列)上的值相等的原則分組,然後再對每組數據進行規定的操作。
GROUP BY 子句總是跟在 WHERE 子句後面,當 WHERE 子句預設時,它跟在 FROM 子句後面。
HAVING 子句常用於在計算出聚集之後對行的查詢進行控制。)
SELECT CNO, AVG(GRADE), STUDENTS = COUNT(*)
FROM ENROLLS
GROUP BY CNO
HAVING COUNT(*) >= 3

相關子查詢

例 37 查詢沒有選任何課程的學生的學號和姓名。(當一個子查詢涉及到一個來自外部查詢的列時,稱為相關子查詢( Correlated Subquery) 。相關子查詢要用到存在測試謂詞 EXISTS 和 NOT EXISTS ,以及 ALL 、 ANY ( SOME )等。)
SELECT SNO, SNAME
FROM STUDENTS
WHERE NOT EXISTS
(SELECT *
FROM ENROLLS
WHERE ENROLLS.SNO=STUDENTS.SNO)
例 38 查詢哪些課程只有男生選讀。
SELECT DISTINCT CNAME
FROM COURSES C
WHERE ' 男 ' = ALL
(SELECT SEX
FROM ENROLLS , STUDENTS
WHERE ENROLLS.SNO=STUDENTS.SNO AND
ENROLLS.CNO=C.CNO)
例 39 要求給出一張學生、籍貫列表,該表中的學生的籍貫省份,也是其他一些學生的籍貫省份。
SELECT SNAME, BPLACE
FROM STUDENTS A
WHERE EXISTS
(SELECT *
FROM STUDENTS B
WHERE A.BPLACE=B.BPLACE AND
A.SNO < > B.SNO)
例 40 找出選修了全部課程的學生的姓名。
本查詢可以改為:查詢這樣一些學生,沒有一門課程是他不選修的。
SELECT SNAME
FROM STUDENTS
WHERE NOT EXISTS
(SELECT *
FROM COURSES
WHERE NOT EXISTS
(SELECT *
FROM ENROLLS
WHERE ENROLLS.SNO = STUDENTS.SNO
AND ENROLLS.CNO = COURSES.CNO))
關系代數運算

例 41 設有某商場工作人員的兩張表:營業員表 SP_SUBORD 和營銷經理表 SP_MGR ,其關系數據模式如下:
SP_SUBORD (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
SP_MGR (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
其中,屬性 SALPERS_ID 為工作人員的編號 , SALPERS_NAME 為工作人員的姓名 , MANAGER_ID 為所在部門經理的編號 , OFFICE 為工作地點。
若查詢全部商場工作人員,可以用下面的 SQL 語句:
(SELECT * FROM SP_SUBORD)
UNION
(SELECT * FROM SP_MGR)
或等價地用下面的 SQL 語句:
SELECT *
FROM (TABLE SP_SUBORD UNION TABLE SP_MGR)
( 2 ) INTERSECT
(SELECT * FROM SP_SUBORD)
INTERSECT
(SELECT * FROM SP_MGR)
或等價地用下面的 SQL 語句:
SELECT *
FROM (TABLE SP_SUBORD INTERSECT TABLE SP_MGR)
或用帶 ALL 的 SQL 語句:
(SELECT * FROM SP_SUBORD)
INTERSECT ALL
(SELECT * FROM SP_MGR)

SELECT *
FROM (TABLE SP_SUBORD INTERSECT ALL TABLE SP_MGR)
( 3 ) EXCEPT
(SELECT * FROM SP_MGR)
EXCEPT
(SELECT * FROM SP_SUBORD)
或等價地用下面的 SQL 語句:
SELECT *
FROM (TABLE SP_MGR EXCEPT TABLE SP_ SUBORD)
或用帶 ALL 的 SQL 語句:
(SELECT * FROM SP_MGR)
EXCEPT ALL
(SELECT * FROM SP_SUBORD)
例 42 查詢籍貫為四川、課程成績在 80 分以上的學生信息及其成績。(自然連接)
(SELECT * FROM STUDENTS
WHERE BPLACE=『 四川 ')
NATURAL JOIN
(SELECT * FROM ENROLLS
WHERE GRADE >=80)
例3.43 列出全部教師的姓名及其任課的課程號、班級。
(外連接與外部並外連接允許在結果表中保留非匹配元組,空缺部分填以 NULL 。外連接的作用是在做連接操作時避免丟失信息。
外連接有 3 類:
( 1 )左外連接( Left Outer Join )。連接運算謂詞為 LEFT [OUTER] JOIN ,其結果表中保留左關系的所有元組。
( 2 )右外連接( Right Outer Join )。連接運算謂詞為 RIGHT [OUTER] JOIN ,其結果表中保留右關系的所有元組。
( 3 )全外連接( Full Outer Join )。連接運算謂詞為 FULL [OUTER] JOIN ,其結果表中保留左右兩關系的所有元組。)
SELECT TNAME, CNO, CLASS
FROM TEACHERS LEFT OUTER JOIN TEACHING USING (TNO)

SQL 的數據操縱

例 44 把教師李映雪的記錄加入到教師表 TEACHERS 中。(插入)
INSERT INTO TEACHERS
VALUES(1476 , ' 李映雪 ' , 44 , ' 副教授 ')
例 45 成績優秀的學生將留下當教師。
INSERT INTO TEACHERS (TNO , TNAME)
SELECT DISTINCT SNO , SNAME
FROM STUDENTS , ENROLLS
WHERE STUDENTS.SNO = ENROLLS.SNO AND GRADE >= 90
例 47 把所有學生的年齡增加一歲。(修改)
UPDATE STUDENTS
SET AGE = AGE+1
例 48 學生張春明在資料庫課考試中作弊,該課成績應作零分計。
UPDATE ENROLLS
SET GRADE = 0
WHERE CNO = 'C1' AND
' 張春明 ' =
(SELECT SNAME
FROM STUDENTS
WHERE STUDENTS.SNO=ENROLLS.SNO)
例 49 從教師表中刪除年齡已到 60 歲的退休教師的數據。(刪除)
DELETE FROM TEACHERS
WHERE AGE >= 60

SQL 的數據控制

例 50 授予 LILI 有對表 STUDENTS 的查詢權。(表/視圖特權的授予
一個 SQL 特權允許一個被授權者在給定的資料庫對象上進行特定的操作。授權操作的資料庫對象包括:表 / 視圖、列、域等。授權的操作包括: INSERT 、 UPDATE 、 DELETE 、 SELECT 、 REFERENCES 、 TRIGGER 、 UNDER 、 USAGE 、 EXECUTE 等。其中 INSERT 、 UPDATE 、 DELETE 、 SELECT 、 REFERENCES 、 TRIGGER 有對表做相應操作的許可權,故稱為表特權。)
GRANT SELECT ON STUDENTS
TO LILI
WITH GRANT OPTION
例 51 取消 LILI 的存取 STUDENTS 表的特權。
REVOKE ALL
ON STUDENTS
FROM LILI CASCADE

❷ SQL語法範例大全的前 言

資料庫技術已成為信息時代計算機技術的重要組成部分,而目前廣泛使用的關系資料庫已經成為資料庫系統的主流,SQL(Structured Query Language,結構化查詢語言)是關系資料庫系統最常用的語言。
本書全面系統地介紹了SQL的基本語法,並以目前流行的資料庫SQL Server 2005/2008和Oracle 9i/10g/11g為基礎,結合作者多年的資料庫系統管理經驗,介紹了用SQL管理和開發這兩大關系資料庫的實際應用操作,包含了大量的應用示例,可供讀者在學習和工作中引用。
本書讀者
本書內容涵蓋了與資料庫系統管理和開發有關的常見內容和操作,非常適合需要使用SQL的各層次的讀者,包括下列使用對象:
(1)SQL的初學者和計算機愛好者
本書講述了SQL大量的基礎內容,又有大量示例,非常適合初學者使用。
(2)高等學校或職業技術學校計算機專業教師和學生
本書講解由淺入深,非常適合高等學校和職業技術學校計算機專業教師和學生學習和參考使用。
(3)資料庫管理及其應用、軟體設計和開發人員
本書介紹了SQL語句在兩種主流關系資料庫SQL Server和Oracle中的實現,同時,介紹了在進行資料庫管理中通常需要的SQL腳本操作,可作為資料庫管理及開發人員的參考手冊。
(4)系統分析人員
資料庫規劃和管理技術是系統分析人員應該掌握的重點內容,本書介紹了各類常見關系資料庫的基礎知識,並分析和比較了它們之間的主要特點和異同點,同時也介紹了SQL在資料庫系統分析中的編程知識,因此該書也可以作為系統分析人員重要的參考資料。
本書特點
(1)結構清晰,內容全面
本書按照關系資料庫基礎、SQL基礎、SQL與關系資料庫的關系、SQL語法、SQL擴展、SQL編程、SQL在資料庫中的應用和資料速查內容為線索進行介紹,採用「方法、語法、示例、運行結果、注意事項」的順序結構進行闡述,具有很強的條理性和易讀性。
(2)方法多樣,實例豐富
本書針對特定的知識點介紹了能實現特定功能的各種方法,包括資料庫的企業管理器工具法、SQL命令法等,目的是讓讀者既能掌握SQL語法知識,又能掌握資料庫的操作技能,而且還能比較同一種功能採用多種實現方法的異同點,掌握在SQL Server和Oracle這兩種資料庫環境下SQL的差別。
本書共包括大小實例721個,使讀者在學習SQL原理的同時能夠掌握其用法,大部分實例還可以用於SQL Server和Oracle資料庫的實際管理,這些實例是作者多年從事資料庫和類UNIX系統管理的經驗積累,具有相當大的使用價值。
(3)既可以作為教材使用,又可以通過手冊進行快速查閱
本書以教材的形式全面系統地介紹了SQL以及SQL Server和Oracle資料庫系統管理的知識點,同時,又在實現方法、SQL語法、SQL語句、SQL函數、資料庫系統參數和應用示例等方面提供了詳細的介紹,並且提供快速索引,方便讀者查閱。
綜上所述,與其他同類書籍相比,本書具有方法全、內容全、實例全、參數全、查閱全的典型特點。
本書內容
本書內容涵蓋了SQL、關系資料庫基本理論、SQL Server資料庫、Oracle資料庫、MS VS.NET等資料庫軟體開發平台和工具的知識點與實際應用操作。
全書包括附錄共分為8大部分,共29章。
第1篇 SQL及關系資料庫概述(第1章~第3章)
第1章 關系資料庫概述。主要介紹了資料庫和關系資料庫的基本概念、關系模型以及兩種關系資料庫:桌面關系資料庫和網路關系資料庫和常用的10種關系型資料庫系統
第2章 SQL概述。介紹了SQL的概念、基本功能、SQL標准和版本、SQL基本語法
第3章 SQL擴展、工具及範例資料庫介紹。介紹了常用的關系資料庫系統SQL Server和Oracle的基本情況及其支持的SQL擴展語言Transact-SQL和PL/SQL的基本概念和主要內容。同時介紹了Transact-SQL和PL/SQL的支持環境和常用工具的用法,包括SQLCMD、SQL Server查詢分析、Oracle企業管理器EM、Oracle SQL * Plus、iSQL * Plus、PL/SQL Developer和TOAD專業工具
第2篇 SQL運算符和函數(第4章~第5章)
第4章 SQL運算符。介紹了SQL的各種操作運算符,包括算術、字元串、賦值、比較、邏輯、集合和一元運算操作符
第5章 函數。介紹了算術、字元、日期、類型轉換、統計(聚合)函數和兩種資料庫的常用系統函數
第3篇 數據查詢操作(第6章~第9章)
第6章 簡單查詢。介紹了SQL查詢語句(SELECT語句)的基本語法結構和執行步驟、常用的簡單查詢操作
第7章 連接查詢。介紹了表的自連接、自然連接、內連接和外連接。其中內連接介紹了等值連接和不等值連接兩種基本形式;外連接介紹了左外連接、右外連接和全外連接
第8章 集合查詢。介紹了並集、交集和差集的基本概念和應用操作
第9章 子查詢。介紹了子查詢的基本概念和操作,包括單行、多行、多列、相關和嵌套子查詢等內容
第4篇 數據更新操作(第10章~第15章)
第10章 資料庫操作。介紹了資料庫的創建、查找、修改和刪除的幾種實現方法以及SQL語句操作
第11章 方案操作。介紹了方案的創建、查找、修改和刪除的幾種實現方法以及SQL語句操作
第12章 數據表操作。介紹了數據表、表記錄、表結構的創建、查找、修改、復制和刪除的幾種實現方法以及SQL語句操作
第13章 索引操作。介紹了索引的創建、查找、修改、禁用、啟用和刪除的幾種實現方法以及SQL語句操作
第14章 視圖操作。介紹了視圖的創建、查找、修改和刪除的幾種實現方法以及SQL語句操作
第15章 序列操作。介紹了序列的創建、查找、使用和刪除的幾種實現方法以及SQL語句操作
第5篇 數據安全管理(第16章~第19章)
第16章 完整性約束。介紹了與表有關的約束:NOT NULL約束、UNIQUE約束、PRIMARY KEY約束、FOREIGN KEY約束和CHECK約束、域約束以及斷言的創建、查找、修改、使用和刪除的幾種實現方法以及SQL語句操作
第17章 用戶管理。介紹了用戶的創建、查找、修改、刪除的幾種實現方法和SQL語句操作以及許可權的查找、授權、收回等操作
第18章 角色管理。介紹了角色的創建、查找、修改、刪除的幾種實現方法和SQL語句操作以及許可權的查找、授權、收回等操作
第19章 許可權管理。介紹了許可權的分類、查找、授權、收回等操作
第6篇 SQL編程(第20章~第25章)
第20章 事務控制與並發處理。介紹了事務的概念、事務控制的實現以及多用戶讀寫訪問資料庫的並發控制、事務的開始和終止操作,最後還介紹了在SQL Server和Oracle資料庫中並發控制的具體應用、實現和比較
第21章 存儲過程。介紹了存儲過程的創建、查找、修改、調用、重編譯、刪除的幾種實現方法和SQL語句操作,還詳細介紹了存儲過程在SQL Server和Oracle資料庫中的應用
第22章 存儲函數。介紹了存儲函數的創建、查找、修改、調用、重編譯、刪除的幾種實現方法和SQL語句操作,還詳細介紹了存儲函數在SQL Server和Oracle資料庫中的應用
第23章 觸發器。介紹了SQL中觸發器的有關概念、創建、查找、修改、禁用、啟用和刪除的幾種實現方法以及SQL語句操作,還詳細介紹了觸發器在SQL Server和Oracle資料庫中的應用
第24章 游標。介紹了SQL中游標的基本概念、各種游標的定義、查找、打開、數據提取、關閉和刪除的幾種實現方法以及SQL語句操作、游標循環和嵌套的具體內容,還詳細介紹了游標在SQL Server和Oracle資料庫中的應用
第25章 錯誤和異常處理。介紹了錯誤與異常分類、SQL Server和Oracle資料庫中的錯誤與異常處理
第7篇 SQL在資料庫開發和管理中的應用(第26章~第29章)
第26章 嵌入式SQL。介紹了嵌入式SQL的基本概念、原理、與高級語言的通信方法、動態SQL技術,還詳細介紹了利用C語言中嵌入SQL語句在VC++、VC#中訪問SQL Server和Oracle的連接訪問實現過程
第27章 資料庫的存取訪問技術。介紹了資料庫系統的開發環境、應用系統的典型結構、各種資料庫軟體開發平台和工具、MS VS.NET和J2EE兩種流行的開發平台的比較、資料庫的連接訪問技術,包括OLE-DB、ODBC、JDBC、ADO、ADO.NET。還詳細介紹了用ASP、ASP.NET、VB.NET、VC#.NET與TEXT、Excel文件以及Access、SQL Server、Oracle資料庫連接的訪問方法
第28章 用SQL管理SQL Server資料庫。介紹了用SQL結合SQL Server資料庫的系統表和系統存儲過程管理SQL Server資料庫及伺服器的屬性、資料庫對象以及賬戶、角色和許可權等內容
第29章 用SQL管理Oracle資料庫。介紹了用SQL管理Oracle資料庫及伺服器的屬性、資料庫連接、會話、進程、表空間和數據文件、數據表、索引、存儲過程、存儲函數、觸發器、用戶、角色、許可權、事務與鎖和內存參數等內容
第8篇 附錄(附錄A~附錄E)
為便於讀者對常用資料的查閱,特將下列內容作為附錄內容進行了收集和整理:
 SQL常用語句分類索引
 SQL、SQL Server、Oracle常用函數分類對照索引
 SQL Server常用系統表和系統存儲過程索引
 Oracle資料庫常用視圖索引
 Oracle資料庫系統環境變數參數
技術支持
希賽是中國領先的互聯網技術和IT教育公司,在互聯網服務、圖書出版、人才培養方面,希賽始終保持IT業界的領先地位。希賽對國家信息化建設和軟體產業化發展具有強烈的使命感,利用希賽網(www.csai.cn)強大的平台優勢,加強與促進IT人士之間的信息交流和共享,實現IT價值。「希賽,影響IT」是全體希賽人不懈努力和追求的目標!
希賽網以希賽顧問團為技術依託,是中國最大的IT資源平台。希賽IT教育研發中心是希賽公司下屬的一個專門從事IT教育、教育產品開發、教育書籍編寫的部門,在IT教育方面具有極高的權威性。在國家權威機構發布的《計算機圖書出版市場綜述》中,稱贊希賽叢書為讀者所稱道,希賽的圖書已經形成品牌,在讀者心目中具有良好的形象。
有關本書的意見反饋和咨詢,讀者可在學賽網社區「書評在線」版塊中與作者進行交流,讀者也可就書中的問題提出意見,由於作者水平有限,錯誤在所難免,望讀者不吝賜教。
本書由黃少華和陳翠娥編著,鄧子雲主審。同時,希賽公司梁賽編輯提供了許多的幫助。還有劉健等幾位好友也提供了支持和很好的參考意見,在此一並表示衷心的感謝。
編者 著
2008年8月

❸ MySql 比較全面的sql語句,誰有

SQL分類:
DDL—數據定義語言(CREATE,ALTER,DROP,DECLARE)
DML—數據操縱語言(SELECT,DELETE,UPDATE,INSERT)
DCL—數據控制語言(GRANT,REVOKE,COMMIT,ROLLBACK)
首先,簡要介紹基礎語句:
1、說明:創建資料庫
CREATE DATABASE database-name
2、說明:刪除資料庫
drop database dbname
3、說明:備份sql server
--- 創建 備份數據的 device
USE master
EXEC sp_admpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'
--- 開始 備份
BACKUP DATABASE pubs TO testBack
4、說明:創建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根據已有的表創建新表:
A:create table tab_new like tab_old (使用舊表創建新表)
B:create table tab_new as select col1,col2… from tab_old definition only
5、說明:刪除新表drop table tabname
6、說明:增加一個列
Alter table tabname add column col type
註:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。
7、說明:添加主鍵: Alter table tabname add primary key(col)
說明:刪除主鍵: Alter table tabname drop primary key(col)
8、說明:創建索引:create [unique] index idxname on tabname(col….)
刪除索引:drop index idxname
註:索引是不可更改的,想更改必須刪除重新建。
9、說明:創建視圖:create view viewname as select statement
刪除視圖:drop view viewname
10、說明:幾個簡單的基本的sql語句
選擇:select * from table1 where 范圍
插入:insert into table1(field1,field2) values(value1,value2)
刪除:delete from table1 where 范圍
更新:update table1 set field1=value1 where 范圍
查找:select * from table1 where field1 like 』%value1%』 ---like的語法很精妙,查資料!
排序:select * from table1 order by field1,field2 [desc]
總數:select count * as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、說明:幾個高級查詢運算詞
A: UNION 運算符
UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重復行而派生出一個結果表。當 ALL 隨 UNION 一起使用時
(即 UNION ALL),不消除重復行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。
B: EXCEPT 運算符
EXCEPT 運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重復行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時
(EXCEPT ALL),不消除重復行。
C: INTERSECT 運算符
INTERSECT 運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重復行而派生出一個結果表。當 ALL 隨 INTERSECT 一起使用時
(INTERSECT ALL),不消除重復行。
註:使用運算詞的幾個查詢結果行必須是一致的。
12、說明:使用外連接
A、left outer join:
左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
B:right outer join:
右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。
C:full outer join:
全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。
其次,大家來看一些不錯的sql語句
1、說明:復製表(只復制結構,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a
2、說明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from a;
3、說明:跨資料庫之間表的拷貝(具體數據使用絕對路徑) (Access可用)
insert into b(a, b, c) select d,e,f from b in 『具體資料庫』 where 條件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..
4、說明:子查詢(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)
5、說明:顯示文章、提交人和最後回復時間
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
6、說明:外連接查詢(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
7、說明:在線視圖查詢(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;
8、說明:between的用法,between限制查詢數據范圍時包括了邊界值,not between不包括
select * from table1 where time between time1 and time2
select a,b,c, from table1 where a not between 數值1 and 數值2
9、說明:in 的使用方法
select * from table1 where a [not] in (『值1』,』值2』,』值4』,』值6』)
10、說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )
11、說明:四表聯查問題:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....
12、說明:日程安排提前五分鍾提醒
SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5
13、說明:一條sql 語句搞定資料庫分頁
select top 10 b.* from (select top 20 主鍵欄位,排序欄位 from 表名 order by 排序欄位 desc) a,表名 b where b.主鍵欄位 = a.主鍵
欄位 order by a.排序欄位
14、說明:前10條記錄
select top 10 * form table1 where 范圍
15、說明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目
成績排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)
16、說明:包括所有在 TableA 中但不在 TableB和TableC 中的行並消除所有重復行而派生出一個結果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)
17、說明:隨機取出10條數據
select top 10 * from tablename order by newid()
18、說明:隨機選擇記錄
select newid()
19、說明:刪除重復記錄
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
20、說明:列出資料庫里所有的表名
select name from sysobjects where type='U'
21、說明:列出表裡的所有的
select name from syscolumns where id=object_id('TableName')
22、說明:列示type、vender、pcs欄位,以type欄位排列,case可以方便地實現多重選擇,類似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when
'B' then pcs else 0 end) FROM tablename group by type
顯示結果:
type vender pcs
電腦 A 1
電腦 A 1
光碟 B 2
光碟 A 2
手機 B 3
手機 C 3
23、說明:初始化表table1
TRUNCATE TABLE table1
24、說明:選擇從10到15的記錄
select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc

❹ SQL基本語句

掌握SQL四條最基本的數據*作語句 Insert Select Update和Delete 練掌握SQL是資料庫用戶的寶貴財 富 在本文中 我們將引導你掌握四條最基本的數據*作語句—SQL的核心功能—來依次介紹比較*作符 選擇斷言以及三值邏輯 當你完成這些學習後 顯然你已經開始算是精通SQL了 在我們開始之前 先使用CREATE TABLE語句來創建一個表 DDL語句對資料庫對象如表 列和視進行定義 它們並不對表中的行進行處理 這是因為DDL語句並不處理資料庫中實際的數據 這些工作由另一類SQL語句—數據*作語言(DML)語句進行處理 SQL中有四種基本的DML*作 INSERT SELECT UPDATE和DELETE 由於這是大多數SQL用戶經常用到的 我們有必要在此對它們進行一一說明 我們給出了一個名為EMPLOYEES的表 其中的每一行對應一個特定的雇員記錄 請熟悉這張表 我們在後面的例子中將要用到它 INSERT語句用戶可以用INSERT語句將一行記錄插入到指定的一個表中 例如 要將雇員John Smith的記錄插入到本例的表中 可以使用如下語句 INSERT INTO EMPLOYEES VALUES ( Smith John Los Angles );通過這樣的INSERT語句 系統將試著將這些值填入到相應的列中 這些列按照我們創建表時定義的順序排列 在本例中 第一個值 Smith 將填到第一個列LAST_NAME中 第二個值 John 將填到第二列FIRST_NAME中……以此類推 我們說過系統會 試著 將值填入 除了執行規則之外它還要進行類型檢查 如果類型不符(如將一個字元串填入到類型為數字的列中) 系統將拒絕這一次*作並返回一個錯誤信息 如果SQL拒絕了你所填入的一列值 語句中其他各列的值也不會填入 這是因為SQL提供對事務的支持 一次事務將資料庫從一種一致性轉移到另一種一致性 如果事務的某一部分失敗 則整個事務都會失敗 系統將會被恢復(或稱之為回退)到此事務之前的狀態 回到原來的INSERT的例子 請注意所有的整形十進制數都不需要用單引號引起來 而字元串和日期類型的值都要用單引號來區別 為了增加可讀性而在數字間插入逗號將會引起錯誤 記住 在SQL中逗號是元素的分隔符 同樣要注意輸入文字值時要使用單引號 雙引號用來封裝限界標識符 對於日期類型 我們必須使用SQL標准日期格式(yyyy mm dd) 但是在系統中可以進行定義 以接受其他的格式 當然 年臨近 請你最好還是使用四位來表示年份 既然你已經理解了INSERT語句是怎樣工作的了 讓我們轉到EMPLOYEES表中的其他部分 INSERT INTO EMPLOYEES VALUES ( Bunyan Paul Boston );INSERT INTO EMPLOYEES VALUES ( John Adams Boston );INSERT INTO EMPLOYEES VALUES ( Smith Pocahontas Los Angles );INSERT INTO EMPLOYEES VALUES ( Smith Bessie Boston );INSERT INTO EMPLOYEES VALUES ( Jones Davy Boston );INSERT INTO EMPLOYEES VALUES ( Jones Indiana Chicago NULL NULL);在最後一項中 我們不知道Jones先生的工薪級別和年薪 所以我們輸入NULL(不要引號) NULL是SQL中的一種特殊情況 我們以後將進行詳細的討論 現在我們只需認為NULL表示一種未知的值 有時 像我們剛才所討論的情況 我們可能希望對某一些而不是全部的列進行賦值 除了對要省略的列輸入NULL外 還可以採用另外一種INSERT語句 如下 INSERT INTO EMPLOYEES( FIRST_NAME LAST_NAME HIRE_DATE BRANCH_OFFICE)VALUE( Indiana Jones Indianapolis );這樣 我們先在表名之後列出一系列列名 未列出的列中將自動填入預設值 如果沒有設置預設值則填入NULL 請注意我們改變了列的順序 而值的順序要對應新的列的順序 如果該語句中省略了FIRST_NAME和LAST_NAME項(這兩項規定不能為空) SQL*作將失敗 讓我們來看一看上述INSERT語句的語法圖 INSERT INTO table [(column { column})]VALUES (columnvalue [{ columnvalue}]);和前一篇文?幸謊頤怯梅嚼ê爬幢硎究裳∠睿罄ê瘧硎究梢災馗慈我獯問南睿ú荒茉謔導實腟QL語句中使用這些特殊字元) VALUE子句和可選的列名列表中必須使用圓括弧 SELECT語句SELECT語句可以從一個或多個表中選取特定的行和列 因為查詢和檢索數據是資料庫管理中最重要的功能 所以SELECT語句在SQL中是工作量最大的部分 實際上 僅僅是訪問資料庫來分析數據並生成報表的人可以對其他SQL語句一竅不通 SELECT語句的結果通常是生成另外一個表 在執行過程中系統根據用戶的標准從資料庫中選出匹配的行和列 並將結果放到臨時的表中 在直接SQL(direct SQL)中 它將結果顯示在終端的顯示屏上 或者將結果送到列印機或文件中 也可以結合其他SQL語句來將結果放到一個已知名稱的表中 SELECT語句功能強大 雖然表面上看來它只用來完成本文第一部分中提到的關系代數運算 選擇 (或稱 限制 ) 但實際上它也可以完成其他兩種關系運算— 投影 和 連接 SELECT語句還可以完成聚合計算並對數據進行排序 SELECT語句最簡單的語法如下 SELECT columns FROM tables;當我們以這種形式執行一條SELECT語句時 系統返回由所選擇的列以及用戶選擇的表中所有指定的行組成的一個結果表 這就是實現關系投影運算的一個形式 讓我們看一下使用EMPLOYEES表的一些例子(這個表是我們以後所有SELECT語句實例都要使用的 而我們在圖 和圖 中給出了查詢的實際結果 我們將在其他的例子中使用這些結果) 假設你想查看雇員工作部門的列表 那下面就是你所需要編寫的SQL查詢 SELECT BRANCH_OFFICE FROM EMPLOYEES;由於我們在SELECT語句中只指定了一個列 所以我們的結果表中也只有一個列 注意結果表中具有重復的行 這是因為有多個雇員在同一部門工作(記住SQL從所選的所有行中將值返回) 要消除結果中的重復行 只要在SELECT語句中加上DISTINCT子句 SELECT DISTINCT BRANCH_OFFICEFROM EMPLOYEES;現在已經消除了重復的行 但結果並不是按照順序排列的 如果你希望以字母表順序將結果列出又該怎麼做呢?只要使用ORDER BY子句就可以按照升序或降序來排列結果 SELECT DISTINCT BRANCH_OFFICEFROM EMPLOYEESORDER BY BRANCH_OFFICE ASC;這一查詢的結果如表 所示 請注意在ORDER BY之後是如何放置列名BRANCH _OFFICE的 這就是我們想要對其進行排序的列 為什麼即使是結果表中只有一個列時我們也必須指出列名呢?這是因為我們還能夠按照表中其他列進行排序 即使它們並不顯示出來 列名BRANCH_ OFFICE之後的關鍵字ASC表示按照升序排列 如果你希望以降序排列 那麼可以用關鍵字DESC 同樣我們應該指出ORDER BY子句只將臨時表中的結果進行排序 並不影響原來的表 假設我們希望得到按部門排序並從工資最高的雇員到工資最低的雇員排列的列表 除了工資括弧中的內容 我們還希望看到按照聘用時間從最近聘用的雇員開始列出的列表 以下是你將要用到的語句 SELECT BRANCH_OFFICE FIRST_NAME LAST_NAME SALARY HIRE_DATEFROM EMPLOYEESORDER BY SALARY DESC HIRE_DATE DESC;這里我們進行了多列的選擇和排序 排序的優先順序由語句中的列名順序所決定 SQL將先對列出的第一個列進行排序 如果在第一個列中出現了重復的行時 這些行將被按照第二列進行排序 如果在第二列中又出現了重復的行時 這些行又將被按照第三列進行排序……如此類推 這次查詢的結果如表 所示 將一個很長的表中的所有列名寫出來是一件相當麻煩的事 所以SQL允許在選擇表中所有的列時使用*號 SELECT * FROM EMPLOYEES;這次查詢返回整個EMPLOYEES表 如表 所示 下面我們對開始時給出的SELECT語句的語法進行一下更新(豎直線表示一個可選項 允許在其中選擇一項 ) SELECT [DISTINCT] (column [{ columns}])| *FROM table [ { table}] <b lishixin/Article/program/Oracle/201311/18760

❺ SQL完全手冊的目錄

第一部分 引言
第1章 SQL簡介
第2章 網球俱樂部示例資料庫
第3章 安裝軟體
第4章 SQL概覽
第二部分 查詢與更新數據
第5章 SELECT語句:共用元素
第6章 SELECT語句、表表達式和子查詢
第7章 SELECT語句:FROM從句
第8章 SELECT語句:WHERE從句
第9章 SELECT語句:SELECT從句和聚合函數
第10章 SELECT語句:GROUP BY從句
第11章 SELECT語句:HAVING從句
第12章 SELECT語句:ORDER BY從句
第13章 合並表表達式
第14章 更新表
第三部分 創建資料庫對象
第15章 創建表
第16章 指定完整性約束
第17章 字元集與整理序列
第18章 更改和刪除表
第19章 設計表
第20章 使用索引
第21章 視圖
第22章 創建資料庫
第23章 用戶和數據安全
第24章 創建序列
第25章 創建方案
第四部分 SQL編程
第26章 嵌入式SQL簡介
第27章 事務與多用戶用途
第28章 ODBC簡介
第29章 語句的優化
第五部分 過程資料庫對象
第30章 存儲過程
第31章 存儲函數
第32章 觸發器
第六部分 對象關系概念
第33章 用戶定義數據類型、函數和運算符
第34章 繼承、引用和集合
第35章 SQL之未來
附錄A SQL的語法
附錄B 標量函數
附錄C 參考文獻

❻ 一些有用的sql語句實例


1Examples
=======================================
select id,age,Fullname from tableOne a
where a.id!=(select max(id) from tableOne b where a.age=b.age and a.FullName=b.FullName)
=========================================
delete from dbo.Schele where
RoomID=29 and StartTime񟭅-08-08' and EndTime񟭆-09-01' and Remark like 'preset' and UserID=107
and ((ScheleID=3177 and ScheleID=3202 )
or (ScheleID=3229 and ScheleID=3254)
or (ScheleID=3307 and ScheleID=3332)
=========================================
delete tableOne
where tableOne.id!=(select max(id) from tableOne b where tableOne.age=b.age and tableOne.FullName=b.FullName);
==========================================
DataClient12/23/2005 5:03:38 PM
select top 5
DOC_MAIN.CURRENT_VERSION_NO as Version, DOC_MAIN.MODIFY_DATE as ModifyDT, DOC_MAIN.SUMMARY as Summary, DOC_MAIN.AUTHOR_EMPLOYEE_NAME as AuthorName, DOC_MAIN.TITLE as Title, DOC_MAIN.DOCUMENT_ID as DocumentID,Attribute.ATTRIBUTE_ID as AttributeId, Attribute.CATALOG_ID as CatalogId,DOC_STATISTIC.VISITE_TIMES as VisiteTimes, DOC_STATISTIC.DOCUMENT_ID as DocumentID2
from DOC_MAIN DOC_MAIN
Inner join CATALOG_SELF_ATTRIBUTE Attribute on DOC_MAIN.CATALOG_ID=Attribute.CATALOG_ID
Left join DOC_STATISTIC DOC_STATISTIC on DOC_MAIN.DOCUMENT_ID=DOC_STATISTIC.DOCUMENT_ID
where (DOC_MAIN.AUTHOR_EMPLOYEE_ID = 1) and (Attribute.ATTRIBUTE_ID = 11)
order by VisiteTimes DESC
====================================
select top 1 DOCUMENT_ID,EMPLOYEE_NAME,COMMENT_DATE,COMMENT_VALUE
from dbo.DOC_COMMENT
where DOCUMENT_ID=19 and COMMENT_DATE = (select max(COMMENT_DATE) from DOC_COMMENT where DOCUMENT_ID=19)
====================================
select TITLE, (select top 1 EMPLOYEE_NAME
from dbo.DOC_COMMENT where DOCUMENT_ID=19) Commentman,
(select top 1 COMMENT_DATE
from dbo.DOC_COMMENT where DOCUMENT_ID=19) COMMENT_DATE
from DOC_MAIN where DOCUMENT_ID=19
======================================
alter view ExpertDocTopComment
as
selectDOCUMENT_ID, max(ORDER_NUMBER ) as lastednum
from dbo.DOC_COMMENT
group by DOCUMENT_ID
go
alter view ExpertDocView
as
select TITLE, a.AUTHOR_EMPLOYEE_ID , c.EMPLOYEE_NAME , c.COMMENT_DATE
from dbo.DOC_MAINa
left join
ExpertDocTopComment b
on
a.DOCUMENT_ID = b.DOCUMENT_ID
inner join
DOC_COMMENT c
on
b.DOCUMENT_ID = c.DOCUMENT_ID and
b.lastednum = c. ORDER_NUMBER
======================================
select a.Id ,a.WindowsUsername ,
0 , 1 ,
a.Email ,
case b.EnFirstName when null then a.Username else b.EnFirstName end,
case b.EnLastName when null then a.Username else b.EnLastName end
from UUMS_KM.dbo.UUMS_User a
left join
UUMS_KM.dbo.HR_Employee b
on
a. HR_EmployeeId = b.id
=====================================
列出上傳文檔最多的五個人的ID
select AUTHOR_EMPLOYEE_ID,count(AUTHOR_EMPLOYEE_ID)
from dbo.DOC_MAIN
group by AUTHOR_EMPLOYEE_ID
order by count(AUTHOR_EMPLOYEE_ID)
27192
69
1230
1116
列出上傳文檔最多的五個人的信息
select distinct AUTHOR_EMPLOYEE_ID ,AUTHOR_EMPLOYEE_NAME
from dbo.DOC_MAIN
where AUTHOR_EMPLOYEE_ID
in (select top 5 AUTHOR_EMPLOYEE_ID
from dbo.DOC_MAIN
group by AUTHOR_EMPLOYEE_ID
order by count(AUTHOR_EMPLOYEE_ID))
=================================

❼ SQL 資料庫常用命令及語法舉例

SQL2000常用命令,語法使用方法
(1) 數據記錄篩選:

sql="select * from 數據表 where 欄位名=欄位值 order by 欄位名 [desc]"

sql="select * from 數據表 where 欄位名 like '%欄位值%' order by 欄位名 [desc]"

sql="select top 10 * from 數據表 where 欄位名 order by 欄位名 [desc]"

sql="select * from 數據表 where 欄位名 in ('值1','值2','值3')"

sql="select * from 數據表 where 欄位名 between 值1 and 值2"

(2) 更新數據記錄:

sql="update 數據表 set 欄位名=欄位值 where 條件表達式"

sql="update 數據表 set 欄位1=值1,欄位2=值2 …… 欄位n=值n where 條件表達式"

(3) 刪除數據記錄:

sql="delete from 數據表 where 條件表達式"

sql="delete from 數據表" (將數據表所有記錄刪除)

(4) 添加數據記錄:

sql="insert into 數據表 (欄位1,欄位2,欄位3 …) values (值1,值2,值3 …)"

sql="insert into 目標數據表 select * from 源數據表" (把源數據表的記錄添加到目標數據表)

(5) 數據記錄統計函數:

AVG(欄位名) 得出一個表格欄平均值
COUNT(*|欄位名) 對數據行數的統計或對某一欄有值的數據行數統計
MAX(欄位名) 取得一個表格欄最大的值
MIN(欄位名) 取得一個表格欄最小的值
SUM(欄位名) 把數據欄的值相加

引用以上函數的方法:

sql="select sum(欄位名) as 別名 from 數據表 where 條件表達式"
set rs=conn.execute(sql)

用 rs("別名") 獲取統的計值,其它函數運用同上。

(5) 數據表的建立和刪除:

CREATE TABLE 數據表名稱(欄位1 類型1(長度),欄位2 類型2(長度) …… )

例:CREATE TABLE tab01(name varchar(50),datetime default now())

DROP TABLE 數據表名稱 (永久性刪除一個數據表)

4. 記錄集對象的方法:

rs.movenext 將記錄指針從當前的位置向下移一行
rs.moveprevious 將記錄指針從當前的位置向上移一行
rs.movefirst 將記錄指針移到數據表第一行
rs.movelast 將記錄指針移到數據表最後一行
rs.absoluteposition=N 將記錄指針移到數據表第N行
rs.absolutepage=N 將記錄指針移到第N頁的第一行
rs.pagesize=N 設置每頁為N條記錄

2、更改表格
ALTER TABLE table_name
ADD COLUMN column_name DATATYPE
說明:增加一個欄位(沒有刪除某個欄位的語法。
ALTER TABLE table_name
ADD PRIMARY KEY (column_name)
說明:更改表得的定義把某個欄位設為主鍵。
ALTER TABLE table_name
DROP PRIMARY KEY (column_name)
說明:把主鍵的定義刪除。

3、建立索引
CREATE INDEX index_name ON table_name (column_name)
說明:對某個表格的欄位建立索引以增加查詢時的速度。

4、刪除
DROP table_name
DROP index_name

二、的資料形態 DATATYPEs
smallint
16 位元的整數。
interger
32 位元的整數。
decimal(p,s)
p 精確值和 s 大小的十進位整數,精確值p是指全部有幾個數(digits)大小值,s是指小數
點後有幾位數。如果沒有特別指定,則系統會設為 p=5; s=0 。
float
32位元的實數。
double
64位元的實數。
char(n)
n 長度的字串,n不能超過 254。
varchar(n)
長度不固定且其最大長度為 n 的字串,n不能超過 4000。
graphic(n)
和 char(n) 一樣,不過其單位是兩個字元 double-bytes, n不能超過127。這個形態是為
了支援兩個字元長度的字體,例如中文字。
vargraphic(n)
可變長度且其最大長度為 n 的雙字元字串,n不能超過 2000。
date
包含了 年份、月份、日期。
time
包含了 小時、分鍾、秒。
timestamp
包含了 年、月、日、時、分、秒、千分之一秒。

三、資料操作 DML (Data Manipulation Language)
資料定義好之後接下來的就是資料的操作。資料的操作不外乎增加資料(insert)、查詢資料(query)、更改資料(update) 、刪除資料(delete)四種模式,以下分 別介紹他們的語法:

1、增加資料:
INSERT INTO table_name (column1,column2,...)
valueS ( value1,value2, ...)
說明:
1.若沒有指定column 系統則會按表格內的欄位順序填入資料。
2.欄位的資料形態和所填入的資料必須吻合。
3.table_name 也可以是景觀 view_name。

INSERT INTO table_name (column1,column2,...)
SELECT columnx,columny,... FROM another_table
說明:也可以經過一個子查詢(subquery)把別的表格的資料填入。

2、查詢資料:
基本查詢
SELECT column1,columns2,...
FROM table_name
說明:把table_name 的特定欄位資料全部列出來
SELECT *
FROM table_name
WHERE column1 = xxx
[AND column2 > yyy] [OR column3 <> zzz]

三)交叉連接

交叉連接不帶WHERE 子句,它返回被連接的兩個表所有數據行的笛卡爾積,返回到結果集合中的數
據行數等於第一個表中符合查詢條件的數據行數乘以第二個表中符合查詢條件的數據行數。
例,titles表中有6類圖書,而publishers表中有8家出版社,則下列交叉連接檢索到的記錄數將等
於6*8=48行。
SELECT type,pub_name
FROM titles CROSS JOIN publishers
ORDER BY type
UNION運算符可以將兩個或兩個以上上SELECT語句的查詢結果集合合並成一個結果集合顯示,即執行聯合查詢。UNION的語法格式為:
select_statement
UNION [ALL] selectstatement
[UNION [ALL] selectstatement][…n]
其中selectstatement為待聯合的SELECT查詢語句。
ALL選項表示將所有行合並到結果集合中。不指定該項時,被聯合查詢結果集合中的重復行將只保留一
行。
聯合查詢時,查詢結果的列標題為第一個查詢語句的列標題。因此,要定義列標題必須在第一個查詢語
句中定義。要對聯合查詢結果排序時,也必須使用第一查詢語句中的列名、列標題或者列序號。
在使用UNION 運算符時,應保證每個聯合查詢語句的選擇列表中有相同數量的表達式,並且每個查詢選
擇表達式應具有相同的數據類型,或是可以自動將它們轉換為相同的數據類型。在自動轉換時,對於數值類

型,系統將低精度的數據類型轉換為高精度的數據類型。

在包括多個查詢的UNION語句中,其執行順序是自左至右,使用括弧可以改變這一執行順序。例如:

查詢1 UNION (查詢2 UNION 查詢3)

INSERT語句

用戶可以用INSERT語句將一行記錄插入到指定的一個表中。例如,要將雇員John Smith的記錄插入到本例的表中,可以使用如下語句:

INSERT INTO EMPLOYEES valueS

('Smith','John','1980-06-10',

'Los Angles',16,45000);

通過這樣的INSERT語句,系統將試著將這些值填入到相應的列中。這些列按照我們創建表時定義的順序排列。在本例中,第一個值「Smith」將填到第一個列LAST_NAME中;第二個值「John」將填到第二列FIRST_NAME中……以此類推。

我們說過系統會「試著」將值填入,除了執行規則之外它還要進行類型檢查。如果類型不符(如將一個字元串填入到類型為數字的列中),系統將拒絕這一次操作並返回一個錯誤信息。

如果SQL拒絕了你所填入的一列值,語句中其他各列的值也不會填入。這是因為SQL提供對事務的支持。一次事務將資料庫從一種一致性轉移到另一種一致性。如果事務的某一部分失敗,則整個事務都會失敗,系統將會被恢復(或稱之為回退)到此事務之前的狀態。

回到原來的INSERT的例子,請注意所有的整形十進制數都不需要用單引號引起來,而字元串和日期類型的值都要用單引號來區別。為了增加可讀性而在數字間插入逗號將會引起錯誤。記住,在SQL中逗號是元素的分隔符。

同樣要注意輸入文字值時要使用單引號。雙引號用來封裝限界標識符。

對於日期類型,我們必須使用SQL標准日期格式(yyyy-mm-dd)

❽ oracle資料庫SQL

1、寫出創建此資料庫表的sql語句(student,course,score三個表任意寫一個創建語句)
CREATE TABLE STUDENT
(
stu_id VARCHAR2(20),
name VARCHAR2(20),
Age INTEGER,
sex CHAR(2),
stu_class VARCHAR2(12)

)
2、給表course的課程號(co_id)欄位添加主鍵約束,給成績表score的課程號(co_id)欄位添加外鍵約束,其中主表是course,從表示score,寫出sql語句
ALTER TABLE COURSE ADD CONSTRAINT COURSE_P_COID PRIMARY KEY (CO_ID);
ALTER TABLE SCORE ADD CONSTRAINT SCORE_F_COID FOREIGN KEY(CO_ID) REFERENCES COURSE(CO_ID) ;

3、向score表中插入一條記錄,寫出此sql語句
INSERT INTO SCORE VALUES ('1111000',1,90);

4、查詢課程成績大於80分的學生姓名和課程名,寫出sql語句
SELECT B.NAME,C.CO_NAME FROM SCORE A,STUDENT B,COURSE C
WHERE A.STU_ID=B.STU_ID
AND A.CO_ID=C.CO_ID
AND A.SCORE>80
5、編寫函數返回女同學的平均課程成績是多少(女同學:sex=』 女),寫出sql語句
CREATE OR REPLACE FUNCTION FUN_GETSCORE
RETURN NUMBER
IS
V_SCORE NUMBER;

BEGIN
SELECT AVG(A.SCORE) INTO V_SCORE FROM SCORE A,STUDENT B
WHERE A.STU_ID=B.STU_ID
AND B.SEX='女';
RETURN V_SCORE;
END;
6、編寫存儲過程,更新學生成績表score的課程成績(score)欄位,更新語句為:update score set score=newscore where stu_id=stuid and co_id=coid其中新的成績,學號,課程號作為傳人的形式參數,定義為:newscore in number,stuid in varchar2,coid in varchar2,寫出此sql語句
CREATE OR REPLACE PROCEDURE P_UPDATE_SCORE(newscore in number,stuid in varchar2,coid in varchar2)
AS

BEGIN
update score set score=newscore where stu_id=stuid and co_id=coid;
COMMIT;
END;

❾ 資料庫手冊:Oracle維護常用SQL語句二

回滾段查看 select rownum sys dba_rollback_segs segment_name Name v$rollstat extentsExtents v$rollstat rssize Size_in_Bytes v$rollstat xacts XActs v$rollstat gets Gets v$rollstat waits Waits v$rollstat writes Writes sys dba_rollback_segs status status from v$rollstat sys dba_rollback_segs v$rollname where v$rollname name(+) = sys dba_rollback_segs segment_name andv$rollstat usn (+) = v$rollname usn order by rownum 耗資源的進程(top session) select s schemaname schema_name decode(sign( mand) to_char(mand) Action Code # || to_char(mand) ) action statussession_status s osuser os_user_name s sid p spid s serial# serial_num nvl(s username [Oracle process] ) user_name s terminal terminal s program program st value criteria_value from v$sesstat st v$session s v$process pwhere st sid = s sid and st statistic# = to_number( ) and ( ALL = ALL or s status = ALL ) and p addr = s paddr order by st value desc p spid asc s username asc s osuser asc 查看鎖(lock)情況 升毀孫select /*+ RULE */ ls osuser os_user_name ls username user_name decode(ls type RW Row wait enqueue lock TM DML enqueue lock TX 吵鏈 Transaction enqueue lock UL User supplied lock ) lock_type o object_name object decode(ls lmode null Row Share Row Exclusive Share Share Row Exclusive Exclusive null)lock_mode o owner ls sid ls serial# serial_num ls id ls id from sys dba_objects o ( select s osuser s username l type l lmode s sid s serial# l id l id from v$session s v$lock l where s sid = l sid ) ls where o object_id = ls id and o owner<> SYS order by o owner o object_name 查看等待(wait)情況 SELECT v$waitstat class v$unt count SUM(v$sysstat value) sum_valueFROM v$waitstat v$sysstat WHERE v$sysstat name IN ( db block gets 余則 consistent gets ) group by v$waitstat class v$unt 查看sga情況 SELECT NAME BYTES FROM SYS V_$SGASTAT ORDER BY NAME ASC 查看catched object SELECT owner name db_link namespace type sharable_mem loads executions locks pins kept FROM v$db_object_cache 查看V$SQLAREA SELECT SQL_TEXT SHARABLE_MEM PERSISTENT_MEM RUNTIME_MEM SORTS VERSION_COUNT LOADED_VERSIONS OPEN_VERSIONS USERS_OPENING EXECUTIONS USERS_EXECUTING LOADS FIRST_LOAD_TIME INVALIDATIONS PARSE_CALLS DISK_READS BUFFER_GETS ROWS_PROCESSED FROM V$SQLAREA 查看object分類數量 select decode (o type# INDEX TABLE CLUSTER VIEW SYNONYM SEQUENCE OTHER ) object_type count(*) quantity fromsys obj$ o where o type# > group by decode (o type# INDEX TABLE CLUSTER VIEW SYNONYM SEQUENCE OTHER ) union select COLUMN count(*) from l$ union select DB LINK count(*) from 按用戶查看object種類 select u name schema sum(decode(o type# NULL)) indexes sum(decode(o type# NULL)) tables sum(decode(o type# NULL))clusters sum(decode(o type# NULL)) views sum(decode(o type# NULL)) synonyms sum(decode(o type# NULL)) sequences sum(decode(o type# NULL NULL NULL NULL NULL NULL ))others from sys obj$ o sys user$ u where o type# >= and u user# =o owner# and u name <> PUBLIC group by u name order bysys link$ union select CONSTRAINT count(*) from n$ 有關connection的相關信息 )查看有哪些用戶連接select s osuser os_user_name decode(sign( mand) to_char(mand) Action Code # || to_char(mand) ) action p program oracle_process status session_status s terminal terminal s program program s username user_name s fixed_table_sequence activity_meter query memory max_memory cpu_usage s sid s serial# serial_numfrom v$session s v$process p where s paddr=p addr and s type = USER order by s username s osuser )根據v sid查看對應連接的資源佔用等情況select n name v value n class n statistic#from v$statname n v$sesstat vwhere v sid = andv statistic# = n statistic#order by n class n statistic# )根據sid查看對應連接正在運行的sqlselect /*+ PUSH_SUBQ */mand_type sql_text sharable_mem persistent_mem runtime_mem sorts version_count loaded_versions open_versions users_opening executions users_executing loads first_load_time invalidations parse_calls disk_reads buffer_gets rows_processed sysdate start_time sysdate finish_time > || address sql_address N statusfrom v$sqlareawhere address = (select sql_address from v$session where sid = ) 查詢表空間使用情況select a tablespace_name 表空間名稱 round((nvl(b bytes_free )/a bytes_alloc)* ) 佔用率(%) round(a bytes_alloc/ / ) 容量(M) round(nvl(b bytes_free )/ / ) 空閑(M) round((a bytes_alloc nvl(b bytes_free ))/ / ) 使用(M) Largest 最大擴展段(M) to_char(sysdate yyyy mm dd hh :mi:ss ) 采樣時間 from (select f tablespace_name sum(f bytes) bytes_alloc sum(decode(f autoextensible YES f maxbytes NO f bytes)) maxbytesfrom dba_data_files fgroup by tablespace_name) a (select f tablespace_name sum(f bytes) bytes_freefrom dba_free_space fgroup by tablespace_name) b (select round(max(ff length)* / ) Largest ts name tablespace_namefrom sys fet$ ff sys file$ tf sys ts$ tswhere ts ts#=ff ts# and ff file#=tf relfile# and ts ts#=tf ts#group by ts name tf blocks) cwhere a tablespace_name = b tablespace_name and a tablespace_name = c tablespace_name 查詢表空間的碎片程度 select tablespace_name count(tablespace_name) from dba_free_space group by tablespace_namehaving count(tablespace_name)> ;alter tablespace name coalesce;alter table name deallocate unused;create or replace view ts_blocks_v asselect tablespace_name block_id bytes blocks free space segment_name from dba_free_spaceunion allselect tablespace_name block_id bytes blocks s lishixin/Article/program/Oracle/201311/18531

❿ sql語句大全

sp_helpdb ----------查本伺服器中所有資料庫 可跟庫名
例:sp_helpdb 庫名
-------------------------------------------------------------
sp_databases -------------查看本伺服器中可用的資料庫
--------------------------------------------------------------------
sp_helpfile -------------------查看當前工作著的資料庫
-----------------------------------------------------------
sp_helpfilegroup ---------------查看當前工作著的組的信息。可加參數,跟組名
例:sp_helpdb 庫名
----------------------------------------------------------------
sp_renamedb -----------改資料庫名
例:sp_renamedb 舊庫名,新庫名
----------------------------------------------------------------
select groupname from sysfilegroups where status=24
---------查看文件組 =8是查只讀文件組 =16是查默認文件組 =24是查即只讀又默認
---------------------------------------------------------------------------
sp_dboption ----------修改資料庫選項值
例:sp_dboption 庫名 選項 值
值決定真假 一般用:true/faule 或off/on表示
選項一般常用為:use only(資料庫擁有者)single user(單一用戶)read only(只讀)
--------------------------------------------------------------------------
dbcc shrinkdatabase ---------收縮資料庫
例:dbcc shrinkdatabase (庫名,10)
收縮庫,剩餘空間保留10%,後面如果不加notruncate,則釋放空間操作系統,
加truncateonly,歸還空間給操作系統,但忽略所給的百分比數值。
----------------------------------------------------------------------
dbcc shrinkfile ---------收縮文件
用法與ddcc shrinkdatabase相同。
----------------------------------------------------------------------
alter database ---------------修改資料庫
用法:這是起始句,告訴要做的是修改資料庫,然後再接要做什麼工作。每次只做一項工作
alter database 庫名
add file 文件名....to filegroup 文件組名
----------------增加庫文件,格式與建庫時括弧里指定大小時的格式一樣
add log file 文件名 -------------增加日誌文件
remove file 文件名 ---------刪除庫內的文件
add filegroup 文件組名 -----------增加一個文件組
modify file 文件名 -------------修改文件屬性
modify filegroup 組名 ------------修改文件組屬性
---------------------------------------------------------------------------
drop database --------------刪除資料庫
例:drop database 庫名1,庫名2 ---------可同時刪除兩個庫
------------------------------------------------------------------------
create table 表名
(列名 類型,
列名 類型) -------------------建立表
--------------------------------------------------------------------
select * from 表名 ---------查詢表結構
--------------------------------------------------------------------
select @@dbts ----------查詢最後一次操作
--------------------------------------------------------------------
insert into 表名
(列名,列名)
values (變數,變數.....) ------------向表中插入數據
如省略列名,則必須把每列的變數填全,不可缺少。可以省略 into
--------------------------------------------------------------------
sp_addtype 自定義類型名 系統類型名 -------用戶自定義類型
--------------------------------------------------------------------
sp_droptype 自定義類型名 -----------刪除自定義類型
如有資料庫正在使用該自定義類型,則不能刪除
--------------------------------------------------------------------
alter table ---------修改表結構
用法: alter table 表名
alter column 列名 類型 ---------修改列的類型
drop column 列名 --------刪除列
add (column) 列名 --------增加列,實際用時不加 column
-----------------------------------------------------------------
sp_help -------------查看資料庫中對象信息
用法: sp_help 表名 ---------------查表的信息
或 sp_help 庫名 --------------查庫信息
後面可以跟庫名或者表名,是查資料庫或者表的信息
-----------------------------------------------------------------
sp_spaceused --------查看對象佔用的空間信息
用法: sp_spaceused ----------查當前庫佔用空間信息
或 sp_spaceused 表名 ----------查指定表佔用空間信息
後面可以加表名查看錶占空間信息。如不加,則查看當前資料庫。
------------------------------------------------------------------
sp_depends ------------查看對象的相關性
用法: sp_depends 表名 -----------後面加表名
------------------------------------------------------------------
sp_rename ---------------重新命名
用法: sp_rename 舊表名,新表名 ---------改表名
或 sp_rename '表名.舊列名','新列名' 'column' -------修改列名
--------------------------------------------------------------------
create index --------------創建索引
用法: create index 索引名 on 表名 (列名) ------創建索引
或: create unique clustered index 索引名 on 表名 (列名)
------創建簇集唯一索引 unique是建唯一索引 clustered是建簇集索引
---非簇集索引用:nonclustered
----------------------------------------------------------------------
select top ---------查表中前幾行
用法: select top 3 * from 表名 -------查表中前三行
或: select top 10 percent * from 表名 -------顯示表中前10%數據
------------加入percent是百分比的意思。只以大於的最小整數,無小數
----------------------------------------------------------------------
select 列名,列名,列名 from 表名 -------顯示表中特定的列
----------------------------------------------------------------------
select *,列名 from 表名 ----------查詢表中所有,後面再加一列
----------------------------------------------------------------------
select distinct ----------查詢不重復數據 distinct用於去掉重復數據
用法: select distinct * from 表名 ---------查表中不重復數據
或: select distinct * into 新表名 from 舊表名 ------查舊表中不重復數據同時生成新表
-------------------------------------------------------------------------------------
select 列名+列名 from 表名 -------允許有計算式出現,顯示無列名的計算結果
如想加列名,則: select 列名+列名 as 新列名 from 表名
-------------------------------------------------------------------------
select 年齡,聯系電話,cast (年齡 as varchar(2))+聯系電話 from 表名
--------把整型數據年齡轉化為字元型與字元型數據聯系電話相加
----------------------------------------------------------------------------
ctrl+o(字母O) --------清空數據。空值與別的數據運算結果為空
----------------------------------------------------------------------------
select 原始列名 別名 from 表名
select 原始列名 as 別名 from 表名
select 別名=原始列名 from 表名
--------指定別名的三種方法。非法符號可''或[]引起來,不得直接使用。
----------------------------------------------------------------------------
select * from 表名
where 年齡 between 20 and 30 ---------顯示年齡在20到30之間的人
-------between是從條件一到條件二之間的限制
-----------------------------------------------------------------------
select * from 表名
where 年齡 in (20,21,22) ---------顯示年齡為20、21、22的人
--------in是限制在這些條件內的,是顯示一個取值范圍
-----------------------------------------------------------------------
select * from 表名
where 聯系電話 like '[1-3]%' --------查電話是1-3開頭的人
--------like是像這些條件的語句,能用通配符:%、_、[]、[^]
--------意思分別代表:所有字元、一個字元、一位上可取值、一位上不可取值
----------------------------------------------------------------------
select * from 表名
where 姓名 like '[e[]%'
or 姓名 like '%e]'
escape 'e' ------------顯示以『[』開頭或以『]』結尾的所有數據,中間有不顯示
----------escape ''是指定通配符
-----------------------------------------------------------------------------
order by ---------給數據排序
用法: select * from 表名
order by 年齡 -----------排序顯示年齡。默認為升序(asc)要降序必須加desc
------------------------------------------------------------------------
select distinct top 3 from 表名
order by 年齡 desc --------顯示最大的三種年齡
-------------------------------------------------------------------------
select * from 表名
where 年齡 in (select distinct top 3 年齡 from 表名 order by 年齡)
order by 年齡 -----------顯示年齡最小的所有人,並排序
-------------------------------------------------------------------------
select 姓名,
case
when MCSE成績 >=80 and MCSE成績<=100
then '考的不錯'
when MCSE成績 >=60 and MCSE成績<80
then '考的一般'
when MCSE成績 >=0 and MCSE成績<60
then '不及格'
when MCSE成績 is null
then '這小子沒考試'
else '異常數據'
end
MCSE成績
from 表名
-----------判斷語句 null是空值的意思,不能用等號連接,只能用is
-----------case到end為一列里的判斷,case在這里是取值,結果用於輸出,不顯示原值
-----------------------------------------------------------------------------
select 列名1,
case 列名2
when 1 then '男生'
when 0 then '女生'
else '未知'
end
from 表名
--------這里case取列名,是用於這一列每項取值比較,在這里列名2用的是bit型數據
-------------------------------------------------------------------------
select * into 庫1.表1 from 庫2.表2
-----------把庫2中表2移到庫1中
------------------------------------------------------------------------
數據維護三個命令:
insert ---------向表中插入數據
update ---------修改表中的數據
delete ---------刪除表中的數據
------------------------------------------------------------------------
insert into 表名 -----------(into可有可無)
(列1,列2,列3,列4) -----------表的原始列,用括弧括起來
values ----------有這條命令只能插入一條數據
(數1,數2,數3,數4) ----------插入的數值
---------可以省略原始列清單,但必須把所有列都賦值
------------------------------------------------------------------------
insert into 表1
(列1,列2,列3,列4)
select * from 表2 where sex=1
----------將表2中sex列等於1的數據信息插入表1中
-------------------------------------------------------------------------
update 表名
set 姓名='丁一'
where 姓名='李一' ----------把表中姓名叫李一的改為丁一。
------------where後面跟定位的列與值
-------------------------------------------------------------------------
update 表名
set 學號=14,
姓名=陳強
where 學號=1 ------------把學號為1的同學改為學號14,姓名陳強
-----------------------------------------------------------------------
update 表名
set 學號=年齡+7,
姓名='陳一強',
年齡=29
where 學號=14
-------把學號為14的同學資料改為年齡加七賦給學號姓名改為陳一強,年齡改為29
-------如果沒用where定位,則修改全部值
------------------------------------------------------------------------
delete 表名
where 學號>30 ---------把學號大於30的資料刪除
--------如不指定條件,則刪表內所有數據。這是記錄日誌文件的操作
----------------------------------------------------------------
truncate table 表名
-------清空表。不記錄日誌文件的操作。
--------------------------------------------------------------------
create view 圖名 -------------新建視圖
用法: create view 圖名
as
select 列名 from 表名
------------------------------------------------------------------------------
syscomments ------------這個表存著視圖代碼的信息
------------------------------------------------------------------------------
alter view 圖名
with encryption
as
select 列名 from 表名 -----------用with encyption語句給視圖原代碼加密
-------------不可恢復,除非保留源代碼
------------------------------------------------------------------------------
sp_helptext 圖名 -----------查看視圖源代碼
-----------------------------------------------------------------------------
select text from syscomments
where id =(select id from sysobjects where name ='圖名')
---------查視圖的代碼
-----------------------------------------------------------------------------
create view 圖名
as
select * from 源圖名 ------------基於源圖創建新視圖
-----------------------------------------------------------------------------
create view 圖名
as
select 列1 as 新列1,列2 新列2,列3=新列3 ---------起別名的三種方法
from 表名 -----------在新視圖中為列起別名,則所見的是新起的別名
-----------------------------------------------------------------------------
sp_depends 表名 -----------查該表的相關性,有多少表、圖與之相關。
-------------------------------------------------------------------------------
create view 圖名
select * from 表名
where 年齡<20
with check option ---------強制插入數據符合年齡小於20的條件,加在where後面
-----------是約束insert和update語句的
-------------------------------------------------------------------------------
select 男公民.姓名,女公民.姓名 from 男公民,女公民
where 男公民.配偶編號=女公民.編號
------------查結婚男女。較原始的語法,後被下列語法取代
或: select 男公民.姓名,女公民.姓名
from 男公民 join 女公民 on 男公民.配偶編號=女公民.編號
-------新的形式,在join之前省略了inner語句。
--可用左連接(*=或left outer join)右連接(=*或right outer join)全連接(full outer)
----where不能做全連接,但可以做連接的約束
select * from 男公民
where 配偶編號 in (select 編號 from 女公民)
--------嵌套查詢,查配偶編號在女公民表中編號列中出現過的
-------------------------------------------------------------------------------
select distinct 客戶表.*
from (select * from 訂單表 where 訂單年份=2004) as d,客戶表
where d.客戶號=客戶表.客戶號
-----子查詢放在from身後,也可以放在where身後
----------------------------------------------------------------------------
select (select 子查詢語句) from 表名
-------這種格式要求子查詢查出的必須是唯一的數據
----------------------------------------------------------------------------
select a.員工編號,a.員工姓名,b.員工姓名 as 領導姓名
from 員工表 as a,員工表 as b
where a.部門領導編號=b.員工編號

select a.員工編號,a.員工姓名,b.員工姓名 as 領導姓名
from 員工表 as a join 員工表 as b on a.部門領導編號=b.員工編號

select a.員工編號,a.員工姓名,
(select 員工姓名 from 員工表 as b where a.部門領導編號=b.員工編號) as 領導姓名
from 員工表 as a
---------三種查詢員工領導的方法
------如果裡面總經理領導編號是這空的,這種查詢方法不顯示空值。如要顯示,則用左連接
-----------------------------------------------------------------------------
sp_tables -----------查當前資料庫中的所有表
------------------------------------------------------------------------------
select * from 男公民
union ------------聯合。自動升序排序,並去掉重復語句
select * from 女公民
-----查詢結果是男公民和女公民表的總集。如果不去掉重復的,則用 union all
-----如果要降序排,則要在最後一個select語句後面加上order by 列名 desc
-----用union查詢時,結果集內列數必須相同,並且數據類型必須相互兼容
-----多表聯合查詢加order by時,後面必須跟第一個結果集的列名
------------------------------------------------------------------------------
select top 2 成績 from 表
order by 成績 desc ---------查前兩種最好成績
-------------------------------------------------------------------------------
select top 2 with ties 成績 from 表
order by 成績 desc ---------查前兩種最好成績所有人的信息
-------------------------------------------------------------------------------
select top 1 a.成績
from (select distinct top 3 成績 from 表 order by 成績 desc) as a
order by 成績 ---------嵌套查詢,查考成績第三名的值
-------------------------------------------------------------------------------
select max (SQL成績),min (MCSE成績) from 表
-----查SQL最高分和MCSE最低分
-----常用的函數:max(最大),min(最小),sum(總和),avg(平均值)
-----count(*)統計表內數據的行數。count(列名)統計表內列里非空值的行數
-------------------------------------------------------------------------------
select count(*) from 表名 --------查表內有多少行數據
-------------------------------------------------------------------------------
select count(列名) from 表名 ------------查表內列中有多少行非空數據
-------------------------------------------------------------------------------
select min(成績),max(成績),sum(成績),avg(成績),count(*),count(成績) from 表名
--------返回顯示數據只有一行。中間不能加列名,如想加,可以在後面加列。
-------------------------------------------------------------------------------
group by ---------分組統計,後面跟的是列名
---------上面select檢索多少原始列,後面group by就要跟多少原始列
例: select 性別,avg(年齡) from 表名
group by 性別 -------統計性別的平均年齡
-------------------------------------------------------------------------------
select 年齡,avg(年齡) from 表名
where 年齡<23
group by 年齡 -------查年齡小於23歲的各年齡段平均年齡
-------或也可用如下方法:
select 年齡,avg(年齡) from 表名
group by 年齡
having<23 -------having是統計之後的條件,where是統計之前的條件
--------having是做為group by的子句出現的,不能單獨使用
------------------------------------------------------------------------------
select 年齡,avg(年齡) from 表名
where 年齡<23
group by all 年齡 -------顯示所有年齡,但只統計年齡小於23的,大於23的顯示空值
------------------------------------------------------------------------------
select 品牌,顏色,sum(價格),avg(價格) from 汽車表
group by 品牌,顏色
with cube -------多維統計,按不同品牌不同顏色統計,也是group by的子句
--------其結果出現把各品牌統計一下,最後再統計所有品牌、所有顏色的總統計
------------------------------------------------------------------------------
select 品牌,顏色,sum(價格),avg(價格) from 汽車表
group by 品牌,顏色
with rollup ------只按第一列統計,也是group by的子句
---------即統計品牌各顏色和所有品牌所有顏色的總統計
------------------------------------------------------------------------------
select 品牌,顏色,價格 from 汽車表
compute sum(價格),avg(價格) ----------出現兩個結果集
------------查原始列,另外統計所有的總和與平均值
-------------------------------------------------------------------------------
select 品牌,sum(價格),avg(價格) from 汽車表
group by 品牌 ------只對汽車品牌進行統計。進行分組的列不一定用來統計
------------------------------------------------------------------------------
select 品牌,顏色,價格 from 汽車表
order by 品牌
compute sum(價格),avg(價格) by 品牌
--------按品牌分組統計。分別顯示品牌各款,然後再顯示函數計算值
------------------------------------------------------------------------------
exists --------存在。相當於一個判斷開關。說對了執行,說錯了放棄
用法: select * form 表名
where exists (select * from 表名 where 性別='男')
------如果存在性別為男的,執行查詢。如果不存在,則不執行命令。
-----------------------------------------------------------------------------
數據完整性:1.實體完整性----用unique(唯一)或主鍵控制,數據不能重復
2.值域完整性----用check控制。控制的是列中不能有非法數據
3.引用完整性----一列的取值完全依賴於前一列時,用這個。
4.用戶自定義完整性
------------------------------------------------------------------------------
create table 表名
(列1 int primary key, --------設置列級主鍵,緊跟在設置列的後面。
列2 int)
-------------------------------------------------------------------------------
create table 表名
(列1 int,
列2 int,
primary key (列1)) --------設置表級主鍵,放在建表語句的最後面。
-------------------------------------------------------------------------------
create table 表名
(列1 int constraint pk_表 primary key,
列2 int)
--------把列1設為主鍵,並且起名叫:pk_表。constraint是命名的命令