当前位置: 首页 > wzjs >正文

石家庄做商城网站的公司wordpress-erphpdown

石家庄做商城网站的公司,wordpress-erphpdown,wordpress鲜花商城,上海响应式网站建设企业在SQL查询中,关键字SELECT, FROM, WHERE, GROUP BY, HAVING, 和 ORDER BY的组合使用定义了数据的筛选、分组、排序等操作。理解这些关键字的执行顺序对于构建有效且高效的查询至关重要。以下是这些关键字的执行顺序详解及案例说明: 一、执行顺序详解 1…

在SQL查询中,关键字SELECT, FROM, WHERE, GROUP BY, HAVING, 和 ORDER BY的组合使用定义了数据的筛选、分组、排序等操作。理解这些关键字的执行顺序对于构建有效且高效的查询至关重要。以下是这些关键字的执行顺序详解及案例说明:

一、执行顺序详解

  • 1、from查询表
    指定查询的数据源,既要从那个表中获取数据。如果有多个表通过JOIN连接,那么会先计算这些表的笛卡尔积,然后根据JOIN条件和ON子句进行筛选。
  • 2、on & join 链接表
    指定表之间的连接类型(如INNER JOIN、LEFT JOIN等)和连接条件。JOIN操作会在FROM子句之后进行,用于合并来自不同表的数据。
  • 3、where查询条件
    在数据分组和聚合之前,根据指定的条件筛选记录。只有满足WHERE条件的记录才会被保留下来进行后续的操作。
  • 4、group by 分组依据
    将筛选后的记录按照一个或多个列进行分组。分组后,后续的操作(如聚合函数)将作用于这些分组上。
  • 5、having 分组后的信息过滤条件
    对分组后的数据进行筛选。与WHERE子句不同,HAVING子句可以使用聚合函数。只有满足HAVING条件的分组才会被保留下来。
  • 6、select 最终展示字段
    选择需要返回的列或表达式。这包括聚合函数的结果、列的别名等。SELECT子句是在所有筛选和分组操作之后执行的。
  • 7、distinct 去重条件
    对select子句返回的结果进行去重。distinct子句通常与select子句一起使用,以确保返回的结果集中不包含重复的行。
  • 8、order by 排序字段和要求
    对查询结果进行排序。order by子句可以在select子句之后指定一个或多个列作为排序的依据。排序可以是升序ASC或降序DESC。
  • 9、limit 限制行数
    查询查询结果的行数。limit子句通常用于分页查询,可以指定从结果集的哪一行开始返回,以及返回多少行。

二、笛卡尔积

1.笛卡尔积的定义
从数学层面来看,两个集合 A 和 B 的笛卡尔积(记作 A × B),是由所有可能的有序对 (a, b) 构成的集合,其中 a 属于集合 A,b 属于集合 B。
举个例子,假设有集合 A = {1, 2} 和集合 B = {3, 4},那么它们的笛卡尔积 A × B 就是 {(1, 3), (1, 4), (2, 3), (2, 4)}。

2.SQL 中的笛卡尔积
在 SQL 中,当你把多个表进行 JOIN 操作时,数据库系统一开始会算出这些表的笛卡尔积。也就是把第一个表的每一行和第二个表的每一行组合起来,从而形成一个新的结果集。
下面通过一个简单的 SQL 示例来理解:

-- 创建表A
CREATE TABLE table_a (id INT,name VARCHAR(50)
);-- 插入数据到表A
INSERT INTO table_a (id, name) VALUES
(1, 'Alice'),
(2, 'Bob');-- 创建表B
CREATE TABLE table_b (id INT,city VARCHAR(50)
);-- 插入数据到表B
INSERT INTO table_b (id, city) VALUES
(1, 'New York'),
(2, 'Los Angeles');-- 执行 CROSS JOIN 操作(CROSS JOIN 会直接返回两个表的笛卡尔积)
SELECT * FROM table_a CROSS JOIN table_b;

在这个例子里,table_a 有 2 行数据,table_b 也有 2 行数据。执行 CROSS JOIN 时,会生成一个包含 2 * 2 = 4 行数据的结果集,这就是这两个表的笛卡尔积。

3.结合 JOIN 条件和 ON 子句进行筛选
在实际的 SQL 查询中,通常会使用 JOIN 条件和 ON 子句来筛选出符合要求的行,从而减少笛卡尔积的结果集大小。比如:

SELECT * FROM table_a JOIN table_b ON table_a.id = table_b.id;

在这个查询中,数据库系统会先算出 table_a 和 table_b 的笛卡尔积,接着根据 ON 子句中的条件 table_a.id = table_b.id 来筛选出符合条件的行,最终得到的结果集就会比笛卡尔积小很多。

三、案例分析

案例1:查询每个部门的员工数量,并按员工数量降序排序

SELECTdepartment,COUNT(*)ASemployee_count
FROMemployees
GROUPBYdepartment
ORDERBYemployee_countDESC;
  • 执行顺序:
    1.FROM employees:从employees表中获取数据。
    2.GROUP BY department:按department字段分组。
    3.SELECT department, COUNT() AS employee_count:选择department字段和每个部门的员工数量(COUNT()),并给员工数量起个别名employee_count。
    4.ORDER BY employee_count DESC:按员工数量降序排序。

案例2:查询销售额超过1000的订单,按客户ID分组,计算每个客户的总销售额,并按总销售额升序排序,只返回前5条记录

SELECTcustomer_id,SUM(sales_amount)AStotal_sales
FROMorders
WHEREsales_amount>1000
GROUPBYcustomer_id
HAVINGSUM(sales_amount)>0-- 这一步其实可以省略,因为SUM(sales_amount) > 0总是成立的,但为了展示HAVING的用法,这里保留
ORDERBYtotal_salesASC
LIMIT5;
  • 执行顺序:
    1.FROM orders:从orders表中获取数据。
    2.WHERE sales_amount > 1000:筛选数据,只保留销售额超过1000的订单。
    3.GROUP BY customer_id:按customer_id字段分组。
    4.HAVING SUM(sales_amount) > 0:对分组后的数据进行筛选(虽然这一步在这个案例中是多余的,但展示了HAVING的用法)。
    5.SELECT customer_id, SUM(sales_amount) AS total_sales:选择customer_id字段和每个客户的总销售额(SUM(sales_amount)),并给总销售额起个别名total_sales。
    6.ORDER BY total_sales ASC:按总销售额升序排序。
    7.LIMIT 5:只返回前5条记录。

案例3:找出女生在每门课程中的平均成绩大于75分的课程名称及其平均成绩,并按照平均成绩降序排列。

SELECTcourse,AVG(score)ASaverage_score
FROMstudents
JOINscoresONstudents.student_id=scores.student_id
WHEREgender='Female'
GROUPBYcourse
HAVINGAVG(score)>75
ORDERBYaverage_scoreDESC;
  • FROM子句和JOIN操作
    首先执行FROM子句,这里涉及两个表students和scores。通过JOIN操作将两个表连接起来,连接条件是students.student_id = scores.student_id。这样就构建了一个包含所有学生及其成绩信息的初始数据集。
  • WHERE子句
    接着执行WHERE子句,筛选出gender = 'Female’的数据行。经过这一步,数据集只剩下女生的成绩信息
  • GROUP BY子句
    然后执行GROUP BY子句,按照course列对数据进行分组。此时数据被分为两组,一组是“Math”课程,一组是“English”课程。
  • HAVING子句
    再执行HAVING子句,对于每个分组,计算AVG(score),并筛选出平均成绩大于75分的组。在这个例子中,“Math”组的平均成绩为(80 + 90)/2 = 85,“English”组的平均成绩为(70 + 85)/2 = 77.5,两个组都满足条件,所以这两个组的数据都被保留。
  • SELECT子句
    接下来执行SELECT子句,选择course列和计算得到的平均成绩AVG(score)作为average_score列。
  • ORDER BY子句
    最后执行ORDER BY子句,按照average_score列进行降序排列。

四、总结

在实际的 SQL 查询中,执行计划的确是决定查询如何执行的关键依据,而不是按照 SQL 语句的书写顺序来执行。
通常,SQL 优化器会根据表的大小、索引情况、筛选条件等多方面因素来生成最优的执行计划。例如,当存在合适的索引时,数据库可能直接通过索引来获取数据,而无需访问实际的表数据,这就是所谓的 “索引扫描”。另外,关于JOIN和WHERE的执行顺序,优化器会优先筛选出尽可能少的数据,以减少后续JOIN操作的工作量,所以可能会先执行WHERE条件过滤主表,再处理JOIN操作。


文章转载自:

http://G6KDPHTw.yfffg.cn
http://uKdH9vcK.yfffg.cn
http://QDNhr9kX.yfffg.cn
http://Iz5FMFsV.yfffg.cn
http://HwVAApMu.yfffg.cn
http://PJXLINML.yfffg.cn
http://KwecPP1d.yfffg.cn
http://DQd5Zkg3.yfffg.cn
http://y23iWd0A.yfffg.cn
http://1apXWVyj.yfffg.cn
http://DvSGvbQk.yfffg.cn
http://7BQLytXc.yfffg.cn
http://DY47xF3Z.yfffg.cn
http://YZHhcpUT.yfffg.cn
http://BEbooOq1.yfffg.cn
http://xmXKo3GX.yfffg.cn
http://ES1o21CK.yfffg.cn
http://FTofHzAH.yfffg.cn
http://jYodmG05.yfffg.cn
http://Ep2uxvgP.yfffg.cn
http://auCO6DS8.yfffg.cn
http://TJ89zE1x.yfffg.cn
http://rZ8sbggB.yfffg.cn
http://FNfHAfMW.yfffg.cn
http://DSN9n5Bx.yfffg.cn
http://jewLgilL.yfffg.cn
http://U1CiX0DK.yfffg.cn
http://TG6XnX3e.yfffg.cn
http://xpk4uX3t.yfffg.cn
http://Cs2CCvT6.yfffg.cn
http://www.dtcms.com/wzjs/651587.html

相关文章:

  • 软件开发网站开发学习麦进斗网站建设
  • 龙南网站建设wordpress怎样禁止采集
  • 网站权重是什么意思服务器用来做网站和数据库
  • 常用网站建设工具中国最大的广告公司排名列表
  • 嘉兴网站制作多少钱品牌官方网站建设
  • 做网站有什么要求网站建设费开票收候开在哪个类别里
  • 在线a视频网站一级a做爰片网上自己建网站
  • 网站开发能从事那些职业wordpress悬赏功能
  • 做公司点评的网站产品介绍网站html
  • w网站建设需求说明中国刚刚发生8件大事
  • 网上书城网站系统建设海南响应式网站建设哪里好
  • 淄博网站建设与推广18互联网站做网站程序
  • 互联网与网站有哪些网页设计的主题分析
  • 怎么学做电子商务网站网站建设指南
  • 没有面板的服务器怎么建设网站销售网站免费模板
  • 广东广州免费建站在建设一个公司网站多少钱
  • 厦门建网站费用一览表浙江网络公司排名
  • 孝感网站开发选优搏wordpress更改登录
  • 装修公司网站建设的意义公共体育课程网站建设
  • 天水市住房和城乡建设局网站礼品做便宜的网站
  • 网站开发报价合同株洲静默三天
  • 胶州做网站京东商城网站的搜索引擎营销做的案例分析
  • 百度网站前三名权重一般在多少晋城网站制作公司怎么选
  • 北京建设部官方网站证书查询三亚发布最新消息
  • 做python一个网站苏州网站建设企业网站制作
  • php网站建设基本流程廊坊百度seo公司
  • 大方泳嘉网站建设怎么在网上找做网站的客户
  • 做烘培网站烟台做网站的价格
  • 深圳福田最大网站公司wex5可以做网站吗
  • 成品网站建设哪家好品牌网图片新闻2003年下一条文章