经典sql查询小结

1、说明:复制表(只复制结构,源表名:a 新表名:b) (Access可用)
法一:select * into b from a where 1 <>1
法二:select top 0 * into b from a 
 
        同用户下别一数据库表的引用为 mydb..mytable   因表与字段之间用一个点表示,故为了区别,数据库与表之间的联系用两个点
 
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,说明:日程安排提前五分钟提醒
SQL: select * from 日程安排 where datediff('minute',f开始时间,getdate())>5 
 
5,说明:随机取出10条数据
select top 10 * from tablename order by newid() 
 
6、说明:随机选择记录
select newid() 
 
7,说明:删除重复记录
Delete from tablename where id not in (select max(id) from tablename group by col1,col2,...)
id 为主键,主键一定不会重复,重复的只是col1,col2 ,按col1,col2分组,相同的分到一组,此时取出最大的id,(min也一样)剩下的就是重复的,去掉即可。
注:dinstinct只能区别一个列值,若想得到唯一的一行记录,可用:
select from tablename where id in( select max(id) from tablename group by col1,col2,... )
select max(id) from tablename group by col1,col2,...  取出表中唯一的行,那么剔除重复,唯一行的个数为:
select count(1) from (select max(id) as id from tablename group by col1,col2,...) m
也可用:select count(1) from (select distinct col1,col2,... from tablename ) m
 
8、说明:列出数据库里所有的表名
select name from sysobjects where type='U' 
 
 9,说明:选择从10到15的记录
select top 5 * from (select top 15 * from table order by id asc) table_别名 order by id desc
N到M条记录(要有主索引ID)
Select Top M-N * From 表 Where ID in (Select Top M ID From 表) Order by ID  Desc  
 
10,按姓氏笔画排序:
Select * From TableName Order By CustomerName Collate Chinese_PRC_Stroke_ci_as 
 
11,查看当前数据库中所有存储过程
select name as 存储过程名称 from sysobjects where xtype='P' 
 
 12,一条语句执行跨越若干个数据库
select * from OPENDATASOURCE('SQLOLEDB','Data Source=远程ip;User ID=sa;Password=密码').库名.dbo.表名 
 
13 数据库里有1,2,3,4,5 共5条记录,要用一条sql语句让其排序,使它排列成4,5,1,2,3,怎么写?
 
select * from t
 order by case id when 4 then 1
                  when 5 then 2
                  when 1 then 3
                  when 2 then 4
                  when 3 then 5 end 
 
 或:
select * from t order by charindex(cast(id as varchar),'45123')

14,取出一个年级各班的前两名:
class  name  score
2班    张二    400
2班    张三    300
2班    张四    200
2班    张五    100
3班    刘一    500
3班    刘二    400
3班    刘三    300
3班    刘四    200
3班    刘五    100
 
SELECT t.class,t.name,t.socre
FROM tmp t
WHERE EXISTS
( 
    SELECT 1 FROM 
    (
            SELECT TOP 2 * 
            FROM tmp tm 
            WHERE tm.class = t.class 
            ORDER BY tm.socre DESC 
    ) m 
    WHERE  m.name = t.name 
)
ORDER BY t.class,t.socre DESC,t.name
--利用子查询获取一个班级内最高的两名然后与总表连接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL Server 存储过程是一组 SQL 语句的集合,可以被编译并保存在数据库中,以便重复使用。存储过程可以提高查询性能,减少网络流量,简化复杂的查询过程,使代码更容易维护。然而,存储过程的性能也可能受到许多因素的影响,包括查询语句的复杂性、索引的使用、参数的传递方式等等。下面是一些 SQL Server 存储过程调优的小结: 1.使用 SET NOCOUNT ON 语句:这个语句可以关闭每条 SQL 语句返回的行数,减少网络流量。 2.使用 WITH RECOMPILE 选项:这个选项可以在每次执行存储过程时重新编译查询计划,确保每次都使用最优的执行计划。 3.使用 OUTPUT 参数代替 SELECT 语句:在存储过程中,使用 OUTPUT 参数可以避免使用 SELECT 语句来返回结果集,从而减少网络流量。 4.使用适当的索引:为存储过程中的查询语句创建适当的索引可以大大提高查询性能。 5.避免使用函数:存储过程中使用函数会导致查询计划的重新编译,影响性能。 6.使用临时表:在存储过程中使用临时表可以减少查询语句的复杂性,提高查询性能。 7.使用参数化查询:使用参数化查询可以避免 SQL 注入攻击,同时可以提高查询性能。 8.避免使用大量的 IF 语句:使用大量的 IF 语句会导致存储过程的复杂性增加,影响性能。 9.使用 TRY/CATCH 语句:在存储过程中使用 TRY/CATCH 语句可以处理异常,保证代码的健壮性。 10.使用 SET ANSI_NULLS 和 SET QUOTED_IDENTIFIER 选项:在存储过程中使用这两个选项可以确保查询语句的正确性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值