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

sql製表命令

發布時間: 2023-03-13 13:00:32

① 第三章 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的字元串:

② 這幾句SQL麻煩高手仔細解答一下 意義以及用法 3KS

count (*) over() total, -- total 是 count (*) over() 的別名, count (*) over() 是分析函數求總數,OVER()是分析函數的格式
cast (count(*)over() as decimal)/2 mid --同上 mid 是別名,
ceiling(cast(count(*)over() as decimal)/2) next,
row_number() over(order by UID) --row_number() 行號

分析函數語法:
FUNCTION_NAME(<argument>,<argument>...)
OVER
(<Partition-Clause><Order-by-Clause><Windowing Clause>)
例:
sum(sal) over (partition by deptno order by ename) new_alias
sum就是函數名
(sal)是分析函數的參數,每個函數有0~3個參數,參數可以是表達式,例如:sum(sal+comm)
over 是一個關鍵字,用於標識分析函數,否則查詢分析器不能區別sum()聚集函數和sum()分析函數
partition by deptno 是可選的分區子句,如果不存在任何分區子句,則全部的結果集可看作一個單一的大區
order by ename 是可選的orderby 子句,有些函數需要它,有些則不需要.依靠已排序數據的那些函數,如:用於訪問結果集中前一行和後一行的LAG和LEAD,必須使用,其它函數,如AVG,則不需要.在使用了任何排序的開窗函數時,該子句是強制性的,它指定了在計算分析函數時一組內的數據是如何排序的.
1)FUNCTION子句
ORACLE提供了26個分析函數,按功能分5類
分析函數分類
等級(ranking)函數:用於尋找前N種查詢
開窗(windowing)函數:用於計算不同的累計,如SUM,COUNT,AVG,MIN,MAX等,作用於數據的一個窗口上
例:
sum(t.sal) over (order by t.deptno,t.ename) running_total,
sum(t.sal) over (partition by t.deptno order by t.ename) department_total
製表(reporting)函數:與開窗函數同名,作用於一個分區或一組上的所有列
例:
sum(t.sal) over () running_total2,
sum(t.sal) over (partition by t.deptno ) department_total2
製表函數與開窗函數的關鍵不同之處在於OVER語句上缺少一個ORDER BY子句!
LAG,LEAD函數:這類函數允許在結果集中向前或向後檢索值,為了避免數據的自連接,它們是非常用用的.
VAR_POP,VAR_SAMP,STDEV_POPE及線性的衰減函數:計算任何未排序分區的統計值
2)PARTITION子句
按照表達式分區(就是分組),如果省略了分區子句,則全部的結果集被看作是一個單一的組
3)ORDER BY子句
分析函數中ORDER BY的存在將添加一個默認的開窗子句,這意味著計算中所使用的行的集合是當前分區中當前行和前面所有行,沒有ORDERBY時,默認的窗口是全部的分區 在Order by 子句後可以添加nulls last,如:order by comm descnulls last 表示排序時忽略comm列為空的行.
4)WINDOWING子句
用於定義分析函數將在其上操作的行的集合
Windowing子句給出了一個定義變化或固定的數據窗口的方法,分析函數將對這些數據進行操作
默認的窗口是一個固定的窗口,僅僅在一組的第一行開始,一直繼續到當前行,要使用窗口,必須使用ORDER BY子句
根據2個標准可以建立窗口:數據值的范圍(RANGES)或與當前行的行偏移量.
5)Rang窗口
Range 5 preceding:將產生一個滑動窗口,他在組中擁有當前行以前5行的集合
ANGE窗口僅對NUMBERS和DATES起作用,因為不可能從VARCHAR2中增加或減去N個單元
另外的限制是ORDER BY中只能有一列,因而范圍實際上是一維的,不能在N維空間中
例:
avg(t.sal) over(order by t.hiredate asc range 100 preceding) 統計前100天平均工資
6)Row窗口
利用ROW分區,就沒有RANGE分區那樣的限制了,數據可以是任何類型,且ORDER BY 可以包括很多列
7)Specifying窗口
UNBOUNDED PRECEDING:這個窗口從當前分區的每一行開始,並結束於正在處理的當前行
CURRENT ROW:該窗口從當前行開始(並結束)
Numeric Expression PRECEDING:對該窗口從當前行之前的數字表達式(Numeric Expression)的行開始,對RANGE來說,從從行序值小於數字表達式的當前行的值開始.
Numeric Expression FOLLOWING:該窗口在當前行Numeric Expression行之後的行終止(或開始),且從行序值大於當前行Numeric Expression行的范圍開始(或終止)
range between 100 preceding and 100 following:當前行100前,當前後100後
注意:分析函數允許你對一個數據集進排序和篩選,這是SQL從來不能實現的.除了最後的Order by子句之外,分析函數是在查詢中執行的最後的操作集,這樣的話,就不能直接在謂詞中使用分析函數,即不能在上面使用where或having子句!!!

③ sql中如何表示換行、製表等符號

對於SQLServer資料庫,換行用char(10)

如 select 'a'+char(10)+'b'

④ 第128章 SQL函數 %SQLSTRING

將值排序為字元串的排序規則函數。

%SQLSTRING 將表達式轉換為按(區分大小寫)字元串排序的格式。 %SQLSTRING 從字元串中去除尾隨空格(空格、製表符等),然後在字元串的開頭添加一個前導空格。這個附加的空格強制將 NULL 和數值作為字元串進行整理。從數字中刪除前導零和尾隨零。

因為 %SQLSTRING 將空格附加到所有值,所以它將 NULL 值整理為空格,字元串長度為 1 。 %SQLSTRING 將任何僅包含空格(空格、製表符等)的值整理為 SQL 空字元串( '' )。當 %SQLSTRING 將空格附加到空(零長度)字元串時,它會將空格加上空字元串的內部表示形式 $CHAR(0) 進行整理,從而導致字元串長度為 2 。

可選的 maxlen 參數在索引或整理時將表達式字元串截斷為指定的字元數。例如,如果插入帶有 maxlen 截斷的字元串,則插入完整的字元串,並且可以通過 SELECT 語句檢索;此字元串的全局索引被截斷為指定長度。這意味著 ORDER BY 和比較操作僅評估截斷的索引字元串。這種截斷對於對超過下標的最大字元長度的字元串進行索引特別有用。使用 maxlen 參數,如果需要對長欄位進行索引,可以使用截斷長度參數。

%SQLSTRING 在轉換表達式後執行 maxlen 截斷;如果 maxlen 超過轉換後的表達式的長度,則不添加填充。最大字元串長度為 3,641,144 個字元; maxlen 沒有強制執行最大值。

可以使用 %SYSTEM.Util 類的 Collation() 方法在 ObjectScript 中執行相同的排序規則轉換:

也可以使用 SQLSTRING() 方法調用從 ObjectScript 調用此函數:

這兩種方法都支持 SQLSTRING 轉換後的截斷。請注意,截斷長度必須包括附加的空白:

注意:要將系統范圍的默認排序規則從 %SQLUPPER (不區分大小寫)更改為 %SQLSTRING (區分大小寫),請使用以下命令:

發出此命令後,必須清除索引,重新編譯所有類,然後重建索引。不要在其他用戶訪問表的數據時重建索引。這樣做可能會導致查詢結果不準確。

以下查詢在 WHERE 子句中使用 %SQLSTRING 來執行區分大小寫的選擇:

默認情況下, %STARTSWITH 字元串比較不區分大小寫。此示例使用 %SQLSTRING 格式使此比較區分大小寫。它返回所有以 「Al」 開頭的名稱(例如 Allen 、 Alton 等)。請注意,使用 %STARTSWITH 時,應將 %SQLSTRING 排序規則應用於語句的兩側。

以下示例使用帶有字元串截斷的 %SQLSTRING 來返回每個名稱的前兩個字元。請注意,字元串截斷是 3 (不是 2 ),因為 %SQLSTRING 添加了前導空格。 ORDER BY 子句使用這個兩個字元的欄位將行放在一個粗略的排序順序中:

此示例在不更改字母大小寫的情況下返回截斷的值。

以下示例將 %SQLSTRING 應用於子查詢:

⑤ sql中char(9) char(10) char(13)分別代表哪個字元

char(9) 水平製表符

char(10)換行鍵

char(13)回車鍵

解題方法如下:

直接在sql的命令框中輸入以下字元:

print 'A'+char(10)+'B'

print 'A'+char(9)+'B'

print 'A'+char(13)+'B'

然後輸出就可以看到它們代表的含義了,這里有個完整的表格也可以參考一下:


(5)sql製表命令擴展閱讀:

char(9) 水平製表符這里 水平製表符即tab鍵

一般char(10)char(13)常常可以連著用,表示0x0A0x0D,即一個完整的回車換行。

而且在使用單獨語句查 select char(9) ,char(10), char(13) 可能會發現全是空白,所以最好這樣輸入類似print 'A'+char(10)+'B'這樣才能看到字元的含義。

⑥ oracle sqlplus 命令都有那些 show命令除了 parameter外,還有什麼可以show。

一般在SQL>下進行SQLPLUS操作,都需要進行必要的環境設置才能完成我們所需要的輸出。所有環境的設置由SET命令加相應的環境變數來完成。下面是常用的環境設置:

§2.5.1 ARRAYSIZE(取回的行數)
SET ARRAY[SIZE]{integer}

一次可以提取(Fetch)的行的數目,1->5000,當有較長欄位時應設小些。

§2.5.2 AUTOCOMMIT(自動提交)
SET AUTO [COMMIT] { [ OFF | ON | IMM | n] }
用於在操作中是自動提交或是部分提交或是不自動提交。
1) 或IMM使得在完成每條SQL語句時將未提交的改變立刻提交給資料庫系統。ON
2) 允許在用戶發出COMMIT後,可以執行命令的數量(將n條SQL語句所做的改變進行提交)。N
3) 停止自動提交,用戶必須用COMMIT命令才能被提交。OFF

§2.5.3 LINESIZE(行顯示寬度)
可以設置LINESIZE環境變數來控制行的顯示寬度,預設是80個字元。
SET Lin[esize]{80|integer}
Integer =設置行寬度(字元個數),最大值999,如:
SQL>set linesize 160

§2.5.4 LONG(長類型顯示位元組數)
在預設的SQL> 狀態下,SQL>緩沖區用於顯示LONG 的位元組數只有80個字元。如果我們需要查詢的列中含有 LONG類型的欄位的話,就需要將LONG緩沖區設置大些。
SET LONG{80|integer}
Integer是 顯示或拷貝long值的最大寬度, n=1->32767(但必須小於Maxdata值)
SQL>show Maxdata (最大行寬)
SQL>set long 2000

§2.5.5 PAGESIZE(頁行數)
在預設的SQL> 狀態下,SQL>緩沖區顯示頁的行數是24行,其中22行顯示數據,2行顯示標題和橫線。我們將pagesize 設置大些以減少提示標題和橫線。
SET pag[esize] {24|integer}
SQL>SET pagesize 66

§2.5.6 PAUSE(暫停)
可以設置 PAUSE 為ON 或OFF來控制屏幕顯示。當設置為ON 時,在select 語句發出後需要按Enter鍵才能顯示一屏。
SET PAUSE [ ON | OFF ]
SQL> setpause on

提示:在發出select 語句並按Enter鍵後還要再按Enter鍵才能顯示結果.

§2.5.7 SPACE(列間空格)
可用 set space 來設置各列間的空格數,語法為:
SET SPA[CE] {1|n}
N為設置輸出行列間的空格數,最大為10。
SQL>set space 2

建議:在一般情況下,不用設置space參數。

§2.5.8 Termout (啟/停屏幕顯示)
TERMOUT用於設置在屏幕上顯示或不顯示所輸出的信息。
SET TERMOUT { ON | OFF }

set termout off
set termout on

set termout off 常用SPOOL XXX時,即關閉報表在屏幕上的顯示(節省時間)
set termout on 常用SPOOL off之後,即恢復報表在屏幕上的顯示

§2.5.9 ECHO (啟/停命令顯示)
可以用ECHO命令來顯示或不顯示所執行的SQL命令。語法如:
SET ECHO{OFF|ON}
顯示執行當中的各命令( 即用start 時)
set echo 受到 set termout 的影響

set pagesize 100
set echo on
select table_name from dict where rownum<20;
select * from cat where rownum<30;
set echo off
--下面只顯示結果不顯示命令:
select table_name from dict where rownum<20;
select * from cat where rownum<30;

§2.5.10 TRANSACTION (啟動事務)
一個很重要的事務環境設置是TRANSACTION。它包括兩個部分的內容:
SET TRANSACTION { READ ONLY | USE ROLLBACK SEGMENT segment_name }
READ ONLY是用於保證讀的一致性。即其他用戶的修改不影響當前查詢結果。
USE ROLLBACK SEGMENT segment_name是為當前所處理的事務指定專門的回滾段。這主要是在進行大量的Insert或Delete或Update時,需要一個大的回滾段以保證事務正常完成。詳細見資料庫管理員。

§2.5.11 SHOW ALL(列出所有參數)
可以用SHOW ALL來顯示當前的所有參數情況。它的用法很簡單。比如:

SQL> show all
appinfo為ON並且已設置為"SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autorecovery OFF
autotrace OFF
blockterminator "." (hex 2e)
btitle OFF and為下一條SELECT語句的前幾個字元
cmdsep OFF
colsep " "
compatibility version NATIVE
concat "." (hex 2e)
commit 0
COPYTYPECHECK為ON
define "&" (hex 26)
describe DEPTH 1 LINENUM OFF INDENT ON
markup HTML OFF SPOOL OFF ENTMAP ON PREFORMAT OFF
echo OFF
editfile "afiedt.buf"
embedded OFF
escape OFF
flagger OFF
flush ON
heading ON
headsep "|" (hex 7c)
instance "local"
linesize 80
lno 14
loboffset 1
logsource ""
long 80
longchunksize 80
newpage 1
null ""
numformat ""
numwidth 10
pagesize 14
PAUSE為OFF
pno 0
recsep WRAP
recsepchar " " (hex 20)
release 801070000
repfooter OFF and為NULL
repheader OFF and為NULL
serveroutput OFF
shiftinout INVISIBLE
showmode OFF
spool OFF
sqlblanklines OFF
sqlcase MIXED
sqlcode 0
sqlcontinue "> "
sqlnumber ON
sqlprefix "#" (hex 23)
sqlprompt "SQL> "
sqlterminator ";" (hex 3b)
suffix "sql"
tab ON
termout ON
time OFF
timing OFF
trimout ON
trimspool OFF
ttitle OFF and為下一條SELECT語句的前幾個字元
underline "-" (hex 2d)
USER為"SYS"
verify ON
wrap :行將為已換行
SQL>
你可以從上面的參數中看到其當前值,也可以修改某些參數的值。
格式化輸出
§2.6.1 一般數據的格式化輸出

在Oracle的SQL>下,經常用COLUMN命令來對所輸出的列進行格式化,即按照一定的格式進行顯示。COLMUN命令語法如下:

COL[UMN] [{ column | expr } [ option_1 ... option_n ] ]

column:列名
expr:有效的SQL表達式
option_1...option_n:可以是下列之一:
ALI[AS] alias
CLE[AR]
FOLD_A[FTER]
FOLD_B[EFORE]
FOR[MAT] format
HEA[DING] text
JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}
LIKE {expr|alias}
NEWL[INE]
NEW_V[ALUE] variable
NOPRI[NT]|PRI[NT]
NUL[L] text
OLD_V[ALUE] variable
ON|OFF
WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]

下面給出常用的關鍵字的解釋:
Alias 給出列的別名,BREAK和COUMN可以引用所定義的別名。
CLEAR 取消列的定義。
FORMAT列顯示格式,format為:
9999990 9或0的個數決定最多顯示多少位
9,999,999.99按照逗號和小數點來顯示數據,若是0以空格顯示
099999 顯示前面補0
$999,999.99 數字前加美圓號
B99999 若為0,則結果為空白
99999Mi 若數字為負,則負號放在數字後(右邊),預設放在左邊
99999PR 負號將以括弧括起
9.999EEEE 以科學記數法表示(必須有4個E)
999V99 數字乘以10n ,如1234變為123400
DATE 採用日期數字格式(MM/DD/YY)

Heading重新標記列的顯示標題,如:

SQL> col ename heading 姓名format a10
SQL> select ename,sal from emp;

例子:
SQL
COLUMN SALARY FOR $9,999,999.99
COLUMN LAST_NAME FOR A35.

§2.6.2 日期的格式化輸出
Oracle系統提供了一個NLS_DATE_FORMAT的環境變數來設置日期的顯示格式。用它可以完成按照不同格式要求的顯示,比如按照中國的習慣為yyyy年mm月dd日等。

1.系統日期 sysdate 的顯示
用sysdate 可以顯示ORACLE RDBMS 所在機器的日期及時間,如:
SQL> alter session set nls_date_format ='"公元"yyyy"年"mm"月"dd"日"';

會話已更改。

SQL> select sysdate from al;

SYSDATE
------------------
公元2001年05月30日

2.日期類型的顯示

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

SQL> connect scott/tiger
已連接。
SQL> alter session set nls_date_format ='yyyy"年"mm"月"dd"日生"';

會話已更改。
SQL> col HIREDATE heading生日
SQL> col sal heading工資
SQL> col sal ename姓名
SQL> select ename,sal,hiredate from emp;

姓名 工資 生日
---------- ---------- -----------------
SMITH 800 1980年12月17日生
ALLEN 1600 1981年02月20日生
WARD 1250 1981年02月22日生
JONES 2975 1981年04月02日生
MARTIN 1250 1981年09月28日生
BLAKE 2850 1981年05月01日生
CLARK 2450 1981年06月09日生
SCOTT 3000 1987年04月19日生
KING 5000 1981年11月17日生
TURNER 1500 1981年09月08日生
ADAMS 1100 1987年05月23日生
JAMES 950 1981年12月03日生
FORD 3000 1981年12月03日生
MILLER 1300 1982年01月23日生

已選擇14行。
§2.7 加標題
有時在輸出一些結果時,可能需要加一些標題,如表上面的頂標題,落款等。這樣的要求可由Ttitle和Btitle來完成。
ttitle和btitle

ttitle [center|left|right]string 頂標題
btitle [center|left|right]string 底標題
ttitle center 'XX公司人員情況表'
btitle left '製表人:xxxx' right '日期:xxxx年xx月'
Clear ttitle

§2.8 建立簡單報告
我們可以用TTITLE、BTITLE、COLUMN、BREAK ON、COMPUTE SUM及SET LINESIZE、SET PAGESIZE、SET NEWPAGE來設置查詢結果的顯示格式;在用SPOOL命令將顯示結果輸出到一個操作系統文件中去,一般輸出文件的類型為.LST。

建立簡單報告主要使用下面命令來實現:

1. SPOOL命令

SPOOL filename 將緩沖區的內容寫到文件中
SPOOL off 終止寫命令

2. COLUMN 命令
column col_name[,heading] format format_spe
把欄位的結果指定為一種輸出格式
COL name heading '姓名' for a10
COL sal heading '工資' for 9,999.99

3.ttitle、btitle

ttitle [center|left|right]string 頂標題
btitle [center|left|right]string 底標題
ttitle center 'XX公司人員情況表'
btitle left '製表人:趙元傑' right '日期:1998.11月'
Clear ttitle

4.break、compute

clear breaks,clear computes
break on column 在該列上中斷
break on row 在每一行上中斷
break on Page
break on report
skip n 跳過n行
skip page 跳過未用完的頁
compute avg
compute count
compute max
compute min
compute std
compute sum
compute var
compute num 計算所有行
compute sum of sal on deptno

5.set 在報表中的設置
l set termout off、set termout on命令
l set termout off 常用SPOOL XXX前,即關閉報表在屏幕上的顯示(節省時間)
l set termout on 常用SPOOL off之後,即恢復報表在屏幕上的顯示
l set ECHO{OFF|ON} 顯示執行當中的各命令(即用start 時),set echo 受到 set termout 的影響
l set Lin[esize]{80|integer} 設置行寬度,最大值999
l set pag[esize] {24|integer} 設置頁的大小

例子:
SQL>COL ename heading 『姓名』 for a12
SQL>COL sal heading 『工資』 for a999,999.99
SQL>COL hiredate heading 『出生』
SQL>SET LINESIZE 200
SQL>SET PAGESIZE 60
SQL>SPOOL c:\all_emp
SQL>select ename,sal,deptno,hiredate from emp order by deptno;
SQL>SPOOL OFF

§2.9 輸入變數
Oracle提供一種在處理SQL語句時可以將參數作為變數來對待的技術,即在條件句中可以是變數而不是具體的值,這樣的處理就是輸入變數。這樣做的目的就是可以重復使用同樣的語句,每次只要輸入相應的值即可。要實現將參數寫成為變數,只要在變數前加一個&號即可。看下面語句:

Select sid, serial#,username, command from v$session
Where USERNAME = upper(『&usr』);

這樣的語句在運行中,系統會自動提示你回答變數的具體值,上面語句運行時提示和回答時顯示的信息如下:

SQL> Select sid, serial#,username, command from v$session
2 Where USERNAME = upper('&usr');
輸入 usr 的值: sys
原值 2: Where USERNAME = upper('&usr')
新值 2: Where USERNAME = upper('sys')

SID SERIAL# USERNAME COMMAND
---------- ---------- ------------------------------ ----------
7 26 SYS 3

在變數說明中,可以使用多個變數,比如:

Alter system kill session 『&sid,&ser』;

Alter system kill session 『&會話號,&序列號』;

它的運行情況如下:

SQL> Select sid, serial#,username, command from v$session;

SID SERIAL# USERNAME COMMAND
---------- ---------- ------------------------------ ----------
1 1 0
2 1 0
3 1 0
4 1 0
5 1 0
6 1 0
7 26 SYS 3
8 16 ZHAO 0

已選擇8行。

SQL> Alter system kill session '&sid,&ser';
輸入sid的值: 8
輸入ser的值: 16
原值 1: Alter system kill session '&sid,&ser'
新值 1: Alter system kill session '8,16'

系統已更改。

一般系統預設下是使用 「&」 符號來定義變數,你也可以使用另外的符號來代替,比如不喜歡用 & 而要用 ?,則有:

SQL> set define ?
SQL> select sid,serial#,username from v$session where username='?usr';
輸入 usr 的值: SYS
原值 1: select sid,serial#,username from v$session where username='?usr'
新值 1: select sid,serial#,username from v$session where username='SYS'

SID SERIAL# USERNAME
---------- ---------- ------------------------------
7 26 SYS

次時由於我們修改了會話環境的參數值,可以用下面命令查看:

SQL> show define
define "?" (hex 3f)

⑦ 怎樣將SQL數據導出到EXCEL中

實現步驟: 1、打開MicroSoft Excel 2000 2、文件(F)→新建(N)→工作簿→ 3、輸入SQL*Loader將Excel數據後,存檔為test.xls, 4、文件(F)→另存為(A)→ 保存類型為:製表符分隔,起名為text.txt,保存到C: 5、須先創建表結構: 連入SQL*Plus,以system/manager用戶登錄, 以下是代碼片段: SQL> conn system/manager 創建表結構 以下是代碼片段: SQL> create table test ( id number,--序號 usernamevarchar2(10),--用戶名 passwordvarchar2(10),--密碼 sj varchar2(20) --建立日期 ); 6、創建SQL*Loader輸入數據Oracle資料庫所需要的文件,均保存到C:,用記事本編輯: 控制文件:input.ctl,內容如下: load data --1、控制文件標識 infile 'test.txt' --2、要輸入的數據文件名為test.txtappend into table test--3、向表test中追加記錄 fields terminated by X'09'--4、欄位終止於X'09',是一個製表符(TAB) (id,username,password,sj) -----定義列對應順序 a、insert,為預設方式,在SQL*Loader將Excel數據裝載開始時要求表為空 b、append,在表中追加新記錄 c、replace,刪除舊記錄,替換成新裝載的記錄 d、truncate,同上 7、在DOS窗口下使用SQL*Loader命令實現數據的輸入 以下是代碼片段: C:>sqlldr userid=system/manager control=input.ctl 默認日誌文件名為:input.log 默認壞記錄文件為:input.bad 如果是遠程對SQL*Loader將Excel資料庫進行導入Oracle資料庫操作,則輸入字元串應改為: 以下是代碼片段: C:>sqlldr control=input.ctl 8、連接到SQL*Plus中,查看是否成功輸入,可比較input.log與原test.xls文

⑧ 關於SQL製表當中如何把兩個一起作為主碼,另一個表引用這個表的主碼當中的一個作為外碼

你現在是2NF,搞成3NF就行了。

方案一:
Company表中,僅company_name作PK -- 很奇怪,為何你的PK要加上city?

方案二:
Company表中,增加ID欄位;works表引用該ID欄位