2020-09-07

出于对知识体系的庞大后有细节末枝的地方容易被遗忘,特此建立第一个博客,用于对知识体系技术的积累

1.用VC6.0进行emwin的仿真

第一步:GUIbuilder工具生成基础图形界面,保存后的代码存储在工具对应的文件夹内,名称为:FramewinDLG.c

第二步:打开下载好的仿真库,拖动后缀为.dsw的文件至VC6.0

第三步:打开ClassView旁边的fileview,显示出文件夹中的其他文件

第四步:展开 文件夹中Application 文件的分组

第五步:打开 GUIDEMO_Start.c,将此文件里面的内容全部删掉,然后将FramewinDLG.c中的内容复制替换到此处,内容末尾再加入如下代码

/*********************************************************************
*
* MainTask
*/
void MainTask(void)
{
/* 窗口自动使用存储设备 */
WM_SetCreateFlags(WM_CF_MEMDEV);
/* 初始化 */
GUI_Init();
/* 创建对话框,使用 GUIBulder5.28 生成的对话框创建函数 */
CreateFramewin();
while(1)
{
GUI_Delay(10);
}
}
*********************************************************************
第六步:点击工具栏的感叹号,即可运行代码,此时显示器中央出现代码仿真的预览串口
<think> 我们有一个需求:查询余额高于10000的所有用户的名字和余额。除了使用公共表达式(CTE)之外,我们还可以使用多种方法。 根据引用[1]中提到的银行用户表结构(假设表名为“银行用户表”,有“姓名”和“余额”字段),我们可以编写SQL语句。 常见的其他方法包括: 1. 直接使用SELECT语句的WHERE子句进行过滤。 2. 使用子查询(虽然公共表达式也是子查询的一种,但这里指其他形式的子查询,比如在FROM子句中的子查询)。 3. 使用视图(但视图并不是一次性的查询,这里我们主要讨论一次性的查询语句)。 4. 使用临时表(但同样,我们主要讨论查询语句,临时表需要创建和删除,不太适合作为单一查询)。 因此,最直接的方法就是使用简单的SELECT语句。 根据引用[2]和引用[3],我们可以写出基本的SELECT语句,注意引用[3]中使用了别名,引用[5]中使用了ORDER BY排序(虽然这里不需要排序,但我们可以选择是否排序)。 因此,我们可以这样写: 方法1:直接查询 ```sql SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000; ``` 但是,我们也可以使用子查询(虽然在这个简单需求中子查询没有必要,但为了展示多种写法): 方法2:使用FROM子句中的子查询 ```sql SELECT 姓名, 余额 FROM ( SELECT 姓名, 余额 FROM 银行用户表 ) AS 用户余额表 WHERE 余额 > 10000; ``` 方法3:我们还可以使用内联视图(实际上就是方法2)。 另外,如果我们需要对结果进行排序(例如按余额降序排列),可以加上ORDER BY子句(引用[5]): ```sql SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000 ORDER BY 余额 DESC; ``` 注意:引用[4]提到了索引的问题。如果我们在“余额”列上建立索引,那么查询效率会更高。否则,数据库可能进行全表扫描。 因此,除了公共表达式(CTE)之外,我们可以使用上述的直接查询或子查询的方式。其中,直接查询是最简单和高效的。 下面给出一个完整的例子(假设表名为`银行用户表`): ```sql -- 方法1:简单查询 SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000; -- 方法2:使用子查询(虽然在这里没有优势) SELECT 姓名, 余额 FROM ( SELECT 姓名, 余额 FROM 银行用户表 ) AS 子查询表 WHERE 余额 > 10000; -- 如果需要排序(降序) SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000 ORDER BY 余额 DESC; ``` 总结:对于这个需求,最简单的就是直接使用WHERE子句过滤。公共表达式(CTE)通常用于更复杂的查询,比如需要递归或多次引用同一个子查询结果集时。在简单查询中,直接查询即可。 注意:如果表名或字段名是英文的,那么应该使用英文,比如表名可能是`bank_account`,字段名为`name`和`balance`。但根据引用[1]中的表名和字段名,我们使用了中文。如果实际表结构是英文的,则需要修改。 另外,引用[2]提到,关键字和字段名不区分大小写,但数据严格区分大小写。不过在我们这个查询中,余额是数值,不存在大小写问题。 因此,根据用户需求,我们给出了不使用公共表达式的其他写法。 相关问题: 1. 如果余额字段包含小数,那么查询条件中是否需要考虑浮点数精度问题? 2. 当数据量很大时,如何优化这个查询? 3. 在银行系统中,查询账户余额时需要注意哪些事务隔离级别? </think>根据您的需求,我提供了三种不使用公共表达式(CTE)的SQL写法来查询余额高于10000的用户信息: ### 方法1:基础WHERE过滤(最简洁) ```sql SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000; ``` **说明**: 直接使用`WHERE`子句过滤条件,这是最高效的写法。当`余额`列有索引时,数据库会使用索引扫描(Index Scan),否则执行全表扫描(Table Scan)[^4]。 --- ### 方法2:派生表子查询(适用于复杂过滤) ```sql SELECT 姓名, 余额 FROM ( SELECT 姓名, 余额 FROM 银行用户表 ) AS 用户余额 WHERE 余额 > 10000; ``` **说明**: 通过FROM子句中的子查询创建派生表,适合需要预先处理数据的场景。注意使用`AS`为派生表命名是必须的[^2]。 --- ### 方法3:视图查询(可复用方案) ```sql -- 第一步:创建视图 CREATE VIEW 高余额用户视图 AS SELECT 姓名, 余额 FROM 银行用户表 WHERE 余额 > 10000; -- 第二步:查询视图 SELECT * FROM 高余额用户视图; ``` **说明**: 视图将查询逻辑持久化,适合需要多次使用的场景。查询视图时等同于执行视图定义的SQL语句[^2]。 --- ### 性能说明 1. **索引优化**: 在`余额`列创建索引可大幅提升查询性能: ```sql CREATE INDEX idx_余额 ON 银行用户表(余额); ``` 有索引时执行**索引范围扫描**,无索引时执行**全表扫描**[^4]。 2. **结果排序**: 如需按余额降序排列,添加: ```sql ORDER BY 余额 DESC; -- DESC表示降序[^5] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值