1.  判断a表中有而b表中没有的记录,开发过程

作者: www.9159.com  发布:2019-11-21

  嵌套子查询是SQL语句中比较常用的一种查询方法,开发过程中遇到查询需要将自己的某列作为待查询的数据,在参考别人的SQL语句的写法终于实现了自己需要的功能。

1.  判断a表中有而b表中没有的记录

        不太和谐查询语句如下:

select a.* from tbl1 a
left join tbl2 b on a.key = b.key
where b.key is null

        SELECT DISTINCT dbo.a.ProxyID, dbo.a.account AS adminAccount, dbo.b.LevelName, dbo.a.ProfitProportion, dbo.a.totalUpScore, dbo.a.score, dbo.a.members, dbo.a.authority, dbo.a.registerDate, dbo.a.freezeState, temp.belongName

虽然使用in也可以实现,但是这种方法的效率更高一些

FROM dbo.a INNER JOIN dbo.b ON dbo.a.ProxyLevel = dbo.b.LevelId INNER JOIN (SELECT   dbo.c.BelongsAgent, a.ProxyID, a.account AS belongName FROM dbo.a AS a INNER JOIN dbo.c ON a.ProxyID = BelongsAgent AND a.ProxyID = dbo.c.BelongsAgent) AS temp ON dbo.a.belongsAgent = temp.BelongsAgent

2.  新建一个与某个表相同结构的表

 

select * into b

  精简版的查询语句如下:(省略了a表的一些不重要字段)

from a where 1<>1

  SELECT DISTINCT dbo.a.BelongAgentId, dbo.a.Account, dbo.b.LevelName, temp.BelongName  FROM dbo.a INNER JOIN (SELECT a.Account AS BelongName, a.ProxyId FROM dbo.a AS a INNER JOIN (SELECT BelongAgentId AS id FROM dbo.a AS a) AS t ON a.ProxyId = t.id) AS temp ON dbo.a.BelongAgentId = temp.ProxyId INNER JOIN dbo.b ON dbo.a.ProxyLevel = dbo.b.LevelId

3.between的用法,between限制查询数据范围时包括了边界值,not between不包括

  新人报道,希望大家多多帮助,谢谢大家!

select * from table1 where time between time1 and time2

select a,b,c, from table1 where a not between 数值1 and 数值2

4. 说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表

(select a from tableA ) except (select a from tableB) except (select a from tableC)

5. 初始化表,可以将自增长表的字增长字段置为1

TRUNCATE TABLE table1

6.多语言设置数据库或者表或者order by的排序规则

         --修改用户数据库的排序规则

ater database dbname collate SQL_Latin1_General_CP1_CI_AS

--修改字段的排序规则

alter table a alter column c2 varchar(50) collate SQL_Latin1_General_CP1_CI_AS

--按姓氏笔画排序

select * from 表名 order by 列名 Collate Chinese_PRC_Stroke_ci_as

--按拼音首字母排序

select * from 表名 order by 列名 Collate Chinese_PRC_CS_AS_KS_WS

7.列出所有的用户数据表:

SELECT TOP 100 PERCENT o.name AS 表名

FROM dbo.syscolumns c INNER JOIN

      dbo.sysobjects o ON o.id = c.id AND objectproperty(o.id, N'IsUserTable') = 1 AND

      o.name <> 'dtproperties' LEFT OUTER JOIN

      dbo.sysproperties m ON m.id = o.id AND m.smallid = c.colorder

WHERE (c.colid = 1)

ORDER BY o.name, c.colid

 

8.列出所有的用户数据表及其字段信息:

SELECT TOP 100 PERCENT c.colid AS 序号, o.name AS 表名, c.name AS 列名,

      t.name AS 类型, c.length AS 长度, c.isnullable AS 允许空,

      CAST(m.[value] AS Varchar(100)) AS 说明

FROM dbo.syscolumns c INNER JOIN

      dbo.sysobjects o ON o.id = c.id AND objectproperty(o.id, N'IsUserTable') = 1 AND

      o.name <> 'dtproperties' INNER JOIN

      dbo.systypes t ON t.xusertype = c.xusertype LEFT OUTER JOIN

      dbo.sysproperties m ON m.id = o.id AND m.smallid = c.colorder

ORDER BY o.name, c.colid

9.Left,right Join的另外一种简洁的写法

select * from a,b where a.id *= b.id  --(*= 相当于 LEFT JOIN) 

select * from a,b where a.id =* b.id  --(=* 相当于 Right JOIN) 

10.Update from 和 delete from

11.得到表中最小的未使用的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)

12.随机取得记录

         SELECT TOP 10 * FROM T1 ORDER BY NEWID()

本文由9159.com发布于www.9159.com,转载请注明出处:1.  判断a表中有而b表中没有的记录,开发过程

关键词:

上一篇:数据库的那点事,  然后又会被问到
下一篇:没有了