您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān)什么是Java中的表連接查詢,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
1、什么是表連接查詢?
(1)數(shù)據(jù)準備
# 創(chuàng)建部門表
create table dept(
id int primary key auto_increment,
name varchar(20)
)
insert into dept (name) values ('開發(fā)部'),('市場部'),('財務(wù)部');
# 創(chuàng)建員工表
create table emp (
id int primary key auto_increment,
name varchar(10),
gender char(1), -- 性別
salary double, -- 工資
join_date date, -- 入職日期
dept_id int,
foreign key (dept_id) references dept(id) -- 外鍵,關(guān)聯(lián)部門表(部門表的主鍵)
)
insert into emp(name,gender,salary,join_date,dept_id) values('孫悟空','男',7200,'2013-02-24',1);
insert into emp(name,gender,salary,join_date,dept_id) values('豬八戒','男',3600,'2010-12-02',2);
insert into emp(name,gender,salary,join_date,dept_id) values('唐僧','男',9000,'2008-08-08',2);
insert into emp(name,gender,salary,join_date,dept_id) values('白骨精','女',5000,'2015-10-07',3);
insert into emp(name,gender,salary,join_date,dept_id) values('蜘蛛精','女',4500,'2011-03-14',1);
(2)多表查詢的作用
比如:我們想查詢孫悟空的名字和他所在的部門的名字,則需要使用多表查詢。如果一條SQL語句查詢多張表,因為查詢結(jié)果在多張不同的表中。每張表取1列或多列。
(3)多表查詢的分類
多表查詢分為內(nèi)連接和外連接。內(nèi)連接又分為隱式內(nèi)連接和顯示內(nèi)連接。而外連接又分為左外連接和右外連接。
2、笛卡爾積現(xiàn)象
(1)什么是笛卡爾積現(xiàn)象
-- 需求:查詢所有的員工和所有的部門
select * from emp,dept;
(2)如何清除笛卡爾積現(xiàn)象的影響
不是所有的數(shù)據(jù)組合都是有用的,只有員工表.dept_id = 部門表.id 的數(shù)據(jù)才是有用的。所以需要通過條件過濾掉沒用的數(shù)據(jù)。
-- 設(shè)置過濾條件 Column 'id' in where clause is ambiguous
select * from emp,dept where id=5;
select * from emp,dept where emp.`dept_id` = dept.`id`;
-- 查詢員工和部門的名字
select emp.`name`, dept.`name` from emp,dept where emp.`dept_id` = dept.`id`;
3、內(nèi)連接
用左邊表的記錄去匹配右邊表的記錄,如果符合條件的則顯示。如:從表.外鍵=主表.主鍵
(1)隱式內(nèi)連接
隱式內(nèi)連接:看不到JOIN關(guān)鍵字,條件使用WHERE指定。
SELECT 字段名 FROM 左表, 右表 WHERE 條件
select * from emp,dept where emp.`dept_id` = dept.`id`;
(2)顯式內(nèi)連接
顯示內(nèi)連接:使用INNER JOIN ... ON語句, 可以省略INNER
SELECT 字段名 FROM 左表 [INNER] JOIN 右表 ON 條件
查詢唐僧的信息,顯示員工id,姓名,性別,工資和所在的部門名稱,我們發(fā)現(xiàn)需要聯(lián)合2張表同時才能查詢出需要的數(shù)據(jù),使用內(nèi)連接。
4、左外連接
左外連接:使用LEFT OUTER JOIN ... ON,OUTER可以省略
SELECT 字段名 FROM 左表 LEFT [OUTER] JOIN 右表 ON 條件
用左邊表的記錄去匹配右邊表的記錄,如果符合條件的則顯示;否則,顯示NULL
可以理解為:在內(nèi)連接的基礎(chǔ)上保證左表的數(shù)據(jù)全部顯示(左表是部門,右表員工)
-- 在部門表中增加一個銷售部
insert into dept (name) values ('銷售部');
select * from dept;
-- 使用內(nèi)連接查詢
select * from dept d inner join emp e on d.`id` = e.`dept_id`;
-- 使用左外連接查詢
select * from dept d left join emp e on d.`id` = e.`dept_id`;
5、右外連接
右外連接:使用RIGHT OUTER JOIN ... ON,OUTER可以省略
SELECT 字段名 FROM 左表 RIGHT [OUTER ]JOIN 右表 ON 條件
用右邊表的記錄去匹配左邊表的記錄,如果符合條件的則顯示;否則,顯示NULL
可以理解為:在內(nèi)連接的基礎(chǔ)上保證右表的數(shù)據(jù)全部顯示
-- 在員工表中增加一個員工
-- 在員工表中增加一個員工
insert into emp values (null, '沙僧','男',6666,'2013-12-05',null);
select * from emp;
-- 使用內(nèi)連接查詢
select * from dept inner join emp on dept.`id` = emp.`dept_id`;
-- 使用右外連接查詢
select * from dept right join emp on dept.`id` = emp.`dept_id`;
看完上述內(nèi)容,你們對什么是Java中的表連接查詢有進一步的了解嗎?如果還想了解更多知識或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。