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

同元相容sql

發布時間: 2022-12-28 18:03:10

1. 資料庫語言有哪些

資料庫語言有哪些
資料庫語言最常用的是sql (結構化查詢語言)。

t-sql 是微軟SQL SERVER的SQL語句,相容SQL,並具有SQL SERVER本身獨有的函式、關鍵字;

pl/sql是針對Oracle資料庫的第三方工具;

k-sql是國內最領先ERP廠商金蝶軟體自主使用的sql語言。

都是基於sql的,相容sql,也有符合自己資料庫的特色。可以這么理解,SQL是普通話,而t-sql、pl/sql、ksql是方言。

企業比較常用的大型資料庫有Oracle (甲骨文)、db2(IBM) 、sql server(微軟) 、Sybase(剛被sap收購)、Mysql(sun,已被甲骨文收購)Mysql也算大型資料庫。



型資料庫有access、MSDE

2000、FoxPro(原名foxbase曾是狐狸公司的)等,這三個都是微軟的。foxpro是一款非常方便好用的桌面資料庫開發工具,至今還有很多

公司用來做資料處理。其他還有些我不熟悉的,就不寫了。了解這么多資料庫沒用,關鍵是學會用一兩種就行了。

了解更多開源相關,去LUPA社群看看。
oracle資料庫用的是什麼語言
Oracle的查詢語言當然是所有資料庫公認的SQL語句了;Oracle的程式語言是PL/SQL語言,這是Oracle獨有的~~
資料庫程式設計是用什麼語言
當然是sql(Structure Query Language)了,中文名字結構化查詢語言。sql下還有很多分支,不同的資料都有針對sql進行特殊的擴充套件,比如Oracle的plsql,很多企業都用的。下附sql說明:

在1970年代初,由IBM公司San Jose,California研究實驗室的埃德加·科德發表將資料組成表格的應用原則(Codd's Relational Algebra)。1974年,同一實驗室的D.D.Chamberlin和R.F. Boyc功對Codd's Relational Algebra在研製關系資料庫管理系統System R中,研製出一套規范語言-SEQUEL(Structured English QUEry Language),並在1976年11月的IBM Journal of R&D上公布新版本的SQL語言(叫SEQUEL/2)。1980年改名為SQL。

1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2 和SQL/DS資料庫系統中也實現了SQL。

1986年10月,美國ANSI採用SQL作為關系資料庫管理系統的標准語言(ANSI X3. 135-1986),後為國際標准化組織(ISO)採納為國際標准。

1989年,美國ANSI採納在ANSI X3.135-1989報告中定義的關系資料庫管理系統的SQL標准語言,稱為ANSI SQL 89, 該標准替代ANSI X3.135-1986版本。該標准為下列組織所採納:

國際標准化組織(ISO),為ISO 9075-1989報告「Database Language SQL With Integrity Enhancement」

美國聯邦 *** ,釋出在The Federal Information Processing Standard Publication(FIPS PUB)127

目前,所有主要的關系資料庫管理系統支援某些形式的SQL語言, 大部分資料庫打算遵守ANSI SQL89標准。

SQL 是高階的非過程化程式語言,它允許使用者在高層資料結構上工作。它不要求使用者指定對資料的存放方法,也不需要使用者了解其具體的資料存放方式。而它的介面,能使具有底層結構完全不同的資料庫系統和不同資料庫之間,使用相同的 SQL 語言作為資料的輸入與管理。它以記錄專案〔records〕的合集(set)〔項集,record set〕作為操縱物件,所有 SQL 語句接受項集作為輸入,回送出的項集作為輸出,這種項集特性允許一條 SQL 語句的輸出作為另一條 SQL 語句的輸入,所以 SQL 語句可以巢狀,這使它擁有極大的靈活性和強大的功能。在多數情況下,在其他程式語言中需要用一大段程式才可實踐的一個單獨事件,而其在 SQL 上只需要一個語句就可以被表達出來。這也意味著用 SQL 語言可以寫出非常復雜的語句。

SQL 同時也是資料庫檔案格式的副檔名。

SQL 語言包含3個部分:

「資料定義語言」(DDL : Data Definition Language)

「資料操縱語言」(DML : Data Manipulation Language)

「資料控制語言」(DCL : Data Control Language)

DDL:用來建立資料庫或表,例如:CREATE [ TEMPORARY | TEMP ] TABLE table (

column type

[ NULL | NOT NU......
資料庫開發都是用什麼語言進行開發的
Python是連線和操作資料庫的語言,可以用來對資料庫進行增刪改查;

資料庫開發--關系型資料庫應該是用的SQL吧!非關系型就不清楚了!

開發資料庫這個軟體的語言,應該基本上是C,C++為主吧,mongodb的分散式處理部分的有些元件是用go語言開發的
sql server用什麼語言
資料庫是用來存放資料的,跟你說的JAVA、VC/C++、VB沒有關系,因為JAVA、VC/C++、VB都是程式語言!記住一句話,只有當你用JAVA、VC/C++、VB等程式語言遍寫的程式需要和資料庫來連線的話,才需要用到資料庫!

SQL Server不是程式語言,是資料庫語言,這必須搞清楚!

舉個很簡單的例子:

用VB編一個"計算器"程式,就不需要用到資料庫.

而如果用VB編一個"學生成績管理系統",就要用到資料庫里學生的資訊,就需要資料庫,從資料庫中取出學生姓名,成績等資料來操作.

軟體開發大多要求JAVA、VC/C++、VB,這是對的,他們都是程式語言

是不是代表資料庫開發還是以VB為主啊? 這是錯的,以後不要這么說,別人會笑你的,不過在網路"知道"上沒關系,但應聘的時候一定不要說錯!

最後總結一下:

程式語言有:

C

C++

C#

java

VB

VB.NET

...

資料庫(語言)有:

SQL Server

ACCESS

ORACLE

DB2

Visual for pro

...
這些到底是什麼語言,是C++還是#或者資料庫的語言,
看起來這段程式碼是使用C#寫的,而且內嵌了SQL查詢。

要學習資料庫,比如SQL,我推薦w3school/sql/index.asp
現在程式設計一般都用什麼語言和什麼資料庫!
用什麼語言和開發什麼程式有關

如果你開發底層系統、通訊方面,首選C++

開發BS系統,首選JAVA、

C++人才需求量非常巨大,而且3G時代到來,C++人才將在一段時間內需求量劇增

資料庫是必備的知識,主要是sql語句的使用,至於使用什麼資料庫就看你開發時候的具體情況來定

你先定下了學習什麼語言再說吧,在你能夠使用語言來編寫程式的時候,你再學習資料庫知識也不遲
關系資料庫的資料操作語言是什麼語言
它以記錄 *** 作為操作物件,所有SQL語句接受 *** 作為輸入,返回 *** 作為輸出,這種 *** 特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以巢狀,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語言中需要一大段程式實現的功能只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常復雜的語句。[1]

結構化查詢語言(Structured Query Language)最早是IBM的聖約瑟研究實驗室為其關系資料庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言得到了廣泛的應用。如今無論是像Oracle、Sybase、Informix、SQL Server這些大型的資料庫管理系統,還是像Visual Foxpro、PowerBuilder這些PC上常用的資料庫開發系統,都支援SQL語言作為查詢語言。[2]
oracle是用什麼語言?是SQL語言嗎?
oracle,是用pl/sql,它可以相容SQL99, TSQL只有相容SQL99的那部分可以用,其他是不能用的.

PL/SQL是Oracle對標准資料庫語言的擴充套件,procere language.

pl/sql可以用來編寫儲存過程,還有一些資料庫管理的功能.其他的TSQL,rmix SQL 也都符合sql99標准,只是編寫儲存過程的語法各不一樣.

就是說,如果不編寫儲存過程,只進行查/插/刪/改 4種功能,那麼各家SQL基本就是相容的.
資料庫是用什麼語言編寫的?
不同的資料庫用的語言也不一樣,像mssql用的就是VC

oracle現在都是用java編寫的

2. 如何在SQL資料庫批量修改一列數據

具體操作步驟如下:
1. 如果單元格中的數挨在一起,先選中一個單元格並按住滑鼠右鍵,再拖動滑鼠,即可選中所有數字。如單元格分散在各處,則先左手按住Ctrl件,右手逐一點擊需選中的數即可。
2. 在選中的最後一個單元格中,輸入需修改的數據後,再同時按住Ctrl+enter件,這樣,所有被選中的數字就批量修改了。

3. 為什麼用相同的SQL語句調用同一台資料庫的數據,在不同的電腦上的顯示結果不一樣呢

我最近也遇到同樣問題,我是在本地資料庫執行的,我電腦上的資料庫和同學的是完全一樣的(包括數據一模一樣)執行同一個語句得到的結果中有個布爾值不一樣!完全不能理解!我倆唯一不同的就是電腦我是xp他是win7!
執行select Spotent.*,if(src.id,1,0) from Spotent left join src on Spotent.id=src.spotentid where id_Splan = '' order by type desc, Spotent.id asc這句我的if(src.id,1,0) 值為0(是錯的),同學的為1。若是改成下面這樣就都正確
執行select Spotent.*,if(src.spotentid,1,0) from Spotent left join src on Spotent.id=src.spotentid where id_Splan = '' order by type desc, Spotent.id asc我們的就都為1(都正確)。

4. 第三章 SQL語言元素(一)

InterSystems SQL命令(也稱為SQL語句)以關鍵字開頭,後跟一個或多個參數。其中一些參數可能是子句或函數,由它們自己的關鍵字標識。

InterSystems SQL關鍵字包括命令名稱,函數名稱,謂詞條件名稱,數據類型名稱,欄位約束,優化選項和特殊變數。它們還包括 AND , OR 和 NOT 邏輯運算符, NULL 列值指示符以及ODBC函數構造,例如 {d dateval} 和 {fn CONCAT(str1,str2)} 。

聚合函數是SQL固有函數,它計算列的所有值並返回單個聚合值。

這種寫法只能在mac routine里,類文件里編譯報錯。

如果將用戶提供的(外部)函數的使用配置為系統范圍的選項,則該SQL語句只能調用用戶提供的(外部)函數。默認為「否」。默認情況下,嘗試調用用戶提供的函數會發出 SQLCODE -372 錯誤。可以使用 %SYSTEM.SQL類的SetAllowExtrinsicFunctions() 方法在系統范圍內配置SQL對外部函數的使用。若要確定當前設置,請調用 $SYSTEM.SQL.CurrentSettings() ,該顯示顯示「允許在SQL語句中使用外部函數」選項。

不能使用用戶提供的函數來調用 %routine (名稱以%字元開頭的常式)。
嘗試這樣做會發出 SQLCODE -373 錯誤。

InterSystems SQL文字具有以下語法:

文字是一系列代表實際(文字)值的字元。它可以是數字或字元串。

空字元串是文字字元串;它由兩個單引號字元( '' )表示。 NULL 不是文字值;它表示沒有任何值。

注意:在嵌入式SQL中,不允許在字元串文字中使用以 ## 開頭的一些字元序列,如「使用嵌入式SQL」一章的「文字值」中所述。此限制不適用於其他SQL調用,例如動態SQL。

使用單引號( ' )字元作為字元串定界符。 SQL兼容性支持雙引號字元( 「 )的使用,但由於與定界標識符標准沖突,因此強烈建議不要使用。將一對雙引號字元 "" 解析為無效的定界標識符。並生成 SQLCODE -1 錯誤。

要在字元串中指定單引號字元作為字面字元,請指定一對這樣的字元作為字面轉義序列。
例如, 'a 'normal' string' 。

雙豎條( || )是首選的SQL連接操作符。
它可以用於連接兩個數字、兩個字元串或一個數字和一個字元串。

下劃線( _ )作為SQL連接操作符提供,以保證ObjectScript的兼容性。
此連接操作符只能用於連接兩個字元串。

如果兩個操作數都是字元串,並且兩個字元串都具有相同的排序規則類型,則所得的級聯字元串具有該排序規則類型。在所有其他情況下,連接的結果是排序類型 EXACT 。

使用 NULL 關鍵字表示沒有指定值。
在SQL中, NULL 始終是表示數據值因任何原因未指定或不存在的首選方式。

SQL零長度字元串(空字元串)由兩個單引號字元指定。
空字元串( " )與空字元串是不同的。
空字元串是一個已定義的值,一個不包含字元的字元串,一個長度為0的字元串。
一個零長度的字元串在內部由非顯示字元 $CHAR(0) 表示。

注意:不建議使用SQL零長度字元串作為欄位輸入值或欄位默認值。
使用 NULL 表示數據值的缺失。

在SQL編碼中應避免使用SQL零長度字元串。
但是,由於許多SQL操作都會刪除末尾的空格,所以只包含空格字元(空格和製表符)的數據值可能會導致SQL的零長度字元串。

注意,不同的SQL length函數返回不同的值: length 、 CHAR_LENGTH 和 DATALENGTH 返回SQL長度。
$LENGTH 返回ObjectScript表示長度。
長度不計算尾隨空格;
所有其他長度函數都計算末尾的空格。

NOT NULL數據約束要求欄位必須接收一個數據值;
不允許指定NULL而不是值。
這個約束不阻止使用空字元串值。

SELECT 語句的 WHERE 或 HAVING 子句中的 IS NULL 謂詞選擇空值;
它不選擇空字元串值。

IFNULL 函數計算一個欄位值,如果欄位值為 NULL ,則返回第二個參數中指定的值。
它不會將空字元串值視為非空值。

COALESCE 函數從提供的數據中選擇第一個非空值。
它將空字元串值視為非空值。

當 CONCAT 函數或 concenate 操作符( || )連接一個字元串和一個 NULL 時,結果是 NULL 。
如下面的例子所示:

AVG、COUNT、MAX、MIN 和 SUM 聚合函數在執行操作時忽略 NULL 值。
( COUNT * 統計所有行,因為不可能有一個所有欄位都為空值的記錄。)
SELECT 語句的 DISTINCT 關鍵字在其操作中包含 NULL ;
如果指定的欄位有空值, DISTINCT 返回一個空行.

AVG 、 COUNT 和 MIN 、聚合函數受空字元串值的影響。
MIN 函數將空字元串視為最小值,即使存在值為0的行。
MAX 和 SUM 聚合函數不受空字元串值的影響。

對大多數SQL函數提供 NULL 作為操作數將返回 NULL 。

任何以NULL作為操作數的SQL算術操作都返回 NULL 值。
因此,7 +零=零。
這包括二元運算加法( + )、減法( - )、乘法( * )、除法( / )、整數除法( )和取模( # ),以及一元符號運算符加號( + )和減號( - )。

算術操作中指定的空字元串將被視為0(零)值。
除法( / ),整數除法( ),或對空字元串( 6/ " )取模( # )會導致 <DIVIDE> 錯誤。

在SQL中, NULL 的長度是沒有定義的(它返回 < NULL > )。
然而,空字元串的長度被定義為長度為0。
如下面的例子所示:

如本例所示,SQL LENGTH 函數返回SQL長度。

可以使用 ASCII 函數將SQL的零長度字元串轉換為 NULL ,示例如下:

但是,對標准 SQL 的某些系統間IRIS擴展對 NULL 和空字元串的長度的處理是不同的。
$LENGTH函數返回這些值的InterSystems IRIS內部表示: NULL 表示為長度為0的已定義值,SQL空字元串表示為長度為0的字元串。
該功能與ObjectScript兼容。

這些值的內部表示方式的另一個重要位置是 %STRING 、 %SQLSTRING 和 %SQLUPPER 函數,它們將空格附加到值中。
因為 NULL 實際上沒有值,所以在它後面添加一個空格會創建一個長度為1的字元串。
但是一個空字元串確實有一個字元值,所以在它後面加上一個空格會創建一個長度為2的字元串。
如下面的例子所示:

注意,這個例子使用的是 CHAR_LENGTH ,而不是 LENGTH 。
因為 LENGTH 函數刪除了末尾的空格,所以 LENGTH(%STRING(NULL)) 返回長度為0的字元串;
LENGTH(%STRING(")) 返回長度為2的字元串, 因為 %STRING 追加的是前導空格,而不是尾隨空格。

當SQL NULL 輸出到ObjectScript時,它由ObjectScript空字元串( "" )表示,長度為0的字元串。

當SQL零長度字元串數據輸出到ObjectScript時,它由包含 $CHAR(0) 的字元串表示,該字元串長度為1。

在ObjectScript中,沒有值通常用空字元串( "" )表示。
當這個值被傳遞到嵌入式SQL中時,它會被視為空值,如下面的例子所示:

如果指定了一個未定義的輸入主機變數,嵌入式SQL將其值視為 NULL 。

當將NULL或空字元串值從嵌入式SQL傳遞到ObjectScript時, NULL 被轉換為長度為0的字元串,空字元串被轉換為長度為1的字元串。
如下面的例子所示:

在下面的例子中,SQL的空字元串加上一個空格被傳遞為長度為2的字元串:

5. 復雜的sql語句

不是很復雜,只有一個子查詢,最後那個from里邊有很多內連接和外連接,主要是跟業務相關的,表多點不復雜,不知道你的業務邏輯,說不清楚
主要函數,
case when,就是根據不同的case選擇一個結果
decode,跟case when差不多,DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
nvl,判斷是否為空的,NVL( string1, replace_with) ,如果為空就用replace_with代替
group by rollup,不太容易說清楚,給你個連接自己看吧做個小例子也容易理解
http://blog.csdn.net/ghostgant/article/details/5699731

6. 一對一高級映射 插入 的 sql語句怎樣寫

查詢語句是 MyBatis 中最常用的元素之一,本文涉及mybatis的單表查詢操作,關聯表有關的查詢會後續補充。

巧婦難為無米之炊,要想從資料庫中表中取出數據並轉化為javaBean,所以,我們要先准備javabean以及與其對應的數據表。

javaBean:

public class President {

private int id;
private String name;

@Override
public String toString() {
return "President [id=" + id + ", name=" + name + "]";
}
//get set 方法.....
}
創建兩個對應的資料庫表,並插入兩條數據:

create table president1(
p_id int not null auto_increment primary key,
p_name varchar(50) not null
);

insert into president1(p_name) values('lily'),('Tom');

create table president2(
id int not null auto_increment primary key,
name varchar(50) not null
);
insert into president2(name) values('lily'),('Tom');
創建兩個資料庫是為了測試兩個不同的查詢狀況,
資料庫欄位名與實體類屬性名相同

從sql表可以看出president2的欄位名與javabean:President的屬性名完全相同,這種情況下mybatis的select操作非常簡單:

<!-- 從表 president2中查詢-->
<select id="getPreByIdPresident2" parameterType="int" resultType="President">
select * from president2 where id=#{id}
</select>

此時mybatis運用反射機制會將查詢返回的結果(id,name)封裝成President對象。

如果從表president1中查詢,同樣採用上面的sql語句

<!-- 從表 president1中查詢-->
<select id="getPreByIdPresident1" parameterType="int" resultType="President">
<span style="white-space:pre"> </span>President p1 = session.selectOne(statement+"getPreByIdPresident1", 1);
<span style="white-space:pre"> </span>System.out.println("表president1中查詢"+p1);
</select>

此時如果用getPreByIdPresident1進行查詢,返回的結果會是null,我們將上面的sql語句在mysql中執行下:

有結果返回,但是返回的欄位名為(p_id,p_name)這種結果mybatis在解析時無法與President類對應。多數情況下實體類屬性名與資料庫表的欄位名都會有差異,這種情況如果mybatis不能處理也就太low了。

資料庫欄位名與實體類屬性名不相同
mybatis針對該種情況有兩種解決方法,但是歸根到底都是同一種實現。

Method1:定義一個ResultMap將資料庫欄位名與實體類屬性名做個映射

我們欲從表president1中查詢數據,此時的mapper配置如下:

<resultMap type="President" id="getFromPresident2">
<!-- 主鍵必須用id標簽映射,其他的用非集合用result映射 集合類用collection映射 -->
<!-- column為資料庫欄位名,property為實體類屬性名 -->
<id column="p_id" property="id" />
<result column="p_name" property="name" />
</resultMap>
<select id="getPreByIdPresident1Method1" resultMap="getFromPresident2">
select * from president1 where p_id=#{id}
</select>

首先定義了一個resultMap,將資料庫表的欄位名與實體類屬性名做了一一對應,其中type為實體類(此處運用的類別名),id為了在select標簽中引用映射結果。

在select標簽中並沒有用resultType屬性,而使用了resultMap,即為上面定義的resultMap,mybatis會根據resultMap中的映射關系去構造President

Method1:直接在sql語句中使用別名

<!-- 從表 president1中查詢 -->
<select id="getPreByIdPresident1Method2" resultType="President">
select p_id id,p_name name from president1 where p_id=#{id}
</select>

這種方法會查到實際的數據,這種方法與欄位名和屬性名相同都是基於相同的原理:MyBatis 會在幕後自動創建一個 ResultMap,基於屬性名來映射列到JavaBean 的屬性上。即mybatis底層都是通過創建ResultMap來進行關系的映射,與method1原理相同。。

7. 高分求sql資料庫問題

SQL資料庫操作完全手冊
SQL資料庫完全手冊

日期:2001-3-24 0:47:00
出處:電腦報
作者:未知

SQL是Structured Quevy Language(結構化查詢語言)的縮寫。SQL是專為資料庫而建立的操作命令集,是一種功能齊全的資料庫語言。在使用它時,只需要發出「做什麼」的命令,「怎麼做」是不用使用者考慮的。SQL功能強大、簡單易學、使用方便,已經成為了資料庫操作的基礎,並且現在幾乎所有的資料庫均支持SQL。
##1 二、SQL資料庫數據體系結構
SQL資料庫的數據體系結構基本上是三級結構,但使用術語與傳統關系模型術語不同。在SQL中,關系模式(模式)稱為「基本表」(base table);存儲模式(內模式)稱為「存儲文件」(stored file);子模式(外模式)稱為「視圖」(view);元組稱為「行」(row);屬性稱為「列」(column)。名稱對稱如^00100009a^:
##1 三、SQL語言的組成
在正式學習SQL語言之前,首先讓我們對SQL語言有一個基本認識,介紹一下SQL語言的組成:
1.一個SQL資料庫是表(Table)的集合,它由一個或多個SQL模式定義。
2.一個SQL表由行集構成,一行是列的序列(集合),每列與行對應一個數據項。
3.一個表或者是一個基本表或者是一個視圖。基本表是實際存儲在資料庫的表,而視圖是由若干基本表或其他視圖構成的表的定義。
4.一個基本表可以跨一個或多個存儲文件,一個存儲文件也可存放一個或多個基本表。每個存儲文件與外部存儲上一個物理文件對應。
5.用戶可以用SQL語句對視圖和基本表進行查詢等操作。在用戶角度來看,視圖和基本表是一樣的,沒有區別,都是關系(表格)。
6.SQL用戶可以是應用程序,也可以是終端用戶。SQL語句可嵌入在宿主語言的程序中使用,宿主語言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada語言等。SQL用戶也能作為獨立的用戶介面,供交互環境下的終端用戶使用。
##1 四、對資料庫進行操作
SQL包括了所有對資料庫的操作,主要是由4個部分組成:
1.數據定義:這一部分又稱為「SQL DDL」,定義資料庫的邏輯結構,包括定義資料庫、基本表、視圖和索引4部分。
2.數據操縱:這一部分又稱為「SQL DML」,其中包括數據查詢和數據更新兩大類操作,其中數據更新又包括插入、刪除和更新三種操作。
3.數據控制:對用戶訪問數據的控制有基本表和視圖的授權、完整性規則的描述,事務控制語句等。
4.嵌入式SQL語言的使用規定:規定SQL語句在宿主語言的程序中使用的規則。
下面我們將分別介紹:
##2 (一)數據定義
SQL數據定義功能包括定義資料庫、基本表、索引和視圖。
首先,讓我們了解一下SQL所提供的基本數據類型:(如^00100009b^)
1.資料庫的建立與刪除
(1)建立資料庫:資料庫是一個包括了多個基本表的數據集,其語句格式為:
CREATE DATABASE <資料庫名> 〔其它參數〕
其中,<資料庫名>在系統中必須是唯一的,不能重復,不然將導致數據存取失誤。〔其它參數〕因具體資料庫實現系統不同而異。
例:要建立項目管理資料庫(xmmanage),其語句應為:
CREATE DATABASE xmmanage
(2) 資料庫的刪除:將資料庫及其全部內容從系統中刪除。
其語句格式為:DROP DATABASE <資料庫名>
例:刪除項目管理資料庫(xmmanage),其語句應為:
DROP DATABASE xmmanage
2.基本表的定義及變更
本身獨立存在的表稱為基本表,在SQL語言中一個關系唯一對應一個基本表。基本表的定義指建立基本關系模式,而變更則是指對資料庫中已存在的基本表進行刪除與修改。
(1)基本表的定義:基本表是非導出關系,其定義涉及表名、列名及數據類型等,其語句格式為:
CREATE TABLE〔<資料庫名>.〕<表名>
(<列名> 數據類型 〔預設值〕 〔NOT NULL / NULL〕
〔,<列名> 數據類型 〔預設值〕 〔NOT NULL / NULL〕〕......
〔,UNIQUE (列名〔,列名〕......)〕
〔,PRIMARY KEY(列名)〕
〔,FOREIGN KEY(列名〔,列名〕......)REFERENCE <表名>(列名〔,列名〕......)〕
〔,CHECK(條件)〕 〔其它參數〕)
其中,〈資料庫名〉.〕指出將新建立的表存放於該資料庫中;
新建的表由兩部分組成:其一為表和一組列名,其二是實際存放的數據(即可在定義表的同時,直接存放數據到表中);
列名為用戶自定義的易於理解的名稱,列名中不能使用空格;
數據類型為上面所介紹的幾種標准數據類型;
〔NOT NULL/NULL〕指出該列是否允許存放空值,SQL語言支持空值的概念,所謂空值是「不知道」或「無意義」的值,值得注意的是數據「0」和空格都不是空值,系統一般默認允許為空值,所以當不允許為空值時,必須明確使用NOT NULL;
〔,UNIQUE〕將列按照其規定的順序進行排列,如不指定排列順序,則按列的定義順序排列;
〔PRIMARY KEY〕用於指定表的主鍵(即關系中的主屬性),實體完整性約束條件規定:主鍵必須是唯一的,非空的;
〔,FOREIGN KEY (列名〔,列名〕......) REFERENCE<表名>(列名〔,列名〕......)〕是用於指定外鍵參照完整性約束條件,FOREIGN KEY指定相關列為外鍵,其參照對象為另外一個表的指定列,即使用REFERENCE引入的外表中的列,當不指定外表列名時,系統將默認其列名與參照鍵的列名相同,要注意的是:使用外鍵時必須使用參照,另外數據的外鍵參照完整性約束條件規定:外鍵的值要麼與相對應的主鍵相同,要麼為空值(具體由實現系統不同而異)
〔,CHECK〕用於使用指定條件對存入表中的數據進行檢查,以確定其合法性,提高數據的安全性。
例:要建立一個學生情況表(student)
CREATE TABLE student //創建基本表student
(st_class CHAR(8),// 定義列st_class班級,數據類型為8位定長字元串
st_no CHAR(10) NOT NULL,//定義列st_no學號,類型為10位定長字元串,非空
st_name CHAR(8) NOT NULL,//定義列st_name姓名,類型為8位定長字元串,非空
st_sex CHAR(2),//定義列st_sex性別,類型為2位定長字元串
st_age SMALLINT,//定義列st_age年齡,類型為短整型
PRIMARY KEY (st_no))//定義st_no學號為主鍵。
例:要建立課程設置表(subject)
CREATE TABLE subject//創建基本表subject
(su_no CHAR(4) NOT NULL,// 定義列su_no課號,類型為4位定長字元串,非空
su_subject CHAR(20) NOT NULL,// 定義列su_subject課程名,類型為20位定長字元串,非空
su_credit INTEGER,// 定義列su_credit學分,類型為長整數
su_period INTEGER,//定義列su_period學時,類型為長整數
su_preno CHAR(4),//定義列su_preno先修課號,類型為4位定長字元串
PRIMARY KEY(su_no))//定義su_no課號為主鍵。
例:要建立學生選課表(score)
CREATE TABLE score //創建基本表score
(st_no CHAR(10),//定義列st_no學號,類型為10位定長字元串
su_no CHAR(4),//定義列su_no課號,類型為4位定長字元串
sc_score INTEGER NULL,//定義列sc_score,類型為長整形,可以為空值
FOREIGN KEY (st_no) REFERENCE student,//從表student中引入參照外鍵st_no,以確保本表與表student的關聯與同步
FOREIGN KEY (suno) REFERENCE subject)//從表subject中引入參照外鍵su_no,以確保本表與表subject的關聯與同步
(2)基本表的刪除:用以從資料庫中刪除一個基本表及其全部內容,其語句格式為:
DROP TABLE〔<資料庫名>.〕表名
例如:將上面建立的表都刪除
DROP TABLE student,subject,score
(3)基本表的修改:在基本表建立並使用一段時間後,可能需要根據實際要求對基本表的結構進行修改,即增加新的屬性或刪除屬性。
增加屬性的語句格式為:
ALTER TABLE 〔<資料庫名>.〕表名 ADD
(<列名> 數據類型 〔預設值〕 〔NOT NULL / NULL〕
〔,<列名> 數據類型〔預設值〕〔NOT NULL / NULL〕〕......
〔,UNIQUE (列名〔,列名〕......)〕
〔,PRIMARY KEY(列名)〕
〔,FOREIGN KEY(列名〔,列名〕......) REFERENCE <表名>(列名〔,列名〕......)〕
〔,CHECK(條件)〕〔其它參數〕)
例如:在基本表student中加入列stborn出生日期,數據類型為DATE,且不能為空值
ALTER TABLE student ADD (stborn DATE NOT NULL)
刪除屬性的語句格式為:
ALTER TABLE 〔<資料庫名>.〕表名 DROP
( <列名> 數據類型 〔預設值〕〔NOT NULL / NULL〕
〔,<列名> 數據類型 〔預設值〕〔NOT NULL / NULL〕〕......)
例如:將基本表student中的列st_age刪除
ALTER TABLE student DROP (st_age)
3.視圖定義與刪除
在SQL中,視圖是外模式一級數據結構的基本單位。它是從一個或幾個基本表中導出的表,是從現有基本表中抽取若乾子集組成用戶的「專用表」。這種構造方式必須使用SQL中的SELECT語句來實現。在定義一個視圖時,只是把其定義存放在系統的數據中,而並不直接存儲視圖對應的數據,直到用戶使用視圖時才去求得對應的數據。
(1)視圖的定義:定義視圖可以使用CREATE VIEW語句實現,其語句格式為:
CREATE VIEW 視圖名 AS SELECT語句
從一個基本表中導出視圖:
例:從基本表student中導出只包括女學生情況的視圖
CREATE VIEW WOMANVIEW AS //創建一個視圖WOMANVIEW
SELECT st_class,st_no,st_name,st_age //選擇列st_class,st_no,st_name,st_age顯示
FROM student //從基本表student引入
WHERE st_sex=『女』//引入條件為性別為「女」,注意字元變數都使用單引號引用
從多個基本表中導出視圖:
例如:從基本表student和score中導出只包括女學生且分數在60分以上的視圖
CREATEVIEW WOMAN_SCORE AS //定義視圖WOMANSCORE
SELECT student.st_class,student.st_no,student.st_name,student.st_age,score.sc_score //有選擇性顯示相關列
FROM student.score //從基本表student和score中引入
WHERE student.st_sex=『女』AND score.sc_score>=60 AND student.st_no=score.st_no //選擇條件:性別為「女」 且分數在60分以上。並使用st_no將兩表聯系起來。
以後如果進行這一視圖的應用,則只需使用語句
SELECT * FROM WOMAN_SCORE //其中「*」為通配符,代表所有元素
(2)視圖的刪除:用於刪除已不再使用的視圖,其語句格式如下:
DROP VIEW 視圖名
例:將上面建立的WOMAN_SCORE視圖刪除
DROP VIEW WOMAN_SCORE
4.索引的定義與刪除
索引屬於物理存儲概念,而不是邏輯的概念。在SQL中拋棄了索引概念,直接使用主鍵概念。值得一提的是,有些關系DBMS同時包括索引機制和主鍵機制,這里我們推薦使用主鍵機制,因為它對系統資源佔用較低且效率較高。
(1)索引的定義:索引是建立在基本表之上的,其語句格式為:
CREATE 〔UNIQUE〕 INDEX 索引名 ON
〔<資料庫名>.〕表名(列名 〔ASC/DESC〕〔,列名 〔ASC/DESC〕〕......)
這里,保留字UNIQUE表示基本表中的索引值不允許重復,若預設則表示索引值在表中允許重復;DESC表示按索引鍵降序排列,若預設或ASC表示升序排列。
例:對基本表student中的st_no和st_age建立索引,分別為升序與降序,且索引值不允許重復
CREATE UNIQUE INDEX STINDEX ON//創建索引STINDEX
student(st_no ASC,st_age DESC)//對student中的st_no和st_age建立索引
(2)索引的刪除:
DROP INDEX 索引名
例:刪除上面建立的索引STINDEX
DROP INDEX STINDEX
##2 (二)數據查詢
SQL是一種查詢功能很強的語言,只要是資料庫存在的數據,總能通過適當的方法將它從資料庫中查找出來。SQL中的查詢語句只有一個:SELECT,它可與其它語句配合完成所有的查詢功能。SELECT語句的完整語法,可以有6個子句。完整的語法如下:
SELECT 目標表的列名或列表達式集合
FROM 基本表或(和)視圖集合
〔WHERE條件表達式〕
〔GROUP BY列名集合
〔HAVING組條件表達式〕〕
〔ORDER BY列名〔集合〕…〕
整個語句的語義如下:從FROM子句中列出的表中,選擇滿足WHERE子句中給出的條件表達式的元組,然後按GROUPBY子句(分組子句)中指定列的值分組,再提取滿足HAVING子句中組條件表達式的那些組,按SELECT子句給出的列名或列表達式求值輸出。ORDER子句(排序子句)是對輸出的目標表進行重新排序,並可附加說明ASC(升序)或DESC(降序)排列。
在WHERE子句中的條件表達式F中可出現下列操作符和運算函數:
算術比較運算符:<,<=,>,>=,=,<>。
邏輯運算符:AND,OR,NOT。
集合運算符:UNION(並),INTERSECT(交),EXCEPT(差)。
集合成員資格運算符:IN,NOT IN
謂詞:EXISTS(存在量詞),ALL,SOME,UNIQUE。
聚合函數:AVG(平均值),MIN(最小值),MAX(最大值),SUM(和),COUNT(計數)。
F中運算對象還可以是另一個SELECT語句,即SELECT語句可以嵌套。
上面只是列出了WHERE子句中可出現的幾種主要操作,由於WHERE子句中的條件表達式可以很復雜,因此SELECT句型能表達的語義遠比其數學原形要復雜得多。
下面,我們以上面所建立的三個基本表為例,演示一下SELECT的應用:
1.無條件查詢
例:找出所有學生的的選課情況
SELECT st_no,su_no
FROM score
例:找出所有學生的情況
SELECT*
FROM student
「*」為通配符,表示查找FROM中所指出關系的所有屬性的值。
2.條件查詢
條件查詢即帶有WHERE子句的查詢,所要查詢的對象必須滿足WHERE子句給出的條件。
例:找出任何一門課成績在70以上的學生情況、課號及分數
SELECT UNIQUE student.st_class,student.st_no,student.st_name,student.st_sex,student.st_age,score.su_no,score.score
FROM student,score
WHERE score.score>=70 AND score.stno=student.st_no
這里使用UNIQUE是不從查詢結果集中去掉重復行,如果使用DISTINCT則會去掉重復行。另外邏輯運算符的優先順序為NOT→AND→OR。
例:找出課程號為c02的,考試成績不及格的學生
SELECT st_no
FROM score
WHERE su_no=『c02』AND score<60
3.排序查詢
排序查詢是指將查詢結果按指定屬性的升序(ASC)或降序(DESC)排列,由ORDER BY子句指明。
例:查找不及格的課程,並將結果按課程號從大到小排列
SELECT UNIQUE su_no
FROM score
WHERE score<60
ORDER BY su_no DESC
4.嵌套查詢
嵌套查詢是指WHERE子句中又包含SELECT子句,它用於較復雜的跨多個基本表查詢的情況。
例:查找課程編號為c03且課程成績在80分以上的學生的學號、姓名
SELECT st_no,st_name
FROM student
WHERE stno IN (SELECT st_no
FROM score
WHERE su_no=『c03』 AND score>80 )
這里需要明確的是:當查詢涉及多個基本表時用嵌套查詢逐次求解層次分明,具有結構程序設計特點。在嵌套查詢中,IN是常用到的謂詞。若用戶能確切知道內層查詢返回的是單值,那麼也可用算術比較運算符表示用戶的要求。
5.計算查詢
計算查詢是指通過系統提供的特定函數(聚合函數)在語句中的直接使用而獲得某些只有經過計算才能得到的結果。常用的函數有:
COUNT(*) 計算元組的個數
COUNT(列名) 對某一列中的值計算個數
SUM(列名) 求某一列值的總和(此列值是數值型)
AVG(列名) 求某一列值的平均值(此列值是數值型)
MAX(列名) 求某一列值中的最大值
MIN(列名) 求某一列值中的最小值
例:求男學生的總人數和平均年齡
SELECT COUNT(*),AVG(st_age)
FROM student
WHERE st_sex=『男』
例:統計選修了課程的學生的人數
SELECT COUNT(DISTINCT st_no)
FROM score
注意:這里一定要加入DISTINCT,因為有的學生可能選修了多門課程,但統計時只能按1人統計,所以要使用DISTINCT進行過濾。
##2 (三) 數據更新
數據更新包括數據插入、刪除和修改操作。它們分別由INSERT語句,DELETE語句及UPDATE語句完成。這些操作都可在任何基本表上進行,但在視圖上有所限制。其中,當視圖是由單個基本表導出時,可進行插入和修改操作,但不能進行刪除操作;當視圖是從多個基本表中導出時,上述三種操作都不能進行。
1.數據插入
將數據插入SQL的基本表有兩種方式:一種是單元組的插入,另一種是多元組的插入。
單元組的插入:向基本表score中插入一個成績元組(100002,c02,95),可使用以下語句:
INSERT INTO score(st_no,su_no,score) VALUES(『100002』,『c02』,95)
由此,可以給出單元組的插入語句格式:
INSERT INTO表名(列名1〔,列名2〕…) VALUES(列值1〔,列值2〕…)
其中,列名序列為要插入值的列名集合,列值序列為要插入的對應值。若插入的是一個表的全部列值,則列名可以省略不寫如上面的(st_no,su_no,score)可以省去;若插入的是表的部分列值,則必須列出相應列名,此時,該關系中未列出的列名取空值。
多元組的插入:這是一種把SELECT語句查詢結果插入到某個已知的基本表中的方法。
例如:需要在表score中求出每個學生的平均成績,並保留在某個表中。此時可以先創建一個新的基本表stu_avggrade,再用INSERT語句把表score中求得的每一個學生的平均成績(用SELECT求得)插入至stu_avggrade中。
CREATE TABLE stu_avggrade
(st_no CHAR(10) NOT NULL,//定義列st_no學號,類型為10位定長字元串,非空
age_grade SMALLINT NOT NULL )// 定義列age_grade平均分,類型為短整形,非空
INSERT INTO stu_avggrade(st_no,age_grade)
SELECT st_no,AVG(score)
FROM score
GROUP BY st_no //因為要求每一個學生所有課程的平均成績,必須按學號分組進行計算。
2.數據刪除
SQL的刪除操作是指從基本表中刪除滿足WHERE<條件表達式>的記錄。如果沒有WHERE子句,則刪除表中全部記錄,但表結構依然存在。其語句格式為:
DELETE FROM表名〔WHERE 條件表達式〕
下面舉例說明:
單元組的刪除:把學號為100002的學生從表student中刪除,可用以下語句:
DELETE FROM student
WHERE st_no=『100002』//因為學號為100002的學生在表student中只有一個,所以為單元組的刪除
多元組的刪除:學號為100002的成績從表score中刪除,可用以下語句:
DELETE FROM score
WHERE st_no=『100002』//由於學號為100002的元組在表score中可能有多個,所以為多元組刪除
帶有子查詢的刪除操作:刪除所有不及格的學生記錄,可用以下語句
DELETE FROM student
WHERE st_no IN
(SELETE st_no
FROM score
WHERE score<60)
3.數據修改
修改語句是按SET子句中的表達式,在指定表中修改滿足條件表達式的記錄的相應列值。其語句格式如下:
UPDATE 表名 SET 列名=列改變值〔WHERE 條件表達式〕
例:把c02的課程名改為英語,可以用下列語句:
UPDATE subject
SET su_subject=『英語』
WHERE su_no=『c02』
例:將課程成績達到70分的學生成績,再提高10%
UPDATE score
SET score=1.1*score
WHERE score>=70
SQL的刪除語句和修改語句中的WHERE子句用法與SELECT中WHERE子句用法相同。數據的刪除和修改操作,實際上要先做SELECT查詢操作,然後再把找到的元組刪除或修改。
##2 (四) 數據控制
由於資料庫管理系統是一個多用戶系統,為了控制用戶對數據的存取權利,保持數據的共享及完全性,SQL語言提供了一系列的數據控制功能。其中,主要包括安全性控制、完整性控制、事務控制和並發控制。
1.安全性控制
數據的安全性是指保護資料庫,以防非法使用造成數據泄露和破壞。保證數據安全性的主要方法是通過對資料庫存取權力的控制來防止非法使用資料庫中的數據。即限定不同用戶操作不同的數據對象的許可權。
存取權控制包括權力的授與、檢查和撤消。權力授與和撤消命令由資料庫管理員或特定應用人員使用。系統在對資料庫操作前,先核實相應用戶是否有權在相應數據上進行所要求的操作。
(1)權力授與:權力授與有資料庫管理員專用的授權和用戶可用的授權兩種形式。資料庫管理員專用授權命令格式如下:
|CONNECT |
GRANT|RESOURCE|TO 用戶名〔IDENTIFED BY 口令〕
|DBA |
其中,CONNECT表示資料庫管理員允許指定的用戶具有連接到資料庫的權力,這種授權是針對新用戶;RESOURCE表示允許用戶建立自己的新關系模式,用戶獲得CONNECT權力後,必須獲得RESOURCE權力才能創建自己的新表;DBA表示資料庫管理員將自己的特權授與指定的用戶。若要同時授與某用戶上述三種授權中的多種權力,則必須通過三個相應的GRANT命令指定。
另外,具有CONNECT和RESOURCE授權的用戶可以建立自己的表,並在自己建立的表和視圖上具有查詢、插入、修改和刪除的權力。但通常不能使用其他用戶的關系,除非能獲得其他用戶轉授給他的相應權力。
例:若允許用戶SSE連接到資料庫並可以建立他自己的關系,則可通過如下命令授與權力:
GRANT CONNECT TO SSE INENTIFIED BY BD1928
GRANT RESOURCE TO SSE
用戶可用的授權是指用戶將自己擁有的部分或全部權力轉授給其他用戶的命令形式,其命令格式如下:
|SELECT |
|INSERT |
|DELETE |
GRANT|UPDATE(列名1[,列名2]…)|ON|表名 |TO|用戶名|〔WITH GRANT OPTION〕
|ALTER | |視圖名| |PUBLIC|
|NDEX |
|ALL |

若對某一用戶同時授與多種操作權力,則操作命令符號可用「,」相隔。
PUBLIC 表示將權力授與資料庫的所有用戶,使用時要注意:
任選項WITH GRANT OPTION表示接到授權的用戶,具有將其所得到的同時權力再轉授給其他用戶權力。
例:如果將表student的查詢權授與所有用戶,可使用以下命令:
GRANT SELECT ON student TO PUBLIC
例:若將表subject的插入及修改權力授與用戶SSE並使得他具有將這種權力轉授他人的權力,則可使用以下命令:
GRANT INSERT,UPDATE(su_subject) ON subject TO SSE WITH GRANT OPTION
這里,UPDATE後面跟su_subject是指出其所能修改的列。
(2)權力回收:權力回收是指回收指定用戶原已授與的某些權力。與權力授與命令相匹配,權力回收也有資料庫管理員專用和用戶可用的兩種形式。
DBA專用的權力回收命令格式為:
|CONNECT |
REVOKE|RESOURCE|FROM用戶名
|DBA |
用戶可用的權力回收命令格式為:
|SELECT |
|INSERT |
|DELETE |
REVOKE|UPDATE(列名1〔,列名2〕…) |ON|表名 |FROM |用戶名|
|ALTER | |視圖名| |PUBLIC|
|INDEX |
|ALL |
例:回收用戶SSE的DBA權力:
REVOKE DBA FROM SSE
2.完整性控制
資料庫的完整性是指數據的正確性和相容性,這是資料庫理論中的重要概念。完整性控制的主要目的是防止語義上不正確的數據進入資料庫。關系系統中的完整性約束條件包括實體完整性、參照完整性和用戶定義完整性。而完整性約束條件的定義主要是通過CREATE TABLE語句中的〔CHECK〕子句來完成。另外,還有一些輔助命令可以進行數據完整性保護。如UNIQUE和NOT NULL,前者用於防止重復值進入資料庫,後者用於防止空值。
3.事務控制
事務是並發控制的基本單位,也是恢復的基本單位。在SQL中支持事務的概念。所謂事務,是用戶定義的一個操作序列(集合),這些操作要麼都做,要麼一個都不做,是一個不可分割的整體。一個事務通常以BEGIN TRANSACTION開始,以COMMIT或ROLLBACK結束。
SQL提供了事務提交和事務撤消兩種命令:
(1)事務提交:事務提交的命令為:
COMMIT 〔WORK〕
事務提交標志著對資料庫的某種應用操作成功地完成,所有對資料庫的操作都必須作為事務提交給系統時才有效。事務一經提交就不能撤消。
(2)事務撤消:事務撤消的命令是:
ROLLBACK 〔WORK〕
事務撤消標志著相應事務對資料庫操作失敗,因而要撤消對資料庫的改變,即要「回滾」到相應事務開始時的狀態。
當系統非正常結束時(如掉電、系統死機),將自動執行ROLLBACK命令
SQL還提供了自動提交事務的機制,其命令為:
SET AUTO COMMIT ON
其對應的人工工作方式命令為:
SET AUTO COMMIT OFF
一旦規定了自動提交事務方式,則系統將每條SQL命令視為一個事務,並在命令成功執行完成時自動地完成事務提交。
4.並發控制
資料庫作為共享資源,允許多個用戶程序並行地存取數據。當多個用戶並行地操作資料庫時,需要通過並發控制對它們加以協調、控制,以保證並發操作的正確執行,並保證資料庫的一致性。
在SQL中,並發控制採用封鎖技術實現,當一個事務欲對某個數據對象操作時,可申請對該對象加鎖,取得對數據對象的一定控制,以限制其他事務對該對象的操作。其語句格式為:
|SHARE |
LOCK TABLE 表名(或表名集合)IN |EXCLUSVE |MODE 〔NOWAIT]
|SHARE UPDATE|
其中,表名(或表名集合)中指出封鎖對象,若為多個表名,則各個表名間以「,」相隔;任選項NOWAIT表示多個用戶要求封鎖相同的關系時,後來提出的要求會被立即退回去,否則會等待該資源釋放。
SHARE表示共享封鎖方式;EXCLUSIVE表示獨占封鎖方式;SHARE UPDAE表示共享更新封鎖方式。其中共享封鎖方式允許其他事務讀同一數據,但防止其他事務對已封鎖的表進行更新,該鎖主要防止在表的兩次查詢之間對該表的改動;共享更新封鎖SHARE UPDATE是一個行封鎖機制,

8. SQL資料庫里的求和語句怎麼寫

用select sum(列名),sum(列名),sum(列名)…… from 表 where 條件。

9. Sql Server 中 in 和 between 的用法..

操作符 BETWEEN ... AND 會選取介於兩個值之間的數據范圍。這些值可以是數值、文本或者日期。

(9)同元相容sql擴展閱讀

結構化查詢語言(Structured Query Language)簡稱SQL(發音:/ˈes kjuː ˈel/ "S-Q-L"),是一種特殊目的的編程語言,是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。

結構化查詢語言是高級的非過程化編程語言,允許用戶在高層數據結構上工作。它不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統, 可以使用相同的結構化查詢語言作為數據輸入與管理的介面。結構化查詢語言語句可以嵌套,這使它具有極大的靈活性和強大的功能。

參考資料SQL_ 網路