我和postgreSQL的二三事

今天遇到这段SQL:

select itemname,name ,pushdate,mark,queryid,'0' mtype,null departmentName from push where phone = '12345678' union select m.mess_content itemname,m.mess_patient username,m.update_date pushdate,m.mess_status||'' mark,m.mess_id queryid,'1' mtype,m.mess_depname departmentName from mess m where m.mess_phone='12345678' order by pushdate desc

有几点不是特别明白 (我承认我SQL基础超级差):
首先测试表
我和postgreSQL的二三事_第1张图片

第一个:’0’ mtype 这是什么?

select ‘0’ mtype from cities
请看结果:
我和postgreSQL的二三事_第2张图片

解释为:结果集增加名字为mtype的字段,值全部都是0当然下面的那句是’1’ mtype,所以值全部为1

第二个:m.mess_status||” 这是什么?

select ‘北京市’||city_name from cities
请看结果:
我和postgreSQL的二三事_第3张图片
select ‘北京市’||city_name hah from cities
请看结果:
我和postgreSQL的二三事_第4张图片
select city_name||’有美食’ from cities
请看结果:
我和postgreSQL的二三事_第5张图片
select city_name||’有美食’ chanmao from cities
请看结果:
我和postgreSQL的二三事_第6张图片

解释:|| 是将字符串和字段相连接
根据以上四种比较,我想大家很容易看出区别,就是要给这个列命名,不命名的话,系统自动命名

第三个:union

select itemname,name ,pushdate,mark,queryid,'0' mtype,null departmentName from push where phone = '12345678' union select m.mess_content itemname,m.mess_patient username,m.update_date pushdate,m.mess_status||'' mark,m.mess_id queryid,'1' mtype,m.mess_depname departmentName from mess m where m.mess_phone='12345678' order by pushdate desc

请看结果:
我和postgreSQL的二三事_第7张图片

**解释:当前SQL语句中解释将两个结果集累计起来,如果重复只会出现 一条记录,同时进行默认规则的排序
union(或称为联合)的作用是将多个结果合并在一起显示出来。不包括重复行,同时进行默认规则的排序。
看了union 就不得不看看union all:
union all:的作用是将多个结果合并在一起显示出来,包括重复行,不进行排序。**

 select itemname,name ,pushdate,mark,queryid,'0' mtype,null departmentName from push where phone = '12345678' union all select m.mess_content itemname,m.mess_patient username,m.update_date pushdate,m.mess_status||'' mark,m.mess_id queryid,'1' mtype,m.mess_depname departmentName from mess m where m.mess_phone='12345678' order by pushdate desc 

你可能感兴趣的:(PostgreSQL)