百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

数据库中的11种查询用法,作为程序员,你都掌握了吗?

wptr33 2024-12-08 19:12 11 浏览

本文介绍了sqlserver数据库中的11种查询用法,都是程序员在实际工作中经常用到的:

一.简单查询

简单查询是最基本的查询类型,用于从数据库中选择特定列或所有列的数据。

SELECT 列名1, 列名2 FROM 表名;

二.条件查询

条件查询是使用WHERE子句来筛选满足特定条件的数据。通过指定条件,可以从数据库中检索满足要求的行。即带有WHERE子句的查询:

1.等于(=)操作符:

SELECT * FROM 表名 WHERE 列名 = 值;

该查询将返回列名等于给定值的行。

2.不等于(<>或!=)操作符:

SELECT * FROM 表名 WHERE 列名 <> 值;

该查询将返回不等于给定值的行。

3.大于(>)和小于(<)操作符:

SELECT * FROM 表名 WHERE 列名 > 值;

该查询将返回列名大于给定值的行。

4.大于等于(>=)和小于等于(<=)操作符:

SELECT * FROM 表名 WHERE 列名 <= 值;

该查询将返回列名小于等于给定值的行。

5.BETWEEN操作符:

SELECT * FROM 表名 WHERE 列名 BETWEEN 值1 AND 值2;

该查询将返回列名在给定范围内的行。

6.IN操作符:

SELECT * FROM 表名 WHERE 列名 IN (值1, 值2, 值3);

该查询将返回列名等于给定值之一的行。

7.LIKE操作符:

SELECT * FROM 表名 WHERE 列名 LIKE 'abc%';

该查询将返回列名以"abc"开头的行,%用于表示任意字符。

8.NOT操作符:

SELECT * FROM 表名 WHERE NOT 列名 = 值;

该查询将返回不满足条件的行。


三、别名查询

别名查询可以为表、列或子查询指定一个临时名称,以简化查询语句并提高可读性。通过为对象赋予别名,可以在查询中引用它们,并且还可以使用别名进行计算或连接操作。

1. 为表指定别名:

SELECT t.列名 FROM 表名 AS t;

这将为表指定别名"t",然后在查询中使用该别名引用列。

2. 为列指定别名:

SELECT 列名 AS 别名 FROM 表名;

这将为列指定一个别名,在结果中显示别名而不是原始列名。

3. 使用别名进行计算:

SELECT 列名1, 列名2, 列名1 + 列名2 AS 计算列名 FROM 表名;

这将为计算列指定一个别名,并且可以使用原始列进行计算操作。

4. 使用别名进行连接:

SELECT t1.列名, t2.列名 FROM 表名1 AS t1 INNER JOIN 表名2 AS t2 ON t1.列名 = t2.列名;

这将为每个表指定一个别名,并在连接操作中使用这些别名。

5. 为子查询指定别名:

SELECT 列名 FROM (SELECT 列名 FROM 表名) AS 别名;

这将对子查询结果集指定一个别名,并在外部查询中引用该别名。

通过使用别名,可以使查询更具可读性和易于理解。同时,别名还可以用于处理复杂的查询逻辑和多表连接操作。





四、分组查询

分组查询用于将数据按照一列或多列进行分组,并对每个组应用聚合函数(如COUNT、SUM、AVG等)。通过分组查询,可以对数据进行汇总和统计,以获得更有意义的结果。

1. 基本分组查询:

SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名;

这将根据指定的列对数据进行分组,并计算每个组的行数。

2. 分组查询与聚合函数结合:

SELECT 列名, SUM(列名) FROM 表名 GROUP BY 列名;

这将根据指定的列对数据进行分组,并计算每个组中该列的总和。

3. 多列分组查询:

SELECT 列名1, 列名2, COUNT(*) FROM 表名 GROUP BY 列名1, 列名2;

这将根据多个列对数据进行分组,并计算每个组的行数。

4. 过滤分组结果:

SELECT 列名, COUNT(*) FROM 表名 WHERE 条件 GROUP BY 列名;

这将在分组之前使用WHERE子句筛选数据,并对满足条件的行进行分组和计数。

5. 分组排序:

SELECT 列名, COUNT(*) FROM 表名 GROUP BY 列名 ORDER BY COUNT(*) DESC;

这将对分组结果按照计数值进行降序排序。

6. 使用HAVING子句过滤分组:

SELECT 列名1, COUNT(*) FROM 表名 GROUP BY 列名1 HAVING COUNT(*) > 10;

这将在分组之后使用HAVING子句筛选数据,并只返回满足条件的分组。

7. 对分组结果重命名:

SELECT 列名 AS 新列名, COUNT(*) AS 计数 FROM 表名 GROUP BY 列名;

这将为分组结果的列指定新的别名,使其更具描述性。

分组查询在SQL Server中非常有用,可以用于生成报表、统计数据、数据分析等场景。通过使用GROUP BY子句和适当的聚合函数,可以根据需要对数据进行灵活的分组和计算。


五、排序查询

排序查询用于对结果集按照一个或多个列的值进行排序。通过指定排序顺序(升序或降序),可以使数据以特定的方式呈现。

1. 基本的排序查询:

SELECT 列名 FROM 表名 ORDER BY 列名;

这将根据指定的列对结果集进行升序排序。

2. 降序排序查询:

SELECT 列名 FROM 表名 ORDER BY 列名 DESC;

这将根据指定的列对结果集进行降序排序。

3. 多列排序查询:

SELECT 列名1, 列名2 FROM 表名 ORDER BY 列名1, 列名2;

这将首先按照列名1对结果集进行排序,然后在相同值的情况下按照列名2进行排序。

4. 排序查询与聚合函数结合:

SELECT 列名, COUNT(*) AS 计数 FROM 表名 GROUP BY 列名 ORDER BY 计数 DESC;

这将对分组结果按照计数值的降序排序。

5. 使用NULL值排序处理:

SELECT 列名 FROM 表名 ORDER BY 列名 ASC NULLS FIRST;

这将把NULL值放在排序结果的最前面。

6. 排序查询与LIMIT子句结合(仅适用于SQL Server 2012及更高版本):

SELECT 列名 FROM 表名 ORDER BY 列名 OFFSET 5 ROWS FETCH NEXT 10 ROWS ONLY;

这将跳过前5行,并返回接下来的10行结果。

7. 对排序结果重命名:

SELECT 列名 AS 新列名 FROM 表名 ORDER BY 列名;

这将为排序结果的列指定新的别名,使其更具描述性。

排序查询可用于按照特定的规则对结果集进行排序,使数据按照预期的顺序展示。通过使用不同的排序顺序和多列排序,我们可以满足不同的排序需求,并获得符合要求的有序结果。




六、去重查询

去重查询用于从结果集中删除重复的行。通过使用DISTINCT关键字,可以获取唯一的记录,确保每行数据只显示一次。

1. 基本的去重查询:

SELECT DISTINCT 列名 FROM 表名;

这将返回指定列中的唯一值。

2. 多列去重查询:

SELECT DISTINCT 列名1, 列名2 FROM 表名;

这将返回指定列组合中的唯一组合值。

3. 去重查询与排序结合:

SELECT DISTINCT 列名 FROM 表名 ORDER BY 列名;

这将返回唯一的列值,并按照指定列的顺序进行排序。

4. 去重查询与聚合函数结合:

SELECT 列名, COUNT(*) AS 计数 FROM 表名 GROUP BY 列名;

这将对指定列进行分组,并计算每个唯一值的数量。

5. 去重查询与条件过滤结合:

SELECT DISTINCT 列名 FROM 表名 WHERE 条件;

这将根据条件筛选满足条件的唯一值。

6. 去重查询与子查询结合:

SELECT DISTINCT 列名 FROM 表名 WHERE 列名 IN (SELECT 列名 FROM 表名 WHERE 条件);

这将基于子查询的结果获取唯一值。

7. 多表联接的去重查询:

SELECT DISTINCT 列名 FROM 表1 JOIN 表2 ON 表1.列名 = 表2.列名;

这将返回多个表联接的结果中的唯一值。

去重查询可用于消除重复的记录,提供干净且不重复的数据集。通过灵活运用去重查询,我们可以根据需求获取唯一的记录,避免重复的数据出现。

在SQL Server中,可以使用`DISTINCT`关键字进行去重查询。该关键字用于从结果集中选择唯一的记录,并且会自动删除重复的行。

注意:

使用`DISTINCT`关键字可能会对查询的性能产生影响,因为它需要对结果集进行排序和比较,以找出重复的行。在处理大型数据集时要谨慎使用。







七、分页查询

分页查询用于限制结果集的行数,并指定返回结果集的起始位置。这对于大型数据集或需要分批加载数据的情况非常有用。

1. 基本的分页查询:

SELECT 列名

FROM 表名

ORDER BY 排序列

OFFSET 起始行数

ROWS FETCH NEXT 每页行数 ROWS ONLY;

这个查询将从指定表中按照排序列进行排序,并返回指定范围的结果。


2. 分页查询的起始行数和每页行数的计算:

DECLARE @PageNumber INT = 2;

DECLARE @PageSize INT = 10;

SELECT 列名 FROM 表名

ORDER BY 排序列

OFFSET (@PageNumber - 1) * @PageSize

ROWS FETCH NEXT @PageSize ROWS ONLY;

这个查询将根据给定的页码和每页行数计算起始行数,并返回相应的结果。


3. 分页查询与条件过滤结合:

DECLARE @Offset INT = 5;

DECLARE @Limit INT = 10;

SELECT 列名 FROM 表名

WHERE 条件

ORDER BY 排序列

OFFSET @Offset ROWS

FETCH NEXT @Limit ROWS ONLY;

这个查询将基于给定的条件过滤结果,并返回指定范围的结果。


4. 使用ORDER BY子句进行分页查询:

SELECT 列名 FROM 表名

ORDER BY 排序列

OFFSET 0 ROWS

FETCH NEXT 10 PERCENT ROWS ONLY;

这个查询将返回结果集中的前10%的数据。


5. 使用子查询进行分页查询:

SELECT 列名

FROM (SELECT 列名,

ROW_NUMBER() OVER (ORDER BY 排序列) AS RowNum

FROM 表名) AS SubQuery

WHERE RowNum BETWEEN 11 AND 20;

这个查询使用ROW_NUMBER()函数为每一行添加行号,并通过子查询选择指定范围的结果。


6. 结合TOP子句实现简单的分页查询(仅适用于SQL Server 2012及更高版本):

SELECT TOP 10 列名 FROM 表名 ORDER BY 排序列;

这个查询将返回排在前10位的结果。

分页查询可用于限制结果集的大小,提高查询效率,并分批加载大型数据集。通过设置起始行数、每页行数以及排序条件,我们可以获取特定范围内的数据。分页查询在处理大量数据时非常有用,可有效地管理数据的加载和显示。


八、模糊查询

模糊查询是一种用于匹配包含特定模式的文本数据的查询方法。SQL Server 提供了两种用于模糊查询的常用操作符:`LIKE` 和 `CHARINDEX()` 函数。


1. 使用 `LIKE` 操作符进行模糊查询:

SELECT 列名 FROM 表名 WHERE 列名 LIKE '模式';

这个查询将返回满足指定模式的匹配项。在模式中可以使用通配符 `%` 表示任意字符序列(包括空字符),使用 `_` 表示单个字符。

例如,要查找姓氏以 "Smith" 开头的顾客:

SELECT CustomerName FROM Customers WHERE CustomerName LIKE 'Smith%';


2. 使用 `CHARINDEX()` 函数进行模糊查询:

SELECT 列名 FROM 表名 WHERE CHARINDEX('搜索文本', 列名) > 0;

这个查询将返回包含指定搜索文本的匹配项。`CHARINDEX()` 函数返回搜索文本在列中第一次出现的位置,如果未找到则返回 0。

例如,要查找地址中包含 "Street" 的顾客:

SELECT CustomerName FROM Customers WHERE CHARINDEX('Street', Address) > 0;

除了上述示例,还可以根据具体需求结合运算符和函数来构建更复杂的模糊查询条件。此外,还可以使用正则表达式等高级功能来进行更精确的模式匹配。


九、表连接查询

表连接查询是一种常用的操作,用于将多个表的数据合并在一起,以便进行更复杂的查询和分析。有几种类型的表连接查询可以使用:


1. 内连接(INNER JOIN):

内连接返回两个表中匹配的行,即只返回两个表中都存在的记录。

SELECT *

FROM table1

INNER JOIN table2

ON table1.column = table2.column;


2. 左连接(LEFT JOIN):

左连接返回左侧表中的所有行,以及与右侧表匹配的行。如果在右侧表中没有匹配的行,则右侧列的值将为 NULL。


SELECT *

FROM table1

LEFT JOIN table2

ON table1.column = table2.column;


3. 右连接(RIGHT JOIN):

右连接返回右侧表中的所有行,以及与左侧表匹配的行。如果在左侧表中没有匹配的行,则左侧列的值将为 NULL。


SELECT *

FROM table1

RIGHT JOIN table2

ON table1.column = table2.column;


4. 全连接(FULL OUTER JOIN):

全连接返回两个表中的所有行,并根据匹配条件组合它们。如果在其中一个表中没有匹配的行,则另一个表中对应列的值将为 NULL。

SELECT *

FROM table1

FULL OUTER JOIN table2

ON table1.column = table2.column;




十、子查询

子查询是一种查询嵌套在另一个查询中的查询。它允许您在主查询中使用一个查询结果作为子查询的数据源,以便根据这个结果执行更复杂的操作。

子查询通常用于以下情况:

1. 在 WHERE 或 HAVING 子句中过滤数据:您可以使用子查询来检索满足某个条件的特定数据集,然后将其作为主查询的过滤条件。

2. 在 SELECT 语句中返回计算列或聚合值:子查询可以返回单个值,该值可以作为主查询中的计算列或聚合函数的输入。

3. 在 FROM 子句中创建临时表:您可以使用子查询在主查询之前创建一个临时表,并将其作为主查询的数据源。

下面是几个示例来演示如何在 SQL Server 中使用子查询:

1. 使用子查询过滤数据:

SELECT column1, column2

FROM table1

WHERE column1 IN (SELECT column1 FROM table2 WHERE condition);

这个查询检索 `table1` 表中满足子查询条件的行。


2. 在 SELECT 语句中使用子查询:

SELECT column1, (SELECT MAX(column2) FROM table2) AS max_value

FROM table1;

这个查询返回 `table1` 表的每一行,以及从 `table2` 表中获取的最大值(计算列)。



3. 使用子查询创建临时表:

SELECT t1.column1, t2.column2

FROM (SELECT column1, column2 FROM table1) AS t1

JOIN (SELECT column1, column2 FROM table2) AS t2

ON t1.column1 = t2.column1;

这个查询使用子查询在主查询之前创建了两个临时表 `t1` 和 `t2`,然后通过连接它们来检索数据。


要使用子查询,只需将子查询放在括号中,然后将其视为一个普通的表或数据源进行操作。可以根据需要嵌套多个子查询,以构建更复杂的查询逻辑。

注意:

子查询可能会影响查询的性能,因此在使用子查询时应谨慎选择合适的优化策略,例如使用 JOIN 等其他方法来实现相同的结果。





十一、嵌套查询

嵌套查询是一个查询嵌套在另一个查询的 FROM、SELECT、WHERE 或 HAVING 子句中的查询。嵌套查询允许您根据主查询的结果执行更复杂的操作。

嵌套查询通常用于以下情况:

1. 在 FROM 子句中创建派生表:您可以将一个查询作为主查询的数据源,创建一个虚拟的派生表来进行进一步的处理。

2. 在 SELECT 语句中返回计算列或聚合值:嵌套查询可以在主查询的 SELECT 子句中返回一个计算列或聚合函数的结果。

3. 在 WHERE 或 HAVING 子句中过滤数据:您可以使用嵌套查询来检索满足某个条件的特定数据集,然后将其作为主查询的过滤条件。

下面是几个示例来演示如何在 SQL Server 中使用嵌套查询:

1. 在 FROM 子句中创建派生表:

SELECT t1.column1, t2.column2

FROM (SELECT column1, column2 FROM table1) AS t1

JOIN (SELECT column1, column2 FROM table2) AS t2

ON t1.column1 = t2.column1;

这个查询将嵌套查询 `(SELECT column1, column2 FROM table1)` 和 `(SELECT column1, column2 FROM table2)` 视为派生表 `t1` 和 `t2`,并通过连接它们来检索数据。


2. 在 SELECT 语句中使用嵌套查询:

SELECT column1, (SELECT MAX(column2) FROM table2) AS max_value

FROM table1;

这个查询返回 `table1` 表的每一行,以及从 `table2` 表中获取的最大值(计算列)。



3. 在 WHERE 子句中使用嵌套查询:

SELECT column1, column2

FROM table1

WHERE column1 IN (SELECT column1 FROM table2 WHERE condition);

这个查询检索 `table1` 表中满足嵌套查询条件的行。

要使用嵌套查询,只需要将内部查询放在外部查询的适当位置,并将其视为一个普通的表或数据源进行操作。嵌套查询的结果将作为外部查询的一部分来处理。



相关推荐

【推荐】一款开源免费、美观实用的后台管理系统模版

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍...

Android架构组件-App架构指南,你还不收藏嘛

本指南适用于那些已经拥有开发Android应用基础知识的开发人员,现在想了解能够开发出更加健壮、优质的应用程序架构。首先需要说明的是:AndroidArchitectureComponents翻...

高德地图经纬度坐标批量拾取(高德地图批量查询经纬度)

使用方法在桌面上新建一个index.txt文件,把下面的代码复制进去保存,再把文件名改成index.html保存,双击运行打开即可...

flutter系列之:UI layout简介(flutter ui设计)

简介对于一个前端框架来说,除了各个组件之外,最重要的就是将这些组件进行连接的布局了。布局的英文名叫做layout,就是用来描述如何将组件进行摆放的一个约束。...

Android开发基础入门(一):UI与基础控件

Android基础入门前言:...

iOS的布局体系-流式布局MyFlowLayout

iOS布局体系的概览在我的CSDN博客中的几篇文章分别介绍MyLayout布局体系中的视图从一个方向依次排列的线性布局(MyLinearLayout)、视图层叠且停靠于父布局视图某个位置的框架布局(M...

TDesign企业级开源设计系统越发成熟稳定,支持 Vue3 / 小程序

TDesing发展越来越好了,出了好几套组件库,很成熟稳定了,新项目完全可以考虑使用。...

WinForm实现窗体自适应缩放(winform窗口缩放)

众所周知,...

winform项目——仿QQ即时通讯程序03:搭建登录界面

上两篇文章已经对CIM仿QQ即时通讯项目进行了需求分析和数据库设计。winform项目——仿QQ即时通讯程序01:原理及项目分析...

App自动化测试|原生app元素定位方法

元素定位方法介绍及应用Appium方法定位原生app元素...

61.C# TableLayoutPanel控件(c# tabcontrol)

摘要TableLayoutPanel在网格中排列内容,提供类似于HTML元素的功能。TableLayoutPanel控件允许你将控件放在网格布局中,而无需精确指定每个控件的位置。其单元格...

想要深入学习Android性能优化?看完这篇直接让你一步到位

...

12个python数据处理常用内置函数(python 的内置函数)

在python数据分析中,经常需要对字符串进行各种处理,例如拼接字符串、检索字符串等。下面我将对python中常用的内置字符串操作函数进行介绍。1.计算字符串的长度-len()函数str1='我爱py...

如何用Python程序将几十个PDF文件合并成一个PDF?其实只要这四步

假定你有一个很无聊的任务,需要将几十个PDF文件合并成一个PDF文件。每一个文件都有一个封面作为第一页,但你不希望合并后的文件中重复出现这些封面。即使有许多免费的程序可以合并PDF,很多也只是简单的将...

Python入门知识点总结,Python三大数据类型、数据结构、控制流

Python基础的重要性不言而喻,是每一个入门Python学习者所必备的知识点,作为Python入门,这部分知识点显得很庞杂,内容分支很多,大部分同学在刚刚学习时一头雾水。...