Sql常用语句汇总
| 標簽:it? |
//基本語句
SqlServer 查詢Access語句
??? SELECT * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'c:\youfile.mdb';'admin';'youpwd',youtabname) AS a
新建表:create table [表名] ([字段一],[類型],[是否為空],…)
??? 例: create table mytry(
???????? name char(5) not null,
??????? code smallint identity(1000,1)) //將code設為自動遞增的數據,從1000依次遞增1
新增:insert into [表名] ([字段一],[字段二],…) values ('aa','bb',…) where … ;
更新:update [表名] set [字段一]='aa',[字段二]='bb' where …
刪除:delete from [表名] where …
查找:select [字段一](as…),[字段二],… from [表名] where …
新加字段
??? access:alter table tableName add[alter] column columnName columnType
??? sqlserver:alter table tableName add[alter] columnName columnType
通配符
??? like:
??????? 反向:'037001002' like '%' + unitId + '%' //反向查找添加通配符后等于指定符的記錄
??????? 正向:unitId like '%037001002%'???????? //正向查找包括指定符的記錄
??? %:任意匹配
??? _:匹配一個字符,一個漢字等于兩個字符:'__'???
??????? WHERE au_fname LIKE '_ean' 將查找以 ean 結尾的所有 4 個字母的名字(Dean、Sean 等)。
??????? 注:access中以?代替
??? []:通配符:WHERE au_lname LIKE '[C-P]arsen' 將查找以arsen 結尾且以介于 C 與 P 之間的任何單個字符開始的作者姓氏,例如,Carsen、Larsen、Karsen 等。
??? [^]:非:WHERE au_lname LIKE 'de[^l]%' 將查找以 de 開始且其后的字母不為 l 的所有作者的姓氏。
??? escape:逃逸字符如 like '張#%%三' escape '#' ,為查找 張%某某的人
??? select a.* from a,(……)b where a.id like b.id+'%'
條件成熟后操作:SELECT
??????? (CASE WHEN EXISTS (SELECT * FROM view_name WHERE user_id = '1')
??????? THEN user_id END),user_name??? //user_id為選擇字段
??????? FROM view_name
按組查詢:(當有統計函數,普通字段)
??? SELECT codeid, SUM(codelevel) AS 水平
??? FROM wdc_ts_code
??? GROUP BY codeid???
創建視圖:
??? create view myview as (select …)
最右/最左一位
??? right(字段,位數) = '匹配字符串'/left(字段,位數) = '匹配字符串'
空字段
??? 字段 is null
建表及主鍵
??? CREATE TABLE [dbo].[uploadFiles1]
??? (
??????? [id] [int] IDENTITY (1, 1) NOT NULL,
??????? PRIMARY KEY (id,……)
??? ) ON [PRIMARY]
??? 或
??? CREATE TABLE [dbo].[uploadFiles1]
??? (
??????? [id] [int] IDENTITY (1, 1) NOT NULL primary key
??? ) ON [PRIMARY]???????
批量更新,多表鏈接
??? UPDATE A004A001
??? SET status = '1000000000'
??? FROM A004A001 INNER JOIN
????????????? (SELECT MAX(id) AS id, A0100
???????????? FROM A004A001
???????????? GROUP BY A0100) AS b ON A004A001.A0100 = b.A0100 AND A004A001.ID = b.ID
??? UPDATE SR_BuiltItem INNER JOIN SR_SourceItem ON (SR_BuiltItem.FieldName = SR_SourceItem.FieldName) AND (SR_BuiltItem.SetId = SR_SourceItem.SetId) SET SR_BuiltItem.Description = [SR_SourceItem].[Description];
參數聲明
???strSql=@"declare @MaxId int;Select @MaxId="+ dr["Cx_MainID"].ToString() +";";??? (strSql=@"declare @MaxId int;select @MaxId=(Select IsNull(Max(Cx_MainID),0)+1 From SR_CxMain);";)
??? strSql+="Delete From SR_CxMain Where Cx_MainID=@MaxId;";
???
//精妙語句
1、復制表(創建):
??? select * into b from a where id<>1
2、復制表(新增):
??? insert into b(a, b, c) select d,e,f from g;
3、顯示多表信息(不關聯):顯示文章、提交人和最后回復時間
??? select a.title,a.username,b.adddate from table a,
??? (select max(adddate) adddate from table where table.title=a.title) b
4、顯示多表信息(關聯):
??? select a.id,b.name from a,b where a.id = b.cid
??? --select name,sex,(select b.age from b where b.name=a.name) as age from a
5、清理多表信息(關聯):刪除主表中已經在副表中沒有的信息
??? delete from info where not exists (select * from infobz where info.infid=infobz.infid)
6、得到表中最小的未使用的ID號
??? 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)
??? --SELECT personId, CASE WHEN serviceId IS NULL THEN '0000' ELSE serviceId END
??????? FROM pub_userLogin
7、一個表中的數據是否在另一集合中 (子查詢)
??? select aa,bb from aaa where aa in (select cc from bbb)??? --查詢的是集合
??? select aa,bb from aaa where aa = (select cc from bbb)??? --查詢的是一條記錄
8、where
??? select * from aaa where (select count(*) from bbb) = (select * from ccc)
9、降序:order by aaa desc
10、多表關聯:
??? 兩表:select [表名1.字段] from [表名1] inner join [表名2] on [表名1.字段] = [表名2.字段]
??? 或:select *,(select description from sr_department where code = (select top 1 code from web_tbl_login where userid =2)) as description from web_tbl_login where userid = 2
11、兩 表疊加:
??? select "SCOTT"."web_tbl_login"."LOGINID",
??????? "SCOTT"."web_tbl_login"."REALNAME",
??????? "SCOTT"."wdc_ts_code"."CODE",
??????? "SCOTT"."wdc_ts_code"."DESCRIPTION",
??? from "SCOTT"."web_tbl_login" ,
????????? "SCOTT"."wdc_ts_code"
??? where "SCOTT"."web_tbl_login"."BUILDUNITID" = "SCOTT"."wdc_ts_code".code
???? and "SCOTT"."wdc_ts_code".codeid = 'NM'
???? union
??? select "SCOTT"."web_tbl_login"."LOGINID",
??????? "SCOTT"."web_tbl_login"."REALNAME",
??????? '000' as "code",
??????? "SCOTT"."web_tbl_login"."BUILDUNITID",????
??? from "SCOTT"."web_tbl_login"
??? where "SCOTT"."web_tbl_login"."STATION" = '系統管理員'
12.反回不同的行??? //有重復只顯示一行
??? select distinct id,name from a;
13.Inner Join 與 Left Join 與 Right Join區別
??? Inner Join:二者皆符合才顯示
??? Left Join:以左為主,右邊符合條件則顯示,否則為空
??? Right Join:以右為主,……
14.提示不是有效的標識符
??? exec (@StrSql)
15.
??? declare @user varchar(1000)
??? declare @moTable varchar(20)
??? select @moTable = 'MT_10'
??? declare @sql nvarchar(4000) --定義變量,注意類型
??? set @sql='select @user = count(distinct userid) from '+@moTable --為變量賦值-
??? -執行@sql中的語句
??? exec sp_executesql @sql
??? ,N'@user varchar(1000) out' --表示@sql中的語句包含了一個輸出參數
??? ,@user out?????????????????? --和調用存儲過程差不多,指定輸出參數值print @user
//SQL函數
1、數據類型:(創建table時的類型)
??? 1、整數:int??? 2.浮點:float??? 3.二進制:binary???
??? 4.字符:char,varchar,nchar??? 5.文本、圖形:text/ntext-image
??? 6.日期:datetime??????? 7.貨幣:money
2、變量聲明/賦值:
??? 1.全局變量:declare @@x int;
??? 2.局部變量:declare @x int,@mychar char(10);
??? set/select @x = 1 , @mychar = '123'
3、運算符:
??? > < >= <= <>??? not and or
4、常用函數:
??? 1.平均:??? avg([字段名])----(as [新字段名])
??? 2.列名:??????? count([字段名])--(as [新字段名])
??? 3.最大值:??? max([字段名])----(as [新字段名])
??? 4.最少值:??? min([字段名])----(as [新字段名])
??? 5.總和:??? sum([字段名])----(as [新字段名])
??? 6.平均差:??? stdev([字段名])--(as [新字段名])
5.系統函數:
??? 1.列名:col_name( ,)
??? 2.列寬:col_length( ,)
??? 3.數據表編號:object_id(<數據表名稱>)
??? 3.數據表名稱:object_name(<數據表編號>)
??? 4.數據庫編號:db_id()
??? 5.數據庫名稱:db_name()
??? 6.標識增量:ident_incr(<標識字段名>)--(as …)
??? 7.標識初值:ident_seed(<標識字段名>)--…
6其它運算符:
??? 1。語然嵌套(any/some)
??????? select * from aaa
??????? where codeid >= any (select code from bbb )
??? 2。至少返回一行:[not] exists
??????? select * from aaa
??????? where exist(select * from bbb where …)
??? 3。模糊查詢:m [not] like n
??????? select * from aaa where name like '001%'
??????? 'x%':匹配“x…”
??????? '%x%":匹配“…x…”
??????? "%x":匹配“…x”
??? 4.任意一個:all
??????? select * from ... where salary <= all(2500,3000,4000)
??? 5.界于兩者之間:[not] between m and n
??????? select * from ... where salary between 5000 and 6000
8日期差
select datediff(yy,[startDate]'2005-01-01',[endDate]'2006-01-01')
??? yyyy--年
??? m--月
??? d--日
??? q--季度
??? y--一年的日期
??? w--一周的日數
??? ww--周
??? h--小時
??? n--分種
??? s--秒
//字符串
1.ascii(字段)
??? 返回最左端字符的ASCII碼
??? select ascii(Age) as 'age' from ……
2.char(字段)
??? 將(0-255)之間的Ascii碼轉換為字符
??? select char(age) as 'age'
3.lower(字段)
??? 將字段內容小寫
4.upper(字段)
??? 將字段內容大寫
5.str(數字,字符串長度,小數位數)
6.ltrim(字段)
??? 字符串左部空格去掉
7.rtrim(字段)
??? 字符串右部空格去掉
8.left(字段,長度)
??? 取字段左邊指定長度
??? select left('sqlserver',3)???? =sql
9.right(字段,長度)
??? 取字段右邊指定長度
??? select right('sqlserver',3)??? =ver
10.substring(字段,指定位置(從一開始),長度)
??? 截取字段長度
??? select substring('sqlserver',1,3)=sql???
11.charIndex(比較字符,字段)??? 不能用于Text類型
??? 比較字符中字段中出現的位置
??? select charindex('123','abc123defg')??? =4
12.patindex('%比較字符%',字段)??? 前后須有% 可用于Text類型
??? 比較字符中字段中出現的位置
??? select patindex('%123%','abc123defg')??? =4
??? charindex('%[0-2]2%','aaa22')
??? 不存在則返回0
13.day(字段)month(字段)year(字段)
14.len(字段)
15.replace('字段','oldStr','newStr');
??? xxx 替換 abcdefghi 中的字符串 cde
??? SELECT REPLACE('abcdefghicde','cde','xxx')
16.STUFF('要操作的字符串',起始位置int,刪除長度int,'刪除位置替換字符')
??? (abcdef) 中刪除從第二個位置(字符 b)開始的三個字符,然后在刪除的起始位置插入第二個字符串,創建并返回一個字符串。
??? SELECT STUFF('abcdef', 2, 3, 'ijklmn')
轉載于:https://www.cnblogs.com/lhuser/articles/1417150.html
總結
- 上一篇: js中表单验证常用到的正则表达式
- 下一篇: Net平台下的分布式缓存设计