一个例子找回SQL查询语句的感觉

因为已经有过一定的SQL语言基础,基本的增删查改都会,但是最近的工作涉及到一个SQL的视图的内容。因此有想法开始记录一下自己的能力。


使用的数据库为:Postgresql

查看数据库的工具为:Navicat for postgresql


于是视图的定义为:

SELECT record.id,
record.record,
form."time",
dic.name AS intent,
form.enrollmentid
FROM (((apply_form_record record
LEFT JOIN apply_form form ON (((form.id)::text = (record.applyformid)::text)))
LEFT JOIN enrollment enroll ON (((enroll.id)::text = (form.enrollmentid)::text)))
LEFT JOIN sys_data_dictionary dic ON (((dic.id)::text = (enroll.intentid)::text)))
UNION ALL
SELECT cl.id,
cl.record,
cl.hittime AS "time",
dic.name AS intent,
cl.enrollid AS enrollmentid
FROM ((clicks cl
LEFT JOIN enrollment enroll ON (((enroll.id)::text = (cl.enrollid)::text)))
LEFT JOIN sys_data_dictionary dic ON (((dic.id)::text = (enroll.intentid)::text)));


这是个视图。

已经几乎忘记SQL视图是什么鬼了,于是百度一下。

得知,其实也就是一个虚拟表

有几个不太懂的地方

1.dic.name AS intent

其实就是在查询的时候把dic.name叫做intent,仅此而已。

2.LEFT JOIN

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

3.UNION ALL

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。


注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值