MySQL随笔小记

2018-06-01  本文已影响0人  王康健_0124
小记 1. 多表关联不显示重复列

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

SELECT * FROM Student  
INNER JOIN SC USING(SID) 
INNER JOIN Course USING(CID)

结果:

查询学数学、语文的学生之差
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 的使用方法

按行数做筛选查询

小记 3. insert into select
  • 简介 : 把查出的数据,一一对应的插入到一张表中!可批量插入

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

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

小记 5. case when .. then
student
SELECT sid,sname,sage,(
    CASE ssex WHEN "1" THEN "男" 
              WHEN "2" THEN "女"
    ELSE "人妖" END) 性别 
    FROM Student

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 ;
上一篇下一篇

猜你喜欢

热点阅读