SQL有哪些三個主要語句及技巧
1。
插入數據 (insert)向表中添加一個新記錄,你要使用SQL INSERT 語句。這里有一個如何使用這種語句的例子: INSERT mytable (mycolumn) VALUES ('some data') 這個語句把字符串'some data'插入表mytable的mycolumn字段中。
將要被插入數據的字段的名字在第一個括號中指定,實際的數據在第二個括號中給出。 INSERT 語句的完整句法如下: INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES | Values_list | select_statement} 如果一個表有多個字段,通過把字段名和字段值用逗號隔開,你可以向所有的字段中插入數據。
假設表mytable有三個字段first_column,second_column,和third_column。下面的INSERT語句添加了一條三個字段都有值的完整記錄: INSERT mytable (first_column,second_column,third_column) VALUES ('some data','some more data','yet more data') 注意 你可以使用INSERT語句向文本型字段中插入數據。
但是,如果你需要輸入很長的字符串,你應該使用WRITETEXT語句。 如果你在INSERT 語句中只指定兩個字段和數據會怎么樣呢?換句話說,你向一個表中插入一條新記錄,但有一個字段沒有提供數據。
在這種情況下,有下面的四種可能: 如果該字段有一個缺省值,該值會被使用。 例如,假設你插入新記錄時沒有給字段third_column提供數據,而這個字段有一個缺省值'some value'。
在這種情況下,當新記錄建立時會插入值'some value'。 如果該字段可以接受空值,而且沒有缺省值,則會被插入空值。
如果該字段不能接受空值,而且沒有缺省值,就會出現錯誤。 你會收到錯誤信息: The column in table mytable may not be null。
最后,如果該字段是一個標識字段,那么它會自動產生一個新值。當你向一個有標識字段的表中插入新記錄時,只要忽略該字段,標識字段會給自己賦一個新值。
注意 :向一個有標識字段的表中插入新記錄后,你可以用SQL變量@@identity來訪問新記錄 的標識字段的值。考慮如下的SQL語句: INSERT mytable (first_column) VALUES('some value') INSERT anothertable(another_first,another_second) VALUES(@@identity,'some value') 如果表mytable有一個標識字段,該字段的值會被插入表anothertable的another_first字段。
這是因為變量@@identity總是保存最后一次插入標識字段的值。 字段another_first應該與字段first_column有相同的數據類型。
但是,字段another_first不能是應該標識字段。Another_first字段用來保存字段first_column的值。
2。刪除記錄 要從表中刪除一個或多個記錄,需要使用SQL DELETE語句。
你可以給DELETE 語句提供WHERE 子句。WHERE子句用來選擇要刪除的記錄。
例如,下面的這個DELETE語句只刪除字段first_column的值等于'Delete Me'的記錄: DELETE mytable WHERE first_column='Deltet Me' DELETE 語句的完整句法如下: DELETE [FROM] {table_name|view_name} [WHERE clause] 在SQL SELECT 語句中可以使用的任何條件都可以在DELECT 語句的WHERE子句 中使用。 例如,下面的這個DELETE語句只刪除那些first_column字段的值為'goodbye'或second_column字段的值為'so long'的記錄: DELETE mytable WHERE first_column='goodby' OR second_column='so long' 如果你不給DELETE 語句提供WHERE 子句,表中的所有記錄都將被刪除。
你不應該有這種想法。如果你想刪除應該表中的所有記錄,應使用第十章所講的TRUNCATE TABLE語句。
Sql經典語句
按姓氏筆畫排序:Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as //從少到多 數據庫加密:select encrypt('原始密碼')select pwdencrypt('原始密碼')select pwdcompare('原始密碼','加密后密碼') = 1--相同;否則不相同 encrypt('原始密碼')select pwdencrypt('原始密碼')select pwdcompare('原始密碼','加密后密碼') = 1--相同;否則不相同 取回表中字段:declare @list varchar(1000),@sql nvarchar(1000) select @list=@list+','+* from sysobjects a,syscolumns b where *=* and *='表A'set @sql='select '+right(@list,len(@list)-1)+' from 表A' exec (@sql) 查看硬盤分區:EXEC master..xp_fixeddrives 比較A,B表是否相等:if (select checksum_agg(binary_checksum(*)) from A) = (select checksum_agg(binary_checksum(*)) from B)print '相等'elseprint '不相等' 殺掉所有的事件探察器進程:DECLARE hcforeach CURSOR GLOBAL FOR SELECT 'kill '+RTRIM(spid) FROM *cessesWHERE program_name IN('SQL profiler',N'SQL 事件探查器')EXEC sp_msforeach_worker '?' 記錄搜索:開頭到N條記錄Select Top N * From 表-------------------------------N到M條記錄(要有主索引ID)Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID Desc----------------------------------N到結尾記錄Select Top N * From 表 Order by ID Desc案例例如1:一張表有一萬多條記錄,表的第一個字段 RecID 是自增長字段, 寫一個SQL語句, 找出表的第31到第40個記錄。
select top 10 recid from A where recid not in(select top 30 recid from A) 分析:如果這樣寫會產生某些問題,如果recid在表中存在邏輯索引。 select top 10 recid from A where……是從索引中查找,而后面的select top 30 recid from A則在數據表中查找,這樣由于索引中的順序有可能和數據表中的不一致,這樣就導致查詢到的不是本來的欲得到的數據。
解決方案 1, 用order by select top 30 recid from A order by ricid 如果該字段不是自增長,就會出現問題 2, 在那個子查詢中也加條件:select top 30 recid from A where recid>-1 例2:查詢表中的最后以條記錄,并不知道這個表共有多少數據,以及表結構。set @s = 'select top 1 * from T where pid not in (select top ' + str(@count-1) + ' pid from T)' print @s exec sp_executesql @s。
求幾條超級經典的SQL語句
說明:復制表(只復制結構,源表名: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 *,*me,*e from table a,(select max(adddate) adddate from table where *=*) 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 *=* ) 說明:-- SQL: SELECT *, *, *_DATE, *_UPD_DATE FROM TABLE1, (SELECT *, *_DATE, *_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 * = * ( ) AND *D_QTY NVL(*_ONHAND,0) <> *_ONHAND ) B WHERE * = * 說明:-- SQL: select * from studentinfo where not exists(select * from student where *=*) and 系名稱='"&strdepartmentname&"' and 專業名稱='"&strprofessionname&"' order by 性別,生源地,高考總成績 說明: 從數據庫中去一年的各單位電話費統計(電話費定額賀電化肥清單兩個表來源) SQL: SELECT *r, *, *ee, TO_CHAR(*date, 'yyyy') AS telyear, SUM(decode(TO_CHAR(*date, 'mm'), '01', *tion)) AS JAN, SUM(decode(TO_CHAR(*date, 'mm'), '02', *tion)) AS FRI, SUM(decode(TO_CHAR(*date, 'mm'), '03', *tion)) AS MAR, SUM(decode(TO_CHAR(*date, 'mm'), '04', *tion)) AS APR, SUM(decode(TO_CHAR(*date, 'mm'), '05', *tion)) AS MAY, SUM(decode(TO_CHAR(*date, 'mm'), '06', *tion)) AS JUE, SUM(decode(TO_CHAR(*date, 'mm'), '07', *tion)) AS JUL, SUM(decode(TO_CHAR(*date, 'mm'), '08', *tion)) AS AGU, SUM(decode(TO_CHAR(*date, 'mm'), '09', *tion)) AS SEP, SUM(decode(TO_CHAR(*date, 'mm'), '10', *tion)) AS OCT, SUM(decode(TO_CHAR(*date, 'mm'), '11', *tion)) AS NOV, SUM(decode(TO_CHAR(*date, 'mm'), '12', *tion)) AS DEC FROM (SELECT *r, *, *ee, *date, *tion FROM TELFEESTAND a, TELFEE b WHERE * = *) a GROUP BY *r, *, *ee, TO_CHAR(*date, '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 *ID = 1) THEN MIN(HandleID) 1 ELSE 1 END) as HandleID FROM Handle WHERE NOT HandleID IN (SELECT *ID - 1 FROM Handle a)。
經典sql語句
baidu、google是很好的學習搜索引擎,推薦一下新手學習SQL的基礎技術,在baidu搜索以下內容:“一網打盡”通用SQL數據庫的查詢語句 實例講解SQL Server中"Update"的用法 三種數據庫利用SQL語句進行高效果分頁 深入講解SQL Server數據庫的嵌套子查詢 實現跨多個表格的數據進行組合的SQL語句 深入講解SQL Union和Union All的使用方法還有一些基本的語法這里也簡單介紹一下,希望對你有用:學習SQL應知道的動態SQL語句基本語法1 、普通SQL語句可以用Exec執行 eg: Select * from tableName Exec('select * from tableName') Exec sp_executesql N'select * from tableName' -- 請注意字符串前一定要加N 2、字段名,表名,數據庫名之類作為變量時,必須用動態SQL eg: declare @fname varchar(20) set @fname = 'FiledName' Select @fname from tableName -- 錯誤,不會提示錯誤,但結果為固定值FiledName,并非所要。
Exec('select ' + @fname + ' from tableName') -- 請注意 加號前后的 單引號的邊上加空格 當然將字符串改成變量的形式也可 declare @fname varchar(20) set @fname = 'FiledName' --設置字段名 declare @s varchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句會報錯 declare @s Nvarchar(1000) -- 注意此處改為nvarchar(1000) set @s = 'select ' + @fname + ' from tableName' Exec(@s) -- 成功 exec sp_executesql @s -- 此句正確 3、輸出參數 declare @num int, @sqls nvarchar(4000) set @sqls='select count(*) from tableName' exec(@sqls) --如何將exec執行結果放入變量中? declare @num int, @sqls nvarchar(4000) set @sqls='select @a=count(*) from tableName ' exec sp_executesql @sqls,N'@a int output',@num output select @num 此外,如果想要在SQL語句 字符串中使用 單引號 '' 可以 使用 ''''。
有關sql的語句 -
Oracle左連接,右連接2008-04-21 15:36數據表的連接有: 1、內連接(自然連接): 只有兩個表相匹配的行才能在結果集中出現 2、外連接: 包括 (1)左外連接(左邊的表不加限制) (2)右外連接(右邊的表不加限制) (3)全外連接(左右兩表都不加限制) 3、自連接(連接發生在一張基表內) select udentno, udentname, assname from students a, classes b where assid(+) = assid;STUDENTNO STUDENTNAM CLASSNAME---------- ---------- ------------------------------ 1 周虎 一年級一班 2 周林 一年級二班 一年級三班以上語句是右連接:即"(+)"所在位置的另一側為連接的方向,右連接說明等號右側的所有記錄均會被顯示,無論其在左側是否得到匹配。
也就是說上例中,無論會不會出現某個班級沒有一個學生的情況,這個班級的名字都會在查詢結構中出現。反之: select udentno, udentname, assname from students a, classes b where assid = assid(+);STUDENTNO STUDENTNAM CLASSNAME---------- ---------- ------------------------------ 1 周虎 一年級一班 2 周林 一年級二班 3 鐘林達則是左連接,無論這個學生有沒有一個能在一個班級中得到匹配的部門號,這個學生的記錄都會被顯示。