Ⅰ sql查詢表中,包含字元的語句有哪些
select * from SJK.BIAO where A like('%錯誤%') 數數據行,不是數據列。
Ⅱ sql裡面怎麼表示某字元或沒有字元呢
[^] 表示不在指定范圍(例如 [^a - f])或集合(例如 [^abcdef])內的任何單個字元。
Ⅲ SQL里通配符的使用
在VFP6.0中,通配符有兩種,一種是「*」表示任何一串字元,還有一種是「?」,表示任何一個字元。
在SQL查詢語句中有時用到模糊查詢。格式為:<屬性名> like <字元串常量>
屬性名必須為字元型。例如:查詢某班所有姓張的同學
select * from student where 姓名 like '張%'
這兒必須用「like」,所以一樓是錯的
%表示任意長度的字元
_表示一個字元
Ⅳ 動態sql語句中,字元串如何表示
動態sql中,字元串可定義為nvarchar
如:
declare@tablenamenvarchar(100)
declare@sqlnvarchar(2000)
declare@countint
declare@aint
declarecur_ccursorfor
='U'andstatus>=0
opencur_c
fetchnextfromcur_cinto@tablename
while@@fetch_status=0
begin
set@sql='select@a=count(*)from'+@tablename+''
execsp_executesql@sql,N'@aintoutput',@countoutput
if@count=0
print@tablename
fetchnextfromcur_cinto@tablename
end
closecur_c
deallocatecur_c
其中:declare @sql nvarchar(2000) 則為定義的動態sql,將其長度定義為2000。
執行結果:
Ⅳ sql中,字元串的字元串
字元串的單引號要用2個單引號表示。
我舉個例子
declare
@s
varchar(100),@s1
varchar(20)
set
@s1=『hello'
現在我要用@s
表示@s1包括它的單引號
set
@s='''hello'''
--顯示@s1
select
@s1
/*
-----
'hello'
*/
Ⅵ SQL語言的表達
SQL全稱是「結構化查詢語言(Structured Query Language)」
SQL(STructured Query Language)是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。
SQL同時也是資料庫腳本文件的擴展名。
SQL是高級的非過程化編程語言,允許用戶在高層數據結構上工作。他不要求用戶指定對數據的存放方法,也不需要用戶了解具體的數據存放方式,所以具有完全不同底層結構的不同資料庫系統可以使用相同的SQL語言作為數據輸入與管理的介面。它以記錄集合作為操作對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以嵌套,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語言中需要一大段程序實現的功能只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常復雜的語句。
結構化查詢語言(Structured Query Language)最早是IBM的聖約瑟研究實驗室為其關系資料庫管理系統SYSTEM R開發的一種查詢語言,它的前身是SQUARE語言。SQL語言結構簡潔,功能強大,簡單易學,所以自從IBM公司1981年推出以來,SQL語言得到了廣泛的應用。如今無論是像Oracle、Sybase、Informix、SQL Server這些大型的資料庫管理系統,還是像Visual Foxporo、PowerBuilder這些PC上常用的資料庫開發系統,都支持SQL語言作為查詢語言。
美國國家標准局(ANSI)與國際標准化組織(ISO)已經制定了SQL標准。ANSI是一個美國工業和商業集團組織,負責開發美國的商務和通訊標准。ANSI同時也是ISO和International Electrotechnical Commission(IEC)的成員之一。ANSI 發布與國際標准組織相應的美國標准。1992年,ISO和IEC發布了SQL國際標准,稱為SQL-92。ANSI隨之發布的相應標準是ANSI SQL-92。ANSI SQL-92有時被稱為ANSI SQL。盡管不同的關系資料庫使用的SQL版本有一些差異,但大多數都遵循 ANSI SQL 標准。SQL Server使用ANSI SQL-92的擴展集,稱為T-SQL,其遵循ANSI制定的 SQL-92標准。
SQL語言包含4個部分:
※ 數據定義語言(DDL),例如:CREATE、DROP、ALTER等語句。
※ 數據操作語言(DML),例如:INSERT、UPDATE、DELETE語句。
※ 數據查詢語言(DQL),例如:SELECT語句。
※ 數據控制語言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等語句。
SQL語言包括三種主要程序設計語言類別的陳述式:數據定義語言(DDL),數據操作語言(DML)及數據控制語言(DCL)。
[編輯本段]SQL發展歷史
1970: E.J. Codd 發表了關系資料庫理論(relational database theory);
1974-79: IBM 以Codd的理論為基礎開發了「Sequel」,並重命名為"SQL";
1979: Oracle 發布了商業版SQL
1981-84: 出現了其他商業版本,分別來自 IBM(DB2),Data General(DG/SQL),Relational Technology(INGRES);
SQL/86:ANSI 跟 ISO的第一個標准;
SQL/89:增加了引用完整性(referential integrity);
SQL/92(aka SQL2):被資料庫管理系統(DBMS)生產商廣發接受;
1997+:成為動態網站(Dynamic web content)的後台支持;
SQL/99:Core level跟其他8種相應的level,包括遞歸查詢,程序跟流程式控制制,基本的對象(object)支持包括oids;
SQL/2003:包含了XML相關內容,自動生成列值(column values);
2005-09-30:「Data is the next generation inside...SQL is the new HTML」! Tim O'eilly提出了Web 2.0理念,稱數據將是核心,SQL將成為「新的
HTML";
SQL/2006:定義了SQL與XML(包含XQuery)的關聯應用;
2006:Sun公司將以SQL基礎的資料庫管理系統嵌入Java V6
[編輯本段]DDL
DDL 用於定義和管理物件,例如資料庫、資料表以及檢視表( 第18章 將會解釋何謂檢視表)。DDL 陳述式通常包括每個物件的CREATE、ALTER 以及 DROP 命令。舉例來說,CREATE TABLE、ALTER TABLE 以及 DROP TABLE 這些陳述式便可以用來建立新資料表、修改其屬性(如新增或刪除資料行)、刪除資料表等,下面我們會一一介紹。
CREATE TABLE 陳述式
使用 DDL 在 MyDB 資料庫建立一個名為 Customer_Data 的範例資料表,本章後面的例子我們會使用到這個資料表。如前所述,CREATE TABLE 陳述式可以用來建立資料表。這個範例資料表被定義成四個資料行,如下所示:
Use MyDB
CREATE TABLE Customer_Data
(customer_id smallint,
first_name char(20),
last_name char(20),
phone char(10))
GO
這個陳述式能產生 Customer_Data 資料表,這個資料表會一直是空的直到資料被填入資料表內。
ALTER TABLE 陳述式
ALTER TABLE 陳述式用來變更資料表的定義與屬性。在下面的例子中,我們利用 ALTER TABLE 在已經存在的 Customer_Data 資料表中新增 middle_initial 資料行。
ALTER TABLE Customer_Data
ADD middle_initial char(1)
GO
現在資料表的定義包括了五個資料行,而不是之前的四個資料行。關於使用ALTER TABLE 的更多細節,請參閱 第15章 。
DROP TABLE 陳述式
DROP TABLE 陳述式用來刪除資料表定義以及所有的資料、索引、觸發程序、條件約束以及資料表的許可權。要刪除我們的 Customer_Data 資料表,可利用下列命令:
DROP TABLE Customer_Data
GO
關於 DROP TABLE 陳述式的詳細內容,請參閱 第15章 。
[編輯本段]DML
DML 利用 INSERT、SELECT、UPDATE 及 DELETE 等陳述式來操作資料庫物件所包含的資料。
INSERT 陳述式
INSERT 陳述式用來在資料表或檢視表中插入一列資料。例如,如果要在Customer_Data 資料表中新增一個客戶,可使用類似以下的 INSERT 陳述式:
INSERT INTO Customer_Data
(customer_id, first_name, last_name, phone)
VALUES (777, "Frankie", "Stein", "4895873900")
請注意 SQL 陳述式中第二行的資料行名稱清單,清單上資料行名稱的次序決定了資料數值將被放在哪個資料行。舉例來說,第一個資料數值將被放在清單列出的第一個資料行 customer_id、第二個資料數值放在第二個資料行,依此類推。由於我們在建立資料表時,定義資料資料行填入數值的次序與現在相同,因此我們不必特意指定欄位名稱。我們可以用以下的 INSERT 陳述式代替:
INSERT INTO Customer_Data
VALUES (777, "Frankie", "Stein", "4895873900")
注意
如果使用這種形式的 INSERT 陳述式,但被插入的數值次序上與建立資料表時不同,數值將被放入錯誤的資料行。如果資料的型別與定義不符,則會收到一個錯誤訊息。
UPDATE 陳述式
UPDATE 陳述式用來更新或改變一列或多列中的值。例如,一位名稱為 Frankie Stein 的客戶想要在記錄中改變他的姓氏為 Franklin,可使用以下 UPDATE 陳述式:
UPDATE Customer_Data
SET first_name = "Franklin"
WHERE last_name = "Stein" and customer_id= 777
我們在 WHERE 子句中加入 customer_id 的項目來確定其他名稱為 Stein 的客戶不會被影響-只有customer_id為777的客戶,姓氏會有所改變。
--------------------------------------------------------------------------------
說明
當您使用 UPDATE 陳述式時,要確定在 WHERE 子句提供充分的篩選條件,如此才不會不經意地改變了一些不該改變的資料。
--------------------------------------------------------------------------------
DELETE 陳述式
DELETE 陳述式用來刪除資料表中一列或多列的資料,您也可以刪除資料表中的所有資料列。要從 Customer_Data 資料表中刪除所有的列,您可以利用下列陳述式:
DELETE FROM Customer_Data
或
DELETE Customer_Data
資料表名稱前的 FROM 關鍵字在 DELETE 陳述式中是選擇性的。除此之外,這兩個陳述式完全相同。
要從 Customer_Data 資料表中刪除 customer_id 資料行的值小於100的列,可利用下列陳述式:
DELETE FROM Customer_Data
WHERE customer_id < 100
現在我們已經快速瀏覽了 SQL 提供的 DDL 與 DML 陳述式,接著,下面將介紹 T-SQL。
[編輯本段]DCL
DCL是用來管理資料庫的語言。包含管理許可權及數據更改。
--------------------------------------------------------------------------------
[編輯本段]SELECT 陳述式
SELECT 陳述式用來檢索資料表中的資料,而哪些資料被檢索由列出的資料行與陳述式中的 WHERE 子句決定。例如,要從之前建立的 Customer_Data 資料表中檢索 customer_id 以及 first_name 資料行的資料,並且只想取出每列中 first_name 資料行值為 Frankie 的資料,那麼可以利用以下的 SELECT 陳述式:
SELECT customer_id, first_name FROM Customer_Data
WHERE first_name = "Frankie"
如果有一列符合 SELECT 陳述式中的標准,則結果將顯示如下:
customer_id first_name
------------- ------------
777 Frankie
[編輯本段]SQL中的五種數據類型
簡要描述一下SQL中的五種數據類型:字元型,文本型,數值型,邏輯型和日期型
字元型
VARCHAR VS CHAR
VARCHAR型和CHAR型數據的這個差別是細微的,但是非常重要。他們都是用來儲存字元串長度小於255的字元。
假如你向一個長度為四十個字元的VARCHAR型欄位中輸入數據BIll GAtES。當你以後從這個欄位中取出此數據時,你取出的數據其長度為十個字元——字元串Bill Gates的長度。 現在假如你把字元串輸入一個長度為四十個字元的CHAR型欄位中,那麼當你取出數據時,所取出的數據長度將是四十個字元。字元串的後面會被附加多餘的空格。
當你建立自己的站點時,你會發現使用VARCHAR型欄位要比CHAR型欄位方便的多。使用VARCHAR型欄位時,你不需要為剪掉你數據中多餘的空格而操心。
VARCHAR型欄位的另一個突出的好處是它可以比CHAR型欄位佔用更少的內存和硬碟空間。當你的資料庫很大時,這種內存和磁碟空間的節省會變得非常重要
文本型
TEXT
使用文本型數據,你可以存放超過二十億個字元的字元串。當你需要存儲大串的字元時,應該使用文本型數據。
注意文本型數據沒有長度,而上一節中所講的字元型數據是有長度的。一個文本型欄位中的數據通常要麼為空,要麼很大。
當你從HTML fORM的多行文本編輯框(TEXTAREA)中收集數據時,你應該把收集的信息存儲於文本型欄位中。但是,無論何時,只要你能避免使用文本型欄位,你就應該不適用它。文本型欄位既大且慢,濫用文本型欄位會使伺服器速度變慢。文本型欄位還會吃掉大量的磁碟空間。
一旦你向文本型欄位中輸入了任何數據(甚至是空值),就會有2K的空間被自動分配給該數據。除非刪除該記錄,否則你無法收回這部分存儲空間。
數值型
SQL支持許多種不同的數值型數據。你可以存儲整數 INT 、小數 NUMERIC、和錢數 MONEY。
INT VS SMALLINT VS TINYINT
他們的區別只是字元長度:
INT型數據的表數范圍是從-2,147,483,647到2,147,483,647的整數
SMALLINT 型數據可以存儲從-32768到32768的整數
TINYINT 型的欄位只能存儲從0到255的整數,不能用來儲存負數
通常,為了節省空間,應該盡可能的使用最小的整型數據。一個TINYINT型數據只佔用一個位元組;一個INT型數據佔用四個位元組。這看起來似乎差別不大,但是在比較大的表中,位元組數的增長是很快的。另一方面,一旦你已經創建了一個欄位,要修改它是很困難的。因此,為安全起見,你應該預測以下,一個欄位所需要存儲的數值最大有可能是多大,然後選擇適當的數據類型。
NUMERIC
為了能對欄位所存放的數據有更多的控制,你可以使用NUMERIC型數據來同時表示一個數的整數部分和小數部分。NUMERIC型數據使你能表示非常大的數——比INT型數據要大得多。一個NUMERIC型欄位可以存儲從-1038到1038范圍內的數。NUMERIC型數據還使你能表示有小數部分的數。例如,你可以在NUMERIC型欄位中存儲小數3.14。
當定義一個NUMERIC型欄位時,你需要同時指定整數部分的大小和小數部分的大小。如:MUNERIC(23,0)
一個 NUMERIC型數據的整數部分最大隻能有28位,小數部分的位數必須小於或等於整數部分的位數,小數部分可以是零。
MONEY VS SMALLMONEY
你可以使用 INT型或NUMERIC型數據來存儲錢數。但是,專門有另外兩種數據類型用於此目的。如果你希望你的網點能掙很多錢,你可以使用MONEY型數據。如果你的野心不大,你可以使用SMALLMONEY型數據。MONEY型數據可以存儲從-922,337,203,685,477.5808到922,337,203,685,477.5807的錢數。如果你需要存儲比這還大的金額,你可以使用NUMERIC型數據。
SMALLMONEY型數據只能存儲從-214,748.3648到214,748.3647 的錢數。同樣,如果可以的話,你應該用SMALLMONEY型來代替MONEY型數據,以節省空間。
邏輯型
BIT
如果你使用復選框( CHECKBOX)從網頁中搜集信息,你可以把此信息存儲在BIT型欄位中。BIT型欄位只能取兩個值:0或1。
當心,在你創建好一個表之後,你不能向表中添加 BIT型欄位。如果你打算在一個表中包含BIT型欄位,你必須在創建表時完成。
日期型
DATETIME VS SMALLDATETIME
一個 DATETIME型的欄位可以存儲的日期范圍是從1753年1月1日第一毫秒到9999年12月31日最後一毫秒。
如果你不需要覆蓋這么大范圍的日期和時間,你可以使用SMALLDATETIME型數據。它與DATETIME型數據同樣使用,只不過它能表示的日期和時間范圍比DATETIME型數據小,而且不如DATETIME型數據精確。一個SMALLDATETIME型的欄位能夠存儲從1900年1月1日到2079年6月6日的日期,它只能精確到秒。
DATETIME型欄位在你輸入日期和時間之前並不包含實際的數據,認識這一點是重要的。
Ⅶ SQL語句中,字元串類型的值均使用什麼符號標明
單引號
字元串要用單引號包圍起來,如果字元串中有單引號,注意使用轉義符號
祝好運,望採納
Ⅷ 第三章 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的字元串: