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

sql常量表達式

發布時間: 2022-05-27 10:14:25

㈠ 在sql語句中,插入一個表記錄,但結果顯示「此處只允許使用常量、表達式或變數。不允許使用列名

雙引號不行,改成單引號

㈡ 在SQL2005中插入數據時,報「不允許使用列名」是什麼意思

看下你定義的欄位數據類型,如果是文本型,插入時要加'',比如:
INSERT INTO book(book_isbn,title,author,publisher,publishdate,type_id,price,totalnumber)
VALUES ('ISBN1007821','佳期如夢','新世界出版社','2006-1-1','ab123456',22.0,30)

㈢ 這是啥子個意思啊是sql語句錯了還是哪裡錯了啊「 在此上下文中不允許使用名稱「xxx」。有效表達式包括

改為:
sql = string.Format("insert into Question ([Question],[Answer],[Difficulty],[SubjectId],[OptionA],[OptionB],[OptionC],[OptionD]) values (『{0}』,『{1}』,{2},'{3}','{4}','{5}','{6}','{7}')", textBox1.Text, Aswer, Convert.Into32(Difficulty),subjectId, textBox2.Text, textBox3.Text, textBox4.Text, textBox5.Text);
用這個試試吧,

㈣ 在SQL server中,-48是表達式還是常量

-48是是常量

㈤ sql 正則表達式匹配

  • 當我們要進行一些簡單的糊塗查詢時用百分號(%),通配符(_)就可以了.其中%表達任意長度的字元串,_表示任意的某一個字元.

比如

select*fromempwhereenamelike's%'orenamelike's_';

但如果在一些復雜的查詢中關用這兩個符號sql語句就會非常復雜,而且也不一定能實現.從Oracle 10g開始引入了在其他程序語言中普通使用的正則表達式.

主要有regexp_like,regexp_replace,regexp_substr,regexp_instr四個正則表達式函數.

  • 正則表達式中的元字元:

元字元 意思 例子

說明要匹配的字元是一個特殊字元、常量或者後者引用。(後引用重復上一次的匹配)

匹配換行符
\ 匹配
匹配(匹配 )


^ 匹配字元串的開頭位置 ^a匹配arwen.但不匹配barwen.

$ 匹配字元串的末尾位置 en$匹配arwen.但不匹配arwenb.

* 匹配前面的字元0次或多次 a*rwen可以匹配rwen或aaarwen.

+ 匹配前面的字元1次或多次 a+rwen可以匹配arwen或aarwen.但不能匹配rwen.

? 匹配前面的字元0次或1次 a?rwen可以匹配arwen或rwen.但不能匹配aarwen.

{n} 匹配前面的字元恰好是n次,其中n是整數 ar{2}wen可以匹配arrwen.但不能匹配arwen或arrrwen.

{n,m} 匹配前面的字元至少是n次,最多是m次.如果寫成{n,} 表示最少匹配n次.沒有上限.

ar{1,2}wen可以匹配arwen,arrwen.但不匹配awen或arrrwen.


. 點號,匹配除null,換行以外的任意單個字元 arw.n.可以匹配arwen,arwin.但不能匹配arween或arwn.

(pattern) 括弧中pattern是一個子正則表達式,匹配指定pattern模式的一個子表達式。 其實括弧就像一般語言表達式中的括弧.有時多加些括弧可增強可讀性.另外的用處見下面關於 的描述.

x|y 匹配「或」 x|y可以匹配x或者y

[abc] 可以匹配abc中的任何單個字元 hello[abc]可以匹配helloa,hellob,helloc

[a-z] 可以匹配指定范圍內的任何單個字元 hell[a-z]可以匹配hello或者hellz

[::] 指定一個字元類,可以匹配該類中的任何字元 [:alphanum:]可以匹配字元0-9、A-Z、a-z
[:alpha:]可以匹配字元A-Z、a-z
[:blank:]可以匹配空格或tab鍵
[:digit:]可以匹配數字0-9
[:graph:]可以匹配非空字元
[:lower:]可以匹配小寫字母a-z
[:print:]與[:graph:]類似,不同之處在於[:print:]包括空格字元
[:punct:]可以匹配標點符號.,""等等
[:space:]可以匹配所有的空字元
[:upper:]可以匹配大寫字母A-Z
[:xdigit:]可以匹配十六進制數字0-9、A-F、a-f

這是對前一次匹配命中的一個後引用,其中n是一個正整數 arw(en)1可以匹配arwenen.注意1前面必須是個加括弧的子表達式.

  1. regexp_like:

regexp_like(x,pattern[,match_option]),查看x是否與pattern相匹配,該函數還可以提供一個可選的參數match_option字元串說明默認的匹配選項。match_option的取值如下:
『c』 說明在進行匹配時區分大小寫(預設值);
'i' 說明在進行匹配時不區分大小寫;
'n'(.)點號能表示所有單個字元,包括換行(俺還不知道什麼地方有用到換行.只知道sql裡面可以用chr(10)表示換行.
'm' 字元串存在換行的時候當作多行處理.這樣$就可匹配每行的結尾.不然的話$只匹配字元串最後的位置.

示例:select * from emp where regexp_like(ename,'^a[a-z]*n$');可以查找ename中以a開頭以n結尾的行.例如ename為arwen或arwin或anden.但Arwen不能被匹配.因為默認是區分大小寫.如果是select * from emp where regexp_like(ename,'^a[a-z]*n$','i')則可以查找ename為Arwen的行記錄.

2. regexp_instr:

REGEXP_INSTR(x,pattern[,start[,occurrence[,return_option[, match_option]]]])用於在x中查找pattern。返回pattern在x中出現的位置。匹配位置從1開始。可以參考字元串函數 INSTR(),參數相關:
'start' 開始查找的位置;
'occurrence' 說明應該返回第幾次出現pattern的位置;
'return_option' 說明應該返回什麼整數。若該參數為0,則說明要返回的整數是x中的一個字元的位置;若該參數為非0的整數,則說明要返回的整數為x中出現在pattern之後 的字元的位置;
'match_option' 修改默認的匹配設置.與regexp_like裡面的相同.

示例:

DECLARE

V_RESULTINTEGER;

BEGIN

SELECT REGEXP_INSTR('hello world','o',1,1,0)INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為5.即字母o第一個次出現的位置

如果regexp_instr('hello world','o',1,1,n)其中n為除0之外的整數.比如1,3.則結果為6.表示第一次出現字母o的後面一個字元的位置.

如果regexp_instr('hello world','o',1,2,0)則結果為9.表示第二次出現字母o的位置.

3. regexp_replace:

REGEXP_REPLACE(x,pattern[,replace_string[,start[,occurrence[, match_option]]]])用於在x中查找pattern,並將其替換為replae_string。可以參考字元串函數 REPLACE(),參數同REGEXP_INSTR函數

示例:

DECLARE

V_RESULT varchar2(90);

BEGIN

SELECT REGEXP_REPLACE('hello world','o','x',1,1)INTO V_RESULT

  1. FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為hellx world.

如果REGEXP_REPLACE('hello world','o','x'),則結果為hellx wxrld.

如果 REGEXP_REPLACE('hello w


orld','o','x',1,2)則結果為hello wxrld.

4.regexp_substr:

REGEXP_SUBSTR(x,pattern[,start[,occurrence[, match_option]]])用於在x中查找pattern並返回。可以參考字元串函數 SUBSTR(),參數同REGEXP_INSTR函數.

例如:

DECLARE

V_RESULT VARCHAR2(255);

BEGIN

SELECTREGEXP_SUBSTR('hello world','l{2}')INTO V_RESULT

FROM DUAL;

DBMS_OUTPUT.PUT_LINE(V_RESULT);

END;

結果為ll

查詢到匹配的字元串才返回匹配的字元.沒查到就返回空.

㈥ sql如何插入一個常數呢

用變數與常量插入表而不是插入數據集應該用Values

INSERT INTO stumes ( stu_id, stu_name, stu_grade )
Values(@stu1, @stu2, '2008')

如果是結果集寫成這樣:
INSERT INTO stumes ( stu_id, stu_name, stu_grade )
Select 表達式1 as stu_id,表達式2 as stu_name,'2008' as stu_grade from table

被插入表的欄位名與結果集的欄位名一樣比較好,可有效避免出錯。

㈦ 求SQL的全部函數!完整的加100分!

一.聚合函數
AVG 返回組中值的平均值。空值將被忽略
BINARY_CHECKSUM 返回對表中的行或表達式列表計算的二進制校驗值。BINARY_CHECKSUM 可用於檢測表中行的更改
CHECKSUM 返回在表的行上或在表達式列表上計算的校驗值。CHECKSUM 用於生成哈希索引
CHECKSUM_AGG 返回組中值的校驗值。空值將被忽略
COUNT 返回組中項目的數量
COUNT_BIG 返回組中項目的數量。COUNT_BIG 的使用與 COUNT 函數相似。它們之間的唯一差別是它們的返回值:COUNT_BIG 總是返回 bigint 數據類型值,而 COUNT 則總是返回 int 數據類型值
GROUPING "是一個聚合函數,它產生一個附加的列,當用 CUBE 或 ROLLUP 運算符添加行時,附加的列輸出值為1,當所添加的行不是由 CUBE 或 ROLLUP 產生時,附加列值為0。
僅在與包含 CUBE 或 ROLLUP 運算符的 GROUP BY 子句相聯系的選擇列表中才允許分組"
MAX 返回表達式的最大值
MIN 返回表達式的最小值
SUM 返回表達式中所有值的和,或只返回 DISTINCT 值。SUM 只能用於數字列。空值將被忽略
STDEV 返回給定表達式中所有值的統計標准偏差
STDEVP 返回給定表達式中所有值的填充統計標准偏差
VAR 返回給定表達式中所有值的統計方差。
VARP 返回給定表達式中所有值的填充的統計方差。

二.數學函數
ABS 返回給定數字表達式的絕對值
ACOS 返回以弧度表示的角度值,該角度值的餘弦為給定的 float 表達式;本函數亦稱反餘弦。
ASIN 返回以弧度表示的角度值,該角度值的正弦為給定的 float 表達式;亦稱反正弦
ATAN 返回以弧度表示的角度值,該角度值的正切為給定的 float 表達式;亦稱反正切
ATN2 返回以弧度表示的角度值,該角度值的正切介於兩個給定的 float 表達式之間;亦稱反正切
CEILING 返回大於或等於所給數字表達式的最小整數
COS 一個數學函數,返回給定表達式中給定角度(以弧度為單位)的三角餘弦值
COT 一個數學函數,返回給定 float 表達式中指定角度(以弧度為單位)的三角餘切值
DEGREES 當給出以弧度為單位的角度時,返回相應的以度數為單位的角度
EXP 返回所給的 float 表達式的指數值
FLOOR 返回小於或等於所給數字表達式的最大整數
LOG 返回給定 float 表達式的自然對數
LOG10 返回給定 float 表達式的以 10 為底的對數
PI 返回 PI 的常量值
POWER 返回給定表達式乘指定次方的值
RADIANS 對於在數字表達式中輸入的度數值返回弧度值
RAND 返回 0 到1 之間的隨機float 值
ROUND 返回數字表達式並四捨五入為指定的長度或精度
SIGN 返回給定表達式的正 (+1)、零 (0) 或負 (-1) 號
SIN 以近似數字 (float) 表達式返回給定角度(以弧度為單位)的三角正弦值
SQUARE 返回給定表達式的平方
SQRT 返回給定表達式的平方根
TAN 返回輸入表達式的正切值
三.日期函數
DATEADD 在向指定日期加上一段時間的基礎上,返回新的 datetime 值。
DATEDIFF 返回跨兩個指定日期的日期和時間邊界數
DATENAME 返回代表指定日期的指定日期部分的字元串
DATEPART 返回代表指定日期的指定日期部分的整數
DAY 返回代表指定日期的天的日期部分的整數
GETDATE 按 datetime 值的 Microsoft�0�3 SQL Server�6�4 標准內部格式返回當前系統日期和時間
GETUTCDATE 返回表示當前 UTC 時間(世界時間坐標或格林尼治標准時間)的 datetime 值
MONTH 返回代表指定日期月份的整數
YEAR 返回表示指定日期中的年份的整數
四.系統函數
APP_NAME 返回當前會話的應用程序名稱(如果應用程序進行了設置)。
CASE 表達式 計算條件列表並返回多個可能結果表達式之一(詳見PPT資料)
CAST 和 CONVERT 將某種數據類型的表達式顯式轉換為另一種數據類型(詳見PPT資料)
COALESCE 返回其參數中第一個非空表達式
COLLATIONPROPERTY 返回給定排序規則的屬性
CURRENT_TIMESTAMP 返回當前的日期和時間。等價於 GETDATE()
CURRENT_USER 返回當前的用戶。價於 USER_NAME()

㈧ pl-sql中select * from al 這個al是什麼

Dual簡單的說就是一個空表,Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。常用來通過select語句計算常數表達式。

特性:

1、Oracle提供的最小的表,不論進行何種操作(不要刪除記錄),它都只有一條記錄——'X'。

例如:執行select * from al,裡面只有一條記錄;執行insert into al values('Y')後,再次查詢al表,仍然顯示一條記錄。

2、是sys用戶下的一張內部表,所有用戶都可以使用DUAL名稱訪問,無論什麼時候這個表總是存在

例如:執行一個查看當前日期的語句 select sysdate from al,這條語句在放在放在任何一個oracle資料庫當中都不會報錯,所以一般做一些特定查詢的時候用這個表是最穩妥的。

(8)sql常量表達式擴展閱讀:

用途

1、select計算常量表達式、偽列等值

oracle內部處理使它只返回一行數據,而使用其它表時可能返回多個數據行。

2、查看當前用戶

select user from al;

select count(*) from al;

3、用做計算器

select 7*9*10-10 from al;

4、調用系統函數

(1)獲得當前系統時間

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from al;

(2)獲得主機名

select sys_context('userenv','terminal') from al;

(3)獲得當前locale

select sys_context('userenv','language') from al;

(4)獲得一個隨機數

select DBMS_RANDOM.random from al;

5、查看序列值

(1)創建序列aaa 以1開始,每次加1

create sequence aaa increment by 1 start with 1;

(2)獲得序列aaa 的下一個序列值

select aaa.nextval from al;

(3)獲得序列aaa 的當前序列值

select aaa.currval from al;

㈨ 請問SQL語句中的左外聯和右外聯的區別,如何分清左表右表

SELECT--SQL語法
從一個或多個表中檢索數據。SELECT SQL 命令是與其它 Vfp一樣的內置的 Vfp命令。當你使用 SELECT 來生成查詢時, Vfp翻譯查詢並從表中獲取指定數據。你可以從以下地方創建 SELECT 查詢:

「命令」窗口中
帶有其它任何 Vfp命令的 Vfp程序中
查詢設計器中
SELECT [ALL | DISTINCT] [TOP nExpr [PERCENT]] [Alias.] Select_Item
[[AS] Column_Name] [, [Alias.] Select_Item [[AS] Column_Name] ...]
FROM [FORCE] [DatabaseName!] Table [[AS] Local_Alias]
[ [INNER | LEFT [OUTER] | RIGHT [OUTER] | FULL [OUTER] JOIN DatabaseName!]
Table [[AS] Local_Alias] [ON JoinCondition ...]
[[INTO Destination] | [TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN]]
[PREFERENCE PreferenceName] [NOCONSOLE] [PLAIN] [NOWAIT]
[WHERE JoinCondition [AND JoinCondition ...] [AND | OR FilterCondition [AND | OR FilterCondition ...]]]
[Group By GroupColumn [, GroupColumn ...]] [HAVING FilterCondition] [UNION [ALL] SELECTCommand]
[Order By Order_Item [ASC | DESC] [, Order_Item [ASC | DESC] ...]]
參數
SELECT
在 SELECT 子句中指定在查詢結果中包含的欄位、常量和表達式。
ALL
查詢結果中包含所有行 ( 包括重復值 )。ALL 是默認設置。
DISTINCT
在查詢結果中剔除重復的行。每一個 SELECT 子句只能使用一次 DISTINCT。
TOP nExpr [PERCENT]
在符合查詢條件的所有記錄中,選取指定數量或百分比的記錄。TOP 子句必須與 ORDER BY 子句同時使用。ORDER BY 子句指定查詢結果中包含的列上由Top字句決定的行數, TOP 子句根據此排序選定最開始的 nExpr個或 nExpr% 的記錄。

您可以指定選取 1 到 32767 個記錄。使用 ORDER BY 子句指定的欄位進行排序,會產生並列的情況,比如,可能有多個記錄,它們在選定的欄位上相同;所以,如果您指定 nExpr 為 10,在查詢結果中可能多於 10 個記錄,因為可能有幾個記錄位置並列。

如果包含 PERCENT 關鍵字指定查詢結果中的記錄數,得到記錄數的可能是小數,這時進行取整。包含 PERCENT 關鍵字時,nExpr 的范圍是 0.01 到 99.99。

[Alias.] Select_Item
限定匹配項的名稱。Select_Item 指定的每一項在查詢結果中都生成一列。一個項可以是以下一個
FROM 子句所包含的表中的欄位名稱。
一個常量,查詢結果中每一行都出現這個常量值。
一個表達式,可以是用戶自定義函數名。
關於使用用戶定義函數的詳細信息, 參見注釋節中的帶用戶定義函數的 SELECT。

你用 Select_Item 指定的各項生成一個查詢結果列。

如果兩個或更多的項具有相同的名稱, 在項名前包含表別名和一個句點來避免列重復。

[AS] Column_Name
為查詢輸出中的列指定顯示名。Column_Name 可以是表達式但不能包含不允許的字元, 如, 欄位名中的空格。
當 Select_Item 是一個表達式或包含一個欄位函數而且你想給該列一個有意義的名字時該選項是有用的。

FROM [FORCE] DatabaseName!
列出所有從中檢索數據的表。
FORCE 指定連接表時按它們出現在 FROM 子句中的順序。如果省略 FORCE, Vfp會試圖對查詢進行優化。但是, 使用 FORCE 子句,避免了優化過程,可能加快查詢執行的速度。

當包含表的資料庫不是當前資料庫時,DatabaseName! 指定這個資料庫的名稱。如果資料庫不是當前資料庫,就必須指定包含表的資料庫名稱。應在資料庫名稱之後表名之前加上感嘆號(!)分隔符。

[[AS] Local_Alias]
為 Table 中的表指定一個臨時名稱。如果指定了本地別名,那麼在整個SELECT 語句中必須都用這個別名代替表名。本地別名不影響 Visual FoxPro環境。INNER JOIN 只有在其他表中包含對應記錄(一個或多個)的記錄才出現在查詢結果中。
INNER JOIN 只有在其他表中包含對應記錄(一個或多個)的記錄才出現在查詢結果中。

LEFT [OUTER] JOIN 在查詢結果中包含:JOIN 左側表中的所有記錄,以及JOIN 右側表中匹配的記錄。OUTER 關鍵字可被省略;包含 OUTER 強調這是一個外連接 (outer join)。

RIGHT [OUTER] JOIN 在查詢結果中包含:JOIN 右側表中的所有記錄,以及 JOIN 左側表中匹配的記錄。OUTER 關鍵字可被省略;包含 OUTER 強調這是一個外連接接 (outer join)。

FULL [OUTER] JOIN 在查詢結果中包含:JOIN 兩側所有的匹配記錄,和不匹配的記錄;包含 OUTER 強調這是一個外連接 (outer join)。

關於連接的詳細信息, 參見備注段中的 Joins。

ON JoinCondition 指定連接條件。

INTO Destination
指定在何處保存查詢結果。Destination 可以是下列子句之一:
ARRAY ArrayName ,將查詢結果保存到變數數組中。
如果查詢結果中不包含任何記錄,則不創建這個數組。

CURSOR CursorName [NOFILTER | READWRITE] 將查詢結果保存到臨時表中。
要創建一個查用於子查詢中的游標, 用 NOFILTER。關於 NOFILTER 的詳細信息, 參見備注節。

要指定游標是臨時的和可修改的, 使用 READWRITE。如果源表或表使用 autoincrementing, 該設置不會被 READWRITE 游標繼承。

DBF | TABLE TableName [DATABASE DatabaseName [NAME LongTableName]] 保存查詢結果到一個表中。
包含 DATABASE DatabaseName 以指定添加了表的資料庫。

包含 NAME LongTableName 可以為該表命一個最多可包括 128 個字元的並且可以在資料庫中代替短名字的長名。

如果沒有包括 INTO 子句, 查詢結果顯示在一個「瀏覽」窗口中。也可以用 TO FILE 子句來定向查詢結果到列印機或一個文件。

TO FILE FileName [ADDITIVE] | TO PRINTER [PROMPT] | TO SCREEN
定向查詢結果到列印機或一個文件。
ADDITIVE 添加查詢輸出到 TO FILE FileName 中指定的已存在的文本文件內容中。

TO PRINTER 定向查詢輸出到一個列印機。在列印開始之前,使用可選的 PROMPT 子句顯示一個對話框。您可以根據當前安裝的列印機驅動程序調整列印機的設置。將 PROMPT 子句放置在緊跟 TO PRINTER 之後。

TO SCREEN 使查詢結果定向輸出到 Vfp主窗口或活動的用戶自定義窗口中。

PREFERENCE PreferenceName
如果查詢結果送往瀏覽窗口,就可以使用 PREFERENCE 保存瀏覽窗口的屬性和選項以備後用。關於 PREFERENCE 功能的詳細信息, 參見備注節。
NOCONSOLE
不顯示送到文件、列印機或 Vfp主窗口的查詢結果。
PLAIN
防止列標題出現在顯示的查詢結果中。不管有無 TO 子句都可使用 PLAIN子句。如果 SELECT 語句中包括 INTO 子句,則忽略 PLAIN 子句。
NOWAIT
打開瀏覽窗口並將查詢結果輸出到這個窗口後繼續程序的執行。程序並不等待關閉瀏覽窗口,而是立即執行緊接在 SELECT 語句後面的程序行。關於如何使用 NOWAIT 的說明, 參見備注節。
WHERE JoinCondition
指定 Vfp的查詢結果中只包括符合指定條件的記錄。JoinCondition 指定位於 FROM 子句中的欄位連接表。關於指定連接條件的詳細信息, 參見備注節。
WHERE 支持 JoinCondition 的 ESCAPE 操作符, 讓你可以執行包含有百分號 (%) 和下劃線 (_) 通配符的 SELECT SQL 命令查詢。ESCAPE 允許你指定一個按原字樣處理的 SELECT SQL 命令通配符。在 ESCAPE 子句中, 一旦一個字元被放到通配符字元之前,就表示這個通配符被看作一個文字字元。

FilterCondition
指定將包含在查詢結果中記錄必須符合的條件。使用 AND 或 OR 操作符,您可以包含隨意數目的過濾條件。您還可以使用 NOT 操作符將邏輯表達式的值取反,或使用 EMPTY() 函數以檢查空欄位。
SELECT SQL 命令在篩選條件中支持 "<field> IS / IS NOT NULL"。要學習如何使用 FilterCondition。

Group By GroupColumn [, GroupColumn ...]
按列的值對查詢結果的行進行分組。GroupColumn 可以是常規的表欄位名,也可以是一個包含 SQL 欄位函數的欄位名,還可以是一個數值表達式,指定查詢結果表中的列位置(最左邊的列編號為 1 )。
HAVING FilterCondition
指定包括在查詢結果中的組必須滿足的篩選條件。HAVING 應該同 GROUP BY一起使用。它能包含數量不限的篩選條件,篩選條件用 AND 或 OR 連接,還可以使用 NOT 來對邏輯表達式求反。可以在 HAVING 子句中使用本地別名和欄位函數。 關於你可以使用的欄位函數的詳細信息, 參見備注節。FilterCondition 不能包含子查詢。
可以使用帶 HAVING 子句的 Group By。使用 HAVING 子句的命令如果沒有使用 GROUP BY 子句,則它的作用與WHERE 子句相同。
如果 HAVING 子句不包含欄位函數的話,使用 WHERE 子句可以獲得較快的速度。

HAVING 子句應該出現在 INTO 子句前否則產生錯誤。

[UNION [ALL] SELECTCommand]
把一個 SELECT 語句的最後查詢結果同另一個 SELECT 語句最後查詢結果組合起來。默認情況下,UNION 檢查組合的結果並排除重復的行。
要組合多個UNION 子句,可使用括弧。可以用 UNION 子句模擬一個外部聯接。
ALL 防止 UNION 刪除組合結果中重復的行。

當一個列是備注或通用型時, 不允許連接不同類型的列。

在 Vfp8.0 以前的版本中, 當在兩個不同類型的欄位上執行 UNION 操作時你需要執行明確的轉換。
Vfp現在對支持它的數據類型支持隱含數據類型轉換。關於隱含數據類型轉換和數據類型優先, UNION 子句允許的規則, 以及其它信息的詳細內容, 參見備注節中的數據類型轉換和優先。

Order By Order_Item [ASC | DESC]
根據列的數據對查詢結果進行排序。每個 Order_Item 都必須對應查詢結果中的一列。它可以是下列之一:
FROM 子句中表的欄位,同時也是 SELECT 主句(不在子查詢中)的一個選擇項。
一個數值表達式,表示查詢結果中列的位置(最左邊列編號為 1 )。
ASC 指定查詢結果根據排序項以升序排列。它是 ORDER BY 的默認選項。

DESC 指定查詢結果以降序排列。

備注
在使用 FROM 子句時如果沒有打開表, Vfp顯示「打開」對話框讓你指定文件位置。一但打開後, 表在查詢完成後仍然保持打開。

當在 Destination 參數中使用 CURSOR 子句時, 如果你指定了一個打開的表的名字, Vfp產生一條錯誤信息。在 SELECT 執行後, 臨時游標保持打開並是活動的和只讀的除非你指定了 READWRITE 選項。當你關閉該臨時游標時, 它被刪除。游標可以指定 SORTWORK 而成為存在於驅動器或卷上的臨時文件。

當在 Destination 參數中使用 CURSOR 子句時, 你現在可以使用 NOFILTER 來創建一個可用於後來的查詢的游標。在早期版本的 Vfp中, 你需要包括一個額外的常數或表達式作為篩選。例如, 添加一個邏輯 true 作為篩選表達式來創建一個可用於後來的查詢的查詢:

SELECT *, .T. FROM customers INTO CURSOR myquery
但是, 包括 NOFILTER 會降低查詢性能因為要在磁碟上創建一個臨時表。臨時表在游標關閉時從磁碟上刪除。

當在 Destination 參數中使用 DBF | TABLE 子句時, 如果你指定了一個已經打開的表, 而且 SET SAFETY 是設置為 OFF, Vfp不警告地復寫該表。如果你沒有指定一個擴展名, Vfp給表一個 .dbf 擴展名。在 SELECT 執行後表保持打開並且是活動的。

如果你在相同查詢中包括 INTO 和 TO 子句, Vfp忽略 TO 子句。如果你包括 TO 子句但沒有包括 INTO 子句, 你可以定向查詢結果到一個名為 FileName 的 ASCII 文本文件, 到列印機, 或到 Vfp主窗口。

PREFERENCE 把特徵, 屬性或參數選項長期保存在 FoxUser.dbf 資源文件中。Preferences 可以在任何時候獲取。第一次執行有 PREFERENCE Preference Name 的 SELECT 命令時創建參數選項。以後執行有相同參數選項名的 SELECT 命令時便將瀏覽窗口恢復到原來的參數選項狀態。當瀏覽窗口關閉時,更新參數選項。如果您按下 CTRL+Q+W 鍵退出「瀏覽」窗口,您對「瀏覽」窗口所做的更改不會保存到資源文件中。

SELECT 命令中包括 TO SCREEN 可以把查詢結果定向輸出到 Vfp主窗口或用戶自定義窗口。如果顯示時 Vfp主窗口或用戶自定義窗口中寫滿了一屏,就暫停輸出。按任意鍵可以查看查詢結果後面的內容。但是,如果命令中包括了 NOWAIT 子句,顯示查詢結果時就不會暫停,等待按鍵,而是在 Vfp主窗口或用戶自定義窗口中連續滾過所有內容。如果命令中包含有 INTO 子句,忽略 NOWAIT 子句。

在一個 SQL 查詢的 WHERE 子句中包括 EVALUATE() 函數會返回不正確的數據。

如果包括一個以上的表在查詢中, 你應該在第一個以後為每一個表指定一個連接條件。連接條件可以包含篩選條件。

注意 每一個 SELECT 語句的最大連接數是 9.
必須用 AND 操作符來連接多個連接條件。各連接條件具有以下格式:

當你在串中使用 = 操作符時, 它的動作根據 SET ANSI 的設置會不同。當 SET ANSI 設置為 OFF 時, Vfp只比較串到較短串結束。當 SET ANSI 設置為 ON 時, Vfp遵循 ANSI 標準的字元串比較。關於 Vfp如果執行字元串比較的額外信息, 參見 SET ANSI 和 SET EXACT。

下列欄位函數可以與選定項一起使用,選定項可以是一個欄位或包含欄位的表達式:

AVG(Select_Item), 計算列中數值的平均值。
COUNT(Select_Item), 計算列中選定項的數目。計算查詢輸出的行數。COUNT(*) 計算查詢輸出中的行數。
MIN(Select_Item), 確定列中 Select_Item 的最小值。
MAX(Select_Item), 確定列中 Select_Item 的最大值。
SUM(Select_Item), 計算列中數值的和。
欄位函數不能嵌套使用。

UNION 子句遵守下列規則:

不能使用 UNION 來組合子查詢。
兩個 SELECT 命令的查詢結果中的列數必須相同。
兩個 SELECT 查詢結果中的對應列必須有相同的數據類型和寬度。
只有最後的 SELECT 中可以包含 ORDER BY 子句,而且必須按編號指出所輸出的列。如果包含了一個 ORDER BY 子句,它將影響整個結果。
當你用 UNION 連接查詢中的兩個表時, 僅匹配連接欄位值的記錄會出現在查詢結果中。如果在父表中的記錄在子表中沒有相應的記錄, 父表中的記錄不會出現在查詢結果中。一個外部聯接允許你包括父表中的所有記錄到輸出結果中, 連同子表中的匹配記錄一起。要在 Vfp中創建一個外部聯接, 你需要要使用一個嵌套的 SELECT 命令
注意 確信在每一個分號前包括一個空格。否則, Vfp產生一個錯誤。
上例中, 在 UNION 子句前的部分的命令從兩個表中選擇具有匹配值的記錄。不包括沒有相關的發票的客戶公司。命令中 UNION 子句後的部分選擇客戶表中的在訂單表中無匹配記錄的記錄。

關於第二部分的命令, 注意以下幾點:

包括在園括弧中的 SELECT 語句首先處理。該語句的結果是選擇訂單表中的所有客戶編號。
WHERE 子句找出 customer 表中的在 orders 表沒有相關記錄的所有客戶編號。由於第一節中的命令提供了所在 orders 表中有客戶編號的公司, Customer 表中的所有公司現在都包含在查詢結果中了。
因為在 UNION 中的表的結構必須相同, 有兩個佔位符在第二個 SELECT 語句中來代表第一個 SELECT 語句中的 orders.order_id 和 orders.emp_id。
注意 佔位符必須與它們所代表的欄位有相同類型。如果欄位是日期型, 佔位符應該是 。如果欄位是一個字元欄位, 佔位符應該是一個空串 ("")。

如果你沒有在 Order By 子句中指定排序, 查詢結果顯示為未排序。

當你發出 SET TALK ON 並執行 SELECT 時, Vfp顯示查詢使用的時間和結果中的記錄數。 _TALLY 包含了在查詢結果中的記錄數。

SET FILTER 設置的篩選條件對 SELECT 命令不起作用。

注意 下面部分提到的子查詢, 是指在 SELECT 命令中包含的 SELECT 命令。子查詢必須包括在園括弧中。在 SELECT 命令的 WHERE 子句中可以包含最多兩個平級的(非嵌套)的子查詢。子查詢中可以有多個連接條件 (join conditions)。
在你創建查詢輸出時, 列的命名遵循如下規則:

如果選擇項是具有唯一名稱的欄位,則用欄位名作為輸出列名。
如果多個選擇項具有相同名稱。例如,如果名為 Customer 的表有一個STREET 欄位,而名為 Employees 的表也有一個 STREET 欄位,則輸出列命名為 Extension_A 和 Extension_B (STREET_A 和 STREET_B)。如果選擇項名稱有 10 字元長,可以將名稱截短後再加下劃線和字母。例如,DEPARTMENT 變為 DEPARTME_A。
如果選擇項是表達式,它的輸出列命名為 EXP_A。其他表達式分別命名為EXP_B、EXP_C,依此類推。
如果選擇項包含諸如 COUNT() 這樣的欄位函數,則輸出列命名為CNT_A。如果另一個選擇項包含 SUM(),它的輸出列命名為 SUM_B。
用戶定義函數和 在 SELECT 子句中使用用戶自定義函數有明顯優點,但使用時應考慮以下限制:

SELECT 子句的運行速度會受用戶自定義函數執行速度的影響。因此,如果使用戶自定義函數的操作量很大,則這些函數的功能最好調用 C 語言或匯編語言編寫的 API 或用戶自定義函數來完成。
在 SELECT 激活的用戶自定義函數中,很難預測 Vfp輸入/輸出(I/O)和表的環境。一般來說,不知道選擇的工作區是哪一個,不知道當前表的名稱,甚至不知道正在處理的欄位名。這些變數的值完全取決於用戶自定義函數在優化過程的什麼地方激活。
在 SELECT 子句調用的用戶自定義函數中修改 VfpI/O 或表的環境是很不安全的。一般來說,這樣做的結果難以預料。
從 SELECT 將值傳遞給用戶自定函數唯一可靠的方法,是激活用戶自定義函數時以參數的形式傳遞。
經過實踐,有可能發現某種被認為是違法的操作在某種 FoxPro 版本中運行正確,但這並不保證它在以後的版本中也能正確運行。
拋開這些限制不說,用戶自定義函數在 SELECT 語句中還是可接受的。但不要忘記使用 SELECT 可能要降低性能。要學習如何在 SELECT 中使用用戶定義函數, 參見示例節。

連接 Vfp支持 ANSI SQL '92 連接 (Join) 語法,通過比較兩個或多個表中的欄位,將它們的記錄連接到一起,生成查詢。例如,內部連接 (inner join) 是將兩個表中連接欄位 (joined field) 值相同的記錄選取到查詢中。Vfp支持嵌套連接(nested joins)

由於 SQL 是派生於數學集合理論, 各表可以代表一個環。指定連接條件的 ON 子句確定交接點, 它代表匹配的行集合。對於一個內部聯接, 交接發生在兩個環的內部或 "inner" 部分。一個外聯接不僅僅包括這些表內部的交叉區域匹配的行, 也包括環的外面的左或右部的交集的行。

㈩ 幫我解釋下SQL建表命令的意思(翻譯,詳細點謝謝大哥OR大姐)

參數
database_name

是要在其中創建表的資料庫名稱。database_name 必須是現有資料庫的名稱。如果不指定資料庫,database_name 默認為當前資料庫。當前連接的登錄必須在 database_name 所指定的資料庫中有關聯的現有用戶 ID,而該用戶 ID 必須具有創建表的許可權。

owner

是新表所有者的用戶 ID 名,owner 必須是 database_name 所指定的資料庫中的現有用戶 ID,owner 默認為與 database_name 所指定的資料庫中的當前連接相關聯的用戶 ID。如果 CREATE TABLE 語句由 sysadmin 固定伺服器角色成員或 database_name 所指定的資料庫中的 db_dbowner 或 db_ddladmin 固定資料庫角色成員執行,則 owner 可以指定與當前連接的登錄相關聯的用戶 ID 以外的其它用戶 ID。如果與執行 CREATE TABLE 語句的登錄相關聯的用戶 ID 僅具有創建表的許可權,則 owner 必須指定與當前登錄相關聯的用戶 ID。sysadmin 固定伺服器角色成員或別名為 dbo 用戶的登錄與用戶 ID dbo 相關聯;因此,由這些用戶創建的表的默認所有者為 dbo。不是由上述兩種角色的登錄創建的表所有者默認為與該登錄相關聯的用戶 ID。

table_name

是新表的名稱。表名必須符合標識符規則。資料庫中的 owner.table_name 組合必須唯一。table_name 最多可包含 128 個字元,但本地臨時表的表名(名稱前有一個編號符 #)最多隻能包含 116 個字元。

column_name

是表中的列名。列名必須符合標識符規則,並且在表內唯一。以 timestamp 數據類型創建的列可以省略 column_name。如果不指定 column_name,timestamp 列的名稱默認為 timestamp。

computed_column_expression

是定義計算列值的表達式。計算列是物理上並不存儲在表中的虛擬列。計算列由同一表中的其它列通過表達式計算得到。例如,計算列可以這樣定義:cost AS price * qty。表達式可以是非計算列的列名、常量、函數、變數,也可以是用一個或多個運算符連接的上述元素的任意組合。表達式不能為子查詢。

計算列可用於選擇列表、WHERE 子句、ORDER BY 子句或任何其它可使用常規表達式的位置,但下列情況除外:

計算列不能用作 DEFAULT 或 FOREIGN KEY 約束定義,也不能與 NOT NULL 約束定義一起使用。但是,如果計算列由具有確定性的表達式定義,並且索引列中允許計算結果的數據類型,則可將該列用作索引中的鍵列,或用作 PRIMARY KEY 或 UNIQUE 約束的一部分。
例如,如果表中含有整型列 a 和 b,則可以在計算列 a+b 上創建索引。但不能在計算列 a+DATEPART(dd, GETDATE()) 上創建索引,因為在以後的調用中,其值可能發生改變。

計算列不能作為 INSERT 或 UPDATE 語句的目標。

說明 表中計算列所使用的列值因行而異,因此每行的計算列值可能不同。

計算列的為空性是由 SQL Server 根據使用的表達式自動確定的。即使只有不可為空的列,大多數表達式的結果也認為是可為空的,因為可能的下溢或溢出也將生成 NULL 結果。使用 COLUMNPROPERTY 函數(AllowsNull 屬性)查看錶中任何計算列的為空性。通過指定 ISNULL(check_expression, constant),其中常量為替代任何 NULL 結果的非 NULL 值,可為空的表達式 expr 可以轉換為不可為空的表達式。

ON {filegroup | DEFAULT}

指定存儲表的文件組。如果指定 filegroup,則表將存儲在指定的文件組中。資料庫中必須存在該文件組。如果指定 DEFAULT,或者根本未指定 ON 參數,則表存儲在默認文件組中。

ON {filegroup | DEFAULT} 也可以在 PRIMARY KEY 約束或 UNIQUE 約束中指定。這些約束會創建索引。如果指定 filegroup,則索引將存儲在指定的文件組中。如果指定 DEFAULT,則索引將存儲在默認文件組中。如果約束中沒有指定文件組,則索引將與表存儲在同一文件組中。如果 PRIMARY KEY 約束或 UNIQUE 約束創建聚集索引,則表的數據頁將與索引存儲在同一文件組中。

說明 在 ON {filegroup | DEFAULT} 和 TEXTIMAGE_ON {filegroup | DEFAULT} 的上下文中,DEFAULT 並不是關鍵字。DEFAULT 是默認文件組的標識符並需對其進行定界,如 ON "DEFAULT"、ON [DEFAULT] 和 TEXTIMAGE_ON "DEFAULT" 或 TEXTIMAGE_ON [DEFAULT]。

TEXTIMAGE_ON

是表示 text、ntext 和 image 列存儲在指定文件組中的關鍵字。如果表中沒有 text、ntext 或 image 列,則不能使用 TEXTIMAGE ON。如果沒有指定 TEXTIMAGE_ON,則 text、ntext 和 image 列將與表存儲在同一文件組中。

data_type

指定列的數據類型。可以是系統數據類型或用戶定義數據類型。用戶定義數據類型必須先用 sp_addtype 創建,然後才能在表定義中使用。

在 CREATE TABLE 語句中,用戶定義數據類型的 NULL/NOT NULL 賦值可被替代。但長度標准不能更改;不能在 CREATE TABLE 語句中指定用戶定義數據類型的長度。

DEFAULT

如果在插入過程中未顯式提供值,則指定為列提供的值。DEFAULT 定義可適用於除定義為 timestamp 或帶 IDENTITY 屬性的列以外的任何列。除去表時,將刪除 DEFAULT 定義。只有常量值(如字元串)、系統函數(如 SYSTEM_USER())或 NULL 可用作默認值。為保持與 SQL Server 早期版本的兼容,可以給 DEFAULT 指派約束名。

constant_expression

是用作列的默認值的常量、NULL 或系統函數。

IDENTITY

表示新列是標識列。當向表中添加新行時,Microsoft® SQL Server™ 將為該標識列提供一個唯一的、遞增的值。標識列通常與 PRIMARY KEY 約束一起用作表的唯一行標識符。可以將 IDENTITY 屬性指派給 tinyint、smallint、int、bigint、decimal(p,0) 或 numeric(p,0) 列。對於每個表只能創建一個標識列。不能對標識列使用綁定默認值和 DEFAULT 約束。必須同時指定種子和增量,或者二者都不指定。如果二者都未指定,則取默認值 (1,1)。

seed

是裝入表的第一行所使用的值。

increment

是添加到前一行的標識值的增量值。

NOT FOR REPLICATION

表示當復制登錄(如 sqlrepl)向表中插入數據時,不強制 IDENTITY 屬性。復制的行必須保留發布資料庫中所賦予的鍵值;NOT FOR REPLICATION 子句確保不向復制進程所插入的行賦予新的標識值。其它登錄所插入的行仍然具有以通常的方式創建的新標識值。建議同時使用具有 NOT FOR REPLICATION 的 CHECK 約束,以確保賦予的標識值處於當前資料庫所需的范圍內。

ROWGUIDCOL

表示新列是行的全局唯一標識符列。對於每個表只能指派一個 uniqueidentifier 列作為 ROWGUIDCOL 列。ROWGUIDCOL 屬性只能指派給 uniqueidentifier 列。如果資料庫兼容級別小於或等於 65,則 ROWGUIDCOL 關鍵字無效。有關更多信息,請參見 sp_dbcmptlevel。

ROWGUIDCOL 屬性並不強制列中所存儲值的唯一性。該屬性也不會為插入到表中的新行自動生成值。若要為每列生成唯一值,那麼或者在 INSERT 語句中使用 NEWID 函數,或者將 NEWID 函數指定為該列的默認值。

collation_name

指定列的排序規則。排序規則名稱既可以是 Windows 排序規則名稱,也可以是 SQL 排序規則名稱。collation_name 僅適用於數據類型為 char、varchar、text、nchar、nvarchar 及 ntext 的列。如果沒有指定該參數,那麼如果列的數據類型是用戶定義的,則該列的排序規則就是用戶定義數據類型的排序規則,否則就是資料庫的默認排序規則。

有關 Windows 和 SQL 排序規則名稱的更多信息,請參見 COLLATE。

CONSTRAINT

是可選關鍵字,表示 PRIMARY KEY、NOT NULL、UNIQUE、FOREIGN KEY 或 CHECK 約束定義的開始。約束是特殊屬性,用於強制數據完整性並可以為表及其列創建索引。

constrain_name

是約束的名稱。約束名在資料庫內必須是唯一的。

NULL | NOT NULL

是確定列中是否允許空值的關鍵字。從嚴格意義上講,NULL 不是約束,但可以使用與指定 NOT NULL 同樣的方法指定。

PRIMARY KEY

是通過唯一索引對給定的一列或多列強制實體完整性的約束。對於每個表只能創建一個 PRIMARY KEY 約束。

UNIQUE

是通過唯一索引為給定的一列或多列提供實體完整性的約束。一個表可以有多個 UNIQUE 約束。

CLUSTERED | NONCLUSTERED

是表示為 PRIMARY KEY 或 UNIQUE 約束創建聚集或非聚集索引的關鍵字。PRIMARY KEY 約束默認為 CLUSTERED,UNIQUE 約束默認為 NONCLUSTERED。

在 CREATE TABLE 語句中只能為一個約束指定 CLUSTERED。如果在為 UNIQUE 約束指定 CLUSTERED 的同時又指定了 PRIMARY KEY 約束,則 PRIMARY KEY 將默認為 NONCLUSTERED。

[ WITH FILLFACTOR = fillfactor ]

指定 SQL Server 存儲索引數據時每個索引頁的充滿程度。用戶指定的 fillfactor 取值范圍從 1 到 100。如果沒有指定 fillfactor,則默認為 0。創建索引時,fillfactor 的值越低,不必分配新空間即可由新索引項使用的空間就越多。

FOREIGN KEY...REFERENCES

是為列中的數據提供引用完整性的約束。FOREIGN KEY 約束要求列中的每個值在被引用表中對應的被引用列中都存在。FOREIGN KEY 約束只能引用被引用表中為 PRIMARY KEY 或 UNIQUE 約束的列或被引用表中在 UNIQUE INDEX 內引用的列。

ref_table

是 FOREIGN KEY 約束所引用的表名。

(ref_column[,...n])

是 FOREIGN KEY 約束所引用的表中的一列或多列。

ON DELETE {CASCADE | NO ACTION}

指定當要創建的表中的行具有引用關系,並且從父表中刪除該行所引用的行時,要對該行採取的操作。默認設置為 NO ACTION。

如果指定 CASCADE,則從父表中刪除被引用行時,也將從引用表中刪除引用行。如果指定 NO ACTION,SQL Server 將產生一個錯誤並回滾父表中的行刪除操作。

例如,在 Northwind 資料庫中,Orders 表和 Customers 表之間有引用關系。Orders.CustomerID 外鍵引用 Customers.CustomerID 主鍵。

如果對 Customers 表的某行執行 DELETE 語句,並且為 Orders.CustomerID 指定 ON DELETE CASCADE 操作,則 SQL Server 將在 Orders 表中檢查是否有與被刪除的行相關的一行或多行。如果存在相關行,則 Orders 表中的相關行將隨 Customers 表中的被引用行一同刪除。

反之,如果指定 NO ACTION,若在 Orders 表中至少有一行引用 Customers 表中要刪除的行,則 SQL Server 將產生一個錯誤並回滾 Customers 表中的刪除操作。

ON UPDATE {CASCADE | NO ACTION}

指定當要創建的表中的行具有引用關系,並且在父表中更新該行所引用的行時,要對該行採取的操作。默認設置為 NO ACTION。

如果指定 CASCADE,則在父表中更新被引用行時,也將在引用表中更新引用行。如果指定 NO ACTION,SQL Server 將產生一個錯誤並回滾父表中的行更新操作。

例如,在 Northwind 資料庫中,Orders 表和 Customers 表之間有引用關系:Orders.CustomerID 外鍵引用 Customers.CustomerID 主鍵。

如果對 Customers 表的某行執行 UPDATE 語句,並且為 Orders.CustomerID 指定 ON UPDATE CASCADE 操作,則 SQL Server 將在 Orders 表中檢查是否有與被更新行相關的一行或多行。如果存在相關行,則 Orders 表中的相關行將隨 Customers 表中的被引用行一同更新。

反之,如果指定 NO ACTION,若在 Orders 表中至少有一行引用 Customers 行,則 SQL Server 將產生一個錯誤並回滾對 Customers 行的更新操作。

CHECK

是通過限制可輸入到一列或多列中的可能值強制域完整性的約束。

NOT FOR REPLICATION

是用於防止在復制所使用的分發過程中強制 CHECK 約束的關鍵字。當表是復制發布的訂戶時,請不要直接更新訂閱表,而要更新發布表,然後讓復制進程將數據分發回訂閱表。可以在訂閱表上定義 CHECK 約束,以防用戶修改訂閱表。但是如果不使用 NOT FOR REPLICATION 子句,CHECK 約束同樣會防止復制進程將修改從發布表分發給訂閱表。NOT FOR REPLICATION 子句表示對用戶的修改(而不是對復制進程)強加約束。

NOT FOR REPLICATION CHECK 約束適用於被更新記錄的前像和後像,以防在復制范圍中添加記錄或從復制范圍中刪除記錄。將檢查所有刪除和插入操作;如果操作在復制范圍內,則拒絕執行該操作。

如果對標識符列使用此約束,則當復制用戶更新標識列時,SQL Server 將允許不必重新計算表標識列的種子值。

logical_expression

是返回 TRUE 或 FALSE 的邏輯表達式。

column

是用括弧括起來的一列或多列,在表約束中表示這些列用在約束定義中。

[ASC | DESC]

指定加入到表約束中的一列或多列的排序次序。默認設置為 ASC。

n

是表示前面的項可重復 n 次的佔位符。