SQL的概念
SQL全稱是“結構化查詢語言(Structured Query Language)”,最早的是IBM的圣約瑟研究實驗室為其關系數據庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言,得到了廣泛的應用。如今無論是像Oracle ,Sybase,Informix,SQL server這些大型的數據庫管理系統,還是像Visual Foxporo,PowerBuilder這些微機上常用的數據庫開發系統,都支持SQL語言作為查詢語言。
SQL是高級的非過程化編程語言,允許用戶在高層數據結構上工作。他不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同數據庫系統可以使用相同的SQL語言作為數據輸入與管理的接口。它以記錄集合作為操縱對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語言可以嵌套,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語言中需要一大段程序實現的一個單獨事件只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常復雜的語句。
sql語言中,各種數據類型代表的含義是什么越全越好謝謝
(1)數值型 數值是諸如32 或153。
4 這樣的值。MySQL 支持科學表示法,科學表示法由整數或浮點數后跟“e”或“E”、一個符號(“ ”或“-”)和一個整數指數來表示。
1。24E 12 和23。
47e-1 都是合法的科學表示法表示的數。而1。
24E12 不是合法的,因為指數前的符號未給出。 浮點數由整數部分、一個小數點和小數部分組成。
整數部分和小數部分可以分別為空,但不能同時為空。 數值前可放一個負號“-”以表示負值。
(2)字符(串)型 字符型(也叫字符串型,簡稱串)是諸如“Hello, world!”或“一個饅頭引起的血案”這樣的值,或者是電話號碼87398413這樣的值。 既可用單引號也可用雙引號將串值括起來。
初學者往往分不清數值87398143和字符串87398143的區別。都是數字啊,怎么一個要用數值型,一個要用字符型呢?關鍵就在于:數值型的87398143是要參與計算的,比如它是金融中的一個貨款總額;而字符型的87398143是不參與計算的,只是表示電話號碼,這樣的還有街道號碼、門牌號碼等等,它們都不參與計算。
(3)日期和時間型 日期和時間是一些諸如“2006-07-12”或“12:30:43”這樣的值。MySQL還支持日期/時間的組合,如“2006-07-12 12:30:43”。
(4)NULL值 NULL表示未知值。比如填寫表格中通訊地址不清楚留空不填寫,這就是NULL值。
我們用Create Table語句創建一個表,這個表中包含列的定義。 例如我們在前面創建了一個joke表,這個表中有content和writer兩個列: 定義一個列的語法如下: 其中列名由col_name 給出。
列名可最多包含64個字符,字符包括字母、數字、下劃線及美元符號。 列名可以名字中合法的任何符號(包括數字)開頭。
但列名不能完全由數字組成,因為那樣可能使其與數據分不開。MySQL保留諸如SELECT、DELETE和CREATE這樣的詞,這些詞不能用做列名,但是函數名(如POS 和MIN)是可以使用的。
列類型col_type表示列可存儲的特定值。 列類型說明符還能表示存放在列中的值的最大長度。
對于某些類型,可用一個數值明確地說明其長度。而另外一些值,其長度由類型名蘊含。
例如,CHAR(10) 明確指定了10個字符的長度,而TINYBLOB值隱含最大長度為255個字符。有的類型說明符允許指定最大的顯示寬度(即顯示值時使用多少個字符)。
浮點類型允許指定小數位數,所以能控制浮點數的精度值為多少。 可以在列類型之后指定可選的類型說明屬性,以及指定更多的常見屬性。
屬性起修飾類型的作用,并更改其處理列值的方式,屬性有以下類型: (1)專用屬性用于指定列。 例如,UNSIGNED 屬性只針對整型,而BINARY屬性只用于CHAR 和VARCHAR。
(2)通用屬性除少數列之外可用于任意列。可以指定NULL 或NOT NULL 以表示某個列是否能夠存放NULL。
還可以用DEFAULT,def_value 來表示在創建一個新行但未明確給出該列的值時,該列可賦予值def_value。def_value 必須為一個常量;它不能是表達式,也不能引用其他列。
不能對BLOB 或TEXT 列指定缺省值。 如果想給出多個列的專用屬性,可按任意順序指定它們,只要它們跟在列類型之后、通用屬性之前即可。
類似地,如果需要給出多個通用屬性,也可按任意順序給出它們,只要將它們放在列類型和可能給出的列專用屬性之后即可。 2。
MySQL的列(字段)類型 數據庫中的每個表都是由一個或多個列(字段)構成的。 在用CREATE TABLE語句創建一個表時,要為每列(字段)指定一個類型。
列(字段)的類型比數據類型更為細化,它精確地描述了給定表列(字段)可能包含的值的種類,如是否帶小數、是否文字很多。 MySQL有整數和浮點數值的列類型,如表1所示。
整數列類型可以有符號也可無符號。有一種特殊的屬性允許整數列值自動生成,這對需要唯一序列或標識號的應用系統來說是非常有用的。
類型 說明 TINYINT 非常小的整數 SMALLINT 較小整數 MEDIUMINT 中等大小整數 INT 標準整數 BIGINT 較大整數 FLOAT 單精度浮點數 DOUBLE 雙精度浮點數 DECIMAL 一個串的浮點數 表1:數值列類型 每種數值類型的名稱和取值范圍如表2所示。 類型說明 取值范圍 TINYINT[(M)] 有符號值:-128 到127 無符號值:0到255(0 到28 - 1) SMALLINT[(M)] 有符號值:-32768 到32767(- 215 到215 - 1) 無符號值:0到65535(0 到21 6 - 1) MEDIUMINT[(M)] 有符號值:-8388608 到8388607(- 22 3 到22 3 - 1 ) 無符號值:0到16777215(0 到22 4 - 1) INT[(M)] 有符號值:-2147683648 到2147683647(- 231 到231- 1) 無符號值:0到4294967295(0 到232-1) BIGINT[(M)] 有符號值:-9223372036854775808 到 9223373036854775807(- 263到263-1) 無符號值:0到18446744073709551615(0到264 – 1) FLOAT[(M, D)] 最小非零值:±1。
175494351E - 38 DOUBLE[(M,D)] 最小非零值:±2。 2250738585072014E - 308 DECIMAL (M, D) 可變;其值的范圍依賴于M 和D 表2:數值列類型的取值范圍 類型說明 存儲需求 TINYINT[(M)] 1字節 SMALLINT[(M)] 2字節 MEDIUMINT[(M)] 3字節 INT[(M)] 4字節 BIGINT[(M)] 8字節 FLOAT[(M, D)] 4字節 DOUBLE[(M, D)] 8字節 。
sql語句含義
select id as card_no ,sum(amt) as xf from xs_003 where id'' and bdate='2007-03-08'
group by id
第一我們先看這句話:
這是用id分組,取 amt字段的和,且id不能為空,和日期bdate是2007-03-08的.這個查詢可以出來一個結果集合,我們給他起名為:zckxf
這樣我們的sql語句就變成了:
update da_czk set ye=* from
zckxf where da_*_no=*_no
這樣我們就能看懂了
通過card_no把da_czk和我們剛才取的結果集(zckxf)card_no相同的項目,把da_czk的ye字段更新,更新為本身再減去我們取的數據集(zckxf)里的xf字段。
SQL的定義功能是什么
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語句對視圖和基本表進行查詢等操作。在用戶角度來看,視圖和基本表是一樣的,沒有區別,都是關系(表格)。
*用戶可以是應用程序,也可以是終端用戶。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語言中一個關系唯一對應一個基本表。基本表的定義指建立基本關系模式,而變更則是指對數據庫中已存在的基本表進行刪除與修改。
……
編寫T-SQL語句,定義規則Email-rule,限制字符串中必
ifobject_id('fCheckEmail')isnotnulldropfunctionfCheckEmailGO----創建驗證函數,返回值為1表示正確,否則格式錯誤createfunctionfCheckEmail(@Emailvarchar(1000)) ('')>0or/*含有空格*/len(@email)-len(replace(@email,'。
',''))>1or/*'。'超過1個*/len(@email)-len(replace(@email,'@',''))>1or/*'@'超過1個*/right(@email,1)='。
'or/*以'。'結尾*/right(@email,1)='@'or/*以'@'結尾*/left(@email,1)='。
'or/*以'。'開頭*/left(@email,1)='@'or/*以'。
'開頭*/charindex('。')-charindex('@') '相鄰*/charindex('。
')-charindex('@')=1/*'@'與'。'相鄰*/ /*僅供參考,可以靈活添加\刪除或修改某些條件*/。
SQL語句基礎學習要注意什么
現在我們介紹連接(join)的概念。
要了解連接,我們需要用到許多我們之前已介紹過的指令。我們先假設我們有以下的兩個表格 Store_Information 表格 store_namesalesdate Los Angeles$1500jan-05-1999 San Francisco$300jan-08-1999 Boston$700jan-08-1999 Geography 表格 region_namestore_name EastBoston EastNew York WestLos Angeles WestSan Diego 而我們要知道每一區 (region_name) 的營業額 (sales)。
Geography 這個表格告訴我們每一區有哪些店,而 Store_Information 告訴我們每一個店的營業額。若我們要知道每一區的營業額,我們需要將這兩個不同表格中的資料串聯起來。
當我們仔細了解這兩個表格后,我們會發現它們可經由一個相同的欄位,store_name,連接起來。 我們先將 SQL 句列出, 之后再討論每一個子句的意義: SELECT A1。
region_name REGION, SUM(A2。Sales) SALES FROM Geography A1, Store_Information A2 WHERE A1。
store_name = A2。store_name GROUP BY A1。
region_name 結果: REGION SALES East $700 West $2050 在第一行中,我們告訴 SQL 去選出兩個欄位:第一個欄位是 Geography 表格中的 Region_name 欄位 (我們取了一個別名叫做 REGION);第二個欄位是 Store_Information 表格中的 sales 欄位 (別名為 SALES)。 請注意在這里我們有用到表格別名:Geography 表格的別名是 A1,Store_Information 表格的別名是 A2。
若我們沒有用表格別名的話, 第一行就會變成 SELECT Geography。region_name REGION, SUM(Store_Information。
Sales) SALES 很明顯地,這就復雜多了。在這里我們可以看到表格別名的功用:它能讓 SQL 句容易被了解,尤其是這個 SQL 句含蓋好幾個不同的表格時。
接下來我們看第三行,就是 WHERE 子句。 這是我們闡述連接條件的地方。
在這里,我們要確認 Geography 表格中 Store_name 欄位的值與 Store_Information 表格中 store_name 欄位的值是相等的。 這個 WHERE 子句是一個連接的靈魂人物,因為它的角色是確定兩個表格之間的連接是正確的。
如果 WHERE子句是錯誤的,我們就極可能得到一個笛卡兒連接 (Cartesian join)。笛卡兒連接會造成我們得到所有兩個表格每兩行之間所有可能的組合。