SQL技巧:快速把握一些异常精妙的"SQL"语句

2009-09-08 14:41:37|  分类: 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 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 性别,生源地,高考总成绩。

-----------------------------------------------------------------------------------------------

查询时加序号,以下的参数"StartNum"为起始值,"StepNum"为步长:
1、没有主键的情形:
Select identity(int,StartNum,StepNum) as iid,* into #tmp from TableName
如:
Select identity(int,100,1) as iid,* into #tmp from TableName
Select * from #tmp
Drop table #tmp

2、有主键的情形:
Select (Select StartNum + sum(StepNum) from TableName where KeyField <= a.KeyField) as iid,* from TableName a
如:
Select (Select 100 + sum(1) from TableName where KeyField <= a.KeyField) as iid,* from TableName a

-----------------------------------------------------------------------------------------------

001:查询重复记录
select *
  (select count(id) as c,id from table1 group by id)
  as t
where t.c>1

-----------------------------------------------------------------------------------------------

0、批处理更新:
update DestTab set DestTab.field1=SourceTab.field2
 from SourceTab
 where DestTab.field1=SourceTab.field2

-----------------------------------------------------------------------------------------------

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1<>1
法二:select top 0 * into b from a

2、说明:拷贝表(拷贝数据,源表名:a 目标表名:b) (Access可用)
insert into b(a, b, c) select d,e,f from b;

3、说明:跨数据库之间表的拷贝(具体数据使用绝对路径) (Access可用)
insert into b(a, b, c) select d,e,f from b in ‘具体数据库’  where 条件
例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..

4、说明:子查询(表名1:a 表名2:b)
select a,b,c from a where a IN (select d from b )  或者:  select a,b,c from a where a IN (1,2,3)

5、说明:显示文章、提交人和最后回复时间
select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b

6、说明:外连接查询(表名1:a 表名2:b)
select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c

7、说明:在线视图查询(表名1:a )
select * from (SELECT a,b,c FROM a) T where t.a > 1;

8、说明: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

9、说明:in 的使用方法
select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)

10、说明:两张关联表,删除主表中已经在副表中没有的信息
delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )

11、说明:四表联查问题:
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 .....

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

13、说明:一条sql 语句搞定数据库分页
select top 10 b.* from (select top 20 主键字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主键字段 = a.主键字段 order by a.排序字段

14、说明:前10条记录
select top 10 * form table1 where 范围

15、说明:选择在每一组b值相同的数据中对应的a最大的记录的所有信息(类似这样的用法可以用于论坛每月排行榜,每月热销产品分析,按科目成绩排名,等等.)
select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)

16、说明:包括所有在 TableA 中但不在 TableB和TableC 中的行并消除所有重复行而派生出一个结果表
(select a from tableA ) except (select a from tableB) except (select a from tableC)

17、说明:随机取出10条数据
select top 10 * from tablename order by newid()

18、说明:随机选择记录
select newid()
19、说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)

20、说明:列出数据库里所有的表名
select name from sysobjects where type='U'
21、说明:列出表里的所有的
select name from syscolumns where TableName')

22、说明:列示type、vender、pcs字段,以type字段排列,case可以方便地实现多重选择,类似select 中的case。
select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type
显示结果:
type  vender   pcs
电脑   A        1
电脑   A        1
光盘   B        2
光盘   A        2
手机   B        3
手机   C        3
23、说明:初始化表table1
TRUNCATE TABLE table1

24、说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc

SQL分类:
DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)
DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)
DCL—数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)

首先,简要介绍基础语句:
使用 DISTINCT 消除重复项
1、说明:创建数据库
CREATE DATABASE database-name
2、说明:删除数据库
drop database dbname
3、说明:备份sql server
--- 创建 备份数据的 device
USE master
EXEC sp_addumpdevice 'disk', 'testBack',  'c:\mssql7backup\MyNwind_1.dat'
--- 开始 备份
BACKUP DATABASE pubs TO testBack  
4、说明:创建新表
create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..)
根据已有的表创建新表:
   A:create table tab_new like tab_old (使用旧表创建新表)
   B:create table tab_new as select col1,col2… from tab_old definition only
5、说明:删除新表drop table tabname
6、说明:增加一个列
Alter table tabname add column col type
注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。
7、说明:添加主键: Alter table tabname add primary key(col)
说明:删除主键: Alter table tabname drop primary key(col)
8、说明:创建索引:create [unique] index idxname on tabname(col….) 
删除索引:drop index idxname
注:索引是不可更改的,想更改必须删除重新建。
9、说明:创建视图:create view viewname as select statement
删除视图:drop view viewname
10、说明:几个简单的基本的sql语句
选择:select * from table1 where 范围
插入:insert into table1(field1,field2) values(value1,value2)
删除:delete from table1 where 范围
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ ---like的语法很精妙,查资料!
排序:select * from table1 order by field1,field2 [desc]
总数:select count(*) as totalcount from table1
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1
11、说明:几个高级查询运算词
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),不消除重复行。
注:使用运算词的几个查询结果行必须是一致的。
12、说明:使用外连接
A、left outer join:
左外连接(左连接):结果集几包括连接表的匹配行,也包括左连接表的所有行。
B:right outer join:
右外连接(右连接):结果集既包括连接表的匹配连接行,也包括右连接表的所有行。
C:full outer join:
全外连接:不仅包括符号连接表的匹配行,还包括两个连接表中的所有记录。

转载于:https://www.cnblogs.com/gaohao/archive/2012/06/07/2539857.html

转自随风飘荡自由飞翔 SQL技巧:快速把握一些异常精妙的SQL语句相关推荐

  1. java执行sql列名无效_嵌套异常是java.sql.SQLException:无效的列名ORACLE

    我尝试在 Java中使用JdbcTemplate执行以下oracle查询: select RESOURCE_ID from REPRO_PRINTING_JOB where (USER_ID=? an ...

  2. sqlserver拼接sql插入table_10个SQL技巧

    介 绍 为了理解这 10 个 SQL 技巧的价值,首先需要了解下 SQL 语言的上下文.为什么我要在 Java 会议上讨论 SQL 呢?(我可能是唯一一个在 Java 会议上讨论 SQL 的了)下面讲 ...

  3. sql如何取前几行_10 个不为人知的 SQL 技巧

    在 SQL 中,我们不关心数据库是如何检索信息的,就可以得到结果.本文介绍了使用声明式 SQL10 个不为人知的技巧. 从早期开始,编程语言设计者就有这样的愿望:设计一种语言,在这种语言中,告诉机器我 ...

  4. 您认为不可能的10个SQL技巧

    这样的列表确实有用-它们不仅吸引了人们的注意,如果内容也很有价值(在这种情况下,请相信我),则文章格式可能会非常有趣. 本文将为您带来10条SQL技巧,其中许多人可能都认为不可能. 这篇文章是我在会议 ...

  5. mysql+create+table+index_mysql------基础及常见SQL技巧

    基础 1.1 mysql表复制 复制表结构+复制表数据 mysql>create table t3 like t1; mysql>insert into t3 select * from ...

  6. sql 非主键每年自增_或许你不知道的 10 条 SQL 技巧

    上文我们简述了 SQL 的一些进阶技巧,一些朋友觉得不过瘾,我们继续来下篇,再送你 10 个技巧 一. 使用延迟查询优化 limit [offset], [rows] 经常出现类似以下的 SQL 语句 ...

  7. 针对数据科学家和数据工程师的4条SQL技巧

    SQL has become a common skill requirement across industries and job profiles over the last decade. 在 ...

  8. 如何做一个逆风飞扬,自由飞翔程序员

    肉眼品世界导读: 谁都渴望自由飞翔,而面对现实,想的是乘风破浪,往往却是身不由己:程序员的世界如同<被嫌弃的程序员的一生>,形象深刻,冷暖自知:程序员的世界,技术人的世界,是可以抛弃世俗, ...

  9. 【SQL开发实战技巧】系列(一):关于SQL不得不说的那些事

    系列文章目录 [SQL开发实战技巧]系列(一):关于SQL不得不说的那些事 [SQL开发实战技巧]系列(二):简单单表查询 [SQL开发实战技巧]系列(三):SQL排序的那些事 [SQL开发实战技巧] ...

最新文章

  1. 2021年春季学期-信号与系统-第九次作业参考答案-第三小题
  2. 红黑树(一)之 原理和算法详细介绍---转帖
  3. MYSQL专题-使用Binlog日志恢复MySQL数据
  4. 用栈来求解汉诺塔变形问题
  5. 一步步编写操作系统3 部署工作环境 3
  6. 通过哪吒动漫豆瓣影评,带你分析python爬虫与BeautifulSoup快速入门
  7. windows api 每日一练(5)基本内存操作
  8. txt文本如何改html类型,编辑html格式文本可改成txt格式(可以替换或更换某文本)新手...
  9. 华为方舟编译器正式开源,采用自主平台托管
  10. 排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)
  11. [渝粤教育] 中国地质大学 事故应急救援 复习题 (2)
  12. 结构等待队列[网络编程]select流程分析
  13. 如何使用matlab绘制晶胞结构示意图
  14. Unity Easy AR
  15. python pyinstaller使用方法_【python快手菜】pyinstaller使用指南
  16. unity3D学习笔记1
  17. ToolsCodeTemplate使用
  18. 深入理解Java内存模型(五)——锁
  19. ReentrantReadWriteLock、StampedLock
  20. 经营性ICP与非经营性ICP有什么区别?

热门文章

  1. Kubernetes Events介绍(下)
  2. 个人小程序开发有哪些限制?
  3. Androidstudio ADB调试
  4. java技术面试一定要跳出来的坑,可曾听闻!
  5. 如果不明白该用组合关系还是依赖关系,就来看这一篇!
  6. WordPress调用自带的友情链接功能_只在首页显示
  7. Android Update Engine 分析(十七)10 类 InstallOperation 数据的生成和应用
  8. 设计模式之内容观察者模式
  9. APS的定义是什么?高级计划与排程APS有哪些痛点?
  10. 什么是APS系统?APS系统和ERP系统的区别是什么?