SQL Server查询

本文介绍了SQL Server中进行数据查询的各种方法,包括查询数据库中的数据表、表结构和表头,使用DISTINCT去除重复项,实现分页查询,筛选近N天的数据,运用HAVING子句进行复杂条件筛选,结合UNION、EXCEPT和INTERSECT操作符,利用SELECT INTO创建新表,使用NEWID()获取随机记录,以及运用DATE函数处理日期。此外,还讨论了CONVERT函数在日期格式转换中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 目录
  1. 查询数据库中数据表
  2. 查询表结构
  3. 查询表头
  4. 查询去重(distinct)
  5. 分页查询
  6. 查询筛选近N天/时,查询当前时间
  7. HAVING子句
  8. 运算符:UNION、EXCEPT、INTERSECT
  9. SELECT INTO语句
  10. 随机抽取NEWID()
  11. DATE函数
  • 查询数据库中数据表
-- 查询数据库中数据表
	sp_databases;
 	select * from sysobjects where xtype='U';  --详细信息
 	
 	注:
 	系统表sysobjects保存的都是数据库对象,其中type表示各种对象的类型,具体包括: 
 	U = 用户表 
 	S = 系统表 
 	C = CHECK 约束 
 	D = 默认值或 DEFAULT 约束 
 	F = FOREIGN KEY 约束 
 	L = 日志 
 	FN = 标量函数 
 	IF = 内嵌表函数 
 	P = 存储过程 
 	PK = PRIMARY KEY 约束(类型是 K) 
 	RF = 复制筛选存储过程 
 	TF = 表函数 
 	TR = 触发器 
 	UQ = UNIQUE 约束(类型是 K) 
 	V = 视图 
 	X = 扩展存储过程及相关的对象信息。
  • 查询表结构
-- 查询表结构
sp_help table_name   # 推荐
sp_columns teble_name
  • 查询表头
-- 默认做了排序:升序
SELECT NAME FROM SYSCOLUMNS WHERE ID=OBJECT_ID('TableName')
# 优化:保持原来顺序
SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='表名' 

-- 查询数据表表头字段 + py
lis = [i[3] for i in engine.execute(
"SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='人员信息表'"
).fetchall()]
  • 查询去重
-- 去重
SELECT  distinct [日期]
FROM [Account Management].[dbo].[消费]
order by 日期 desc
  • 分页查询
-- offset ... fetch next ...
-- Offset-Fetch子句要求结果集是有序的,因此,**只能用于order by 子句中**
-- offset 跳过多少行,fetch next 获取指定数量的行
SELECT * FROM basicInfo ORDER BY Id OFFSET 0 ROWs FETCH NEXT 3 ROWs ONLY;

select distinct Salary from Employee order by Salary desc offset 0 rows fetch next 2 rows only

-- SELECT TOP 3 * FROM basicInfo;
  • 日期筛选
-- 上月
  SELECT * FROM basicInfo
  WHERE DATEDIFF(M, 首次消费日, GETDATE())=1

-- 最近7天
  SELECT * FROM basicInfo
  WHERE DATEDIFF(D, 首次消费日, GETDATE())<7
  
-- 查询当天
  SELECT * FROM basicInfo
  WHERE DATEDIFF(DD, 首次消费日, GETDATE()-1)=0;
  -- WHERE DATEDIFF(D, 首次消费日, GETDATE()-1)=0;

-- 24小时
  SELECT * FROM basicInfo
  WHERE DATEDIFF(HH, 首次消费日, GETDATE()-1)<=24;

-- 分钟
  SELECT * FROM 开户申请表 
  WHERE DATEDIFF(MINUTE, 日期, GETDATE())<5;

-- 当前时间
  SELECT CURRENT_TIMESTAMP AS Tim;
  SELECT GETDATE() AS Tim;
  • HAVING子句
-- HAVING子句中的位置
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

-- 增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用
  SELECT AM,sum(Id) FROM basicInfo GROUP BY AM HAVING SUM(Id)>49990;

-- 内连接,左连接,右连接,完全外部连接,自连接

– UNION 并集

-- 并集
-- 删除重复行;列名、列数,列顺序、列数据类型必须相同
  SELECT 1 AS cnt
  UNION
  SELECT 1 AS cnt;
-- ALL;允许重复值
  SELECT 1 AS cnt
  UNION ALL
  SELECT 1 AS cnt;

-- 差集
-- 在b中,不在b0中,并删除所有重复行
  SELECT * FROM b
  EXCEPT
  SELECT * FROM b0;
  
-- 交集
SELECT * FROM basicInfo
  INTERSECT
  SELECT * FROM basicInfo0
  • SELECT INTO语句
-- 复制表
  SELECT 1 AS cnt INTO stuTest1;

  SELECT TOP 0 * INTO st1 FROM stuTest1;  -- 仅复制表结构
   
  SELECT * INTO stuTest2 FROM stuTest1;
  • INSERT INTO
-- 拷贝
  INSERT INTO stuTest2(cnt,tt) SELECT TOP 5 Id,用户名 FROM  basicInfo
  • 随机
  SELECT NEWID()  -- 返回随机序列数
  SELECT TOP 5 * FROM basicInfo ORDER BY NEWID()  -- 随机抽取5个
  • DATE函数
SQL Server 使用下列数据类型在数据库中存储日期或时间值:
    DATE - 格式:YYYY-MM-DD
    DATETIME - 格式:YYYY-MM-DD HH:MM:SS
    SMALLDATETIME - 格式:YYYY-MM-DD HH:MM:SS
    TIMESTAMP - 格式:唯一的数字

在这里插入图片描述
[^CONVERT转换输出格式表]
在这里插入图片描述

  SELECT GETDATE()

  SELECT DATEPART(YYYY,'2019-06-21 18:28:30')
  SELECT DATEPART(MM,'2019-06-21 18:28:30')
  SELECT DATEPART(DD,'2019-06-21 18:28:30')
  SELECT DATEPART(HH,'2019-06-21 18:28:30')
  SELECT DATEPART(MINUTE,'2019-06-21 18:28:30')
  SELECT DATEPART(SS,'2019-06-21 18:28:30')

  SELECT DATEADD(DD, 4, '2019-06-21 18:28:30')

  SELECT DATEDIFF(HH, '2019-06-21 11:28:30', '2019-06-21 18:28:30')

  SELECT CONVERT(VARCHAR(20), GETDATE())
  SELECT CONVERT(VARCHAR(20), GETDATE(), 10)
  SELECT CONVERT(VARCHAR(20), GETDATE(), 110)
  SELECT CONVERT(VARCHAR(20), GETDATE(), 6)
  SELECT CONVERT(VARCHAR(20), GETDATE(), 106)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值