一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

SQL Select用法詳解

 zhanglaiji 2011-05-31
SQL Select用法詳解

在ADO使用SELECT語法一

SELECT表達式

接著,讓我們看看SELECT表達式,SELECT用來在表中尋找符合特定條件的記錄,語法如下:

SELECT [關鍵字] { * | 表名稱.* | [表名稱.]字段名稱1 [AS 別名1] [, [表名稱.] 字段名稱2 [AS 別名2] [, ...]]}
FROM 表運算式 [, ...] [IN 外部表]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

關鍵字:可以用來限制返回之記錄的數量,可以設定為ALL、DISTINCT、
DISTINCTROW 、或TOP。如果沒有指定述語,缺省值為 ALL。

*:選取全部的字段。

別名:代替在表中原有的字段名稱。

表運算式:一個或多個以逗號分隔的表名稱。

外部表:如果表不存在目前的表當中,須設定包含表運算式中表的表名稱。

執(zhí)行SELECT 表達式,并不會改變表之中現有的資料。

一個 SELECT 表達式的最基本語法是:

SELECT * FROM 表運算式

您可以使用星號(*)來選取表的全部字段。譬如下例選取 [產品] 表中的全部字段:

SELECT * FROM 產品

字段名稱包含空格或標點符號時,須使用括號[ ]將它括在其中。例如:

SELECT [電腦 的產品]

如果在FROM子句中的字段名稱中,包含多個的表中時,需在字段名稱前加上表名稱和點(.)運算子,即 表名稱.字段名稱。譬如下例選取 [產品] 表的 [價格] 字段和 [訂單] 表的 [數量] 字段:

SELECT 產品.價格, 訂單.數量

FROM 產品, 訂單

WHERE 產品.代號 = 訂單.代號

當您使用Recordset 對象時,Recordset并不認得rs(表名稱.字段名稱) 格式,即rs(“產品.價格”)會發(fā)生錯誤,您必須使用AS來設定字段名稱的別名。譬如:

SELECT 產品.價格 AS 價格, 訂單.數量AS 數量

FROM 產品, 訂單

WHERE 產品.代號 = 訂單.代號

如此就可以使用rs(“價格”) 和rs(“數量”),來讀取其字段的資料。

與SELECT表達式相關的語法:


關鍵字:ALL/ DISTINCT/ DISTINCTROW/ TOP。

WHERE:尋找FROM中的表符合特定條件的資料記錄。WHERE 可以使用下面的
BETWEEN、LIKE、IN運算子:

Between...And:判斷表達式的值是否落在指定的范圍之中。

Like:尋找相符合的關鍵字。

IN運算式:限定范圍。

NOT IN運算式:表示不屬于所指定的范圍。

ORDER BY子句:可以設定排序的字段。

GROUP BY子句:將查詢的結果做統計。

HAVING子句:使用在SELECT 表達式中,篩選已經GROUP BY統計的記錄。

Union:可以合并多組查詢的結果。

JOIN:連接組合兩個表中的字段記錄。

子查詢(sub query):表達式中,可以包括SELECT表達式。

Select...Into:將查詢的結果,建立一個產生的表。


詳細介紹如下:

ALL/DISTINCT/DISTINCTROW/TOP關鍵字

使用SELECT查詢時,可以加上關鍵字,以選取所查詢的記錄。如下:


ALL:返回所有的記錄。

DISTINCT:指定字段中的記錄有重復時只返回一條記錄,記錄不重復。

DISTINCTROW:指定字段中的記錄有重復時都不返回。

TOP:返回前面幾個記錄或幾個百分比的記錄。


語法如下:

SELECT [ALL | DISTINCT | DISTINCTROW | [TOP n [PERCENT]]]
FROM 表

ALL返回所有的記錄。不加關鍵字時,與加ALL的意義相同,將返回所有的記錄。譬如下列兩個例子的執(zhí)行結果相同,都從產品表中返回所有的記錄:

SELECT ALL * FROM 產品

與以下的執(zhí)行結果相同:

SELECT * FROM 產品

DISTINCT不選取指定字段之中的重復資料。使用DISTINCT后,查詢的結果,列在
SELECT DISTINCT后的每個字段的資料值,若相同則只取一條記錄,換句話說,指定字段的資料不會有重復的現象。例如,在產品表之中有一些產品名稱相同的產品,加上DISTINCT的SQL表達式只會返回一條記錄字段為產品名稱資料相同的記錄:

SELECT DISTINCT 產品名稱 FROM 產品

如果您不加上DISTINCT,上例查詢將返回數個包含相同產品名稱的記錄。

如果SELECT DISTINCT子句后指定數個字段,查詢的結果,所有字段的組合值不會有重復的現象。

DISTINCTROW則不返回指定字段所有重復的記錄。

TOP n [PERCENT] ,返回前面幾條記錄或幾個百分比的記錄。排列的順序可以使用ORDER BY子句來指定。譬如找到成績前10名的學生姓名:

SELECT TOP 10 姓名
FROM 學生
ORDER BY 成績

如果您沒有包含ORDER BY子句,查詢將由學生表返回任意的10個記錄。

TOP不在相同值間作選擇,如果第10及第11的成績是相同的,查詢將返回11個記錄。

您可使用PERCENT來設定前面幾個百分比的記錄,譬如譬如找到成績前10%的學生姓名:

SELECT TOP 10 PERCENT 姓名
FROM 學生
ORDER BY 成績

讓我們看一個在ASP程式中使用這個SQL指令的例子。

可以利用Distinct找出不重復的記錄,譬如ASP程式rs7.asp如下,[Insert Into 產品(代號,名稱) Select Distinct 代號,名稱 From 產品 where 代號 ='C2000'] 使用Distinct與Insert Into新增代號為C2000的記錄:

%

'Distinct 代號,名稱只判斷代號,名稱是否相同, 相同者只加一條記錄

sql = "Insert Into 產品(代號,名稱) Select Distinct 代號,名稱 From 產品 where 代號 ='C2000'"

Set a = conn1.Execute(sql)

Set rs3 = Server.CreateObject("ADODB.Recordset")

sql = "Select * from 產品 where 代號 ='C2000'"

rs3.Open sql,conn1,1,1,1

%

TABLE COLSPAN=8 CELLPADDING=5 BORDER=0

TR

TD ALIGN=CENTER BGCOLOR="#800000"FONT COLOR="#FFFFFF"代號
/FONT/TD

TD ALIGN=CENTER BGCOLOR="#800000"FONT COLOR="#FFFFFF"名稱
/FONT/TD

TD ALIGN=CENTER BGCOLOR="#800000"FONT COLOR="#FFFFFF"價格
/FONT/TD

TD ALIGN=CENTER BGCOLOR="#800000"FONT COLOR="#FFFFFF"數量
/FONT/TD

/TR

% Do while not rs3.EOF %

TR

TD BGCOLOR="f7efde" ALIGN=CENTER%= rs3("代號")%/TD

TD BGCOLOR="f7efde" ALIGN=CENTER%= rs3("名稱")%/TD

TD BGCOLOR="f7efde" ALIGN=CENTER%= rs3("價格")%/TD

TD BGCOLOR="f7efde" ALIGN=CENTER%= rs3("數量")%/TD

/TR

%

rs3.MoveNext

Loop

rs3.Close

%

/TABLE

WHERE

WHERE尋找FROM中的表符合特定條件的資料記錄,WHERE 使用在SELECT、UPDATE、或DELETE表達式。

如果SELECT查詢中沒有指定WHERE子句,將返回表中所有的資料。如果在SELECT查詢多個表,且沒有使用WHERE子句、或JOIN 子句的話,查詢結果為多個表資料的乘積。

WHERE設定特定的條件,譬如:


FROM 產品 WHERE 分類 = '電腦':表示選擇 [分類] 為 [電腦] 的 [產品]

WHERE 價格 Between 1000 And 5000:表示價格介于1000至5000之間 。

一個WHERE子句,最多可包含40個運算式,運算式之間由AND或OR等邏輯運算子相連結。

設定特定的條件時,依照字段類型,前后加不同的符號,譬如:


文字:前后加單引號,譬如WHERE 分類 = '電腦'。

數字:前后不加符號,譬如WHERE 數量 100。

日期:前后加#號,譬如WHERE 日期 = #5/15/99#。


WHERE可以使用下面的BETWEEN、LIKE、IN運算子。

******************************************************

ADO使用SELECT語法二

接上一篇文章:

WHERE可以使用下面的BETWEEN、LIKE、IN運算子。

Between...And

Between...And判斷表達式的值是否落在指定的范圍之中。語法為:

expr Between value1 And value2

表示如果expr的值介于value1和value2之間,則Between...And運算子會返回True;否則它會返回False。

您也可以加上邏輯運算 Not expr Between value1 And value2,來判斷相反的條件,即expr落在value1和 value 2的范圍之外。

如果expr、value1、或value2為Null時,則Between...And會返回Null值。

您不能在 Between...And 運算子中使用通配符*,例如,您不能使用 100* 和 500* 來尋找介于1000至5000中的產品代號。

Like

Like尋找相符合的關鍵字。

Like跟隨一個運算式,列出所要比較的字串或字符串文字。

在一運算式中,您可以使用 Like 運算子將一字段資料和一字串運算式做一比較。您可以使用通配符*來找出相類似的資料,譬如Like "王*",則查詢會返回所有字段中以 [王] 做為開頭的資料。

Like后運算式可以使用的符號:

%:通配符,表示一個或多個字符,譬如LIKE jack% 將找到所有以jack為起頭的字串文字,LIKE %jack%則找到包括jack的字串文字。


_:一個字符的通配符,譬如LIKE jack_ 將找到如jack1、jacka等字串文字,LIKE _jack_ 則找到如ajackb、cjackf等字串文字。

[x-y]:指定字符范圍,譬如LIKE [a-c]jack 將找到如ajack1、bjack、cjack等字串文字。

[^x-y]:指定排除的字符范圍,譬如LIKE [^a-c]jack 將不會找到如ajack1、
bjack、cjack等字串文字。

下例中,會得到以字母A做為開頭而其后接著介于B到G之間的任何字母和一個數字的資料:

Like "A[B-G]#"

IN

IN運算式,限定范圍。

語法為:

expr [Not] In(value1, value2,…)

其中expr為運算式字段。value1, value2, …為指定的范圍清單。

例如,您可以使用In運算子,來指定學生必須居住的城市,為廣州市、深圳市、或汕頭市:

SELECT *

FROM 學生

WHERE 城市 In ('廣州市','深圳市','汕頭市')

讓我們看一個ASP程式使用這個SQL指令的例子。

我們可以利用IN子句決定范圍,譬如ASP程式rs24.asp如下,[SELECT 姓名,科目,分數 From 考試 Where 分數 In (SELECT 分數 From 考試 Where 分數
=60)],使用IN找出分數大于或等于60分的記錄:

%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver=
{Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT 姓名,科目,分數 From 考試 Where 分數 In (SELECT 分數
From 考試 Where 分數=60)"

rs2.Open SqlStr,conn1,1,1

Response.Write "pIn: 低于60分不算"

Do while not rs2.EOF

Response.Write "BR" & rs2("姓名") & " " & rs2("科目") & " 分數: " &
rs2("分數")

rs2.MoveNext

Loop

rs2.Close

%

以上的ASP程式rs24.asp,在用戶端使用瀏覽器,瀏覽執(zhí)行的結果,顯示分數大于或等于60分的記錄。

NOT IN

NOT IN運算式,表示不屬于所指定的范圍。

讓我們看一個于ASP程式中使用這個SQL指令的例子。

我們可以利用Not In子句決定不應顯示的記錄,譬如ASP程式rs24.asp如下,[SELECT 姓名,科目,分數 From 考試 Where 分數 Not In (SELECT 分數 From 考試 Where 分數=60)],使用IN找出分數不大于或等于60分的記錄,即小于60分的記錄:

%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver=
{Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT 姓名,科目,分數 From 考試 Where 分數 Not In (SELECT 分
數 From 考試 Where 分數=60)"

rs2.Open SqlStr,conn1,1,1

Response.Write "pNot In: 高于60分不算"

Do while not rs2.EOF

Response.Write "BR" & rs2("姓名") & " " & rs2("科目") & " 分數: " &
rs2("分數")

rs2.MoveNext

Loop

rs2.Close

%

以上的 ASP程式rs24.asp,在用戶端使用瀏覽器,瀏覽執(zhí)行的結果,顯示分數不大于或等于60分的記錄

*****************************************************

在ADO使用SELECT語法三

接上一篇文章:

ORDER BY

ORDER BY子句,可以設定排序的字段。

在一個SQL表達式之中,ORDER BY子句通常放置于最后。

若要以遞減順序來進行排序(Z~A,9 ~0),須于您要遞減排序的每一字段的尾部加DESC字。譬如:

SELECT 姓名

FROM 員工

ORDER BY 工資 DESC, 年齡

表示[工資] 字段以遞減順序來進行排序,[年齡] 字段以遞增順序來進行排序。

ORDER BY子句中排序的字段,不可以包含MEMO字段類型或OLE對象類型,否則會發(fā)生錯誤。

在ORDER BY子句之中包含多個的字段時,首先以ORDER BY之后的第一個字段來進行排序。然后,若在此字段之中有相同的資料記錄,才會以列第二字段來進行排序,依此類推。

GROUP BY

GROUP BY將查詢的結果做統計,語法如下:

SELECT fieldlist
FROM table
WHERE criteria
[GROUP BY groupfieldlist]

使用WHERE子句,可以設定不想要做統計的資料,而使用HAVING子句可以篩選已經統計之后的字段。

不可以對MEMO字段類型或OLE對象類型的字段做統計,否則會發(fā)生錯誤。

譬如ASP程式rs22.asp如下,[SELECT 種類, Avg(價格) As 平均 From 產品 Group By 種類] 使用GROUP BY將查詢的結果做 [種類] 統計,統計各個種類統計來平均價格Avg(價格):

%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver=
{Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT 種類, Avg(價格) As 平均 From 產品 Group By 種類"

Response.Write "pAvg(價格)"

rs2.Open SqlStr,conn1,1,1

Do while not rs2.EOF

Response.Write "BR" & rs2("種類") & ": " & rs2("平均")

rs2.MoveNext

Loop

rs2.Close %

以上的 ASP程式rs22.asp,用戶端使用瀏覽器,瀏覽執(zhí)行的結果,顯示依據 [種類] 統計來統計平均價格。

讓我們多看個例子,譬如ASP程式rs22.asp如下,[SELECT 種類, Sum(數量*價格) As 總計 From 產品 Group By 種類] 使用GROUP BY將查詢的結果做 [種類] 統計,統計各個種類的數量與價格相乘的總價Sum(數量*價格):

%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver=
{Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT 種類, Sum(數量*價格) As 總計 From 產品 Group By 種類"

rs2.Open SqlStr,conn1,1,1

Response.Write "pSum(數量*價格)"

Do while not rs2.EOF

Response.Write "BR" & rs2("種類") & ": " & rs2("總計")

rs2.MoveNext

Loop

rs2.Close %

以上的 ASP程式rs22.asp,在用戶端使用瀏覽器,瀏覽執(zhí)行的結果,顯示依據 [種類] 來統計總價。

Groupfieldlist為用以統計的字段名稱,最多為10個字段。

在groupfieldlist中字段名稱的順序,將決定統計層次,由最高至最低的層次來分組。

最后,譬如ASP程式rs22.asp如下,[SELECT 姓名,科目,Avg(分數) As 平均 From 考試 Group By 姓名,科目] 使用GROUP BY將查詢的結果做依據 [姓名] 和 [科目] 統計,統計各個統計的 [平均] 分數Avg(分數):

%

Set conn1 = Server.CreateObject("ADODB.Connection")

conn1.Open "DBQ=" & Server.MapPath("ntopsamp.mdb") & ";Driver=
{Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;"

Set rs2 = Server.CreateObject("ADODB.Recordset")

SqlStr = "SELECT 姓名,科目,Avg(分數) As 平均 From 考試 Group By 姓名,科目"

rs2.Open SqlStr,conn1,1,1

Response.Write "pGroup By 姓名,科目"

Do while not rs2.EOF

Response.Write "BR" & rs2("姓名") & " " & rs2("科目") & " 平均: " &
rs2("平均")

rs2.MoveNext

Loop

rs2.Close

%

以上的 ASP程式rs22.asp,在用戶端使用瀏覽器,瀏覽執(zhí)行的結果,顯示依據 [姓名] 和 [科目] 來統計 [平均] 分數

2.6. 修改表
如果你建立了一個表后發(fā)現自己犯了一些錯誤,或者是應用的需求 發(fā)生了變化,那么你可以刪除這個表然后重新建立它。但是如果這個 表已經填充了好多數據了,或者是該表已經被其它數據庫對象參照, (比如一個外鍵約束) 那這可不是一個方便的選項。因此 PostgreSQL 提供了一族命令用于修改現有表。
你可以


增加字段,
刪除字段,
增加約束,
刪除約束,
修改默認值,
重命名字段,
重命名表。
所有這些動作都是用 ALTER TABLE命令執(zhí)行的。
2.6.1. 增加字段
要增加一個字段,使用這條命令:
ALTER TABLE products ADD COLUMN description text;
新增的字段對于表中已經存在的行而言最初將先填充空值。
你也可以同時在該字段上定義約束,使用通常的語法:
ALTER TABLE products ADD COLUMN description text CHECK (description <> '');
一個新字段不能用非空約束,因為最初的時候該字段必須包含空值。 但是你可以稍后增加一個非空約束。同樣,你也不能在一個新字段 上定義默認值。根據 SQL 標準的說明,這樣需要對現存行的新 字段填充默認值,而這個特性還沒有實現。但是你可以稍后調整 字段預設。
2.6.2. 刪除字段
要刪除一個字段,使用這個命令:
ALTER TABLE products DROP COLUMN description;

2.6.3. 增加約束
要增加一個約束,使用表約束語法。比如:
ALTER TABLE products ADD CHECK (name <> '');
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;
要增加一個不能寫成表約束的非空約束,使用下面語法:
ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;

這個約束將立即進行檢查,所以表在加入約束之前必須符合約束條件。
2.6.4. 刪除約束
要刪除一個約束,你需要知道它的名字。如果你給了它一個名字, 那么事情就好辦了。否則系統會分配一個生成的名字,這樣你就需要 把它找出來了。psql 的命令 \d tablename 在這兒可以幫忙﹔ 其它接口可能也提供了檢查表的細節(jié)的方法。然后就是這條命令:
ALTER TABLE products DROP CONSTRAINT some_name;
除了非空約束外,所有約束類型都這么用。要刪除非空類型,用
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
(要記得非空約束沒有名字。)
2.6.5. 改變默認值
要給一個字段設定默認值,使用一個象下面這樣的命令:
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
要刪除默認值,用
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
這樣相當于把預設設定為空,至少在 PostgreSQL里是這樣的。 結果是,如果我們刪除一個還沒有定義的默認值不算錯誤,因為預設隱含就是空值。
2.6.6. 給字段改名字
重命名一個字段:
ALTER TABLE products RENAME COLUMN product_no TO product_number;

2.6.7. 給表改名字
To rename a table:
ALTER TABLE products RENAME TO items;

說明:復制表(只復制結構,源表名:a 新表名:b)

以下是代碼片段:
SQL: select * into b from a where 1<>1

說明:拷貝表(拷貝數據,源表名:a 目標表名:b)

以下是代碼片段:
SQL: insert into b(a, b, c) select d,e,f from b;

說明:顯示文章、提交人和最后回復時間

以下是代碼片段:
SQL: select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b
說明:外連接查詢(表名1:a 表名2:b)

以下是代碼片段:
SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c
說明:日程安排提前五分鐘提醒

以下是代碼片段:
SQL:   select * from 日程安排 where datediff(’minute’,f開始時間,getdate())>5

說明:兩張關聯表,刪除主表中已經在副表中沒有的信息
SQL:

以下是代碼片段:
delete from info where not exists ( select * from infobz where info.infid=infobz.infid  

說明:--
SQL:

以下是代碼片段:
SELECT A.NUM, A.NAME, B.UPD_DATE, B.PREV_UPD_DATE
   FROM TABLE1,
     (SELECT X.NUM, X.UPD_DATE, Y.UPD_DATE PREV_UPD_DATE
         FROM (SELECT NUM, UPD_DATE, INBOUND_QTY, STOCK_ONHAND
                 FROM TABLE2
               WHERE TO_CHAR(UPD_DATE,’YYYY/MM’) = TO_CHAR(SYSDATE, ’YYYY/MM’)) X,
             (SELECT NUM, UPD_DATE, STOCK_ONHAND
                 FROM TABLE2
               WHERE TO_CHAR(UPD_DATE,’YYYY/MM’) =
                     TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, ’YYYY/MM’) &brvbar;&brvbar; ’/01’,’YYYY/MM/DD’) - 1, ’YYYY/MM’)   Y,
         WHERE X.NUM = Y.NUM (+)
           AND X.INBOUND_QTY + NVL(Y.STOCK_ONHAND,0) <> X.STOCK_ONHAND   B
WHERE A.NUM = B.NUM

說明:--
SQL:

以下是代碼片段:
select * from studentinfo where not exists(select * from student where studentinfo.id=student.id) and 系名稱=’"&strdepartmentname&"’ and 專業(yè)名稱=’"&strprofessionname&"’ order by 性別,生源地,高考總成績
說明:
從數據庫中去一年的各單位電話費統計(電話費定額賀電化肥清單兩個表來源)
SQL:
以下是代碼片段:
SELECT a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, ’yyyy’) AS telyear,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’01’, a.factration)) AS JAN,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’02’, a.factration)) AS FRI,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’03’, a.factration)) AS MAR,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’04’, a.factration)) AS APR,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’05’, a.factration)) AS MAY,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’06’, a.factration)) AS JUE,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’07’, a.factration)) AS JUL,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’08’, a.factration)) AS AGU,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’09’, a.factration)) AS SEP,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’10’, a.factration)) AS OCT,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’11’, a.factration)) AS NOV,
       SUM(decode(TO_CHAR(a.telfeedate, ’mm’), ’12’, a.factration)) AS DEC
FROM (SELECT a.userper, a.tel, a.standfee, b.telfeedate, b.factration
         FROM TELFEESTAND a, TELFEE b
         WHERE a.tel = b.telfax) a
GROUP BY a.userper, a.tel, a.standfee, TO_CHAR(a.telfeedate, ’yyyy’)
說明:四表聯查問題:

SQL:
以下是代碼片段:
select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c   inner join d on a.a=d.d where .....
說明:得到表中最小的未使用的ID號
SQL:
以下是代碼片段:
SELECT (CASE WHEN EXISTS(SELECT * FROM Handle b WHERE b.HandleID = 1) THEN MIN(HandleID) + 1 ELSE 1 END) as HandleID
FROM   Handle
WHERE NOT HandleID IN (SELECT a.HandleID - 1 FROM Handle a)

    本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發(fā)現有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    亚洲精品高清国产一线久久| 草草草草在线观看视频| 嫩草国产福利视频一区二区| 国产色一区二区三区精品视频| 日韩精品少妇人妻一区二区| 午夜成年人黄片免费观看| 亚洲视频偷拍福利来袭| 毛片在线观看免费日韩| 日本道播放一区二区三区| 国产又大又黄又粗的黄色| 亚洲av熟女国产一区二区三区站| 日韩国产精品激情一区| 五月婷婷六月丁香狠狠| 欧美日韩一区二区综合| 亚洲天堂有码中文字幕视频| 午夜精品国产精品久久久| 欧美黑人精品一区二区在线| 久久精品国产亚洲av久按摩| 国产精品午夜福利在线观看| 国产亚洲欧美日韩精品一区 | 男女一进一出午夜视频| 免费高清欧美一区二区视频| 欧美黑人巨大一区二区三区| 国产精品日韩精品一区| 中文字幕精品一区二区年下载| 91人妻人人澡人人人人精品| 欧美精品久久99九九| 国产成人精品午夜福利| 老司机精品视频在线免费看| 精品一区二区三区中文字幕| 精品推荐久久久国产av| 丰满人妻少妇精品一区二区三区| 国产一区二区精品高清免费| 69久久精品亚洲一区二区| 久久免费精品拍拍一区二区| 国产成人综合亚洲欧美日韩| av免费视屏在线观看| 日本精品免费在线观看| 精品欧美日韩一区二区三区| 中文字幕区自拍偷拍区| 在线免费视频你懂的观看|