SQL语言_4 连接查询和分组查询

                             SQL语言_4 连接查询和分组查询

                                                                                                                              作者:田超凡

版权所有,转载请注明原作者,仿冒侵权必究法律责任

1.数据库的查询机制是什么?

查询是针对表中已存在的数据行而言的,可以将它简单理解为筛选,将满足条件的数据抽取出来。数据库表在接受查询请求时,可以将它理解为“它将逐行判断”,将满足条件的记录抽取出来并结合在一起形成记录集,在记录集中依然可以进行再次查询。

2.T-SQL进行增、删、改、查(查询全部数据、查询部分数据、模糊查询、内部函数的使用)的语句有哪些?

增:

INSERT INTO…VALUES…..

INSERT INTO…SELECT….FROM….

SELECT….INTO…..FROM….

删:

DELETE FROM….WHERE….

DELETE FROM...=TRUNCATE TABLE….

改:

UPDATE…SET….WHERE….

查:

查询表中所有数据:SELECT * FROM…..

查询表中部分数据:SELECT….FROM….WHERE…ORDER BY…

模糊查询:

使用LIKE子句匹配字符串或字符串中的一部分

SELECT…FROM…WHERE…LIKE ‘模糊检索条件,可以使用通配符’

使用BETWEEN在某个范围内进行查询

SELECT….FROM…WHERE…BETWEEN…AND…

使用IN在列举值内进行查询

SELECT….FROM…WHERE…IN(value1,value2,value3….)

T-SQL中的通配符:

_只能替代一个字符

%可以替代任意长度的字符串(包括长度为0)

[]在某个范围内

[^]不在某个范围内

使用NOT关键字可以进行取反操作

SELECT…FROM…WHERE….NOT BETWEEN…AND…

SELECT…FROM…WHERE…NOT IN(value1,value2,value3…)

内部函数:

字符串函数(对字符串进行操作):

常用的有LEFT()、RIGHT()、CHARINDEX()、LEN()、REPLACE() STUFF()

日期函数(对日期时间类型的数据进行处理)

常用的有GETDATE()、DATEDIFF()、DATEPART()

数学函数(对数字数据类型的数据进行常见的数学计算)

常用的有:RAND()、FLOOR()、SQRT()

系统函数(获取系统数据)

常用的有:CONVERT()、DATALENGTH()

3.SQL语言中的聚合函数有哪些?他们的主要作用是什么?

SUM()求和、AVG()平均数、MAX()最大值、MIN()最小值、COUNT()计数

SUM()返回表达式中所有数值之和,忽略任何空值,仅适用于数字数据类型的列

AVG()返回表达式中所有数值的平均数,忽略任何空值,仅适用于数字数据类型的列

MAX()返回表达式中的最大值

MIN()返回表达式中的最小值

MAX()和MIN()同样忽略任何空值,但是MAX()和MIN()可以适用于数字类型、字符类型、日期时间类型的列,在字符序列中,MAX()函数返回排序序列的最大值,MIN()函数返回排序序列的最小值。

COUNT()返回提供的组或记录集中的计数,COUNT()函数可以适用于除了text/image/ntext类型以外的任意数据类型,在COUNT()函数中可以使用通配符*,从而返回表中所有行的计数,包括包含空值的行。当使用COUNT()函数对某列进行计数时,将忽略空值。

4.T-SQL查询语句中可以使用哪些方式对查询结果进行筛选和自定义显示方式?

在查询结果中使用列的别名:

列名AS 别名

别名=列名

列名 别名(空格分隔)

在查询结果中合并多个列:在SELECT子句中使用”+”连接符连接列名即可。

注意:连接的列必须是相同数据类型,比如要么都是字符串型、要么都是数值型,不能将字符串型和数值型列进行合并,不然会报类型转换错误。如果两个列都是字符串型,则直接进行拼接。如果两个列都是数字型,则返回数字相加后的和。

在查询结果中插入常量列:

SELECT…常量值 AS 列名

限制返回的行数:TOP关键字

限制返回的行数所占的百分比:PERCENT关键字

查询空值:

IS NULL/IS NOT NULL

5.如何使用T-SQL语句对两个表中的数据进行连接查询?

SELECT……FROM table1 AS 别名,table2 AS 别名

WHERE 关联的某个列(一般关联的是主键和外键,因为它们之间是对应的)和其他查询条件

※通过学习本章,你需要重点掌握的知识:

1.什么是分组查询?有什么作用?如何进行分组查询?

2.分组查询如何对查询结果限定条件?它们的顺序是怎样的?

3.分组查询对SELECT后面指定的列有什么影响?

4.什么是多表连接查询?有什么作用?如何进行多表连接查询?多表连接查询的方式有哪些?

5.如何进行内连接查询?如何进行外连接查询?

6.T-SQL中查询语句(包括基础查询、模糊查询、分组查询、连接查询)在实际运用中有哪些注意事项?

※对照下面的总结,看看有没有掌握本章知识点:

1.

分组查询是数据库查询机制中的一种查询方式之一,分组查询可以针对某个列或多个列中的数据进行分组,然后通过各种条件限定(包括先筛选、再分组、分组后再次筛选)对数据进行查询。使用分组查询可以方便对相同的数据分门别类分成多个组,并以组为基准加以处理。方便对数据进行统计,通常和聚合函数搭配使用。

T-SQL中使用GROUP BY子句进行分组查询,GROUP BY子句后面接的是需要对数据进行分组的列,GROUP BY子句中的列名必须在SELECT子句中存在。简单来说,需要分组的列必须出现在查询结果中。GROUP BY子句只能对列进行分组,后面只能接列名,可以对多个列进行分组(多个列之间使用逗号隔开)。分组查询实质上可以理解为将分组后的每个组当成一个列进行查询、统计和匹配。

2.

分组查询中限定条件的子句有以下几种:

WHERE子句:过滤掉数据源中不符合查询条件的数据

HAVING子句:过滤掉分组后的数据中不满足查询条件的数据

在进行分组查询时,基本语法如下:

SELECT…..FROM….

WHERE….第一次筛选

GROUP BY…分组

HAVING…第二次筛选

ORDER BY…排序

其中,限制条件的子句顺序如下:

WHERE——GROUP BY——HAVING

首先使用WHERE子句对数据源中的数据进行筛选(第一次筛选)

然后使用GROUP BY子句对筛选后的数据进行分组

最后使用HAVING子句对分组后的数据进行再次筛选

还可以使用ORDER BY子句进行排序,当需要对数据进行排序时,ORDER BY子句只能放在查询语句块的结尾

3.

在使用分组查询时,SELECT后面指定的列是有限制的,它必须满足下列情况之一:

  • 被分组的列
  • 为每个分组返回一个值的表达式,如聚合函数计算出的列

4.

多表连接查询是一种可以对多个数据表中的数据进行联合查询、可以返回多个表中的列的值,通过表之间建立的关联列进行匹配,将满足连接条件的数据筛选出来形成结果集的查询方式。使用多表连接查询可以对多个数据库表中的数据进行查询,大大优化了查询过程和查询结果,查询效率非常高,可以在一个结果集中显示多个表中的数据。

多表连接查询的方式主要是建立表之间的关联(要确保多个表之间有关联的列)。多表连接查询分为内连接查询和外连接查询,可以从多种不同的角度对多个数据库表中的数据进行匹配和查询。

5.

内连接查询:

通过INNER JOIN ON或WHERE子句进行表之间的关联,内连接查询中表的等级是平等的。内连接查询将返回两个表或两个以上的表的组合中满足连接条件的数据,将满足连接条件的数据直接返回到结果集中,对于不满足连接条件的数据则将其忽略。

外连接查询:

和内连接查询对应的就是外连接查询。外连接查询必须至少返回一个表中的所有记录,外连接查询中,建立连接关系的表之间存在主从之分。以主表中的每个数据行匹配从表中的每个列,将满足连接条件的数据直接返回到结果集中,对于不满足连接条件的数据则将其填充为NULL值(空值)之后再返回到结果集中。

外连接查询又可以分为左外连接查询(LEFT OUTER JOIN ON)和右外连接查询(RIGHT OUTER JOIN ON)。

左外连接查询通过使用LEFT OUTER JOIN ON或LEFT JOIN ON实现,在进行左外连接查询时,必须返回左表中所有匹配的数据行。如果左表中的数据在右表中没有对应的项,则将其填充为NULL值。

右外连接查询和左外连接查询类似,右外连接查询通过使用RIGHT OUTER JOIN ON或RIGHT JOIN ON实现,右外连接查询必须返回右表中所有匹配的数据行,如果右表中的数据在左表中没有对应的项,则将其填充为NULL值。

5.

T-SQL中查询语句的注意事项:

  1. 结果集是虚拟的表,只是一种临时的输出形式。
  2. 在使用多表连接查询时,如果SELECT语句中指定的列在多个表中重复出现,则需要使用表的别名进行区分指定。

SELECT后面指定的列如果是在分组查询中,则是有限制的,SELECT后面指定的列必须在GROUP BY子句中存在,或者是对每个分组返回一个值的表达式,如聚合函数计算出的列。当需要在结果集中显示列的别名时,则可以使用三种方式指定列的别名。

  1. 关于ORDER BY子句进行排序时的注意事项:

ORDER BY子句一般用来基于一个或多个列中的数据进行排序,排序方式有ASC升序和DESC降序两种,如不指定排序方式,则默认升序ASC排序。当需要对多个列进行排序时,多个列之间用逗号隔开。以ORDER BY子句后面指定的第一个列为基准进行排序。ORDER BY子句只能出现在一个查询语句块的结尾。

  1. 使用多表连接查询时,必须指定关联的列,不然则会随机匹配,查询结果没有任何规律并且数据絮乱,严重时会影响系统性能。因此在使用多表连接查询时,一定要指定关联的、匹配的列,满足对应关系。
  2. 聚合函数只返回一个值,因此不能将聚合函数和可能返回多个值的列放在一起查询(分组查询统计除外)。
  3. 查询语句块中的每一个子句一般都有自己的作用和顺序,一般建议严格按照查询语法编写查询代码,从而有效减少错误发生的次数。在查询过程中可以适当对查询语句中的代码进行优化,从而使查询速度更快、效率更高,更好地改善系统的性能。
发布了100 篇原创文章 · 获赞 10 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_30056341/article/details/105493441