mysql各種join連接查詢


最近項目用到了幾次sql join查詢 來滿足銀行變態的需求;正好晚上自學時,看到了相關視頻,所以記錄下相關知識,下次再用時,根據如下圖片,便可知道 怎么寫sql;

注意點: 在join操作中的 on ... where ...  應該放哪些條件;目前理解 on 后放2表關聯部分;where后放最終數據篩選部分;

1.下圖為各種join操作的圖表解釋及sql語句

2.自測

  •   建表:分別為 分數表(sc),及學生表(student);關系為 student.student_id=sc.id ;語句如下:
    • SET NAMES utf8mb4;
      SET FOREIGN_KEY_CHECKS = 0;
      
      -- ----------------------------
      -- Table structure for sc
      -- ----------------------------
      DROP TABLE IF EXISTS `sc`;
      CREATE TABLE `sc`  (
        `id` int(11) NOT NULL,
        `score` int(255) NULL DEFAULT NULL,
        PRIMARY KEY (`id`) USING BTREE
      ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;
      
      -- ----------------------------
      -- Records of sc
      -- ----------------------------
      INSERT INTO `sc` VALUES (10, 40);
      INSERT INTO `sc` VALUES (11, 20);
      INSERT INTO `sc` VALUES (12, 30);
      
      SET FOREIGN_KEY_CHECKS = 1;
    • DROP TABLE IF EXISTS `student`;
      CREATE TABLE `student`  (
        `id` int(11) NOT NULL,
        `student_id` int(11) NULL DEFAULT NULL,
        `name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL,
        PRIMARY KEY (`id`) USING BTREE
      ) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact;
      
      -- ----------------------------
      -- Records of student
      -- ----------------------------
      INSERT INTO `student` VALUES (0, 12, 'b');
      INSERT INTO `student` VALUES (1, 11, 'a');
      INSERT INTO `student` VALUES (3, 13, 'c');
      
      SET FOREIGN_KEY_CHECKS = 1;
  • 建表數據結果如下:
  • 可以根據圖表中的sql 語句進行相關join查詢測試;

3.簡單測試2個結果:

測試第一個join 語句如下:

select student.student_id,sc.score from student LEFT JOIN sc on student.student_id=sc.id

結果為:

測試第二個join 語句如下: 

select student.student_id,sc.score from student LEFT JOIN sc on student.student_id=sc.id WHERE sc.id is null

結果為:;解析:在 第一個語句的基礎上加上 WHERE sc.id is null ;只保留sc.id 為 nul的數據,而這個數據 只有 student 和 sc 非交集部分才有;

 

 

重點為  mysql 沒有 full outer join 或者 full join;導致 要想完成 圖中的 6,7部分,必須使用 圖中1和4 或 1和5 的 union 來實現;

測試第6個join 語句如下:

select student.student_id,sc.score from student left JOIN sc on student.student_id=sc.id
UNION
select student.student_id,sc.score from student RIGHT JOIN sc on student.student_id=sc.id

結果為:

 

測試第7個join 語句如下:

select student.student_id,sc.score from student left JOIN sc on student.student_id=sc.id WHERE sc.id is null
UNION
select student.student_id,sc.score from student RIGHT JOIN sc on student.student_id=sc.id WHERE student.student_id is null

結果為:

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM