㈠ PLsql資料庫許可權基礎筆記(GRANT,REVOKE)
許可權包括:
SELECT
INSERT
UPDATE[(col1,col2)]; 可以加括弧表示只賦予特定列的許可權
DELETE
ALTER
ALL PRIVILEGES
...
CREATE INDEX
CREATE TABLE
ALL PRIVILEGES
...
PUBLIC 關鍵字可以替換用戶名 代表全體用戶
ALL 關鍵字替代許可權 代表所有許可權
WITH GRANT OPTION 表示 賦予用戶許可權的許可權
GRANT OPTION FOR表示撤銷賦予用戶許可權的許可權
我們可以把許可權賦予角色 然後將角色賦予用戶 簡化操作。
創建角色
CREATE ROLE ROLENAME;
GRANT 許可權 ON 表名 TO 角色;
將角色賦予用戶
GRANT ROLENAME TO USERNAME;
GRANT CONNECT TO laurent IDENTIFIED BY motDePasse
㈡ doselectpageinfo查不出數據
筆記
1. 首先,檢查SQL語句是否正確,檢查是否有語法錯誤;
2. 檢查表中是否有對應的衫清猛數據,如果沒有,則查不出數據;
3. 檢查查詢條件是否正確,是否與表中的欄位匹配;
4. 檢查查詢語句中的參數是否正確,是否與表中的欄位匹配;
5. 檢查查詢語句中的參數是否正確,是否與表中的欄位匹配;
6. 檢查是否使用了正確的索引,以及索引是否正確;
7. 檢查SQL語句中的排序條件是否正或橋確;
8. 檢查是否有其他程正蠢序在操作資料庫,導致查詢速度變慢;
9. 檢查資料庫伺服器是否正常工作,是否有其他性能問題;
10. 檢查資料庫連接是否正常,是否可以正常連接資料庫。
㈢ sql優化及原理詳解,五分鍾讀懂sql優化
在我而言這算是一個復習,然後總結出來給大家當個教材吧。
我也是看視頻總結出來的筆記,所以說的都很簡單和淺薄。有不全面或者偏頗的地方歡迎指出,共同交流進步哈。(因為我當時是看視頻總結的筆記,所以可能說的比較雜亂,我盡量寫的分明一點,在最後會附上筆記,忽略我字丑)
索引是什麼呢?它相當於字典的目錄。
索引:index是幫助mysql高效獲取數據的數據結構,索引是數據結構(樹,默認是B樹),hash等。
索引的弊端: 事物都是兩面的,有利必然有弊。
索引的優勢: 索引有這么多弊端我們還使用的原因是因為優大於劣。
索引的分類:
舉個小例子讓大家更理解復合索引:如果我把一個表中name,age這兩個列做成復合索引(注意順序很重要)。那麼我們形成的目錄一級目錄是name,二級目錄是age。在name相同時才會age再形成目錄。因為它本身的排序不是像目錄一樣一行一行列出來的,所以我們盡量用目錄來想像它比較好理解。下面是圖解:
有幾點注意的事項:
這里說一下,上面說的方法都是原生的sql,比如我現在習慣使用navicat,所以可以直接操作。。爽的不行。
然後刪除查詢也都是直接可視的,方便的不得了。就不多說了。
mysql做例子,還有個引擎是可以優化的。mysql中引擎分兩種:
sql優化等級:
上面說的這些等級在explain中可以看到。
單表優化常用方法:
多表優化常用方法:
因為上面也提到了b樹,所以還是單獨聊聊吧。其實我也不是很理解。只能說一個淺顯的認識而已。這里也就是簡單的說一下。
首先,B樹不僅可以二叉,還可以三叉,多叉。而只要大於二叉的都叫做BTree。
據說三層BTree可以存放上百萬數據。
BTree一般都指B+樹,數據全部存放在葉節點中。(這里簡單的一個三叉樹圖)
好了,就寫到這里吧,希望日後演算法的知識會的更多以後能把B樹這個坑填完~~~然後有不同意見或者自己理解的可以留言或者私聊。
全文手打,如果你覺得對你有幫助麻煩點個贊點個關注啥的~~
㈣ 資料庫筆記-SQL過濾(LIKE&正則表達式)
查詢語句:
結果:
查詢語句:
結果:
查詢語句:
結果:
查詢語句:
正則表達式 [32]1,[32]定義一組字元,它的意思是匹配 3 或匹配 2,也就是「31」或者 「21」都算是匹配的。
結果:
查詢語句:
結果:
如果要匹配特殊字元的,需要加上前導「」,「-」表示查找「-」,「.」表示查找「.」
這種就是 「轉義(escaping)」 ,在正則表達式里,本身有意義的字元,比如「.」是匹配任意字元的意思。那如果要匹配它,需要轉義。
注意:在 MySQL 里,是比其他的正則表達式多一個「」的,就是「」。
趣味提問:
如何匹配「」?
答案:「\」
\([0-9] sticks?\) 匹配的是(NUM stick)或者(NUM sticks)。s後的 ? 使得s可選。
重復元字元
* 是 0 個或多個匹配
? 是 1 個或多個匹配
{n} 是指定n個匹配
{n,} 是 不少於 n 個匹配
{n,m} 是 指定匹配的范圍,m不超過 255
查詢語句:
^值的是字元串的開始,$是字元串的結尾。
這就是 REGEXP 與 LIKE 類似,但是它獨特的好處:可以通過「定位符」只匹配「子字元串」。
結果:
㈤ 計算機三級資料庫技術筆記
網路資料庫技術
一、單項選擇題
1. 存儲在計算機內有結構的數據的集合,稱為資料庫。
2. 以二維表格的形式組織資料庫中的數據,這種數據模型是關系模型
3. 下面哪個資料庫屬於中小規模資料庫管理系統Access。
4. SQL Server 2000有兩類資料庫,分別是用戶資料庫和系統資料庫。
5. 兩個實體:學院和學生之間的聯系應為一對多聯系。
6. 錯誤的對象部分限定名是伺服器名.對象名。
7. SQL Server字元型包括char和varchar。
8. 下列SQL語句中,修改表結構的是ALTER TABLE。
9. 下列SQL語句中,向表中插入數據的是INSERT。
10. 關系運算的特點是運算的對象和結果都是表。
11. 兩個表連接最常用的條件是兩個表的某些列值相等,這樣的連接稱為等值連接。
12. 在資料庫查詢語句SELECT中,指定分組表達式的子句是GROUP BY子句。
13. 用以限制查詢結果集中的行數過多,僅指定部分結果所採用的關鍵字是TOP。
14. 能夠在LIKE子句中匹配多個字元的通配符是%。
15. 統計組中滿足條件的行數或總行數的聚合函數是COUNT。
第16到第19題基於這樣的三個表即學生表S、課程表C和學生選課表SC,它們的結構如下:
S(S#, SN, SEX, AGE, DEPT)
C(C#, CN)
SC(S#, C#, GRADE)
其中:S#為學號,SN為姓名,SEX為性別,AGE為年齡,DEPT為系別,C#為課程號,CN為課程名,GRADE為成績。
16. 檢索所有比「王華」年齡大的學生姓名、年齡和性別。正確的SELECT語句是SELECT SN, AGE, SEX FROM S WHERE AGE>(SELECT AGE FROM S WHERE SN=『王華』)
17. 檢索選修課程「C2」的學生中成績最高的學生的學號。正確的SELECT語句是SELECT S# FROM SC WHERE C#=『C2』 AND GRADE>= ALL (SELECT GRADE FROM SC WHERE C#=『C2』)
18. 檢索學生姓名及其所選修課程的課程號和成績。正確的SELECT語句是SELECT S.SN, SC.C#, SC.GRADE FROM S, SC WHERE S.S#=SC.S#
19. 檢索選修四門以上課程的學生總成績(不統計不及格的課程),並要求按總成績的降序排列出來。正確的SELECT語句是SELECT S#, SUM(GRADE) FROM SC WHERE GRADE>=60 GROUP BY S# HAVING COUNT(*)>=4 ORDER BY 2 DESC
20. 創建視圖的SQL命令是CREATE VIEW
22. 打開游標所使用的SQL命令是OPEN。
23. 請選出不屬於T-SQL語言組成部分的是數據轉換語言。
24. 聲明變數所使用的關鍵字為DECLARE。
25. 按照索引的組織方式,可以將索引分為聚集索引和非聚集索引。
26. 又稱為列完整性,指給定列輸入的有效性的是域完整性。
27. 創建存儲過程的SQL命令是CREATE PROCEDURE。
28. 不屬於維護數據的觸發器的是SELECT。
29. 只備份自上次備份以來發生過變化的資料庫的數據,也稱增量備份的是差異備份。
30. 資料庫系統與外部進行數據交換的操作是導入/導出。
31. 具有數據表達方式簡潔、直觀,插入、刪除、修改操作方便等特點的數據模型是關系模型.
32. 按一定的數據模型組織數據,對資料庫進行管理的是資料庫管理系統.
33. 對於這樣一個關系:學生(學號、姓名、專業名、性別、出生日期、總學分),請選出關系的碼(關鍵字)為學號
34. 兩個實體:學院和學生之間的聯系應為一對多聯系.
35. 資料庫對象的名稱中各部分使用何種符號隔開「.」。
36. 每個表可以有多少個列設置為標識屬性identity1。
37. 下列SQL語句中,創建表結構的是CREATE TABLE。
38. 下列SQL語句中,刪除表中的指定數據的是DELETE。
39. 關系運算的特點是運算的對象和結果都是表。
40. 從表中選出指定的屬性值(列名)組成一個新表,這樣的關系運算是投影。
41. 在資料庫查詢語句SELECT中,指定表或視圖的子句是FROM子句。
42. 在資料庫查詢語句中,為使用自己選擇的列標題而更改查詢結果的列標題名,所使用的關鍵字是AS。
43. 在WHERE子句中,可以使用通配符來對字元串進行模糊匹配的關鍵字是LIKE。
44. 在學生表XS表中查詢總學分尚未定的學生情況,正確的查詢語句是SELECT * FROM XS WHERE 總學分 IS NULL。
45. 在查詢語句中對查詢的結果進行排序,用於升序排序的關鍵字是ASC。
第16到第19題基於這樣的三個表即學生表S、課程表C和學生選課表SC,它們的結構如下:
S(S#, SN, SEX, AGE, DEPT)
C(C#, CN)
SC(S#, C#, GRADE)
其中:S#為學號,SN為姓名,SEX為性別,AGE為年齡,DEPT為系別,C#為課程號,CN為課程名,GRADE為成績。
46. 檢索所有比「王華」年齡大的學生姓名、年齡和性別。正確的SELECT語句是;SELECT SN, AGE, SEX FROM S WHERE AGE>(SELECT AGE FROM S WHERE SN=『王華』)
47. 檢索選修課程「C2」的學生中成績最高的學生的學號。正確的SELECT語句是;SELECT S# FROM SC WHERE C#=『C2』 AND GRADE>= ALL (SELECT GRADE FROM SC WHERE C#=『C2』)
48. 檢索學生姓名及其所選修課程的課程號和成績。正確的SELECT語句是;SELECT S.SN, SC.C#, SC.GRADE FROM S, SC WHERE S.S#=SC.S#
49. 檢索選修四門以上課程的學生總成績(不統計不及格的課程),並要求按總成績的降序排列出來。正確的SELECT語句是;SELECT S#, SUM(GRADE) FROM SC WHERE GRADE>=60 GROUP BY S# HAVING COUNT(*)>=4 ORDER BY 2 DESC
50. 修改視圖的SQL命令是ALTER VIEW。
51. 若用如下的SQL語句創建一個student表:(『1031』, 『曾華』, NULL, NULL)
52. 在使用游標時首先要執行的是聲明游標。
53. SQL語言是一種用於資料庫查詢的結構化語言。
54. 請選出不屬於T-SQL語言組成部分的是數據轉換語言。
55. T-SQL中局部變數用哪種符號進行標識@。
56. 請選擇不是索引的作用的是使表中數據排列更為美觀。
57. 如果一個表中的一個欄位或若干個欄位的組合是另一個表的碼,則稱該欄位或欄位組合為該表的外碼。
58. 執行存儲過程的SQL命令是EXEC 。
59. SQL Server 2000中不允許使用的備份介質是只讀光碟。
60. 從外部數據源中檢索數據,並將數據插入到SQL Server表的過程,稱為導入數據。
61、表格中的一行稱為一個記錄,一列稱為一個欄位,每列的標題稱為欄位名。
62、SQL Server 2000有兩類資料庫:系統資料庫和用戶資料庫。
63、在設計表時列的identity屬性:實現的是自動增長的功能。
64、創建資料庫的SQL命令:CREATE DATABASE。
65、刪除資料庫的SQL命令:DROP DATABASE。
66、創建表的SQL命令:CREATE TABLE。
67、刪除表的SQL命令:DROP TABLE。
68插入表數據的SQL 命令:INSERT。
69、刪除表數據的SQL命令:DELETE和TRUNCATE TABLE,了解二者的區別。
70、修改表數據的SQL命令:UPDATE。
71、使用SQL命令創建視圖:CREATE VIEW。
72、使用SQL命令修改視圖:ALTER VIEW。
73、當視圖所依賴的基本表有多個時,不提倡向該視圖插入數據,因為這會影響多個基本表。
74、使用SQL命令刪除視圖:DROP VIEW。
75、使用SQL命令聲明游標:DECLARE。
76、聲明游標時SCROLL的用法:可以使游標向前、向後滾動。
77、使用SQL命令打開游標:OPEN。
78、使用SQL命令利用游標讀取數據:FETCH。
79、控制游標的關鍵字:NEXT| PRIOR| FIRST | LAST| ABSOLUTE n| RELATIVE n。
80、使用SQL命令關閉游標:CLOSE。
81、使用SQL命令刪除游標:DEALLOCATE。
82、 SQL語言是用於資料庫查詢的結構化語言。
83、T-SQL語言的組成部分:數據定義語言、數據操縱語言和數據控制語言。
84、變數的命名:以字母、_、@或#開頭,後接多個字母、數字、_、@或#構成。
85、運算符與表達式:AND和OR
86、按照索引的組織方式,可將索引分為聚集索引和非聚集索引。
87、惟一索引:不會有兩行記錄相同的索引鍵值。
88、使用SQL命令刪除索引:DROP INDEX。
89、使用SQL命令創建帶參數的存儲過程的格式:
CREATE PROCEDURE procere_name @variable_name datatype
AS
<sql_statement>
90、使用SQL命令執行帶參數的存儲過程:EXEC procere_name value。
91、使用SQL命令修改存儲過程的格式:
ALTER PROCEDURE procere_name
AS
<sql_statement>
92、使用SQL命令刪除存儲過程:DROP PROCEDURE。
93、設計備份策略的指導思想是:以最小的代價恢復數據。
94. 假定學生關系是S(S#, SNAME, SEX, AGE),課程關系是C(C#, CNAME, TEACHER),學生選課關系是SC(S#, C#, GRADE)。要查找選修課程名「COMPUTER」的性別為「女」的學生姓名,將涉及到的關系是:S, C, SC。
95. 資料庫對象的名稱中各部分使用何種符號隔開「.」。
96. 在SQL Server 2000中,精確整數型包括decimal和numeric。
97. 下列SQL語句中,實現刪除資料庫的語句是DROP DATABASE。
98. 下列SQL語句中,向表中插入數據的是INSERT。
99. 把兩個表中的行按照給定的條件進行拼接而形成新表,這樣的關系運算是連接。
100. 在資料庫查詢語句SELECT中,指定表或視圖的子句是FROM子句。
101. 在資料庫查詢中,消除結果集中的重復行所使用的關鍵字是DISTINCT。
102. 能夠在LIKE子句中匹配單個字元的通配符是「_」。
103. 在查詢語句中對查詢的結果進行排序,用於降序排序的關鍵字是。DESC
104. 若用如下的SQL語句創建一個student表:
CREATE TABLE student(NO C(4) NOT NULL,
NAME C(8) NOT NULL,
SEX C(2),
AGE N(2))
可以插入到student表中的是(『1031』, 『曾華』, NULL, NULL)
第16到第19題基於這樣的三個表即學生表S、課程表C和學生選課表SC,它們的結構如下:
S(S#, SN, SEX, AGE, DEPT)
C(C#, CN)
SC(S#, C#, GRADE)
其中:S#為學號,SN為姓名,SEX為性別,AGE為年齡,DEPT為系別,C#為課程號,CN為課程名,GRADE為成績。
105. 檢索所有比「王華」年齡大的學生姓名、年齡和性別。正確的SELECT語句是
SELECT SN, AGE, SEX FROM S
WHERE AGE>(SELECT AGE FROM S
WHERE SN=『王華』)
106. 檢索選修課程「C2」的學生中成績最高的學生的學號。正確的SELECT語句是
SELECT S# FROM SC
WHERE C#=『C2』 AND GRADE>= ALL
(SELECT GRADE FROM SC
WHERE C#=『C2』)
107. 檢索學生姓名及其所選修課程的課程號和成績。正確的SELECT語句是
SELECT S.SN, SC.C#, SC.GRADE
FROM S, SC
WHERE S.S#=SC.S#
108. 檢索選修四門以上課程的學生總成績(不統計不及格的課程),並要求按總成績的降序排列出來。正確的SELECT語句是
SELECT S#, SUM(GRADE) FROM SC
WHERE GRADE>=60
GROUP BY S#
HAVING COUNT(*)>=4
ORDER BY 2 DESC
109. 創建視圖的SQL命令是
CREATE VIEW
110、局部變數在聲明後初始化為NULL。
二、多項選擇題
1. 關系資料庫模型的優勢在於;數據表達方式簡潔、直觀;插入、刪除、修改操作方便。
2. 請選出SQL Server 2000的兩種常用工具;企業管理器;查詢分析器。
3. 設計表時空值的作用;表示不需要添加的數據;表示將在以後添加的數據。
4. 資料庫的查詢語句SELECT的語法格式中不包含以下哪些內容;DROP子句;UPDATE子句。
5. 在比較子查詢可以使用的比較關鍵字包括;ALL ; ANY。
6. 在使用游標讀取數據時,可用來滾動記錄的關鍵字是;NEXT;LAST;PRIOR;FIRST。
7. 索引的功能包括;快速存取數據;保證數據記錄的惟一性;實現表與表之間的參照完整性;利用索引可減少排序和分組的時間。
8. 資料庫中的數據丟失或被破壞的原因是;計算機軟、硬體故障;誤操作;自然災害;盜竊。
9. 確定備份頻率主要考慮的是;系統恢復的工作量;系統執行的事務量。
10. 導入/導出操作包括數據傳輸;數據轉換。
11. 目前,大型的資料庫管理系統主要包括;Oracle;SQL Server;DB2。
12. SQL Server 2000的資料庫可以分為;系統資料庫;用戶資料庫。
13. 資料庫對象包括;表;視圖;索引;存儲過程;觸發器。
14. 設計表時空值的作用;表示不需要添加的數據;表示將在以後添加的數據。
15. 資料庫的查詢語句SELECT的語法格式中包括以下哪些內容;FROM子句;WHERE子句;GROUP BY子句;HAVING子句;ORDER BY子句。
16. 可以用於SELECT語句的聚合函數包括;SUM和AVG;MAX和MIN;COUNT。
17. T-SQL語言包含以下哪些重要部分;數據定義語言 ;數據操縱語言;數據控制語言。
18. 數據完整性包括;域完整性;實體完整性;參照完整性。
19. 資料庫中的數據丟失或被破壞的原因是;計算機軟、硬體故障;誤操作;自然災害;盜竊。
20. 對導入/導出操作描述正確的是;導入/導出是資料庫系統與外部進行數據交換的操作;導入數據是把其他系統的數據引入到SQL Server的資料庫中;導出數據是把資料庫從SQL Server資料庫中引導其他欄位。
21、流行的中小型資料庫包括Access和Visual Foxpro。大型資料庫管理系統包括Oracle,Microsoft的SQL Server,Sybase和IBM的DB2。
22、數據模型分為關系模型、層次模型、網狀模型。所劃分原則是數據之間的聯系。關系模型優勢:數據表達方式簡潔、直觀,插入、刪除、修改操作方便。
23、實體之間的聯系有如下幾種:一對一的聯系(1: 1)、一對多的聯系(1: n)、多對多的聯系(m: n)。
24、 SQL Server 2000的兩種常用工具:企業管理器,查詢分析器。
25、SQL Server 2000的資料庫對象包括:表、視圖、索引、存儲過程、觸發器和約束。
26、資料庫對象的完全限定名包括:伺服器名、資料庫名、所有者名和對象名。其中前三個可以省略,掌握省略的格式。
27、常用的關系運算包括:連接、選擇和投影。關系運算的特點是運算的對象和結果都是表。
28、SQL Server對游標的使用要遵循的步驟:聲明游標;打開游標;讀取數據;關閉游標;刪除游標。
29、全局變數和局部變數分別用@@和@進行標識。
30、數據完整性的分類:域完整性、實體完整性和參照完整性。
31. 資料庫管理系統採用的數據模型有;層次模型;網狀模型;關系模型。
32. SQL Server 2000的資料庫可以分為;系統資料庫;用戶資料庫。
33. 資料庫對象包括;表;視圖;索引;;存儲過程;觸發器。
34. 常見的連接操作包括;等值連接;自然連接。
35. 資料庫的查詢語句SELECT的語法格式中不包含以下哪些內容;DROP子句;UPDATE子句。
36. 請從下面的關鍵字中選出能夠用於WHERE子句中進行范圍比較的是;IN;BETWEEN。
37. 請選出對視圖描述正確的項;資料庫中只存儲視圖的定義;對視圖的數據進行操作時,系統根據視圖的定義去操作與視圖相關聯的基本表。
38. 按照索引的組織方式,可將索引分為;聚集索引;非聚集索引。
39. 存儲過程包括以下哪些類型;系統存儲過程;本地存儲過程;臨時存儲過程;遠程存儲過程;擴展存儲過程。
40.SQL Server 2000中,允許使用的備份介質包括;硬碟;磁帶;命名管道。
三、名詞解釋
1、碼:在關系表中,如果一個欄位或幾個欄位組合的值可惟一標識其對應記錄,則稱該欄位或欄位組合為碼。
2、記錄:每個表包含了若干行數據,它們是表的「值」,表中的一行稱為一個記錄。
3. 投影:投影運算從表中選出指定的屬性值(列名)組成一個新表,記為:∏A(R)。
4. 索引: 根據表中一列或若干列按照一定順序建立的列值與記錄行之間的對應關系表。
5. 參照完整性: 又稱為引用完整性。參照完整性保證主表中的數據與從表中數據的一致性。
6. 資料庫:是存放數據及相關信息的倉庫。
7. 欄位:每個記錄由若干個數據項構成,將構成記錄的每個數據項稱為欄位。
8. 連接:連接運算把兩個表中的行按照給定的條件進行拼接而形成新表,記為: 。
9. 數據的完整性:是指資料庫中的數據在邏輯上的一致性和准確性。
10. 資料庫恢復:就是當資料庫出現故障時,將備份的資料庫載入到系統,從而使資料庫恢復到備份時的正確狀態。
11、資料庫(DB):資料庫是存放數據及相關信息的倉庫。
12、資料庫管理系統(DBMS):資料庫管理系統是管理資料庫的系統,它按一定的數據模型組織數據。
13、實體和實體集:每一類數據對象的個體稱為實體,而每一類對象個體的集合稱為實體集。
14、記錄:每個表包含了若干行數據,它們是表的「值」,表中的一行稱為一個記錄。
15、欄位:每個記錄由若干個數據項構成,將構成記錄的每個數據項稱為欄位。
16、選擇運算:選擇運算按給定的條件,從表中選出滿足條件的行形成一個新表作為運算結果,選擇運算的記號為σF(R)。
17、投影運算:投影運算從表中選出指定的屬性值(列名)組成一個新表,記為:∏A(R)。
18、連接運算:連接運算把兩個表中的行按照給定的條件進行拼接而形成新表,記為: 。
19、等值連接:兩個表的某些列值相等,這樣的連接稱為等值連接。
20、自然連接:自然連接運算要求兩個表有共同屬性,自然連接運算的結果表是在參與操作兩個表的共同屬性上進行等值連接後再去除重復的屬性後所得的新表,自然連接運算記為: 。
21、局部變數:DECLARE @local_variable data_type,所有局部變數在聲明後均初始化為NULL。
22、域完整性:域完整性又稱為列完整性,指給定列輸入的有效性。
23、實體完整性:實體完整性又稱為行的完整性,要求表中有一個主鍵,其值不能為空且能惟一地標識對應的記錄。
24、參照完整性:參照完整性又稱為引用完整性。參照完整性保證主表中的數據與從表中數據的一致性。
25、外碼:如果一個表中的一個欄位或若干個欄位的組合是另一個表的碼則稱該欄位或欄位組合為該表的外碼。
26、存儲過程:在SQL Server中,可以定義子程序存放在資料庫中,這樣的子程序稱為存儲過程。
27、觸發器:觸發器是一類特殊的存儲過程。觸發器與表的關系密切,用於保護表中的數據。當有操作影響到觸發器保護的數據時,觸發器自動執行。
28、導入/導出:導入/導出是資料庫系統與外部進行數據交換的操作。
導入數據是從外部數據源中檢索數據,並將數據插入到SQL Server表的過程,即把其他系統的數據引入到SQL Server的資料庫中。
導出數據是將SQL Server資料庫中的數據轉換為某些用戶指定格式的過程,即把資料庫從SQL Server資料庫中引到其他系統。
四、簡答題
1. 請列舉SQL Server 2000的資料庫對象。
表、視圖、索引、存儲過程、觸發器和約束。
2. 簡述存儲過程的優點。
(1)存儲過程在伺服器端運行,執行速度快。
(2)存儲過程執行一次後,其執行規劃就駐留在高速緩沖存儲器,在以後的操作中,只需從高速緩沖存儲器中調用已編譯好的二進制代碼執行,提高了系統性能。
(3)確保資料庫的安全。
(4)自動完成需要預先執行的任務。
3. 請根據以下表的定義寫出創建表的語句。
表名:Student
列名 數據類型 長度 是否允許為空
學號 定長字元型(char) 6 否
姓名 定長字元型(char) 8 否
專業名 定長字元型(char) 10 允許
性別 位型(bit) 1(系統默認值) 否
出生時間 日期時間類型(smalldatetime) 4(系統默認值) 否
總學分 整數型(tinyint) 1(系統默認值) 允許
備注 文本型(text) 16(系統默認值) 允許
CREATE TABLE student(
學號 char(6) NOT NULL,
姓名 char(8) NOT NULL,
專業名 char(10) NULL,
性別 bit NOT NULL,
出生日期 smalldatetime NOT NULL,
總學分 tinyint NULL,
備注 text NULL)
4. 根據以下要求寫出實現表操作的SQL語句。
假設資料庫中已經建立好以下表結構。
表名:Student
列名 數據類型 長度 是否允許為空
學號 定長字元型(char) 6 否
姓名 定長字元型(char) 8 否
專業名 定長字元型(char) 10 允許
性別 位型(bit) 1(系統默認值) 否
出生時間 日期時間類型(smalldatetime) 4(系統默認值) 否
總學分 整數型(tinyint) 1(系統默認值) 允許
備注 文本型(text) 16(系統默認值) 允許
請分別寫出如下操作的SQL語句:
(1) 增加新列 「獎學金等級」,數據類型為tinyint,允許為空;
(2) 刪除「備注」列;
(3) 將「出生日期」列的數據類型由原來的smalldatetime修改為datetime。
(1)ALTER TABLE Student ADD 獎學金等級 tinyint NULL
(2)ALTER TABLE Student DROP COLUMN 備注
(3)ALTER TABLE Student ALTER COLUMN 出生日期 datetime
5. 資料庫中已經存在下表。
表名:Student
列名 數據類型 長度 是否允許為空
學號 定長字元型(char) 6 否
姓名 定長字元型(char) 8 否
專業名 定長字元型(char) 10 允許
總學分 整數型(tinyint) 1(系統默認值) 允許
備注 文本型(text) 16(系統默認值) 允許
請寫出如下對表中數據進行操作的SQL語句:
(1)插入一條學生信息,學號為「532241」,姓名為「張鑫」,專業名為「計算機」;
(2)從表中刪除學號為「532240」的學生記錄;
(3)將表中所有記錄的專業名由「計算機」改為「計算機應用技術」。
(1)INSERT INTO Student(學號, 姓名, 專業名) VALUES(『532241』, 『張鑫』, 『計算機』)
或 INSERT INTO Student VALUES(『532241』, 『張鑫』, 『計算機』, NULL, NULL)
(2)DELETE FROM Student WHERE 學號=『532240』
(3)UPDATE Student SET 專業名=『計算機應用技術』 WHERE 專業名=『計算機』
6. 請列舉設計表時包括的內容。
確定表的名字、所包含的列名、列的數據類型、長度、是否可為空值、默認值情況、是否要使用以及何時使用約束、默認設置或規則以及所需索引、哪些列是主鍵、哪些列是外鍵。
7. 簡述索引的作用。
(1)快速存取數據。
(2)保證數據記錄的惟一性。
(3)實現表與表之間的參照完整性。
(4)在使用ORDER BY, GROUP BY子句進行數據檢索時,利用索引可減少排序和分組的時間。
8. 請根據以下表的定義寫出創建表的語句。
表名:Course
列名 數據類型 長度 是否允許為空
課程號 定長字元型(char) 3 否
課程名 定長字元型(char) 16 否
開課學期 整數型(tinyint) 1(系統默認值) 否
學時 整數型(tinyint) 1(系統默認值) 否
學分 整數型(tinyint) 4(系統默認值) 允許
CREATE TABLE course(
課程號 char(3) NOT NULL,
課程名 char(16) NOT NULL,
開課日期 tinyint NOT NULL,
學時 tinyint NOT NULL,
學分 tinyint NULL)
9. 根據以下要求寫出實現表操作的SQL語句。
假設資料庫中已經建立好以下表結構。
表名:Course
列名 數據類型 長度 是否允許為空
課程號 定長字元型(char) 3 否
課程名 定長字元型(char) 16 否
開課學期 整數型(tinyint) 1(系統默認值) 否
學時 整數型(tinyint) 1(系統默認值) 否
學分 整數型(tinyint) 4(系統默認值) 允許
請分別寫出如下操作的SQL語句:
(1) 增加新列「授課教師」,數據類型為char,長度為10,不允許為空;
(2) 刪除「學時」列;
(3) 將「課程名」列的長度由原來16改為20。
(1)ALTER TABLE Course ADD 授課教師 char(10) NOT NULL
(2)ALTER TABLE Course DROP COLUMN 學時
(3)ALTER TABLE Course ALTER COLUMN 課程名 char(20)
10. 資料庫中已經存在下表。
表名:Course
列名 數據類型 長度 是否允許為空
課程號 定長字元型(char) 3 否
課程名 定長字元型(char) 16 否
開課學期 整數型(tinyint) 1(系統默認值) 否
學時 整數型(tinyint) 1(系統默認值) 否
學分 整數型(tinyint) 4(系統默認值) 允許
繼續需要請留郵箱&上我空間留郵箱
㈥ 死磕:SQL行轉列匯總(全網最全最詳細)
閱讀目錄
PIVOT 用於將列值旋轉為列名(即行轉列),在 SQL Server 2000可以用聚合函數配合CASE語句實現
PIVOT 的一般語法是:PIVOT(聚合函數(列) FOR 列 in (…) )AS P
注意:PIVOT、UNPIVOT是SQL Server 2005 的語法,使用需修改資料庫兼容級別(在資料庫屬性->選項->兼容級別改為 90 )
SQL2008 中可以直接使用
完整語法:
View Code
UNPIVOT 用於將列明轉為列值(即列轉行),在SQL Server 2000可以用UNION來實現
姓名 課程 分數
---------- ---------- -----------
張三 語文 74
張三 數學 83
張三 物理 93
李四 語文 74
李四 數學 84
李四 物理 94
姓名 語文 數學 物理
---------- ----------- ----------- -----------
李四 74 84 94
張三 74 83 93
姓名 語文 數學 物理 總分 平均分
---------- ----------- ----------- ----------- -----------
李四 74 84 94 252 84.00
張三 74 83 93 250 83.33
姓名 語文 數學 物理
---------- ----------- ----------- -----------
張三 74 83 93
李四 74 84 94
姓名 課程 分數
---------- ---- -----------
李四 語文 74
李四 數學 84
李四 物理 94
張三 語文 74
張三 數學 83
張三 物理 93
最後給大家分享Spring系列的學習筆記和面試題,包含spring面試題、spring cloud面試題、spring boot面試題、spring教程筆記、spring boot教程筆記、最新阿里巴巴開發手冊(63頁PDF總結)、2022年Java面試手冊。一共整理了1184頁PDF文檔。私信博主(777)領取,祝大家更上一層樓!!!
原文作者:王思明
原文出處:http://www.cnblogs.com/maanshancss/
㈦ MySQL筆記1select基礎
查詢語句:select 語句
三種能力:投影、選擇、連接
投影:在一張二維表中根據所需要的條件選出所需要的列
選擇:在二維表中根據所需的條件選擇合適的行
連接:從一張或者多張表中獲取所需要的行,並且把這個行結合在一起的查詢
SQL語句大小寫不敏感。
select語句是可以計算的
算術表達式和運算符優先順序
舉例:select ename,sal 12*sal+100 from emp
計算出年薪+100塊
NULL值是不可用,且未分配的,未知並且不適用的值,可以當成是保留值
AS其實可以省略
例如:select ename as name,sal salary from emp;
查詢出的欄位會自動換成別名
例子:select ename "Name",sal*12 "Annual Salary" from emp;
級聯操作是將列或字元串和其他列串聯,由兩條豎線(||)表示
select ename,job,ename || job as "Employees" from emp;
可以看出Employees就將ENAME和JOB進行結合的一個操作
在select句子中適用DISTINCT 關鍵字消除重復行
select distinct deptnp from emp;
限制選擇的行:
where關鍵字
如果where後面查的數據是字元串類型或者日期類型的要加''號
#######比較條件
舉幾個例子:
select ename,job,sal,deptno from emp where sal between 5000 and 10000;
這個是包含了5000和10000的
in的表達:
select empno,ename,mgr,deptno from emp where mgr in (7788,7782,7000);
只要mgr有括弧裡面的值都顯示出來。
通配符:%通配的是多個字元,_通配的是一個字元
IS NULL是查詢某個欄位為空的顯示出來
and、or、not
例子:
查詢sal>=2000和job的內容是包括MAN字元串的,當同時滿足兩個條件時候才返回結果。
and就是兩邊同時為真,or的話是有一邊為真就行,not就是不等於
ASC 升序,默認升序
DESC 降序
例子:
將deptno中進行升序排列,排列出來後,在將sal進行降序排列。
單行函數:就是對單行數據進行處理的函數,只針對這一條數據得出一個結果
函數工作的過程
ROUND(45.926,2)是將45.926這個數字的小數點後兩位進行四捨五入操作得到45.93
TRUNC(45.926,2) 是將45.926這個數字的小數點後兩位後面的進行丟掉。
返回當前系統日期
經常是不同類型之間的轉換
TO_CHAR就是將日期型數字型轉換成字元型
例子:
數字型的轉換
把字元轉換成數字:
把字元轉換成日期:
什麼是分組函數?
另外的名字叫多行函數,針對於多行數據進行一個匯總處理的一類函數,最後會得到一個匯總的結果。
例子:
其實就是對一系列數據找最大值
基本格式:select group_function(column),... from table [where condition];
首先對一個數據進行分類匯總把每一組的數據單獨的拿出來。就是對每一列數據的相同數據進行一個分組,然後在將分組後的結果再去執行select後面跟的一個分組函數的操作。
例子:
那下面這樣的怎麼操作呢?
其實就是對分組以後的結果再次進行一個限制篩選
where和Having的區別?
where是針對於整體的一個查詢結果
Having是針對於分組後的查詢結果的一個條件限制,它是不能單獨存在的,它只能夠在group by後面
下面是它的表達式:
顯示部門的最大平均薪水是多少
select max(avg(sal))
是這樣的一個嵌套
當我們查的數據存在於多個表的時候就需要多表查詢
下面是用到的表
一個是EMP的職員表、一個是DEPT的部分表
表連接的三種方式:
從總類上來看:自連接、等值連接、外連接(又可以分為三類:左連接、右連接、全連接)
自連接:一個表自己與自己建立連接成為自連接或自身連接。
在查詢的時候多表,這兩張表是同一張表,所以在查詢前我們需要對這個表進行一個別名的重命名。
舉例:查詢出員工編號、名字及其經理名字
MGR對應的是經理的ID號,這個對應的就是另一張經理表中的名字
表示比較連接列的值顯示出最終的一個結果,其查詢結果中列出被連接表中的所有列,包括其中的重復列。
查詢員工的姓名 工作 部門號 部門名稱
左連接就是返回左邊的匹配行,不考慮右邊的表是否有相應的行
(+)的意思就是dept是個匹配表,左邊是一個基礎表,基礎表優先,如果右邊這個表找不到對應的值去匹配,會自動填空
右連接就是返回右邊的匹配行,不考慮左邊的表是否有相應的行,如果沒有會自動填空
左表右表都不做限制,所有的記錄都顯示,不足的地方用null填充
FULL JOIN表示emp和dept做一個全連接
ON表示觸發條件 。
㈧ SQL筆記-03
2017-03-09
1.查詢三要素:
1)查那張表的數據?class
2)查那些列?sname,salary,company
3)要查哪一行?where條件
mysql>select sname,salary,company fromclass where id=1
2.暴力查詢,利用*代表所有列:
3.取出class中所有人的姓名和工資;
mysql>select sname,salary from class;
3.查id大於1的所有搏渣蠢列
mysql>select * from class where id>1;
4.取部分行部分列:取id小於等於2的姓名和飯補
mysql>select sname,fanbu from classwhere id<=2;
5.建表的過程就是一個聲明欄位(聲明列)的過程,列類型的存儲范圍和占據位元組的關系
1)數值型
梁爛 整型:一般而言,佔N位元組則:0-2^8N-1或2^(8N-1)~+2^(8N-1)-1
tinyint:1個位元組 -128~+127 或0~255;
smallint:2個位元組 -32768~+32767或0-65535
mediumint:3個位元組
int:4個位元組
bigint:8個位元組
聲明tinyint怎麼樣讓他0-255怎麼樣讓他-128~=127:
整型聲明的時候的參數問題:
<1>建表:
mysql>create table class1(
->sname varchar(10) notnull default 『』,
->age tinyint not nulldefault 0
->)engine myisamcharset utf8;
<2>查看錶結構
mysql>desc class1;
<3>插入數據,age到底是-128~+127還是0-255:
mysql>insert into class1
->(sname,age)
->values
->(『劉備』,128);
報錯:超出范圍所以說明範圍不是0-255,再測試127成功
經過測試,默認范圍是-128~+127;
故:int系列不加說明默認有符號
<4>通過聲明int類型的符號,來走無符號的0-255范圍,給class1加一個列
mysql>alert table class1 add chengji tinyint unsigned not nulldefault 0;
插入數據范圍測試,故再列類型後加unsigned可以范圍切換成基陪正數范圍
<5>分析列類型的m參數,m參數必須和zerofill配合才有意義,給class1增加一個學號列(學號一般不為負,而且位數相同如000013,012345不夠位數也會用0填充;
mysql>alter table class1 add xuehao smallint(5) zerofill not nulldefault 0;
查看錶結構
往表中插入學號數字
插入的是345 但是會自動補齊0,這就是先用m規定了學號列的長度,然後不足長度部分用0不足是zerofill的定義實現的。
查看錶結構發現,只要聲明了是zerofill那麼就屬於unsigned類型了
㈨ SQL中left join on 、right join on、inner join on之間的區別
最近在入門SQL,記錄下自己學習的一些筆記。
left join(左聯接) 返回包括以左表主表,左表中的所有記錄和右表中聯結欄位相等(左表中匹配不到的欄位對應的值為null)即:左表的記錄將會全部表示出來,而右表只會顯示符合搜索條件的記錄。
right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄
inner join(等值連接) 只返回兩個表中聯結欄位相等的行,即通過相應條件交集後展示的所有欄位的大表
舉例如下:
--------------------------------------------
表A記錄如下:
aIDaNum
1a20050111
2a20050112
3a20050113
4a20050114
5a20050115
表槐散B記錄如下:
bIDbName
12006032401
22006032402
32006032403
42006032404
82006032408
--------------------------------------------
1.left join
sql語句如下:
select * from A
left join B
on A.aID = B.bID
結果如下:
aIDaNumbIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404
5a20050115NULLNULL
(所影響的行數為 5 行)
結果說明:
left join是以A表的記錄為基礎的,A可以看成左表,B可以看成右表,left join是以左表為準的.
換句話說,左表(A)的記錄將會瞎明物全部表示出來,而右表(B)只會顯示符合搜索條件的記錄(例子中為: A.aID = B.bID).B表記錄不足的地方均為NULL.
--------------------------------------------
2.right join
sql語句如下:
select * from A
right join B
on A.aID = B.bID
結果如下:
aIDaNum磨液bIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404
NULLNULL 82006032408
(所影響的行數為 5 行)
結果說明:
仔細觀察一下,就會發現,和left join的結果剛好相反,這次是以右表(B)為基礎的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql語句如下:
select * from A
innerjoin B
on A.aID = B.bID
結果如下:
aIDaNumbIDbName
1a2005011112006032401
2a2005011222006032402
3a2005011332006032403
4a2005011442006032404
結果說明:
很明顯,這里只顯示出了 A.aID = B.bID的記錄.這說明inner join並不以誰為基礎,它只顯示符合條件的記錄.
從SQL開始入門,其他的語言繼續學習。生命不停,學習不止!
㈩ oracle筆記-動態SQL
第 章 動態SQL
為何使用動態SQL
實現動態SQL有兩種方式 DBMS_SQL和本地動態SQL(EXECUTE IMMEIDATE)
主要從以下方面考慮使用哪種方式
是否知道涉及的列數和類型
DBMS_SQL包括了一個可以 描述 結果集的存儲過程(DBMS_SQL DESCRIBE_COLUMNS) 而本地動態SQL沒有
是否知道可能涉及的綁定變數數和類型
DBMS_SQL允許過程化的綁定語句的輸入 而本地動態SQL需要在編譯時確定
是否使用 數組化 操作(Array Processing)
DBMS_SQL允許 而本地動態SQL基本不可以 但可以用其他方式實現(對查詢可用FETCH BULK COLLECT INTO 對INSERT等 可用一個BEGIN … END塊中加循環實現)
是否在同一個會話中多次執行同一語句
DBMS_SQL可以分析一次執行多次 而本地動態SQL會在每次執行時進行軟分析
是否需要用REF CURSOR返回結果集
僅本地動態SQL可用REF CURSOR返回結果集
如何使用動態SQL
DBMS_SQL
調用OPEN_CURSOR獲得一個游標句柄
調用PARSE分析語句 一個游標句柄可以用於多條不同的已分析語句 但一個時間點僅一條有效
調用BIND_VARIABLE或BIND_ARRAY來提供語句的任何輸入
若是一個查詢(SELECT語句) 調用DIFINE_COLUMN或DEFINE_ARRAY來告知Oracle如何返回結果
調用EXECUTE執行語句
若是一個查詢 調用FETCH_ROWS來讀取數據 可以使用COLUMN_VALUE從SELECT列表根據位置獲得這些值
否則 若是一個PL/SQL塊或帶有RETURN子句的DML語句 可以調用VARIABLE_VALUE從塊中根據變數名獲得OUT值
調用CLOSE_CURSOR
注意這里對任何異常都應該處理 以關閉游標 防止泄露資源
本地動態SQL
EXECUTE IMMEDIATE 語句
[INTO {變數 變數 … 變數N | 記錄體}]
[USING [IN | OUT | IN OUT] 綁定變數 … 綁定變數N]
[{RETURNING | RETURN} INTO 輸出 [ … 輸出N]…]
注意本地動態SQL僅支持弱類型REF CURSOR 即對於REF CURSOR 不支持BULK COLLECT
最後說明
lishixin/Article/program/Oracle/201311/18948