T-sql 高级查询( 5*函数 联接 分组 子查询)

简介: T-sql 高级查询( 5*函数 联接 分组 子查询)

T-SQL 高级查询是指在 T-SQL 中使用的复杂查询,可以用于执行复杂的操作。T-SQL 高级查询包括以下几类:


联接查询:联接查询用于连接两个或多个表。联接查询可以分为内连接、外连接和自连接。

子查询:子查询是一种嵌套在另一个查询中的查询。子查询可以用于过滤、聚合或计算数据。

窗口函数:窗口函数是一种在指定窗口内对数据进行操作的函数。窗口函数可以用于计算移动平均值、排名或分位数等。

聚合函数:聚合函数用于对数据进行汇总操作。聚合函数可以用于计算总和、平均值、最大值或最小值等。

分组查询:分组查询用于将数据分组,并对每个组进行操作。分组查询可以与聚合函数一起使用。


联接查询


语法

-- 内连接
SELECT *
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
 
 
 
-- 左连接
SELECT *
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
 
-- 右连接
SELECT *
FROM Customers
RIGHT JOIN Orders
ON Customers.CustomerID = Orders.CustomerID;
 
-- 自连接
SELECT CustomerID, FirstName, LastName
FROM Customers
INNER JOIN Customers AS C2
ON Customers.CustomerID = C2.CustomerID
AND Customers.City = C2.City;


子查询


语法

-- 过滤数据
SELECT *
FROM Customers
WHERE CustomerID IN (SELECT CustomerID
FROM Orders
WHERE OrderDate > '2023-01-01');
 
-- 聚合数据
SELECT CustomerID, COUNT(*) AS TotalOrders
FROM Orders
GROUP BY CustomerID;
 
-- 计算数据
SELECT CustomerID,
(SELECT MAX(OrderDate)
FROM Orders
WHERE Customers.CustomerID = Orders.CustomerID) AS LastOrderDate
FROM Customers;


分组查询


语法

-- 按客户 ID 分组
SELECT CustomerID, COUNT(*) AS TotalOrders
FROM Orders
GROUP BY CustomerID;
 
-- 按客户 ID 和城市分组
SELECT CustomerID, City, COUNT(*) AS TotalOrders
FROM Orders
GROUP BY CustomerID, City;


函数的应用

 

系统函数

字符串函数


实例

select '保安' + 姓名+ '的基本工资是:' +Convert (varchar(50),基本工资)+'元' 
from 表单
where 职务='保安'
 
显示表中 保安的姓名 和基本工资
保安 XX 的基本工资是 4500 元


日期函数

实例

1.0       
 
select name from 表单  where  datediff(year,出生日,getdate()) <18
 
输出表中 未满18岁的名字
 
 
2.0     
 
 select 名字+'同学,现在'+convert(varchar(50),出生,getdate()) +''距离20岁还差+convert(varchar(50),datediff(mm,gatedate(), dateadd(yy,20出生))+月 from 表datediff(yy,出生,getdate()) <20
 
将查询结果输出为:xx同学,现在xx岁,距离20岁还差xx月
 
 
 
3.0
select * from 表where year(出生)>=1990 and year(出生) <2000
 
筛选出筛选出90后的学员信息
 
 
 
4.0
 
统计出班级同年人数个数,输出年份和人数
select year(出生日期) as 年份,count(*)as 人 from 表group by year(出生日期)


数学函数


实例

1.0
select 组,floor(avg(语文))as 语文平均,floor(avg(数学))as数学平均 from bcnt
 group by 组
 
统计出各小组的语文平均分和数学平均分,并以取整(向下取整)
 
向上的话 floor 改为 ceiling即可


聚合函数

语法格式:

-- 计算总和
SELECT SUM(OrderTotal) AS TotalOrders
FROM Orders;
 
-- 计算平均值
SELECT AVG(OrderTotal) AS AverageOrder
FROM Orders;
 
-- 计算最大值
SELECT MAX(OrderTotal) AS MaximumOrder
FROM Orders;
 
-- 计算最小值
SELECT MIN(OrderTotal) AS MinimumOrder
FROM Orders;


实例

1.0 
select 组,floor(avg(语文))as 语文平均,floor(avg(数学))as数学平均 from bcnt group by 组
 
统计出各小组的语文平均分和数学平均分,并以取整
 
 
 
2.0 
select top 1 * from bcnt where sex='男' and order by 数学+语文 desc
 
查询出班级男生两门课总分最高的学员信息
 
 
 
3.0   
select group,sum(yuwen+shuxue) from bcnt group by group  having avg(数学)>80
 
筛选出数学组平均分高于80分的组、语文和数学总分
 
 
 
4.0
select top 3 group as组 , avg(语文) as 语文平均分 , avg(数学) as 数学平均分 from bcnt 
group by group
order by  avg(数学) desc
 
筛选出数学组平均分前3的组、语文和数学平均分


相关文章
|
3天前
|
SQL 关系型数据库 MySQL
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
|
4天前
|
SQL Java 关系型数据库
Mybatis多表关联查询与动态SQL(下)
Mybatis多表关联查询与动态SQL
18 0
|
4天前
|
SQL Java 数据库连接
Mybatis多表关联查询与动态SQL(上)
Mybatis多表关联查询与动态SQL
9 0
|
4天前
|
SQL 缓存 关系型数据库
一次sql改写优化子查询的案例
在生产环境中,一个MySQL RDS实例遭遇了高CPU使用率问题,原因是执行了一条复杂的UPDATE SQL语句,该语句涉及一个无法缓存的子查询(UNCACHEABLE SUBQUERY),导致子查询需要针对每一行数据重复执行,极大地影响了性能。SQL语句的目标是更新一行数据,但执行时间长达30秒。优化方法是将子查询转换为内连接形式,优化后的语句执行时间降低到毫秒级别,显著减少了CPU消耗。通过示例数据和执行计划对比,展示了优化前后的时间差异和执行效率的提升。
|
4天前
|
SQL 分布式计算 DataWorks
实时数仓 Hologres产品使用合集之查询分区表的生命周期(即之前设置的'auto_partitioning.num_retention'值)的SQL语句,可以使用什么查询
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
17 0
|
4天前
|
SQL 关系型数据库 MySQL
|
4天前
|
SQL 前端开发
基于jeecgboot复杂sql查询的列表自定义列实现
基于jeecgboot复杂sql查询的列表自定义列实现
11 0
|
4天前
|
SQL 数据库
SQL数据库基础语法-查询语句
SQL数据库基础语法-查询语句
|
SQL 存储 数据库
SQL Server函数与存储过程 计算时间
SQL Server函数与存储过程 计算时间 一、通过一个开始时间、结束时间计算出一个工作日天数(不包含工作日与节假日);   1、函数 --创建函数,参数 @bengrq 开始时间,@endrq 结束时间 create function [dbo].
1732 0
|
SQL 存储 Perl
PL/SQL函数和存储过程
前言 活到老,学到老。 基本概念 --ORACLE 提供可以把PL/SQL 程序存储在数据库中,并可以在任何地方来运行它。这样就叫存储过程或函数。过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。
1369 0