关于sql的一些小记录

1 关于like

  like一般用于where中 可以搭配通配符使用  %  _  [ ](字符串列表,匹配在其中的字符)  [!] [^] (不在其中的)

Alias

  为表或列名设置别名 

3.join

  Inner join 内连  将两个表的相匹配的数据输出

  left join 左连  会将左表的数据完全输出 无论有没有被匹配 (左表就是被链接的那个表  table1 left join table2  table1就是左表)

  right join 右连 输出所有右表的数据

  full join 全连 输出所有的数据 无论在两个表中有没有相互匹配 如果没有匹配就单独输出

LastNameFirstNameOrderNo
Adams John 2456
Carter Thomas 7895
Carter Thomas 4678
Bush George  
    4764
表一数据 表一数据 表二数据

  4. union

  将两个查询的结果集结合 可以在外面在套用一层sql语句 union不会输出重复的数据 想要输出重复的数据的时候可以使用 union all

  select * from table1 where name like 'a%'

  union 

  select * from table1 where name like 'b%' and sex = 1

   可以连接一个表查询的数据也可以连接不同的表的数据 但是查出来的数据要求相同的列 列要有相似的数据类型 且顺序也要相同(明了一点就是吧两个结构相同但是数据不一样的表拼接在一起)

  

  5.if 和 case when 

   if (判断,成立输出,不成立输出)

     case when 

    SELECT game_name,os_type,(

     case WHEN os_type = 1 THEN "IOS"
       WHEN os_type = 2 THEN "Andriod"
       ELSE "异常数据" END
     ) AS "系统"  from game

    这里如果想判断 null 需要注意sql数据库中null的特殊性 

    (case when 的一个小技巧  可以用来统计同一个字段的不同值的数量  之前想统计的时候没想到方法,后来注意到case when函数了之后想到的)

        SELECT

          sum( CASE WHEN os_type = 1 THEN 1 ELSE 0 END ) AS "IOS数量",
          sum( CASE WHEN os_type = 2 THEN 1 ELSE 0 END ) AS "Andriod数量",
          count(*) AS "总数量"
        FROM
          `game`

  6. 排名关键字

    

    一、ROW_NUMBER()
      Row_number() 在排名是序号 连续 不重复,即使遇到表中的两个一样的数值亦是如此

      select *,row_number() OVER(order by number ) as row_num from num

 

   二、rank()
      Rank() 函数会把要求排序的值相同的归为一组且每组序号一样,排序不会连续执行      

      select *,rank() OVER(order by number ) as row_num from num


   三、dense_rank()
      Dense_rank() 排序是连续的,也会把相同的值分为一组且每组排序号一样

      select *,dense_rank() OVER(order by number ) as row_num from num


   四、ntile()
      Ntile(group_num) 将所有记录分成group_num个组,每组序号一样

      select *,ntile(2) OVER(order by number ) as row_num from num

   7.关于datetime字段的默认值问题

    不知道是navicat的问题还是其他问题,用到datetime字段的时候不想它为null,又想给个默认值(之前一直用时间戳来记录时间的,突然用这个datetime字段),一般是用的CURRENT_TIMESTAMP,但是不知道为什么,navicat创建的时候一直报错,这里我的解决办法是先把数据库设计好,然后在navicat的sql预览中将sql保存,将datetime格式的字段修改为如下样子:

      `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP() COMMENT '添加时间',

    再直接运行sql就好了,创建成功

posted @ 2021-04-25 14:27  缘来是你~~~  阅读(68)  评论(0)    收藏  举报