zoukankan      html  css  js  c++  java
  • mysql联合查询

    JOIN 按照功能大致分为如下三类:

    • INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
    • LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
    • RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。

    1,首先创建2个表,一个是student表,一个grades表。

    生成student表sql:

    DROP TABLE IF EXISTS `student`;
    CREATE TABLE `student` (
      `id` int(11) NOT NULL,
      `name` varchar(30) NOT NULL,
      `sex` enum('boy','girl') DEFAULT NULL,
      `age` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    
    INSERT INTO `student` VALUES (1, 'aaa', 'boy', 10);
    INSERT INTO `student` VALUES (2, 'bbb', 'girl', 10);
    INSERT INTO `student` VALUES (3, 'ccc', 'boy', 10);
    INSERT INTO `student` VALUES (4, 'ddd', 'boy', 10);
    INSERT INTO `student` VALUES (5, 'eee', 'boy', 20);
    INSERT INTO `student` VALUES (6, 'fff', 'boy', 18);

     

    生成grades表sql:

    DROP TABLE IF EXISTS `grades`;
    CREATE TABLE `grades` (
      `id` int(11) NOT NULL,
      `math` int(11) NOT NULL,
      `chinese` int(11) NOT NULL,
      `english` int(11) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
    
    
    INSERT INTO `grades` VALUES (1, 90, 94, 95);
    INSERT INTO `grades` VALUES (2, 100, 30, 88);
    INSERT INTO `grades` VALUES (3, 120, 86, 40);
    INSERT INTO `grades` VALUES (4, 100, 22, 88);
    INSERT INTO `grades` VALUES (7, 94, 90, 90);
    INSERT INTO `grades` VALUES (8, 98, 33, 96);
    

      

    创建表完成,如上述图片。 

     一,inner join 内查询

    1,查询student和grades id相等用户

    select student.name,grades.* from student,grades where student.id=grades.id;
    

     当然使用联合查询中的内连查询 inner join  类似交集

    select student.name,grades.* from student inner join grades on student.id=grades.id;

    2,查询指定用户的所有成绩。

    select student.name,grades.* from student,grades where student.id=grades.id and student.name='aaa';
    

      

    二,left join 左查询,从左表返回所有的行,如果右表中没有匹配则以NULL补全.

    select student.name,grades.math from student left join grades  on student.id=grades.id;

    三,right join (右查询) 从右表返回所有的行,如果左表中没有匹配则以NULL补全

    select student.name,grades.math from student right join  grades on student.id=grades.id;     
    

      

    四,full join (mysql不存在,orcale支持),但是可以使用union来支持。有点像集合中的并集。

    select student.name,grades.math from student right join  grades on student.id=grades.id union select student.name,grades.math from student left join grades on student.id=grades.id;
    

      

  • 相关阅读:
    理想团队模式构建的设想以及对软件流程的理解
    一、环境搭建 之 Windows10 安装 python3.5.2
    Codeforces1176A(A题)Divide it!
    Codeforces1144A(A题)Diverse Strings
    Codeforces1144B(B题)Parity Alternated Deletions
    Codeforces1144C(C题)Two Shuffled Sequences
    Codeforces1144D(D题)Equalize Them All
    Codeforces1157A(A题)Reachable Numbers
    Codeforces1157B(B题)Long Number
    Codeforces1141E(E题)Superhero Battle
  • 原文地址:https://www.cnblogs.com/lin1/p/9013651.html
Copyright © 2011-2022 走看看