美文网首页
MySQL随笔小记

MySQL随笔小记

作者: 王康健_0124 | 来源:发表于2018-06-01 16:39 被阅读0次
    小记 1. 多表关联不显示重复列

    使用:USING();
    一般我们做关联查询的时候,都是select * from table1 inner join table2 on table1.XX=table2.XX,这样查询出的结果在展现的时候是有相同字段的,如果不想要的话,那么我们可以拿using(XX)取代 table1.XX=table2.XX,一样可以达到关联效果ヾ(◍°∇°◍)ノ゙
    并且不需要给表起别名哦!

    • 多表关联:用USING(相同列名) ,会去除相同列名并形成新的视图,所以筛选的时候不需要用表名.列名的方式
    SELECT * FROM Student  
    INNER JOIN SC USING(SID) 
    INNER JOIN Course USING(CID)
    

    结果:

    • 加判断的using()语句!
    查询学数学、语文的学生之差
    SELECT MAX(Sname),SUM(score) FROM Student  
    INNER JOIN SC USING(SID) 
    INNER JOIN Course USING(CID)
    WHERE Ssex="男" AND Cname IN("数学","语文") GROUP BY SID
    

    小记 2. top 和 limit 的使用方法

    按行数做筛选查询

    • MySQL写法 : limit
      table中的数据,从第10行开始顺位展现,一共展现两条!展现第11和第12行
      select * from table limit 10,2;

    • SQLserver:top
      table中的数据只展现10行
      select top 10 * from table;

    • SqlServer中如果要实现第10到12行这样中间行,这里需要用个嵌套;
      select top 12* from table where id not in(select top 10 id from table )
      意思就是:
      ① 先查询出top 10(前10行的id)
      ② 然后查询出前12行
      ③ 12行中排除id不等于前10行查询的出i
      那么就剩下11和12行的数据了!
    小记 3. insert into select
    • 简介 : 把查出的数据,一一对应的插入到一张表中!可批量插入
    • 格式: insert into table1 select * from table 2
      可以需要插什么字段,就把*改成需要的字段,与table1的列一一对应就OK了
      如下:
      单个数据的插入方式:
      insert into student (id,name,age,...) value(new(id),"张三",15,...)
      可以大批量插入方式:
      insert into table1(id,name,age) select new(id),字段名,字段名 from table2 inner join table3
      注意:
      ① 自己要熟悉table1中的字段,知道自己要插什么数据,数据是什么类型的
      ② 在select * from 中间的*,改成从table2和table3中查询出
      想要的数据的列名,要与想插入的表中字段一一对应,自增的列我们用new(id)代替
      实际SQL如下:

    select 后面的字段与上面的一一对应的,@XXXX是我引用了上面的变量,主要看一下格式!

    小记 4. UNION 的使用(并集)
    SELECT id FROM student
    UNION
    SELECT Stu_id FROM  score;
    

    小记 5. case when .. then
    • 如下图进行操作演示!
    student
    • ① 表中的sex使用数字展现的,查询的时候希望用中文展现
    SELECT sid,sname,sage,(
        CASE ssex WHEN "1" THEN "男" 
                  WHEN "2" THEN "女"
        ELSE "人妖" END) 性别 
        FROM Student
    
    
    • 执行效果视图
    • ② 将sum与case结合使用,可以实现分段统计。
      如果现在希望将上表中各种性别的人数进行统计,sql语句如下:两种方法
    SELECT
          SUM(CASE Ssex WHEN 1 THEN 1 ELSE 0 END)男性,
          SUM(CASE Ssex WHEN 2 THEN 1 ELSE 0 END)女性,
          SUM(CASE WHEN  Ssex<>1 AND Ssex THEN 1 ELSE 0 END)性别为空
        FROM Student;
     ------------------------------------------------------------------
    SELECT
          COUNT(CASE WHEN Ssex=1 THEN 1 END)男性,
          COUNT(CASE WHEN Ssex=2 THEN 1 END)女,
          COUNT(CASE WHEN Ssex <>1 AND Ssex<>2 THEN 1 END)性别为空
        FROM users u;
    

    SUM(CASE Ssex WHEN 1 THEN 1 ELSE 0 END)男性,

    1. CASE Ssex : 确定了要改别的哪列,CASE 列名
    2. WHEN 1: 确定要统计的某个字段值 ,WHEN 字段值
    3. THEN 1: 把WHEN确认的字段值都给改成数字1 ,THEN 1
    4. ELSE 0:不是WHEN 选中的字段值,都给改成数字0
    5. END : 这个CASE结束
    6. sum :把这个值对应1进行相加,统计出值在当前表中有几个
    7. sum() 男性: 给这sum算出来的结果,起个别名

    COUNT(CASE WHEN Ssex=1 THEN 1 END)男性,

    1. CASE WHEN Ssex=1 :把Ssex=1 的所有的值给筛选出来
    2. THEN 1 :筛选的值给存到THEN 1中,相当于另一列中,然后才能count
    3. END : 这个CASE结束
    4. count() 男性: 统计Ssex=1 的数据有多少条记录,用COUNT(),然后取个别名展现
    - 区域性筛选
    SELECT id,
      (
        CASE
          WHEN id > 10 
          THEN "及格" 
          ELSE "不及格" 
        END
      ) FROM t_merchant_info ;
    

    相关文章

      网友评论

          本文标题:MySQL随笔小记

          本文链接:https://www.haomeiwen.com/subject/eujksftx.html