初學者SQL語句介紹 1.用 Select 子句檢索記錄 Select 子句是每一個檢索數據的查詢核心。它告訴數據庫引擎返回什么字段。 Select 子句的常見形式是: Select * 該子句的意思是“返回在所指定的記錄源中能找到的所有字段”。這種命令形式很方便,因為你無需知道從表中檢索的字段名稱。然而,檢索表中的所有列是低效的。因此,因該只檢索需要的字段,這樣可以大大的提高查詢的效率。 2.使用 From 子句指定記錄源 From 子句說明的是查詢檢索記錄的記錄源;該記錄源可以是一個表或另一個存儲查詢。 你還能從多個表中檢索記錄,這在后面的章節中將介紹。 例子: Select * From students 檢索students表中的所有記錄 3.用 Where 子句說明條件 Where 子句告訴數據庫引擎根據所提供的一個或多個條件限定其檢索的記錄。條件是一個表達式,可具有真假兩種判斷。 例子: Select * From students Where name="影子" 返回students中name字段為影子的列表,這次所返回的結果沒有特定順序,除非你使用了 Order By 子句。該子句將在后面的章節介紹。 注意:Where 子句中的文本字符串界限符是雙引號,在VB中因改為單引號,因為在VB中字符串的界定符是雙引號。 補充: 使用 And 和 Or 邏輯可以將兩個或更多的條件鏈接到一起以創建更高級的 Where 子句。 例子: Select * From students Where name="影子" And number>100 返回name為影子number大于100的列表。 例子: Select * From students Where name="影子" And (number>100 Or number<50) 返回name為影子,number大于100或者小于50的列表。 Where 子句中用到的操作符 操作符 功能 < 小于 <= 小于或等于 > 大于 >= 大于或等于 = 等于 <> 不等于 Between 在某個取值范圍內 Like 匹配某個模式 In 包含在某個值列表中 SQL中的等于和不等于等操作符與VB中的意義和使用相同 例子: (1).Between 操作符 Use cust Select * From students Where number Between 1 and 100 Between 操作符返回的是位于所說明的界限之內的所有記錄值。這個例子就返回 number 字段 1 到 100 之間的全部記錄。 (2). Like 操作符和通配符 Use cust Select * From students Where name Like "%影%" Like 操作符把記錄匹配到你說明的某個模式。這個例子是返回含“影”的任意字符串。 四種通配符的含義 通配符 描述 % 代表零個或者多個任意字符 _(下劃線) 代表一個任意字符 [] 指定范圍內的任意單個字符 [^] 不在指定范圍內的任意單個字符 全部示例子如下: Like "BR%" 返回以"BR"開始的任意字符串 Like "br%" 返回以"Br"開始的任意字符串 Like "%een" 返回以"een"結束的任意字符串 Like "%en%" 返回包含"en"的任意字符串 Like "_en" 返回以"en"結束的三個字符串 Like "[CK]%" 返回以"C"或者"K"開始的任意字符串 Like "[S-V]ing" 返回長為四個字符的字符串,結尾是"ing",開始是從S到V。 Like "M[^c]%" 返回以"M"開始且第二個字符不是"c"的任意字符串。 4. 使用 Order By 對結果排序 Order By 子句告訴數據庫引擎對其檢索的記錄進行排序??梢詫θ魏巫侄闻判?,或者對多個字段排序,并且可以以升序或隆序進行排序。 在一個正式的 Select 查詢之后包含一個 Order By 子句,后跟想排序的字段(可以有多個)便可以說明一個排序順序。 例子: Use cust Select * From students Where name Like "%影%" Order By number 對返回的結果按 number 進行排序。 以降序排序 如要以隆序排序,只需在排序的字段之后使用 Desc 關鍵字。 例子: Use cust Select * From students Where name Like "%影%" Order By number Desc 5. 使用 Top 顯示某個范圍的第一個記錄或最后一個記錄。 使用 Top 關鍵字可以只顯示一個大記錄前面或后面的少數幾個記錄。在查詢中,Top 關鍵字與排序子句一起把結果集限制為少數幾個記錄或按某個百分比顯示整個結果記錄集合中的一部分。 例子: Select Top 3 * From students 返回 students 表中的前3條記錄 Select Top 10 Percent * From students 返回 students 表中前面的10%個記錄 Select Top 3 * From students Order By number desc 返回 students 表中 number 最大的(最后)的3條記錄 6. 用 As 對字段名進行別名化 為什么在查詢中對字段命以別名,或重新命名,這樣做的原因有兩個: ☆所涉及的表的字段名很長,想使字段在結果集中更易處理一些。 ☆創建的查詢產生了某些計算或合計列,需要對之進行命名。 不管是什么原因對字段命以別名,在 SQL 中都可以容易地使用 As 子句做得。 例子: Select number As 學號 ,name As 姓名 From students 7. 合并查詢 合并查詢( Union Query )用于合并具有相同字段結構的兩個表的內容,如果想在一個結果集中顯示多個記錄源中的不相關的記錄時,這十分有用。 例子: Select * From students Union Select * From students1 該查詢結果集把 students 和 students1 中的記錄合并到一個結果中,其輸出就和原表歸檔之前一模一樣。 注意:缺省情況下,合并查詢不會返回重復記錄(如果記錄歸檔系統在把記錄拷到歸檔表中后不將相應的記錄刪除,這時該功能就有用了),可以加上 All 關鍵字而讓合并查詢顯示重復記錄。 例子: Select * From students Union All Select * From students1 該合并查詢顯示 students 表和 students1 表的內容時,沒有對重復記錄進行處理 補充: Union 運算符允許把兩個或者多個查詢結果合并到一個查詢結果集中。如果比較 Union 和 Join 兩咱運算符,那么 Union 運算符增加行的數量,而 Join 運算符增加列的數量。使用 Union 時應該注意,兩個結果中的列的結構必須匹配,數據類型必須兼容等等。 Union 運算符的語法形式如下: Select select_list From clause Where clause Group By clause Having clause Union [All] Select select_list From clause Where clause Group By clause Having clause Order By clause Compute clause 對于 Union 運算符,有下列幾點需要說明: ·在默認情況下,Union 運算符刪除全部冗余行。如果使用All 選項,那么冗余行不刪除。 ·在 Union 語句中的全部 select_list 必須有相同數量的列、兼容的數據類型并且按照同樣的順序出現。 ·在結果集中,列名來自第一個 Select 語句。 8.連接查詢 在實際使用過程中經常需要同時從兩個表或者兩個以上表中檢索數據。連接就是允許同時從兩個表或者兩個以上表中檢索數據,指定這些表中某個或者某些列作為連接條件。在 SQL Server 中,可以使用兩種連接語法形式,一種是 Ansi 連接語法形式,這是連接用在 From 子句中,另外一種是 SQL Server 連接語句形式,這是連接用在 Where 子句中。 Ansi 連接語法形式如下: Select table_name.column_name,table_name.column_name,... From {table_name [join_type] Join table_name On search_conditions} Where [search_conditions] 在 Ansi 語法形式中,可以 Ansi 連接關鍵字來確定使用的連接形式。例如: ☆使用 Inner Join 關鍵字,結果集中僅包含滿足條件的行。 ☆使用 Cross Join 關鍵字,結果集中包含兩個表中所有行的組合。 ☆使用 Outer Join 關鍵字,結果集中既包含那些滿足條件的行,還包含那些其中某個表的全部行。 SQL Server 連接語法形式如下所示: Select table_name.column_name,table_name.column_name,... From [table_name,tab
說明:查詢從第30條到第40條的記錄數
SQL:select top 10 * from temp where id not in (select top 30 id from temp order by id asc) order by id asc
說明:復制表(只復制結構,源表名: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’) || ’/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 專業名稱=’"&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 多條件查詢的一種簡單的方法
以后我們做多條件查詢,一種是排列結合,另一種是動態拼接SQL 如:我們要有兩個條件,一個日期@addDate,一個是@name 第一種寫法是 if (@addDate is not null) and (@name <> ’’) select * from table where addDate = @addDate and name = @name else if (@addDate is not null) and (@name =’’) select * from table where addDate = @addDate else if(@addDate is null) and (@name <> ’’) select * from table where and name = @name else if(@addDate is null) and (@name = ’’) select * from table 第二種就是動態組成SQL,通過exec來執行,我就不寫, 昨天我想到一種辦法 select * from table where (addDate =
新聞熱點
疑難解答