SQL查询语句中的where、having和on关键词详解
当涉及到SQL数据查询时,“where”、"having"和"on"这三个关键词都是必不可少的组成部分。它们分别用于筛选行、筛选分组和连接表格进行联接查询。虽然它们的作用不同,但是它们的使用方式和语法很相似。"where"关键词用于在查询中筛选行,它可以根据指定的条件选择满足条件的记录。"where"通常出现在"SELECT"语句之后,"FROM"语句之前。"having"关键词用于在分组查询中筛
概述
当涉及到SQL数据查询时,“where”、"having"和"on"这三个关键词都是必不可少的组成部分。它们分别用于筛选行、筛选分组和连接表格进行联接查询。虽然它们的作用不同,但是它们的使用方式和语法很相似。
"where"关键词用于在查询中筛选行,它可以根据指定的条件选择满足条件的记录。"where"通常出现在"SELECT"语句之后,"FROM"语句之前。
"having"关键词用于在分组查询中筛选行,它可以根据指定的条件筛选出满足条件的分组。"having"通常出现在"GROUP BY"语句之后。
"on"关键词用于连接表格进行联接查询,它通常出现在"JOIN"语句之后,并用于指定连接两个表格时的关联条件。
这三个关键词都是SQL查询语句中非常重要的组成部分,掌握它们的用法和语法,可以帮助我们更快速、更准确地查询和筛选数据,提高查询效率和数据处理能力。
语法
好的,接下来我将介绍这三个关键词在SQL语句中的语法和用法。
- "where"语法:
"where"通常出现在"FROM"语句之后。其基本语法格式如下:
SELECT column1, column2, ...
FROM table_name
WHERE condition;
其中,"column1, column2, …"表示需要查询的列名,"table_name"表示需要查询的表名,"condition"表示筛选条件。
"condition"可以是一个或多个表达式,用于指定筛选条件。例如:
SELECT * FROM customers WHERE country = 'China';
这条SQL语句会从名为"customers"的表中选择符合"country = ‘China’"条件的记录。
- "having"语法:
"having"通常出现在"GROUP BY"语句之后。其基本语法格式如下:
SELECT column1, column2, ...
FROM table_name
GROUP BY column1, column2, ...
HAVING condition;
其中,"column1, column2, …"表示需要查询的列名,"table_name"表示需要查询的表名,"condition"表示筛选条件。
"condition"通常是一个或多个聚合函数,例如SUM、AVG、COUNT、MAX和MIN等,用于指定筛选分组的条件。例如:
SELECT country, COUNT(*) as count FROM customers GROUP BY country HAVING count > 5;
这条SQL语句会从名为"customers"的表中按照"country"字段进行分组,并计算每个分组的记录数。然后,只有当记录数大于5时,才会返回该分组的结果。
- "on"语法:
"on"关键词通常出现在"JOIN"语句之后,用于指定连接两个表格时的关联条件。其基本语法格式如下:
SELECT column1, column2, ...
FROM table1
JOIN table2
ON condition;
其中,"column1, column2, …"表示需要查询的列名,"table1"和"table2"表示需要连接的两个表格,"condition"表示连接条件。
“condition"通常是一个比较表达式,例如"table1.column = table2.column”,用于指定连接两个表格的关联条件。例如:
SELECT orders.order_id, customers.customer_name
FROM orders
INNER JOIN customers
ON orders.customer_id = customers.customer_id;
这条SQL语句使用"INNER JOIN"将"orders"表和"customers"表连接起来,并使用"on"关键词指定了连接两个表格的条件,即"orders.customer_id = customers.customer_id"。这条语句返回了所有符合条件的"orders"和"customers"表的记录。
“where"和"on”
- 功能区别:
"where"关键词用于查询时筛选行,它是在查询之后再进行筛选的,因此它的作用对象是查询结果集中的行,可以对任何列进行过滤,包括主表和连接表中的列。在使用"where"关键词时,过滤条件是在表格中进行计算,如果过滤条件不满足,则不会返回记录。
"on"关键词用于连接表格时指定关联条件,它是在连接之后再进行筛选的,因此它的作用对象是连接的表格,只能对连接表格中的列进行过滤。在使用"on"关键词时,过滤条件是在连接表格中进行计算,即使过滤条件不满足,也会返回连接表格中的所有记录。
- 性能区别:
由于"where"关键词是在查询结果集中进行筛选,因此它的查询效率相对较低,尤其是在处理大量数据时,可能会导致查询速度变慢。
而"on"关键词是在连接表格时指定关联条件,可以减少查询结果集的大小,从而提高查询效率。在处理大量数据时,使用"on"关键词可以减少查询时间和减轻系统负担。
总的来说,"where"和"on"这两个关键词在功能和性能上有一些区别,需要根据实际情况选择合适的关键词进行使用。如果需要对查询结果集中的任何列进行过滤,应使用"where"关键词;如果需要连接表格并指定关联条件,应使用"on"关键词。同时,为了提高查询效率,应根据具体情况选择合适的关键词。
"ON" 子句是用于连接操作的,它指定了连接两个表格时的关联条件,而 "WHERE" 子句是用于过滤操作的,它指定了对表格中的数据进行过滤的条件。
"ON" 子句是在连接操作时执行的,它决定了连接后的表格,而 "WHERE" 子句是在连接操作之后对表格中的数据进行过滤的。
写一条完整的sql语句,包含select,from,join,on,where,group by,order by,having,distinct,with。并说明他们在底层的执行顺序是怎么样的,解释其原因
执行顺序
WITH T1 AS (
SELECT column1, column2, ...
FROM table1
WHERE condition1
), T2 AS (
SELECT column1, column2, ...
FROM table2
WHERE condition2
)
SELECT DISTINCT column1, column2, ...
FROM T1
INNER JOIN T2
ON T1.column = T2.column
WHERE condition3
GROUP BY column1, column2, ...
HAVING condition4
ORDER BY column1, column2, ...;
这条SQL语句的执行顺序如下:
- WITH子句:首先执行WITH子句,生成临时表T1和T2。
- JOIN子句:然后执行JOIN子句,将T1和T2表格根据"ON"子句中指定的条件进行连接,得到连接表格。
- WHERE子句:接着执行WHERE子句,根据"WHERE"子句中指定的条件对连接表格进行过滤,得到符合条件的记录。
- GROUP BY子句:然后执行GROUP BY子句,按照指定的列对记录进行分组。
- HAVING子句:接着执行HAVING子句,根据指定的聚合函数和条件对分组进行过滤,得到符合条件的分组。
- SELECT子句:然后执行SELECT子句,选择需要查询的列并对结果进行去重操作。
- ORDER BY子句:最后执行ORDER BY子句,按照指定的列对结果进行排序。
这个执行顺序的原因是因为,在SQL语句执行时,每个子句的执行顺序是固定的。执行顺序的基本原则是,先执行FROM子句,然后执行WHERE子句,然后执行GROUP BY子句,然后执行HAVING子句,然后执行SELECT子句,最后执行ORDER BY子句。在执行过程中,如果有子查询或者连接操作,会先执行子查询或连接操作,然后再执行后续的子句。因此,在上述SQL语句中,先执行WITH子句生成临时表,然后执行JOIN、WHERE、GROUP BY、HAVING、SELECT和ORDER BY子句,按照上述执行顺序依次进行。
对比
| 关键词 | 作用 | 用法 | 使用场景 |
|---|---|---|---|
| where | 用于筛选行 | 出现在SELECT ,,FROM语句之后 | 在查询中根据指定的条件选择符合条件的记录 |
| having | 用于筛选分组 | 出现在GROUP BY语句之后 | 在分组查询中根据指定的条件筛选出符合条件的分组 |
| on | 用于连接表格进行联接查询 | 出现在JOIN语句之后 | 在联接查询中指定连接两个表格时的关联条件 |
可以看出,这三个关键词都是用于SQL查询中的筛选和联接操作,但是它们的使用场景和对象略有不同。
"where"关键词主要用于查找符合某些条件的行,常用于单表查询中。
"having"关键词主要用于筛选符合某些条件的分组,在分组查询中非常有用。
"on"关键词则主要用于连接表格进行联接查询,将两个或多个表格中的数据进行关联,从而得到更完整、更丰富的数据结果。
更多推荐



所有评论(0)