Foxtable(狐表)用户栏目专家坐堂 → SQL语句精选 希望对大家有帮助


  共有16345人关注过本帖树形打印复制链接

主题:SQL语句精选 希望对大家有帮助

帅哥哟,离线,有人找我吗?
i52117
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:374 积分:3147 威望:0 精华:0 注册:2009/2/3 9:55:00
SQL语句精选 希望对大家有帮助  发帖心情 Post By:2009/12/25 9:18:00 [只看该作者]

 

1. 说明:复制表(只复制结构,源表名:a,新表名:b)
SQL:
select * into b from a where 1<>1;
2. 说明:拷贝表(拷贝数据,源表名:a,目标表名:b)
SQL:
insert into b(a, b, c) select d, e, f from b;
3. 说明:显示文章、提交人和最后回复时间
SQL:
select a.title, a.username, b.adddate
    
from table a,(
         
select max(adddate) adddate
         
from table where table.title=a.title) b  

4. 说明:外连接查询(表名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;  

       
5. 说明:日程安排提前五分钟提醒
SQL:
select *
    
from 日程安排
    
where datediff(’’minute’’, f开始时间, getdate())>5   

  
       
6. 说明:两张关联表,删除主表中已经在副表中没有的信息
SQL:
delete from info
    
where not exists(
          
select *
          
from infobz
          
where info.infid=infobz.infid );

       
7. 说明:——
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; 

  
       
8. 说明:——
SQL:
select *
    
from studentinfo
    
where not exists(select * from student where studentinfo.id=student.id)
          
and 系名称=’’"&strdepartmentname&"’’
          
and 专业名称=’’"&strprofessionname&"’’
    
order by 性别, 生源地, 高考总成绩;

1.按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as

2.分页SQL语句
select * from(select (row_number() OVER (ORDER BY tab.ID Desc)) as rownum,tab.* from 表名 As tab) As t where rownum between 起始位置 And 结束位置

3.获取当前数据库中的所有用户表
select * from sysobjects where xtype='U' and category=0

4.获取某一个表的所有字段
select name from syscolumns where id=object_id('表名')

5.查看与某一个表相关的视图、存储过程、函数
select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'

6.查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P'

7.查询用户创建的所有数据库
select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')
或者
select dbid, name AS DB_NAME from master..sysdatabases where sid <> 0x01

8.查询某一个表的字段和数据类型
select column_name,data_type from information_schema.columns
where table_name = '表名'

9.使用事务
在使用一些对数据库表的临时的SQL语句操作时,可以采用SQL SERVER事务处理,防止对数据操作后发现误操作问题
开始事务
Begin tran
Insert Into TableName Values(…)
SQL语句操作不正常,则回滚事务。
回滚事务
Rollback tran
SQL语句操作正常,则提交事务,数据提交至数据库。
提交事务
Commit tran
10. 按全文匹配方式查询
字段名
LIKE N'%[^a-zA-Z0-9]China[^a-zA-Z0-9]%'
OR 字段名 LIKE N'%[^a-zA-Z0-9]China'
OR 字段名 LIKE N'China[^a-zA-Z0-9]%'
OR 字段名 LIKE N'China

11.计算执行SQL语句查询时间
declare @d datetime
set @d=getdate()
select * from SYS_ColumnProperties select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate())

12、说明:几个高级查询运算词
A: UNION 运算符
UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表。当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行。两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2。
B: EXCEPT 运算符
EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表。当 ALL 随 EXCEPT 一起使用时 (EXCEPT ALL),不消除重复行。
C: INTERSECT 运算符
INTERSECT 运算符通过只包括 TABLE1 和 TABLE2 中都有的行并消除所有重复行而派生出一个结果表。当 ALL 随 INTERSECT 一起使用时 (INTERSECT ALL),不消除重复行。


 回到顶部
帅哥哟,离线,有人找我吗?
enirilt
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:59 积分:741 威望:0 精华:0 注册:2008/9/1 16:54:00
  发帖心情 Post By:2009/12/25 9:23:00 [只看该作者]

收藏

 回到顶部
帅哥哟,离线,有人找我吗?
i52117
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:374 积分:3147 威望:0 精华:0 注册:2009/2/3 9:55:00
  发帖心情 Post By:2009/12/25 9:25:00 [只看该作者]

再来个JET  SQL帮助文件
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:jetsql40.rar


 回到顶部
帅哥哟,离线,有人找我吗?
i52117
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小狐 帖子:374 积分:3147 威望:0 精华:0 注册:2009/2/3 9:55:00
  发帖心情 Post By:2009/12/25 9:56:00 [只看该作者]

 

//基本语句
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(<table_id>,<column_id>)
    2.列宽:col_length(<table_name>,<column_name>)
    3.数据表编号:object_id(<数据表名称>)
    3.数据表名称:object_name(<数据表编号>)
    4.数据库编号:db_id(<database_name>)
    5.数据库名称:db_name(<database_id>)
    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')   ----aijklmnef


 回到顶部
美女呀,离线,留言给我吧!
yangming
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:4109 积分:23338 威望:0 精华:21 注册:2008/9/1 20:07:00
  发帖心情 Post By:2009/12/25 10:42:00 [只看该作者]

谢谢楼主!

 回到顶部
帅哥哟,离线,有人找我吗?
菜鸟foxtable
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 菜鸟中的老鸟
等级:七尾狐 帖子:1486 积分:10064 威望:0 精华:9 注册:2008/11/14 8:54:00
  发帖心情 Post By:2009/12/25 12:19:00 [只看该作者]

收藏学习。

 回到顶部
帅哥哟,离线,有人找我吗?
kylin
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 F6
等级:狐精 帖子:3036 积分:19229 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2009/12/26 8:25:00 [只看该作者]

 太多谢了,呵呵

 回到顶部
帅哥哟,离线,有人找我吗?
wqc360
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:790 积分:5695 威望:0 精华:0 注册:2009/4/17 18:42:00
  发帖心情 Post By:2009/12/26 8:39:00 [只看该作者]

先收藏,谢谢

 回到顶部
帅哥哟,离线,有人找我吗?
migold
  9楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:447 积分:4572 威望:0 精华:0 注册:2009/1/11 11:00:00
  发帖心情 Post By:2009/12/26 9:37:00 [只看该作者]

谢谢,学习


 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7258 积分:40773 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2009/12/26 10:21:00 [只看该作者]

谢谢,收藏了!

 回到顶部