- 目录
- 查询数据库中数据表
- 查询表结构
- 查询表头
- 查询去重(distinct)
- 分页查询
- 查询筛选近N天/时,查询当前时间
- HAVING子句
- 运算符:UNION、EXCEPT、INTERSECT
- SELECT INTO语句
- 随机抽取NEWID()
- 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)