Mysql左連接left join on與右連接 right join on,內連接union區別

數據庫中建立了兩張表:
tb_stu表:

DROP TABLE IF EXISTS `tb_stu`;
CREATE TABLE `tb_stu` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) DEFAULT NULL,
  `sex` varchar(5) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tb_stu
-- ----------------------------
INSERT INTO `tb_stu` VALUES ('1', 'a', '男');
INSERT INTO `tb_stu` VALUES ('2', 'b', '女');
INSERT INTO `tb_stu` VALUES ('3', 'c', '男');
INSERT INTO `tb_stu` VALUES ('4', 'd', '男');
INSERT INTO `tb_stu` VALUES ('5', 'e', '女');

tb_school表:

DROP TABLE IF EXISTS `tb_school`;
CREATE TABLE `tb_school` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `name` varchar(15) DEFAULT NULL,
  `school` varchar(15) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tb_school
-- ----------------------------
INSERT INTO `tb_school` VALUES ('1', '1', '1');
INSERT INTO `tb_school` VALUES ('2', '2', '2');
INSERT INTO `tb_school` VALUES ('3', '3', '3');
INSERT INTO `tb_school` VALUES ('4', '4', '4');
INSERT INTO `tb_school` VALUES ('5', '5', '5');
INSERT INTO `tb_school` VALUES ('6', 'a', 'a');
INSERT INTO `tb_school` VALUES ('7', 'b', 'b');
INSERT INTO `tb_school` VALUES ('8', 'c', 'c');
INSERT INTO `tb_school` VALUES ('9', 'd', 'd');
INSERT INTO `tb_school` VALUES ('10', 'e', 'e');

表的結構如下:
這裏寫圖片描述
或者這樣查看
這裏寫圖片描述
查看錶的結構命令是:

explain tb_school(表名);
或者
show colunms from tb_stu(表名);
或者
mysql> use information_schema
Database changed
mysql> select * from columns where table_name='tb_stu';

表tb_stu有五條數據,表tb_school有十條數據。
其中tb_stu 和 tb_school 相同的字段有五條相同是數據。
現在通過左連接查詢:

SELECT
    a.id, a.name,a.sex,
    b.id as b_id,
    b.name as b_name,
b.school
FROM
    tb_stu a
LEFT JOIN tb_school b ON a.name = b.name

這裏寫圖片描述
從圖中看到通過左連接查詢結果有五條數據。
總結:左連接查詢是以左表爲基表,其中 on 是條件。有兩張表或者多張表中有相同的字段纔會查詢出來。

Mysql 有連接:

SELECT
    a.id, a.name,a.sex,
    b.id as b_id,
    b.name as b_name,
b.school
FROM
    tb_stu a
RIGHT JOIN tb_school b ON a.name = b.name

這裏寫圖片描述
總結:從查詢結果可以看到,右連接是以右邊爲基表,on 的條件不管有沒有,都會以右連接的表爲基表,故此,查詢結果是10條記錄。

內連接:

SELECT
    a.id, a.name,a.sex,
    b.id as b_id,
    b.name as b_name,
b.school
FROM
    tb_stu a
INNER  JOIN tb_school b ON a.name = b.name

這裏寫圖片描述
總結:內連接是將表中相同的條件查詢出來

union關鍵字用法:

SELECT
    a.id,
    a.name,
    a.sex
FROM
    tb_stu a
    GROUP BY
    a.name
UNION
    SELECT
        b.id AS b_id,
        b.name AS b_name,
        b.school
    FROM
        tb_school b
GROUP BY
b.name

這裏寫圖片描述
從內連接查詢結果可以看到:查詢總記錄數是15。
總結:內連接是將兩張表中所有的結果都查詢出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章