MySQL查询技巧

1.行转列

SELECT user_name,
    MAX(CASE course WHEN "math" THEN score ELSE 0 END) AS "math", 
    MAX(CASE course WHEN "English" THEN score ELSE 0 END) AS "English", 
    MAX(CASE course WHEN "Chinese" THEN score ELSE 0 END) AS "Chinese"
    FROM tb GROUP BY user_name

2.列转行

select user_name, 'math' course, math_score as score from tb
    union select user_name, 'English' course English_score as score from tb
    union select user_name, 'Chinese' course Chinese_score as score from tb
    order by user_name, course;

3.在子查询中实现多列过滤

  • 单列:
select * from person where name in (select name from job)
  • 多列:
select * from person where(name, sex) in (select name, sex from job)

4.同一属性的多值过滤

select a.no, a.name, b.subject, b.score, c.subject, c.score from student a 
    join stscore b on a.no = b.stno 
    join stscore c on b.stno = c.stno
    and b.subject='math' and b.score>85 and c.subject ='English' and c.score>85;
  • 使用关联进行查询
select a.name, b.subject, b.score, c.subject, c.score, d.subject, d.score from student a
  left join stscore b on a.no = b.stno and b.subject = 'math' and b.score > 85 
  left join stscore c on a.no = c.stno and c.subject = 'English' and c.score > 85
  left join stscore d on a.no = d.stno and d.subject = 'Chinese' and d.score > 85
  where(case when b.subject is not null then 1 else 0 end) +
       (case when c.subject is not null then 1 else 0 end) +
       (case when d.subject is not null then 1 else 0 end) >= 2
  • 使用Group by实现查询
select a.name from student a join stscore b on a.id = b.stno where
    b.subject in ('math', 'English', 'chinese') and b.score > 0 
    group by a.name having count(*) >= 2

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,797评论 0 44
  • 前面的章节我们介绍了如何设计最优的库表结构、 如何建立最好的索引, 这些对于高性能来说是必不可少的。 但这些还不够...
    好好学习Sun阅读 2,689评论 0 38
  • 手动不易,转发请注明出处 --Trance 数据库系统命令: (1).查看存储过程状态:show pro...
    Trance_b54c阅读 1,699评论 0 8
  • 今天看到一位朋友写的mysql笔记总结,觉得写的很详细很用心,这里转载一下,供大家参考下,也希望大家能关注他原文地...
    信仰与初衷阅读 4,759评论 0 30
  • 我不知道定闹钟有什么实质性意义、可我还是每天固定把手机里闹钟模式开启、其实、它从来没有叫醒过我、我都开始怀...
    科恩先生阅读 245评论 0 0