with用法小结

文章转自:https://wenku.baidu.com/view/17e91c6fa98271fe910ef9ee.html
版权归原作者!


一、with表拥有某物

Mary married a man with a lot of money .
马莉嫁给了一个有着很多钱的男人。
I often dream of a big house with a nice garden .
我经常梦想有一个带花园的大房子。
The old man lived with a little dog on the lonely island .
这个老人和一条小狗住在荒岛上。

二、with表用某种工具或手段

I cut the apple with a sharp knife .
我用一把锋利的刀削平果。
Tom drew the picture with a pencil .
汤母用铅笔画画。

三、with表人与人之间的协同关系

make friends with sb
talk with sb
quarrel with sb
struggle with sb
fight with sb
play with sb
work with sb
cooperate with sb
I have been friends with Tom for ten years since we worked with each other, and I have never quarreled with him .
自从我们一起工作以来,我和汤姆已经是十年的朋友了,我们从没有吵过架。

四、with 表原因或理由

John was in bed with high fever .
约翰因发烧卧床。
He jumped up with joy .
他因高兴跳起来。
Father is often excited with wine .
父亲常因白酒变的兴奋。

五、with 表“带来”,或“带有,具有”,在…身上,在…身边之意

The girl with golden hair looks beautiful .
那个金头发的女孩看起来漂亮。
The famous director will come to the meeting with the leading actor and
actress.
那个有名的导演将带着男女主角来到会场。
A storm with a hurricane has come onto its way .
带有飓风的风暴要来了。
Do you have money with you .
身上带着钱吗?
Take the umbrella with you in case it rains .
随身带伞,以防下雨。

六、with表想法,信念,态度与…一致

I agree with you on how to deal with it .
关于此事如何处理,我同意你的看法。
I believe with the headmaster that a good teacher should not only teach a student what to learn but also how to learn it .
我相信校长所说,一个好老师不但教学生学什么,而且应教学生怎么去学。

七、with表示让步,“虽有,尽管”

With all his money and fame, he is not happy .
有着钱和名誉,他还是不快乐。
With good teachers and warmhearted classmates ,the new comer feels lonely .
虽有着好老师和热心的同学,这个新来的还是感觉孤独。

八、with表同时,或同一方向,“随着”

The temperature of cold-blooded animals change with the temperature of the surroundings .
冷血动物的体温随着周围的环境的改变而变化。
The big ship is sailing with the wind .
这个大船正随风向航行。
And with the last words , she turned away.
随着最后一句话说完,他转身离开了。

九、with的复合结构表行为方式或伴随情况

1、 with + n/pron + adj.
He left the room with the door open .
门开着,他就离开了屋子。
Don’t talk with your mouse full .
嘴里满是东西时不要说话。

2、with + n/pron + adv.
With the radio on ,grandma slept deeply in the chair .
收音机开者,奶奶在椅子里沉沉的睡着。
With Tom away , I always feel lonely .
汤母不在,我一直感觉孤独。

3、with + n/pron + done
The fellow stood there with his hands crossed .
这个家伙两手交叉,站在那里。
The peasants have a good harvest with all the crops got in .
庄稼都收割了,农民们有了一个好收成。

4、with + n/pron + to do
With this book to help you , you can finish your work as soon as possible .
有这本书来帮忙,你能尽快完成工作。
With so many problems to settle ,the new manager was too worried to eat anything .
有着太多问题要去处理,新经理担忧的吃不下任何东西。

5、with + n/pron + n
The old man looks down upon everyone ,with his son chairman of the company .
因为他儿子是公司的主席,这个老头瞧不起任何人。
He was taken to hospital with his legs a mass of bleeding flesh .
他被抬到医院,他的腿血肉模糊。

6、with + n/pron + 介词短语
The man left the meeting with a book in his hand .
这个男人手里拿着书离开了会议。
The woman with a diamond necklace around the neck must be wealthy .
那个脖子上带项链的女人一定很有钱。

十、with其他用法主要出现在一些常用词和习语中,记住其特定含义即可。

It is a long time not to get in touch with Tom.
很长时间没有和汤母取得联系了。
Down with imperialism.
打倒帝国主义。

<think>首先,用户的问题是:“我想了解 PostgreSQL 中 WITH 子句的使用方法 请问PostgreSQL WITH 子句用法详解”。我需要基于提供的引用内容来回答。 系统级指令: - 所有行内数学表达式必须使用 `$...$` 格式。 - 独立公式使用 `$$...$$` 格式并单独成段。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,如 `[^1]`。 - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠,参考提供的引用。 提供的引用是关于 PostgreSQL WITH 子句的: - [^1]: 描述了 WITH 子句的基本概念和语法。 - [^2]: 给出了一个简单的查询示例。 - [^3]: 类似 [^1],解释 WITH 子句的作用。 - [^4]: 提供了一个实际使用 WITH 子句的查询示例。 - [^5]: 展示了 WITH 子句的递归用法。 由于用户的问题是关于 WITH 子句的用法详解,我将基于这些引用构建一个详细的解释。 回答结构: 1. **介绍 WITH 子句**:解释它是什么、为什么使用它。 2. **基本语法**:展示语法格式。 3. **示例**:提供简单和复杂示例。 4. **递归用法**:解释递归 WITH 子句。 5. **总结**:强调优点和注意事项。 6. **生成相关问题**:在最后添加相关问题。 使用中文回答,并确保行内数学表达式正确(如果有的话)。在 PostgreSQL 上下文中,数学表达式可能不常见,但如果有,我会处理。 现在,构建回答: - **开头**:简要介绍 WITH 子句。 - **主体**: - 解释概念:WITH 子句用于定义临时表(CTE),便于查询分解。 - 语法:基于 [^1] 和 [^3]。 - 示例:使用 [^2] 和 [^4] 的示例。 - 递归:基于 [^5]。 - **结尾**:总结优点。 - **相关问题**:生成 3-5 个相关问题。 引用标识:在引用内容后添加 `[^n]`。 确保回答真实可靠:只使用提供的信息,避免添加外部知识。</think>### PostgreSQL WITH 子句用法详解 PostgreSQL 的 `WITH` 子句(也称为公共表表达式,Common Table Expressions, CTE)是一种强大的查询工具,用于将复杂查询分解为更简单的临时结果集。它定义了一个临时表,该表仅在当前查询中有效,类似于临时视图,但无需实际创建数据库对象。`WITH` 子句适用于 `SELECT`、`INSERT`、`UPDATE` 和 `DELETE` 语句,能显著提高代码可读性和性能。以下我将逐步解释其用法,包括基本语法、示例和高级特性。 #### 1. **基本概念和语法** - **作用**:`WITH` 子句将子查询的结果命名为一个临时表(CTE),允许在主查询中多次引用它。这避免了重复执行子查询,简化了复杂逻辑,特别适合聚合操作或递归查询[^1][^3]。 - **语法格式**: ```sql WITH cte_name AS ( SELECT ... -- 子查询定义临时表 ) SELECT ... FROM cte_name WHERE ... -- 主查询引用临时表 ``` - `cte_name` 是临时表的名称。 - 子查询必须写在括号内,且 `WITH` 子句必须在主查询之前定义[^1][^3]。 - 支持多个 CTE,用逗号分隔: ```sql WITH cte1 AS (...), cte2 AS (...) SELECT ... FROM cte1 JOIN cte2 ... ``` #### 2. **简单使用示例** - **场景**:查询数据时,将基础表封装为 CTE,便于后续操作。 - **示例代码**(基于引用[^2]): ```sql -- 定义 CTE 名称为 cte,包含 company 表的所有数据 WITH cte AS ( SELECT * FROM company ) -- 主查询直接引用 cte SELECT * FROM cte; ``` - **结果**:返回 `company` 表的所有记录,如 `id, name, age, address, salary` 等字段[^2]。 - **优点**:CTE 将查询逻辑分离,使代码更易维护。例如,在聚合场景中,CTE 只需计算一次聚合结果,避免重复计算[^1][^4]。 - **实际应用示例**(基于引用[^4]): ```sql -- 查询 2017.05.01 至 2017.05.08 期间玩家的充值总额 WITH u AS ( SELECT id, SUM(amount) AS num FROM pay WHERE pay_time >= 1493568000 AND pay_time < 1494172800 GROUP BY id ) SELECT u.id, pinfo.sid, u.num FROM u JOIN pinfo ON u.id = pinfo.id; ``` - **解释**:CTE `u` 计算每个玩家的充值总和 (`num`),主查询通过 `JOIN` 关联其他表,输出更清晰[^4]。 #### 3. **递归 WITH 子句** - **作用**:处理层次结构数据(如树形结构),例如查找所有子节点或父节点。递归 CTE 包含两个部分:基础查询和递归查询,使用 `UNION ALL` 连接[^5]。 - **语法格式**: ```sql WITH RECURSIVE cte_name AS ( SELECT ... -- 基础查询(起点) UNION ALL SELECT ... FROM cte_name WHERE ... -- 递归查询(引用自身) ) SELECT ... FROM cte_name; ``` - `RECURSIVE` 关键字必须显式声明[^5]。 - **示例**:查询浙江省及其所有下级县市(基于引用[^5]): ```sql WITH RECURSIVE cte AS ( -- 基础查询:选择浙江省(id='002') SELECT id, name, pid FROM public.tb WHERE id = '002' UNION ALL -- 递归查询:通过 pid 关联下级节点 SELECT k.id, k.name, k.pid FROM public.tb k INNER JOIN cte c ON c.id = k.pid ) SELECT id, name FROM cte; ``` - **结果**:返回浙江省及其所有子级行政区的 `id` 和 `name`。 - **另一个示例**:查询根省份(如 `pid='0'`): ```sql WITH RECURSIVE p AS ( SELECT a.* FROM public.tb a WHERE a.id = '016' UNION ALL SELECT b.* FROM public.tb b, p WHERE b.id = p.pid ) SELECT * FROM p WHERE p.pid = '0'; ``` 这展示了从特定节点向上回溯到根节点的过程[^5]。 #### 4. **优点和注意事项** - **优点**: - **可读性**:将复杂查询拆分为模块化部分。 - **性能**:CTE 仅计算一次,减少重复子查询开销[^1][^3]。 - **灵活性**:支持递归操作,适用于层级数据。 - **替代临时表**:无需创建物理临时表,节省资源[^1]。 - **注意事项**: - CTE 仅在当前查询中有效,不可跨会话使用。 - 递归查询需谨慎避免无限循环(例如,通过设置终止条件)。 - 在大型数据集上,性能可能受递归深度影响,需优化索引[^5]。 #### 5. **总结** PostgreSQL 的 `WITH` 子句通过定义临时 CTE 简化查询逻辑,特别适合聚合、数据分解和递归场景。它提升了代码可维护性,同时优化了执行效率。实际使用时,建议从简单查询开始,逐步引入递归以满足复杂需求。更多官方文档可参考 [PostgreSQL 官方手册](https://www.postgresql.org/docs/current/queries-with.html)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值