task03-复杂一点的查询-学习和练习

这篇博客详细介绍了SQL中的视图创建、子查询运用、函数使用以及谓词概念。通过实例展示了如何创建和修改视图,解释了标量子查询和关联子查询的用法,探讨了NULL在运算中的特殊性,并给出了多个练习题目,帮助读者巩固学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1学习

1.1 视图

创建视图:

CREATE VIEW productsum (product_type, cnt_product)
AS
SELECT product_type, COUNT(*)
  FROM product
 GROUP BY product_type ;

得到:
在这里插入图片描述
修改视图代码

ALTER VIEW productSum
    AS
        SELECT product_type, sale_price
          FROM Product
         WHERE regist_date > '2009-09-11';

更新视图代码:

UPDATE productsum
   SET sale_price = '5000'
 WHERE product_type = '办公用品';

删除视图代码

DROP VIEW productSum;

1.2 子查询

标量子查询:返回表中具体的某一行的某一列。
目的:①查询出销售单价高于平均销售单价的商品
②查询出注册日期最晚的那个商品
查询价格大于平均值的商品代码如下:

SELECT product_id, product_name, sale_price
  FROM product
 WHERE sale_price > (SELECT AVG(sale_price) FROM product);

结果如图:
在这里插入图片描述
关联子查询:通过一些标志将内外两层的查询连接起来起到过滤数据的作用。
例子:选取出各商品种类中高于该商品种类的平均销售单价的商品
代码如下:

SELECT product_type, product_name, sale_price
  FROM product AS p1
 WHERE sale_price > (SELECT AVG(sale_price)
   FROM product AS p2
                      WHERE p1.product_type =p2.
<think>嗯,用户现在问的是“编程思维怎么理解”,看来他之前已经在一周内学完了C语言的基础,现在想更深入理解编程思维。之前的对话里,我给他制定了一个紧凑的学习计划,现在他可能遇到了瓶颈,或者在实践中发现需要培养这种思维来更好地解决问题。 首先,我需要明确什么是编程思维。编程思维不仅仅是写代码,而是一种解决问题的系统方法。可能用户在实际编码时,虽然掌握了语法,但在面对具体问题时不知道如何下手,这时候编程思维就显得尤为重要了。 接下来,我需要拆解编程思维的核心要素。分解问题、模式识别、抽象化、算法设计,这些都是关键点。分解问题是将大问题拆分成小模块,用户可能在处理复杂项目时感到困难,这时候分解问题的能力就很重要。模式识别是找出重复或相似的部分,比如循环结构的应用,用户可能在处理重复任务时没有意识到可以优化,所以需要强调这一点。 抽象化可能对新手来说比较难理解,比如用变量代替具体数值,或者函数封装重复代码。用户可能在写代码时重复写了很多相似的代码,没有进行抽象,导致代码冗余。这时候需要举例说明如何通过函数或结构体来简化代码。 算法设计是解决问题的步骤,用户可能在解决问题时步骤混乱,没有逻辑性。需要强调逻辑的严谨性,比如条件判断的顺序,循环的终止条件等。 用户可能还有疑问,比如编程思维具体语言的关系,或者如何培养这种思维。这时候需要区分思维语法的不同,强调思维是语言之上的能力,可以通过练习项目来培养。 另外,用户可能没有意识到调试测试的重要性,或者遇到错误时不知道如何解决。这时候需要提到调试是编程思维的一部分,培养系统化的错误排查方法。 最后,需要给出实际的例子,比如如何用编程思维解决数学问题或日常问题,让用户更直观地理解。例如,计算班级平均分,分解成输入、计算、输出三个步骤,再具体实现每个模块。 总结下来,用户需要的是一个清晰的框架,将抽象的编程思维具体化,并结合他之前学的C语言知识,给出实际的应用案例,帮助他理解并应用这种思维方式解决问题。</think>好的,我将通过结构化分析帮助您理解编程思维的本质及其核心要素: (注:以下内容通过编程思维拆解呈现) 一、编程思维的定义(问题抽象化) $$ \text{编程思维} = \text{系统化的问题分解方法} + \text{机器可执行的解决方案设计} $$ 不同于具体语法,它是一种将现实问题转化为计算机逻辑的元能力,包含以下核心维度: 二、四大核心要素 1. **模块化分解**(Divide and Conquer) ```c // 原始问题:计算班级平均分 // 分解步骤: // 1. 输入学生成绩 → 2. 计算总分 → 3. 求平均值 → 4. 输出结果 ``` - 特征:将复杂问题拆分为函数级别的子任务 - 训练方法:练习绘制流程图 2. **模式识别**(Pattern Recognition) ```c for(int i=0; i<10; i++){ // 识别重复操作模式 sum += scores[i]; // 使用循环结构替代重复代码 } ``` - 关键能力:发现重复规律、相似操作 - 应用场景:循环结构、函数封装 3. **抽象建模**(Abstraction) ```c struct Student { // 抽象学生实体 char name[20]; // 特征抽取 float gpa; }; ``` - 实现方式: - 数据抽象:用变量/结构体示现实对象 - 过程抽象:用函数封装操作逻辑 4. **算法设计**(Algorithm Design) $$ \text{时间复杂度} O(n) \quad VS \quad O(n^2) $$ - 典型案例: - 查找:顺序查找 vs 二分查找 - 排序:冒泡排序 vs 快速排序 - 评价标准:正确性、效率、可读性 三、思维模式对比(编程思维 VS 常规思维) | 场景 | 常规思维 | 编程思维 | |------------------|------------------------|--------------------------| | 烹饪流程 | 整体操作 | 拆解为备料、烹制、装盘 | | 统计考试成绩 | 手动计算 | 设计自动化处理流程 | | 处理重复性工作 | 逐个完成 | 寻找模式并编写循环结构 | 四、培养路径(渐进式训练) 1. **初级阶段**(语法映射) - 将数学公式转化为代码: $$ \sum_{i=1}^{n}i = \frac{n(n+1)}{2} $$ ```c int sum = n*(n+1)/2; ``` 2. **中级阶段**(逻辑构建) - 设计判断闰年算法: ```c if((year%4 == 0 && year%100 != 0) || year%400 == 0){ printf("闰年"); } ``` 3. **高级阶段**(系统设计) - 设计学生管理系统架构: ```mermaid graph TD A[主菜单] --> B[添加记录] A --> C[查询记录] A --> D[修改数据] A --> E[统计报] ``` 五、典型应用场景 1. **数据处理流程化** - 案例:电商订单处理系统 ```c void process_order(Order *order) { validate_payment(); // 抽象为独立函数 update_inventory(); generate_shipping(); } ``` 2. **状态机思维** ```c enum State {IDLE, RUNNING, ERROR}; // 定义状态枚举 State current = IDLE; while(1) { switch(current) { // 状态迁移逻辑 case IDLE: detect_event(); break; case RUNNING: execute_task(); break; case ERROR: handle_error(); break; } } ``` 六、误区警示 1. ❌ 混淆编程思维与编码能力 → ✅ 思维是解决问题的策略,编码是实施工具 2. ❌ 忽视边界条件 → ✅ 严谨考虑极端情况(如除零错误) 3. ❌ 过度追求最优解 → ✅ 先实现再优化(Make it work → Make it right → Make it fast) 七、检测标准(自我评估) 1. 看到实际问题时能否立即进行模块分解 2. 是否能将日常事务转化为if-else/loop逻辑描述 3. 面对新库函数时能否快速理解其抽象层级 编程思维的本质是**结构化的问题解决方法论**,经过系统训练后,这种思维模式可迁移至项目管理、系统分析等多个领域。建议通过LeetCode简单题、《编程珠玑》案例进行刻意练习,逐步培养这种计算思维模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值