zoukankan      html  css  js  c++  java
  • 特殊用途的SQL语句

    1.SQL语句之添加序号

    语句是select Row_Number()over(order by userid ) xh,name from gbgl_ryxx_jbxx where dxbz='0' order by userid

    注意点  Row_Number()over(order by userid ) xh,    函数内部的字段必须是排序的字段

    2.SQL语句之多条数据拼接某个字段

     SQL语句 select xbmc,string_agg(jb.name,',') pinjie from gbgl_ryxx_jbxx jb where userid<100  group by xbmc;

     注意点: 子串拼接函数是分组对应,是个多的关系。  两个表一对多或者多对多,一个表就是分组

    3.SQL语句之截取长度和补充长度

    SQL语句 length(字段)=6  substr(sydw.bmbh, 0, 7)=bm.bmbh   

    截取字段获得六位长度。注意点,下标加一

     补充长度则用字符串拼接  select stuff('00000',len('00000')-len('123')+1,len('123'),'123')

    应用场景:业务分级,目录结构等。例如用某一字段标示部门编号,2个长度标示一级部门,四个长度标示二级部门。补0之后可以按照大小排序,表示父子部门

    第二种实现:建立表的自关联,设置一个字段,指向父级部门的部门编号

    4.SQL语句之连接符

    --解决因字符串拼接造成的SQL注入
    'a'||'b' ='ab'  ||相当于java的+
    like '%${bmbh}%' = like '%'||#{bmbh}||'%'  
    #在编译过程中会加上'',字符串拼接和替换的区别
    

     5.SQL语句之count()函数使用

    利用count对类型进行统计。

     6.SQL查询之封装结果集表

     注意结果集表字段的数据。

     7.SQL查询之多条件判断

    语句格式

    1 select userid,name,(case  when xbbm='0' then '' 
    2                                                     when xbbm='1' then '没有名字还要什么性别'
    3 end) as haidi from gbgl_ryxx_jbxx where userid<10;
    4 
    5 select userid,name,(case  when xbbm='0' then '' else ''
    6 end) as haidi from gbgl_ryxx_jbxx where userid<10;

    注意:end结束,多个条件筛选的子集加起来刚好是整个集合

     8.SQL语句修改之末尾加字段

    语句格式

    update user set name=name||'狗尾续貂' where xbbm=0
    

     等号可以用其它字段来代替整段内容,pgsql不可以用这种方式

    9.多表关联更新

     多表关联更新有两种方式。

    其一是

    update a,b set a.name=b.name where a.id=b.id;

    两张表关联更新,如果id对应的name相等,则不更新。如果id重复,则以表里数据前面一条的name为准。如果没有对应的id,则不更新

    其二是(建议第二种)  如果关联的字段为全部为空,建议第二种,速度更快。 

    update a set a.name=(select name from b where a.id=b.id)

    如果有id对应的name,则不更新。如果id重复,则会报错。如果没有对应的id,则会将name置空。


    10.多表字段字典转换匹配

    想要获得女歌手,男演员的名字。

    select  a.name  from 

        sex_name a,role_name b where

        a.name=b.name and

        (a.sex= '女'  and b.role='歌手') or (a.sex= '男'  and b.role='演员');

     还有一种实现可以用子查询,但不如这种。字典项比较少可以这么选择。字典项比较多的话建议加一个字典项转换的对应表做转换。

  • 相关阅读:
    linux下搭建lamp环境以及安装swoole扩展
    TP5 中引入第三方类库
    thinkphp5 查询的数据是对象时,获取原始数据方法
    thinkphp5 列表页数据分页查询3-带搜索条件
    thinkphp5 列表页数据分页查询2-带搜索条件
    thinkphp5 列表页数据分页查询-带搜索条件
    thinkphp5 怎么获取当前的模块,控制器和方法名
    限定页面执行时间,请求超时抛出异常或提示
    centos安装netcat
    redis在PHP中的基本使用案例
  • 原文地址:https://www.cnblogs.com/Xilan/p/14345761.html
Copyright © 2011-2022 走看看