今天遇到这段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基础超级差):
首先测试表
第一个:’0’ mtype 这是什么?
select ‘0’ mtype from cities
请看结果:
解释为:结果集增加名字为mtype的字段,值全部都是0当然下面的那句是’1’ mtype,所以值全部为1
第二个:m.mess_status||” 这是什么?
select ‘北京市’||city_name from cities
请看结果:
select ‘北京市’||city_name hah from cities
请看结果:
select city_name||’有美食’ from cities
请看结果:
select city_name||’有美食’ chanmao from cities
请看结果:
解释:|| 是将字符串和字段相连接
根据以上四种比较,我想大家很容易看出区别,就是要给这个列命名,不命名的话,系统自动命名
第三个: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
请看结果:
**解释:当前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