mysql連接查詢中and與where的區別淺析

1. 建表

CREATE TABLE `student`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `age` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;


INSERT INTO `student` VALUES (1, '張三', 12);
INSERT INTO `student` VALUES (2, '李四', 12);
INSERT INTO `student` VALUES (3, '王五', 12);
INSERT INTO `student` VALUES (4, '趙六', 12);
INSERT INTO `student` VALUES (5, '孫七', 12);
INSERT INTO `student` VALUES (6, '王八', 12);
CREATE TABLE `grade`  (
  `id` int(11) NOT NULL,
  `sid` int(11) NULL DEFAULT NULL,
  `grade` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `grade` VALUES (1, 1, 100);
INSERT INTO `grade` VALUES (2, 2, 80);
INSERT INTO `grade` VALUES (3, 3, 99);
INSERT INTO `grade` VALUES (4, 4, 66);

2. inner join-內連接

內連接中and和where沒有區別,都是取連接後的結果進行條件篩選。

2.1 不加條件

2.2 and 條件

2.3 where 條件

3. left join – 左外連接

3.1 不加條件

3.2 and 條件

left join中以左表全匹配進行連接,之後使用and進行篩選;不符合條件的左表數據保留,右表數據為null。

3.3 where 條件

在left join 中以左表全匹配進行連接,之後以where進行篩選;隻篩選符合條件的數據。

4. right join

同3中left join,隻是基表相反。

5. 總結

  • 所有連接,使用where是對連接後符合條件的數據行進行再次的條件篩選,隻保留符合條件的數據行;
  • left join連接時,使用and以左表為主,左表數據全部保留,不符合條件的數據行右表數據為null;
  • right join連接時,使用and以右表為主,右表數據全部保留,不符合條件的數據行左表數據為null;

到此這篇關於mysql連接查詢中and與where區別的文章就介紹到這瞭,更多相關mysql連接查詢and與where內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: