- Oracle從入門到精通(視頻實(shí)戰(zhàn)版)
- 秦靖 劉存勇
- 219字
- 2018-12-31 20:05:02
第4章 SQL基礎(chǔ)
學(xué)習(xí)每一個(gè)數(shù)據(jù)庫(kù)不能缺少的就是如何訪問它的語(yǔ)言,學(xué)習(xí)一個(gè)訪問數(shù)據(jù)庫(kù)的語(yǔ)言,就是和數(shù)據(jù)庫(kù)溝通的第一步。SQL(Structured Query Language)是每一個(gè)數(shù)據(jù)庫(kù)都通用的語(yǔ)言,因此,學(xué)好Oracle 11g,SQL也是基礎(chǔ)。使用SQL語(yǔ)言可以在數(shù)據(jù)庫(kù)中創(chuàng)建表、檢索數(shù)據(jù)、操作數(shù)據(jù),并對(duì)權(quán)限進(jìn)行控制。本章包括以下知識(shí)點(diǎn):
? SQL語(yǔ)言概述以及分類
? SQL中4種類型的語(yǔ)言講解(DDL、DML、DQL、DCL)
本章內(nèi)容基本涵蓋了對(duì)SQL中4種類型語(yǔ)言的講解。通過本章的學(xué)習(xí),讀者可以熟練地使用SQL語(yǔ)言對(duì)Oracle 11g數(shù)據(jù)庫(kù)進(jìn)行操作。
4.1 SQL—數(shù)據(jù)庫(kù)溝通的語(yǔ)言標(biāo)準(zhǔn)
SQL(結(jié)構(gòu)化查詢語(yǔ)言)的主要功能就是在各種數(shù)據(jù)庫(kù)間建立聯(lián)系,進(jìn)行溝通。本節(jié)將學(xué)習(xí)什么是SQL及其分類。
4.1.1 什么是SQL
美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)(American National Standards Institute)成立于1918年,SQL就是美國(guó)國(guó)家標(biāo)準(zhǔn)學(xué)會(huì)確定的。SQL主要用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。SQL語(yǔ)言自IBM公司在1981年推出以后,由于其語(yǔ)法結(jié)構(gòu)簡(jiǎn)潔又簡(jiǎn)單易學(xué),在數(shù)據(jù)庫(kù)中得到了廣泛的應(yīng)用。現(xiàn)行的所有數(shù)據(jù)庫(kù)幾乎都支持SQL語(yǔ)言,如Sybase、SQL Server、Oracle以及Visual FoxPro等數(shù)據(jù)庫(kù)。但是這些數(shù)據(jù)庫(kù)各自又對(duì)SQL語(yǔ)言進(jìn)行了改進(jìn),如SQL Server數(shù)據(jù)庫(kù)使用Transact-SQL語(yǔ)言。我們學(xué)習(xí)的Oracle數(shù)據(jù)庫(kù)使用的是PL/SQL語(yǔ)言。
SQL語(yǔ)言本身可以分成4類,即:
? 定義要在數(shù)據(jù)庫(kù)存儲(chǔ)哪些信息的數(shù)據(jù)定義語(yǔ)言(DDL);
? 對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行操作的數(shù)據(jù)操縱語(yǔ)言(DML);
? 對(duì)數(shù)據(jù)庫(kù)中的表進(jìn)行檢索的數(shù)據(jù)查詢語(yǔ)言(DQL);
? 對(duì)數(shù)據(jù)庫(kù)中對(duì)象進(jìn)行權(quán)限管理的數(shù)據(jù)控制語(yǔ)言(DCL)。
4.1.2 了解SQL的種類
從SQL語(yǔ)言的種類來看,由數(shù)據(jù)庫(kù)表的創(chuàng)建到給數(shù)據(jù)庫(kù)中的對(duì)象進(jìn)行權(quán)限管理全部都可以使用SQL語(yǔ)言,下面就按照SQL語(yǔ)言的使用順序說明每種SQL語(yǔ)言的作用。
1. 數(shù)據(jù)定義語(yǔ)言(DDL)
數(shù)據(jù)定義語(yǔ)言(Data Definition Language,DDL)正如它字面上的意思,是定義數(shù)據(jù)庫(kù)中數(shù)據(jù)要如何存儲(chǔ)的。DDL語(yǔ)言包括對(duì)數(shù)據(jù)庫(kù)中對(duì)象的創(chuàng)建、修改、刪除的操作,這些對(duì)象主要有數(shù)據(jù)庫(kù)、數(shù)據(jù)表、視圖、索引等。
2. 數(shù)據(jù)操縱語(yǔ)言(DML)
數(shù)據(jù)操縱語(yǔ)言(Data Manipulation Language,DML)也像它字面上的意思,是對(duì)數(shù)據(jù)庫(kù)表進(jìn)行操作的。這些操作主要包括對(duì)數(shù)據(jù)庫(kù)表中的數(shù)據(jù)進(jìn)行增加、刪除、修改的操作,并且在操作時(shí)一次可以把表中數(shù)據(jù)按條件進(jìn)行多條或全部的處理,為數(shù)據(jù)庫(kù)的使用提供方便。
3. 數(shù)據(jù)查詢語(yǔ)言(DQL)
數(shù)據(jù)查詢語(yǔ)言(Data Query Language,DQL)是對(duì)數(shù)據(jù)庫(kù)表中的數(shù)據(jù)進(jìn)行查詢的,查詢時(shí)既可以查詢一個(gè)表也可以進(jìn)行多表的查詢,并且可以按不同的條件來檢索數(shù)據(jù),給數(shù)據(jù)庫(kù)的查詢統(tǒng)計(jì)工作帶來了更多的便利。
4. 數(shù)據(jù)控制語(yǔ)言(DCL)
數(shù)據(jù)控制語(yǔ)言(Data Control Language,DCL)是對(duì)數(shù)據(jù)庫(kù)中的對(duì)象權(quán)限進(jìn)行權(quán)限設(shè)置和取消等操作,但是只有數(shù)據(jù)庫(kù)的系統(tǒng)管理員才有權(quán)力去執(zhí)行對(duì)數(shù)據(jù)庫(kù)對(duì)象權(quán)限的操作。使用DCL可以為數(shù)據(jù)庫(kù)中不同的用戶設(shè)置不同的權(quán)限,這樣也能夠提高數(shù)據(jù)庫(kù)的安全性。
4.2 Oracle 11g中支持的數(shù)據(jù)類型
數(shù)據(jù)類型是在向數(shù)據(jù)表中存儲(chǔ)數(shù)據(jù)前必須設(shè)定好的,就像如果要使用記事本查看文件內(nèi)容,那么文件就要是文本的,不能有圖片,否則圖片是查看不了的,因?yàn)橛浭卤局兄荒懿榭次谋疚募?shù)據(jù)類型如此重要,本節(jié)中將首先介紹如何查看Oracle 11g中的全部數(shù)據(jù)類型,然后講解其中常用的數(shù)據(jù)類型。
4.2.1 查看Oracle 11g中的數(shù)據(jù)類型
要使用數(shù)據(jù)庫(kù)來存儲(chǔ)數(shù)據(jù),首先就要知道這個(gè)數(shù)據(jù)庫(kù)都能存儲(chǔ)什么類型的數(shù)據(jù)。首先在Oracle 11g的企業(yè)管理器中查看數(shù)據(jù)類型。查看的步驟如下所示。
1. 打開企業(yè)管理器
在安裝完Oracle 11g后企業(yè)管理器就已經(jīng)安裝完成了,在【開始】菜單中的【程序】下找到安裝的目錄,單擊其中的【Database Control-orcl】項(xiàng),如圖4.1所示。企業(yè)管理器的登錄頁(yè)面如圖4.2所示。
注意
這里【Database Control-orcl】項(xiàng)中的orcl指的是安裝數(shù)據(jù)庫(kù)時(shí)的數(shù)據(jù)庫(kù)實(shí)例名。

圖4.1 打開企業(yè)管理器

圖4.2 企業(yè)管理器登錄頁(yè)面
在圖4.2所示的企業(yè)管理器登錄頁(yè)面中輸入用戶名和口令,并把連接身份設(shè)置為SYSDBA,單擊【登錄】按鈕,登錄到企業(yè)管理器的主界面,如圖4.3所示。

圖4.3 企業(yè)管理器主界面
2. 進(jìn)入創(chuàng)建數(shù)據(jù)表界面
在圖4.3所示的企業(yè)管理器主界面中,單擊【方案】鏈接,進(jìn)入方案界面,如圖4.4所示。在“數(shù)據(jù)庫(kù)對(duì)象”一欄里,單擊【表】鏈接,進(jìn)入創(chuàng)建表界面,如圖4.5所示。

圖4.4 企業(yè)管理器中方案界面

圖4.5 創(chuàng)建表界面
3. 查看數(shù)據(jù)類型
為了查看表中的數(shù)據(jù)類型,單擊創(chuàng)建表界面中的【創(chuàng)建】按鈕,界面如圖4.6所示。在界面中選中【標(biāo)準(zhǔn)】單選按鈕,單擊【繼續(xù)】按鈕,界面如圖4.7所示。
在圖4.7所示的界面中,在“數(shù)據(jù)類型”下拉列表中一共有23種數(shù)據(jù)類型,分別是VARCHAR2、NUMBER、DATE、CHAR、FLOAT、INTEGER、NCHAR、NVARCHAR2、LONG、LONG RAW、RAW、ROWID、UROWID、BLOB、CLOB、NCLOB、BFILE、TIMESTAMP、INTERVAL YEAR、INTERVAL DAY、BINARY_DOUBLE、BINARY_FLOAT、XML TYPE類型。

圖4.6 創(chuàng)建表第一步

圖4.7 創(chuàng)建表界面
4.2.2 常用數(shù)據(jù)類型
在Oracle 11g中提供的數(shù)據(jù)類型有23種,下面介紹常用的數(shù)據(jù)類型,并把數(shù)據(jù)類型分為字符型、數(shù)字型、日期類型和其他數(shù)據(jù)類型4類進(jìn)行講解。
1. 字符型
字符型在Oracle 11g中有varchar2、char、nchar、nvarchar2和long五種,它們?cè)跀?shù)據(jù)庫(kù)中是以ASCII碼的格式存儲(chǔ)的。下面用一個(gè)表格來講解每種數(shù)據(jù)類型的作用,如表4.1所示。
表4.1 字符型

說明
在Oracle11g中l(wèi)ong類型很少使用,最常使用的字符數(shù)據(jù)類型就是varchar2。
2. 數(shù)字型
數(shù)字型在Oracle 11g中常用的有number和float類型兩種,可以用它們來表示整數(shù)和小數(shù)。具體取值范圍如表4.2所示。
表4.2 數(shù)字型

3. 日期類型
日期類型在Oracle 11g中常用的有date和timestamp兩種類型,可以用它們來存放日期和時(shí)間。詳細(xì)說明如表4.3所示。
表4.3 日期類型

4. 其他數(shù)據(jù)類型
除了上面講過的字符型、數(shù)字型、日期類型之外,在Oracle 11g中還有存放大數(shù)據(jù)的數(shù)據(jù)類型以及存放二進(jìn)制文件的數(shù)據(jù)類型。表4.4所示是對(duì)這些數(shù)據(jù)類型的詳細(xì)說明。
表4.4 其他數(shù)據(jù)類型

4.3 數(shù)據(jù)定義語(yǔ)言(DDL)
DDL主要包括數(shù)據(jù)庫(kù)對(duì)象的創(chuàng)建(create)、刪除(drop)和修改(alter)的操作。本節(jié)中將以數(shù)據(jù)表為對(duì)象講解創(chuàng)建、刪除、修改的DDL語(yǔ)言,對(duì)于其他對(duì)象的操作將在后面的章節(jié)中詳細(xì)介紹。
4.3.1 使用Create語(yǔ)句創(chuàng)建表
在DDL語(yǔ)言中第一次使用數(shù)據(jù)庫(kù)要用到的就是創(chuàng)建表,創(chuàng)建表使用create table語(yǔ)句完成。具體語(yǔ)法如下:
CREATE TABLE table_name ( column_name datatype [null|not null], column_name datatype [null|not null], ... [constraint] )
【語(yǔ)法說明】
? table_name:在數(shù)據(jù)庫(kù)中創(chuàng)建的數(shù)據(jù)表的名稱,在一個(gè)數(shù)據(jù)庫(kù)中數(shù)據(jù)表名是不能重復(fù)的。
? column_name:表中的列名,列名在一個(gè)表中也是不能重復(fù)的。
? datatype:該列存放數(shù)據(jù)的數(shù)據(jù)類型。
? [null|not null]:允許該列為空或者不允許該列為空,在創(chuàng)建表時(shí)默認(rèn)為不允許該列為空。
? [constraint]:為表中的列設(shè)置約束,約束主要包括主鍵約束、外鍵約束、檢查約束等,在第3章中有簡(jiǎn)要的介紹,在4.4節(jié)中將詳細(xì)講解如何創(chuàng)建這些約束。
下面利用上面的語(yǔ)句創(chuàng)建一個(gè)商品信息表。首先打開sql/plus并以scott用戶的身份登錄,商品信息表中有商品編號(hào)、商品名稱、商品價(jià)格、商品數(shù)量、商品類型、商品描述、產(chǎn)地7個(gè)字段。這些字段的數(shù)據(jù)類型定義如表4.5所示。
表4.5 商品信息表(productinfo)

按照設(shè)置好的字段名和數(shù)據(jù)類型在sql/plus中創(chuàng)建表productinfo,結(jié)果如圖4.8所示。

圖4.8 產(chǎn)品信息表
4.3.2 使用Alter語(yǔ)句修改表
如果要對(duì)已經(jīng)創(chuàng)建好的表進(jìn)行修改,那么就需要使用alter table語(yǔ)句來修改。修改表的基本語(yǔ)法如下:
ALTER TABLE table_name ADD column_name | MODIFY column_name|DROP COLUMN column_name;
【語(yǔ)法說明】
? ADD:用于向表中添加列。
? MODIFY:用來修改表中已經(jīng)存在的列的信息。
? DROP COLUMN:刪除表中的列,在刪除表中的列時(shí)經(jīng)常要加上CASCADE CONSTRAINTS,是要把與該列有關(guān)的約束也一并刪除掉。
下面就利用上面的知識(shí)分別完成下面幾個(gè)例子。
【示例1】修改productinfo商品信息表,向該表中增加一列
向表中添加列使用的是ADD子句,向表中增加一列備注remark信息,字段類型是varchar2。修改操作如圖4.9所示。

圖4.9 添加列remark
這樣,就完成了在productinfo表中增加一列的修改操作。
注意
這里在登錄SQL*Plus時(shí)使用的用戶是sys,所以在修改表時(shí)需要在表的前面加上scott,如果使用scott用戶登錄就不用再添加scott了。
【示例2】修改productinfo商品信息表,修改列的字段類型
修改字段類型需要使用的是MODIFY子句,修改productinfo中剛添加的remark列的字段類型為number類型。修改操作如圖4.10所示。
這樣就完成了把remark字段的類型修改成number類型的操作了。
【示例3】修改productinfo商品信息表,刪除表中的字段
刪除表中的字段要使用DROP子句,下面就刪除productinfo表中的remark字段。刪除操作如圖4.11所示。

圖4.10 修改remark列

圖4.11 刪除remark列
這樣就把remark列從表productinfo中刪除了。
上面已經(jīng)練習(xí)了如何修改表中的字段。實(shí)際上,對(duì)表的修改操作并不是一次只能修改一個(gè)字段,也可以同時(shí)完成對(duì)多個(gè)字段的修改。下面就運(yùn)用上面的語(yǔ)句,完成一個(gè)綜合的實(shí)例。
【示例4】修改productinfo商品信息表的多個(gè)字段
修改productinfo表中的ProductName字段,把字段的長(zhǎng)度修改成25,并添加一個(gè)字段remark。具體操作如圖4.12所示。
這樣就同時(shí)修改了表中兩個(gè)字段,除了修改和添加字段外,還可以刪除多余的字段。這里就不一一演示了,請(qǐng)讀者自行練習(xí)。

圖4.12 修改多個(gè)字段
在對(duì)表的修改操作中還可以修改表中約束的信息,對(duì)于約束的修改將在4.4節(jié)中詳細(xì)講述。
4.3.3 使用Drop語(yǔ)句刪除表
在使用數(shù)據(jù)庫(kù)中的表時(shí)經(jīng)常需要?jiǎng)h除一些不需要的表,刪除表需要使用DROP TABLE語(yǔ)句來完成。具體語(yǔ)句如下:
DROP TABLE table_name;
刪除表的語(yǔ)句是非常簡(jiǎn)單的,只需要指定要?jiǎng)h除的表名,即可刪除該表。
下面就利用上面刪除表的語(yǔ)句完成刪除的操作。如果要?jiǎng)h除上面創(chuàng)建的productinfo表,只需要下面的語(yǔ)句即可完成:
DROP TABLE productinfo;
以上就是對(duì)數(shù)據(jù)定義語(yǔ)言(DDL)基本操作的講解。
4.4 約束的使用
約束是保證數(shù)據(jù)庫(kù)表中數(shù)據(jù)的完整性和一致性的手段,在本書的第3章中已經(jīng)介紹過Oracle 11g中的5個(gè)約束,即主鍵約束、外鍵約束、唯一約束、檢查約束、非空約束。在本節(jié)中將一一講解每一個(gè)約束是如何創(chuàng)建、修改、刪除的。
4.4.1 主鍵約束
主鍵約束在每一個(gè)數(shù)據(jù)表中只有一個(gè),但是一個(gè)主鍵約束可以由數(shù)據(jù)表中多個(gè)列組成。下面就學(xué)習(xí)主鍵約束的使用。
(1)使用主鍵約束創(chuàng)建商品類型信息表在創(chuàng)建表時(shí)就創(chuàng)建主鍵約束,只需要使用primary key(字段名)即可完成。商品類型信息表主要用來存放商品類型信息,包括商品類型編號(hào)和商品類型名稱,并把商品類型編號(hào)設(shè)置成主鍵。這兩個(gè)字段的數(shù)據(jù)庫(kù)類型定義如表4.6所示。
表4.6 商品類型信息表(categoryinfo)

按照設(shè)置好的字段名和數(shù)據(jù)類型,在sql/plus中創(chuàng)建表categoryinfo,并把商品類型編號(hào)(CategoryId)設(shè)置成主鍵,結(jié)果如圖4.13所示。

圖4.13 商品類型信息表
(2)使用ALTER TABLE語(yǔ)句為表添加主鍵約束
在創(chuàng)建表時(shí)如果沒有創(chuàng)建主鍵約束,可以在修改表時(shí)為表添加主鍵約束。添加主鍵約束的語(yǔ)法如下:
ALTER TABLE table_name ADD CONSTRAINTS constraint_name PRIMARY KEY(column_name);
【語(yǔ)法說明】
? constraint_name:約束的名稱。
? column_name:主鍵約束指定數(shù)據(jù)表中的列名。
下面就假設(shè)在創(chuàng)建商品類型信息表categoryinfo時(shí)沒有添加主鍵約束,在修改表時(shí)為表添加主鍵約束,結(jié)果如圖4.14所示。

圖4.14 添加主鍵約束
這樣就創(chuàng)建了主鍵約束,主鍵約束的名稱是pk_category,創(chuàng)建的主鍵列是categoryid。
(3)移除主鍵約束
如果需要移除表中現(xiàn)有的主鍵約束,可以使用如下所示的語(yǔ)句完成:
ALTER TABLE table_name DROP CONSTRAINT constraint_name;
【語(yǔ)法說明】
constraint_name:要移除的約束名稱,這個(gè)名稱可以是在表中任意約束的名稱。
下面利用上面的語(yǔ)句,移除商品類型信息表中的主鍵約束pk_category。具體語(yǔ)句如下:
ALTER TABLE categoryinfo DROP CONSTRAINT pk_category;
這樣,就完成了主鍵約束pk_category的移除操作。
4.4.2 外鍵約束
外鍵約束可以保證使用外鍵約束的數(shù)據(jù)庫(kù)列與所引用的主鍵約束的數(shù)據(jù)列一致,外鍵約束在一個(gè)數(shù)據(jù)表中可以有多個(gè)。下面就來講述外鍵約束的使用。
(1)使用外鍵約束創(chuàng)建商品信息表
外鍵約束是建立在兩張表中的約束,需要在創(chuàng)建表的語(yǔ)句后面加上如下語(yǔ)句:
CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCE table_name(column_name) ON DELETE CASCADE;
【語(yǔ)法說明】
? constraint_name:創(chuàng)建的外鍵約束名字。
? FOREIGN KEY (column_name):指定外鍵約束的列名。
? REFERENCE:要引用的表名(列名)。
? ON DELETE CASCADE:設(shè)置級(jí)聯(lián)刪除,當(dāng)主鍵的字段被刪除時(shí),外鍵所對(duì)應(yīng)的字段也被同時(shí)刪除。
下面就利用上面的語(yǔ)句完成外鍵約束的創(chuàng)建。在創(chuàng)建商品信息表時(shí)有一個(gè)字段叫做商品類型,如果要讓商品信息表中類型全部來源于商品類型信息表中的類型,就可以把商品信息表中商品類型設(shè)置成外鍵約束。這里為了不刪除原有的表,新創(chuàng)建一張商品信息表(productinfo1)。具體操作語(yǔ)句如圖4.15所示。

圖4.15 創(chuàng)建外鍵約束
這樣,在商品信息表productinfo1的category字段中的數(shù)據(jù)就必須是商品類型信息表中已經(jīng)存在的商品類型,也就保證了商品類型信息的一致性。
(2)在修改數(shù)據(jù)庫(kù)表時(shí)添加外鍵約束
在已經(jīng)存在的數(shù)據(jù)庫(kù)表中也是可以添加外鍵約束的。添加外鍵約束是在ALTER TABLE語(yǔ)句后面加上如下語(yǔ)句:
ADD CONSTRAINT constraint_name FOREIGN KEY(column_name) REFERENCE table_name(column_name) ON DELETE CASCADE;
上面的語(yǔ)句和創(chuàng)建外鍵約束的語(yǔ)句一致,這里就不再詳細(xì)講解了。
下面就使用上面的語(yǔ)句,完成對(duì)之前已經(jīng)創(chuàng)建好的商品信息表(productinfo)添加外鍵約束的操作。具體操作語(yǔ)句如圖4.16所示。

圖4.16 添加外鍵約束
這樣,就為表productinfo中的category字段添加了外鍵約束。
(3)移除外鍵約束
移除外鍵約束與移除主鍵約束的語(yǔ)法一致,這里以刪除productinfo1中的外鍵約束fk_pro為例刪除外鍵約束。具體刪除語(yǔ)句如下:
ALTER TABLE productinfo1 DROP CONSTRAINT fk_pro;
這樣,就移除了表productinfo1中的外鍵約束fk_pro。
4.4.3 CHECK約束
CHECK約束是檢查約束,能夠規(guī)定每一個(gè)列能夠輸入的值,以保證數(shù)據(jù)的正確性。下面就詳細(xì)講解CHECK約束的使用。
(1)創(chuàng)建表時(shí)添加CHECK約束
創(chuàng)建CHECK約束可以設(shè)置在“性別”列中只能輸入男或者女,在“年齡”列中只能輸入18~30歲的年齡。創(chuàng)建CHECK約束的語(yǔ)句是在創(chuàng)建表的語(yǔ)句后面加上如下語(yǔ)句完成的:
CONSTRAINT constraint_name CHECK(condition);
其中,condition是檢查約束的條件,檢查約束的條件要建立在具體的字段中。例如,給字段Age設(shè)置為18~30歲,就可以寫成age>=18 and age<=30。
下面創(chuàng)建一個(gè)顧客信息表,顧客信息表主要包括顧客編號(hào)、顧客姓名、顧客年齡、顧客性別、顧客電話、顧客住址6個(gè)字段信息。顧客信息表的詳細(xì)信息如表4.7所示。
表4.7 顧客信息表(custominfo)

根據(jù)表4.7所示的顧客信息表的信息,創(chuàng)建顧客信息表,并設(shè)置Age列的取值范圍是18~50歲。具體操作如圖4.17所示。

圖4.17 創(chuàng)建Age列的檢查約束
這樣就完成了年齡字段中檢查約束的創(chuàng)建,在年齡的字段中只能輸入18~50的數(shù)字,輸入其他的數(shù)字就會(huì)出現(xiàn)錯(cuò)誤。
(2)在修改數(shù)據(jù)表時(shí)添加CHECK約束
在修改數(shù)據(jù)表時(shí)添加檢查約束的方法也比較簡(jiǎn)單,在ALTER TABLE語(yǔ)句的后面添加如下語(yǔ)句即可:
ADD CONSTRAINT constraint_name CHECK(condition);
下面利用上面語(yǔ)句為顧客信息表添加性別列的檢查約束,要求性別列只能輸入“男”或者“女”。具體操作如圖4.18所示。

圖4.18 添加Gender列的檢查約束
這樣就完成了Gender性別列檢查約束的添加,也可以同時(shí)添加多個(gè)檢查約束。
(3)移除CHECK約束
移除CHECK約束也與移除其他約束一樣,只要知道CHECK約束的名字,就可以移除CHECK約束,下面就移除在顧客信息表中Gender列的檢查約束chk_gender。具體語(yǔ)句如下:
ALTER TABLE custominfo DROP CONSTRAINT chk_gender;
這樣,就可以移除CHECK約束chk_gender。
4.4.4 UNIQUE約束
UNIQUE約束稱為唯一約束,可以設(shè)置在表中輸入的字段值都是唯一的,這個(gè)約束和之前學(xué)習(xí)的主鍵約束非常相似。不同的就是唯一約束在一個(gè)表中可以有多個(gè),而主鍵約束在一個(gè)表中只能有一個(gè)。下面就詳細(xì)講述UNIQUE約束的使用。
(1)在創(chuàng)建表時(shí)添加UNIQUE約束
在創(chuàng)建表時(shí)可以為表中的字段直接添加UNIQUE約束,具體的創(chuàng)建方法是在創(chuàng)建表的語(yǔ)句后面加上下面的語(yǔ)句:
CONSTRAINT constraint_name UNIQUE(column_name);
下面就創(chuàng)建一個(gè)訂單信息表,訂單信息表中主要包括訂單編號(hào)、顧客編號(hào)、商品編號(hào)、訂單日期、訂貨數(shù)量、發(fā)貨日期,訂單信息表的詳細(xì)信息如表4.8所示。
表4.8 訂單信息表(orderinfo)

根據(jù)表4.8所示訂單信息,創(chuàng)建訂單信息表,并把訂單編號(hào)設(shè)置成UNIQUE約束。具體操作如圖4.19所示。
這樣,就為訂單信息表中的訂單編號(hào)設(shè)置了唯一約束,訂單編號(hào)在訂單信息表中的信息就不可以重復(fù)了。
(2)在修改表時(shí)添加UNIQUE約束
修改表時(shí)添加UNIQUE約束也是在ALTER TABLE語(yǔ)句后面加上如下語(yǔ)句完成的:
ADD CONSTRAINT constraint_name UNIQUE(column_name);
下面就對(duì)訂單信息表中的顧客編號(hào)加入U(xiǎn)NIQUE約束,具體操作如圖4.20所示。

圖4.19 添加唯一約束

圖4.20 為顧客編號(hào)加入U(xiǎn)NIQUE約束
這樣,就說明了在一個(gè)表中可以添加多個(gè)UNIQUE約束。
(3)移除UNIQUE約束
移除UNIQUE約束的方法也和移除其他約束一樣,這里移除為訂單信息表添加的顧客編號(hào)的UNIQUE約束。移除UNIQUE約束的語(yǔ)句如下:
ALTER TABLE orderinfo DROP CONSTAINT unq_customid;
這樣,就可以移除顧客編號(hào)的UNIQUE約束了。
4.4.5 NOT NULL約束
NOT NULL約束就是非空約束,經(jīng)常會(huì)在創(chuàng)建表時(shí)添加非空約束以確保字段必須要輸入值。該約束和之前的約束不同,是直接在創(chuàng)建列時(shí)設(shè)置字段的非空約束。下面就詳細(xì)講解NOT NULL約束的使用。
(1)創(chuàng)建NOT NULL約束
創(chuàng)建NOT NULL約束的語(yǔ)法在創(chuàng)建表時(shí)就已經(jīng)解釋過了,這里創(chuàng)建一個(gè)商品管理員信息表,主要包括管理員編號(hào)、管理員注冊(cè)名、管理員密碼、管理員真實(shí)姓名、管理員聯(lián)系方式。詳細(xì)信息如表4.9所示。
表4.9 管理員信息表(Managerinfo)

根據(jù)表4.9所示的信息,創(chuàng)建管理員信息表并且把LoginName和Password兩個(gè)字段設(shè)置為非空約束。具體操作如圖4.21所示。
這樣,就完成了LoginName和Password兩個(gè)字段的非空約束的設(shè)置,和非空約束對(duì)應(yīng)的還可以設(shè)置該字段為空,也就是NULL。
(2)修改表時(shí)設(shè)置NOT NULL約束
在修改表時(shí)設(shè)置NOT NULL約束,也不需要再使用ADD關(guān)鍵字來添加約束,只要使用MODIFY關(guān)鍵字就可以設(shè)置表中字段的NOT NULL約束。具體語(yǔ)法如下:
ALTER TABLE table_name MODIFY column NOT NULL;
下面就利用上面的語(yǔ)句完成設(shè)置管理員信息表真實(shí)姓名列為NOT NULL的操作,具體操作如圖4.22所示。

圖4.21 設(shè)置非空約束

圖4.22 為Name列設(shè)置NOT NULL約束
對(duì)于非空約束不需要?jiǎng)h除,如果要取消某個(gè)列非空的約束,直接使用MODIFY語(yǔ)句把該列的非空約束寫成NULL即可。
4.5 數(shù)據(jù)操縱語(yǔ)言(DML)和數(shù)據(jù)查詢語(yǔ)言(DQL)
DML也就是用來操縱數(shù)據(jù)庫(kù)中數(shù)據(jù)所使用的語(yǔ)言,對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)操縱無非就是對(duì)數(shù)據(jù)進(jìn)行增加、刪除、修改、查詢的操作。對(duì)于數(shù)據(jù)的查詢也稱為數(shù)據(jù)查詢語(yǔ)言。本節(jié)將詳細(xì)講解數(shù)據(jù)操縱語(yǔ)言的使用。
4.5.1 添加數(shù)據(jù)就用INSERT
在創(chuàng)建好數(shù)據(jù)表之后,添加數(shù)據(jù)是首先要做的工作。在給表中添加數(shù)據(jù)時(shí)要與表中字段類型相匹配,也就是說,如果表中的字段是日期類型,那么在向該字段中添加數(shù)據(jù)時(shí)也要添加日期類型的數(shù)據(jù)。向表中添加數(shù)據(jù)的一般語(yǔ)法如下:
INSERT INTO table_name(column_name1, column_name2,...)VALUES(data1,data2...);
【語(yǔ)法說明】
? column_name1:指定表中要添加數(shù)據(jù)的列名,可以是1個(gè)到多個(gè)。
? data1:要填入指定列的數(shù)據(jù)值,這里要求添加值的數(shù)目要與列名的數(shù)量一致。
實(shí)際上,向數(shù)據(jù)表中添加數(shù)據(jù)不僅可以使用上面的語(yǔ)句來向表中添加值,也可以根據(jù)其他數(shù)據(jù)表中的數(shù)據(jù)來添加數(shù)據(jù)。下面就分別講述這兩種向表中添加數(shù)據(jù)的方法。
(1)直接添加數(shù)據(jù)
直接添加數(shù)據(jù)時(shí)使用上面的語(yǔ)句就可以完成。下面就完成向管理員信息表中添加數(shù)據(jù)的操作。具體操作如圖4.23所示。

圖4.23 增加數(shù)據(jù)
這樣,在管理員信息表managerinfo中就增加了一條數(shù)據(jù)。
(2)通過其他數(shù)據(jù)表向表中添加數(shù)據(jù)
如果在數(shù)據(jù)庫(kù)中需要新創(chuàng)建一個(gè)數(shù)據(jù)表,但是這個(gè)表中的數(shù)據(jù)又與其他表中的數(shù)據(jù)有些相似,那么就可以直接把其他表中的數(shù)據(jù)添加到新創(chuàng)建的數(shù)據(jù)表中,這樣就能減少添加數(shù)據(jù)的工作量。具體語(yǔ)法如下:
INSERT INTO table_name1(column_name1, column_name2,...) select column_name1, column_name2... FROM table_name2;
【語(yǔ)法說明】
? table_name1:目標(biāo)表的名稱,也就是要插入數(shù)據(jù)的表名。
? table_name2:數(shù)據(jù)的來源表。
注意
在使用來源表向目標(biāo)表中插入數(shù)據(jù)時(shí),一定要確保兩個(gè)表的列的個(gè)數(shù)和列的數(shù)據(jù)類型都一致,否則會(huì)出現(xiàn)錯(cuò)誤。
【示例5】下面就利用上面的語(yǔ)句完成從管理員信息表中把數(shù)據(jù)添加到新創(chuàng)建的賬號(hào)信息表中
首先要新創(chuàng)建一個(gè)賬號(hào)信息表。賬號(hào)信息表主要就是用來存放所有管理員的登錄賬號(hào)的,信息表中只有用戶名和密碼兩個(gè)字段。詳細(xì)信息如表4.10所示。
表4.10 賬號(hào)信息表(LoginInfo)

根據(jù)表4.10所示的賬號(hào)信息表的詳細(xì)信息創(chuàng)建賬號(hào)信息表,然后把管理員信息表中的注冊(cè)名和密碼添加到賬號(hào)信息表中。具體操作如圖4.24所示。現(xiàn)在表logininfo中也就含有了一條數(shù)據(jù),并不是說向表中只能添加一條數(shù)據(jù),而是因?yàn)楸韒anagerinfo中只包含了一條數(shù)據(jù)。

圖4.24 從其他表中添加數(shù)據(jù)
上面介紹的這種添加數(shù)據(jù)的方式的前提是目標(biāo)數(shù)據(jù)表已經(jīng)存在,也就是logininfo這個(gè)表是先創(chuàng)建好的,如果想不創(chuàng)建表就直接通過源數(shù)據(jù)表在添加數(shù)據(jù)的同時(shí)創(chuàng)建表也是可以實(shí)現(xiàn)的。具體語(yǔ)法如下:
CREATE TABLE table_name AS SELECT column_name1, column_name2,...FROM source_table;
【語(yǔ)法說明】
? table_name:要新創(chuàng)建的目標(biāo)表的名稱。
? source_table:創(chuàng)建目標(biāo)表時(shí)數(shù)據(jù)的來源表。這里可以指定查詢表的字段,也可以用“*”代表查詢表中的全部字段。
利用上面的語(yǔ)句創(chuàng)建一個(gè)表login,數(shù)據(jù)的來源表仍然選擇managerinfo。具體的操作如圖4.25所示。

圖4.25 直接創(chuàng)建帶數(shù)據(jù)的表
這樣就創(chuàng)建了login表,并且可以使用SELECT語(yǔ)句查看到在login表已經(jīng)存在了一條記錄。
4.5.2 修改數(shù)據(jù)就用UPDATE
修改數(shù)據(jù)也是經(jīng)常要使用的,在已經(jīng)存在數(shù)據(jù)的表中修改數(shù)據(jù)使用UPDATE語(yǔ)句即可完成。具體語(yǔ)法如下:
UPDATE table_name SET column_name1=data1,column_name1=data2,...[WHERE condition] ;
【語(yǔ)法說明】
? column_name1:要修改數(shù)據(jù)列的字段名,可以是一個(gè)或多個(gè)。
? data1:要賦給字段的新值,這個(gè)值的數(shù)據(jù)類型要與數(shù)據(jù)表中字段的數(shù)據(jù)類型一致。
? WHERE:條件,這里如果省略了WHERE語(yǔ)句,那么就意味著要修改表中該字段的所有值,如果加上WHERE語(yǔ)句,那么就可以有選擇地修改數(shù)據(jù)表中的某個(gè)字段。
下面就利用UPDADE語(yǔ)句完成修改表中字段的全部值和某一個(gè)字段的值的操作。
(1)修改表中指定字段的全部值
修改表中的全部值就是使用不帶WHERE子句的語(yǔ)句完成。下面就修改新創(chuàng)建的表login中l(wèi)oginname注冊(cè)名字段,把注冊(cè)名都改寫成“test”。具體操作如圖4.26所示。這樣就把表中所有的LoginName全部更改為test了。

圖4.26 修改表中指定字段的全部值
(2)根據(jù)條件修改表中指定字段的值
根據(jù)條件修改表中的數(shù)據(jù)可使用WHERE子句來完成。下面就將表login中用戶名是“XIAOMING”的密碼更改為“654321”。具體操作如圖4.27所示。

圖4.27 根據(jù)條件修改表
這樣,就把用戶名是“XIAOMING”的密碼修改成了“654321”。這里,需要注意的是在查詢時(shí)要區(qū)分大小寫。
4.5.3 刪除數(shù)據(jù)就用DELETE
經(jīng)常要?jiǎng)h除數(shù)據(jù)表中一些沒有用的數(shù)據(jù),刪除數(shù)據(jù)要使用DELETE關(guān)鍵字來完成。使用它可以根據(jù)條件刪除指定的數(shù)據(jù),也可以刪除表中的全部數(shù)據(jù)。一般的語(yǔ)法如下:
DELETE FROM table_name [WHERE condition];
其中,[WHERE condition]子句是可以省略的,如果省略了[WHERE condition]子句,就意味著刪除數(shù)據(jù)表中全部的數(shù)據(jù),如果加上了[WHERE condition]子句就可以根據(jù)條件刪除表中的數(shù)據(jù)。這里,刪除數(shù)據(jù)都是指刪除數(shù)據(jù)表中一條記錄并不是刪除表中某個(gè)字段。
下面就分別使用DELETE語(yǔ)句根據(jù)條件刪除表中的記錄和刪除表中全部記錄。
(1)根據(jù)條件刪除表中的記錄
根據(jù)條件刪除表中的記錄就是使用[WHERE condition]子句來完成。下面就刪除LOGIN表中用戶名是“AAA”的記錄。具體操作如圖4.28所示。
這樣,再查看LOGIN表中的數(shù)據(jù)時(shí)就可以看出其中已經(jīng)不存在用戶名是“AAA”的記錄了。
(2)刪除表中全部記錄
刪除表中全部記錄就是不使用[WHERE condition]子句來完成操作。下面就刪除LOGIN表中的全部記錄。具體操作如圖4.29所示。

圖4.28 根據(jù)條件刪除記錄

圖4.29 刪除全部記錄
這樣就刪除了表LOGIN中的全部記錄,再查詢LOGIN表時(shí)就可以看到查詢結(jié)果是“未選定行”,這代表LOGIN表中已經(jīng)不存在數(shù)據(jù)了。
4.5.4 查詢數(shù)據(jù)就用SELECT
數(shù)據(jù)查詢語(yǔ)言也稱為DQL,這部分內(nèi)容將在第5章中詳細(xì)介紹。在本小節(jié)中主要介紹SELECT語(yǔ)句的基本用法。SELECT的一般語(yǔ)法如下:
SELECT column_name1, column_name2,... FROM table_name WHERE[condition];
【語(yǔ)法說明】
? column_name1:代表的是數(shù)據(jù)表中的字段名,可以查詢數(shù)據(jù)表中的一個(gè)或多個(gè)字段,同時(shí)可以使用“*”號(hào)代替數(shù)據(jù)表中所有的字段。
? WHERE[condition]:代表的是查詢的條件,如果不指定查詢條件則查詢數(shù)據(jù)表中所有的記錄;如果指定查詢條件,那么就可以根據(jù)查詢條件來查詢記錄了。
下面分別使用SELECT語(yǔ)句查詢表中的記錄。
(1)查詢表中全部數(shù)據(jù)
查詢表中全部數(shù)據(jù)可以直接使用SELECT語(yǔ)句完成。下面查詢LOGIN表中的全部記錄,具體操作如圖4.30所示。從查詢結(jié)果就可以看出查詢了表LOGIN中全部字段的全部數(shù)據(jù)。
(2)查詢表中某一字段的數(shù)據(jù)
查詢表中某一個(gè)字段的數(shù)據(jù)可以直接在SELECT語(yǔ)句后面指定要查詢的字段名。下面就查詢LOGIN表中LOGINNAME的值,具體操作如圖4.31所示。

圖4.30 查詢?nèi)繑?shù)據(jù)

圖4.31 查詢LOGINNAME列
在SELECT語(yǔ)句后面指定了列名LOGINNAME,這樣就可以在LOGIN表中只查詢LOGINNAME列的值。
說明
如果在實(shí)際應(yīng)用中只需要表中某些列的值,最好是指定出列名來查詢,不要使用“*”號(hào)來查詢?nèi)康挠涗洠驗(yàn)椴樵內(nèi)坑涗洉?huì)影響查詢的效率。
(3)根據(jù)條件查詢數(shù)據(jù)
根據(jù)條件查詢數(shù)據(jù)就是使用WHERE[condition]子句來完成操作。下面就查詢LOGINNAME是“AAA”的記錄。具體操作如圖4.32所示。

圖4.32 根據(jù)條件查詢記錄
通過帶條件的查詢可以看出,在LOGIN表中只查詢出了LOGINNAME是“AAA”的記錄。
4.5.5 其他數(shù)據(jù)操縱語(yǔ)句
在Oracle 11g中除了上面所講述的INSERT、UPDATE、DELETE、SELECT語(yǔ)句之外,還有MERGE、TRUNCATE、LOCK TABLE等語(yǔ)句。在本小節(jié)中再講述一下比較常用的TRUNCATE語(yǔ)句和MERGE語(yǔ)句的使用。
(1)TRUNCATE語(yǔ)句
TRUNCATE語(yǔ)句和DELETE語(yǔ)句一樣都是用來完成刪除數(shù)據(jù)表中數(shù)據(jù)的,但是二者是有區(qū)別的。使用TRUNCATE語(yǔ)句刪除表中的記錄都是要把表中的記錄全部刪除,但是TRUNCATE語(yǔ)句刪除表中數(shù)據(jù)的速度要比使用DELETE語(yǔ)句刪除表中的數(shù)據(jù)更快一點(diǎn)。具體語(yǔ)法如下:
TRUNCATE TABLE table_name;
這里,只要指定要?jiǎng)h除的表名就可以刪除表中的全部記錄,它是無條件的刪除。下面就使用該語(yǔ)句刪除表LOGIN中的記錄。具體操作如圖4.33所示。
(2)MERGE語(yǔ)句
MERGE語(yǔ)句與UPDATE語(yǔ)句的功能類似,都是修改數(shù)據(jù)表中數(shù)據(jù)的,但是MERGE語(yǔ)句與UPDATE語(yǔ)句也是有區(qū)別的。使用MERGE語(yǔ)句可以對(duì)數(shù)據(jù)表同時(shí)進(jìn)行增加和修改的操作。具體語(yǔ)法如下:

圖4.33 刪除表中記錄
MERGE [INTO] table_name1 USING table_name2 ON(condition) WHEN MATCHED THEN merge_update_clause WHEN NOT MATCHED THEN merge_insert_clause;
【語(yǔ)法說明】
? table_name1:要修改或添加的表。
? table_name2:參照的更新的表。
? condition:table_name1和table_name2之間的關(guān)系,或其他的一些條件。
? merge_update_clause:如果和參照表table_name2中的條件匹配,就執(zhí)行更新操作的SQL語(yǔ)句。
? merge_insert_clause:如果條件不匹配,就執(zhí)行增加操作的SQL語(yǔ)句。
注意
這里merge_update_clause和merge_insert_clause都是可以省略的,但是在操作時(shí)只能省略一個(gè),如果兩個(gè)語(yǔ)句都省略,那么MERGE語(yǔ)句就失去意義了。
下面就使用MERGE語(yǔ)句完成對(duì)LOGIN表的操作。
(1)省略增加的語(yǔ)句
首先分別查詢LOGIN與MANAGERINFO表中的全部數(shù)據(jù),然后使用MERGE語(yǔ)句進(jìn)行更新操作。更新的條件是兩個(gè)表的編號(hào)列相同,當(dāng)滿足條件時(shí)把LOGIN表中滿足條件記錄的LOGINNAME列改寫成MANAGERINFO表中的LOGINNAME列。具體操作如圖4.34所示。
這樣,更新操作完成后就可以把LOGIN_ID是1的記錄中的LOGINNAME更新為表MANAGERINFO中的LOGINNAME的值“XIAOMING”。
(2)省略修改的語(yǔ)句
首先分別查詢LOGIN與MANAGERINFO表中的全部數(shù)據(jù),然后使用MERGE語(yǔ)句進(jìn)行增加操作。增加的條件是兩個(gè)表的編號(hào)列不相同,當(dāng)滿足條件時(shí)向LOGIN表中增加一條在MANAGERINFO中存在的數(shù)據(jù)。具體操作如圖4.35所示。
這樣,就可以看出LOGIN表中已經(jīng)增加了兩條記錄,這兩條記錄編號(hào)是原來在LOGIN_ID中不存在的。在實(shí)際操作中,可以使用這種方法把數(shù)據(jù)表中不存在的記錄添加到當(dāng)前的數(shù)據(jù)表中。

圖4.34 更新LOGIN表

圖4.35 增加數(shù)據(jù)
(3)增加和修改同時(shí)進(jìn)行
增加和修改同時(shí)進(jìn)行是指當(dāng)on后面的條件滿足時(shí)執(zhí)行修改的操作,不滿足時(shí)執(zhí)行增加的操作。首先也是分別查詢LOGIN與MANAGERINFO表中的全部數(shù)據(jù),然后使用MERGE語(yǔ)句進(jìn)行增加和修改的操作。具體操作如圖4.36所示。

圖4.36 增加和修改數(shù)據(jù)
由于在LOGIN中存在的編號(hào)是1、2、3;在MANAGERINFO中存在的編號(hào)是1、4、5,所以在經(jīng)過了MERGE操作后,LOGIN中一共存在了5條記錄,并且把編號(hào)是1的記錄的LOGINNAME更改成了MANAGERINFO中的“XIAOMING”。
4.6 數(shù)據(jù)控制語(yǔ)言(DCL)
數(shù)據(jù)控制離不開數(shù)據(jù)庫(kù)的使用者,數(shù)據(jù)控制語(yǔ)言主要就是對(duì)數(shù)據(jù)庫(kù)使用者賦予和撤銷訪問數(shù)據(jù)庫(kù)的權(quán)限的設(shè)置,主要包括授予權(quán)限要使用的語(yǔ)句GRANT和收回權(quán)限的語(yǔ)句REVOKE。在第17章中詳細(xì)介紹了如何使用GRANT和REVOKE設(shè)置用戶權(quán)限,這里就不詳細(xì)講述了。
4.7 小結(jié)
本章詳細(xì)介紹了與數(shù)據(jù)庫(kù)密切相關(guān)的SQL語(yǔ)句,首先介紹了在Oracle 11g中支持的數(shù)據(jù)類型,然后詳細(xì)介紹了DDL(數(shù)據(jù)定義語(yǔ)言)和DML(數(shù)據(jù)操縱語(yǔ)言)的使用,在DDL中還講述了數(shù)據(jù)表中約束的使用。在本章的學(xué)習(xí)中,讀者應(yīng)盡可能多地使用所述的語(yǔ)句進(jìn)行練習(xí)。SQL語(yǔ)句沒有什么好的學(xué)習(xí)方法,只能多練習(xí),以熟能生巧。
4.8 習(xí)題
簡(jiǎn)答題
1. SQL語(yǔ)言中一共有幾種語(yǔ)言?
2. Oracle 11g中有哪些比較常用的數(shù)據(jù)類型?varchar2是什么類型?為什么要加上2呢?
3. 在Oracle中一共存在幾種約束?能夠確保字段輸入的值是18~30的約束是下列( )約束?
A. Primary Key
B. CHECK
C. UNIQUE
4. 修改數(shù)據(jù)表時(shí)如果要添加一個(gè)約束,使用的語(yǔ)句是什么?
5. 向數(shù)據(jù)表中增加數(shù)據(jù)的方法有幾種?分別都是什么?
6. DELETE與TRUNCATE語(yǔ)句的區(qū)別是什么?
- 數(shù)據(jù)庫(kù)基礎(chǔ)教程(SQL Server平臺(tái))
- 數(shù)據(jù)浪潮
- SQL Server 2016 數(shù)據(jù)庫(kù)教程(第4版)
- 計(jì)算機(jī)信息技術(shù)基礎(chǔ)實(shí)驗(yàn)與習(xí)題
- SQL Server 2008數(shù)據(jù)庫(kù)應(yīng)用技術(shù)(第二版)
- Oracle RAC 11g實(shí)戰(zhàn)指南
- Redis應(yīng)用實(shí)例
- SQL查詢:從入門到實(shí)踐(第4版)
- Ceph源碼分析
- 大數(shù)據(jù)營(yíng)銷:如何讓營(yíng)銷更具吸引力
- 數(shù)據(jù)庫(kù)原理與應(yīng)用(Oracle版)
- 網(wǎng)站數(shù)據(jù)庫(kù)技術(shù)
- 白話大數(shù)據(jù)與機(jī)器學(xué)習(xí)
- 數(shù)據(jù)庫(kù)技術(shù)實(shí)用教程
- “互聯(lián)網(wǎng)+”時(shí)代立體化計(jì)算機(jī)組