一篇文章讀懂MySQL的各種聯合查詢

一篇文章讀懂MySQL的各種聯合查詢

聯合查詢是指將兩個或兩個以上的表的數據根據一定的條件合併在一起!

聯合查詢主要有以下幾種方式:

  1. 全連接:將一張表的數據與另外一張表的數據彼此交叉聯合查詢出來
    舉例如下:
    先建兩張表:
CREATE TABLE `t_dept` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `deptName` varchar(30) DEFAULT NULL,
  `address` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8`
CREATE TABLE `t_emp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` int(3) DEFAULT NULL,
  `sex` varchar(255) DEFAULT NULL COMMENT '性別',
  `deptId` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_dept_id` (`deptId`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8

插入數據:

INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('3', '令狐沖', '24', NULL, '1');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('4', '洪七公', '70', NULL, '2');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('5', '喬峯', '35', NULL, '2');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('6', '滅絕師太', '70', NULL, '3');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('7', '周芷若', '20', NULL, '3');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('8', '張三丰', '100', NULL, '4');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('9', '張無忌', '25', NULL, '5');
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('10', '韋小寶', '18', NULL, NULL);
INSERT INTO `t_emp` (`id`, `name`, `age`, `sex`, `deptId`) VALUES ('26', 'lin', '12', NULL, '12');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('1', '華山', '華山');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('2', '丐幫', '洛陽');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('3', '峨眉', '峨眉山');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('4', '武當', '武當山');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('5', '明教', '光明頂');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('6', '少林', '少林寺');
INSERT INTO `t_dept` (`id`, `deptName`, `address`) VALUES ('7', '華山', '北京');

全連接是將表1的數據一條一條的與表2的數據進行拼接,產生table1table2條數據
全連接測試:

可以看到,表的數據是7
9條,字段的個數是3+3個,不過這種查詢沒什麼意義,讓我們來看一下內連接;

  1. 內連接
    內連接進行查詢的過程是:將表A的數據一條一條拿出來跟表B的數據進行對比,滿足條件的數據就保留下來
    測試如下:
    在這裏插入圖片描述

  2. 外連接:外連接有兩種類型,左外連接和右外連接,外連接和內連接的區別是,無論表A與表B是否有符合條件的數據,主表都會保留,這裏的主表是指左連接時左邊的表,右連接時右邊的表;
    1). 左連接:關鍵字是left join,直接看數據,更好理解
    在這裏插入圖片描述
    可以看到,左表(主表)的數據都保留下來了

2). 右連接
在這裏插入圖片描述
可以看到,右表(主表)的數據都保留下來了

介紹一下using關鍵字:

連接過程:
1、在進行連接查詢中,使用on的地方就可以用using來代替,不過前提是,進行聯合的條件的字段是同名的
2、如果使用using關鍵字來進行聯合,最終相同的字段只會顯示一個!
在這裏插入圖片描述

好了,今天的內容就到此爲止了,後續會不斷的更新,歡迎大家點贊關注!

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