多表查詢語法
select
字段列表
from
表名列表
where
約束條件
;
笛卡爾積現象:有兩個集合 a,b,取這兩個集合的所有可能組合。mysql的多表查詢結果就是以笛卡爾積的結果形式返回,這樣的結果通常伴隨一些無效結果。要完成多表查詢,需要採用相應的手段消除無效結果。
案例:結合對以下資料表的查詢語句理解多表查詢
# 建立部門表
create
table dept(
id int
primary
keyauto_increment
, name varchar(20
));insert
into
dept(name)
values
('開發部'),
('市場部'),
('財務部'
);
# 建立員工表
create
table emp (
id int
primary
keyauto_increment
, name varchar(10
),gender char(1
),-- 性別
salary double
,-- 工資
join_date date
,-- 入職日期
dept_id int
,foreign
key(dept_id)
references dept(id)
-- 外來鍵,關聯部門表(部門表的主鍵));
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
('蜘蛛精'
,'女'
對於查詢所有的員工和所有的部門,顯然,由於笛卡爾積現象的存在,不是所有的資料組合都是有用的, 只有員工表.dept_id = 部門表.id 的資料才是有用的。所以需要通過條件過濾掉沒用的資料。
內連線查詢的 3 要素:
從哪些表中查詢
條件是什麼
查詢哪些字段
隱式內連線:使用 where 語句篩選有效記錄
顯式內連線:將乙個表的查詢結果 join 到另乙個表中(結果同上)
-- 語法
select
字段列表
from
表名1inner
join 表名2
# inner可以省略
on 條件;
左外連線
-- 語法
select
字段列表
from
表1left
outer
join 表2
# outer可以省略
on 條件;
-- 查詢的是左表所有資料及其交集部分。
右外連線
-- 語法
select
字段列表
from
表1right
outer
join 表2
# outer可以省略
on 條件
;-- 查詢的是右表所有資料及其交集部分。
左外連線和右外鏈結是相對概念,通常使用左外連線。
查詢中巢狀查詢,稱巢狀查詢為子查詢,
子查詢示例
子查詢的不同情況
子查詢的結果是單行單列的:查詢結果相當於標量,可以作為查詢條件,使用條件運算子判斷。(> >= < <= = !=)
子查詢的結果是多行單列的:查詢結果相當於一維陣列,可以作為查詢條件,使用in運算子判斷
子查詢的結果是多行多列的:查詢結果相當於二維陣列,可以作為一張虛擬表參與查詢
多表查詢 多表查詢 多表查詢
查詢語法 select 列表名稱 from 表明列表 where 笛卡爾積 有兩個集合a,b,取這兩個集合的所有組成情況 要完成多表查詢,需要消除無用的資料 多表查詢分類 1 內連線查詢 1 隱式內連線 使用where消除無用的資料 例子 select t1.name,t1.gender,t2.na...
mysql 多表查詢or MySQL 多表查詢
前期準備 建表create table dep id int,name varchar 20 create table emp id int primary key auto increment,name varchar 20 enum male female not null default ma...
查詢 多表查詢。。。
此時你得使用鏈結條件。通過存在於相對應列中的公共值,乙個表中的資料可以被另乙個表的資料鏈結,通常都是主鍵和外來鍵進行鏈結。一般鏈結條件寫在where子句裡。select empno,emp.deptno,loc from emp,dept where emp.deptno dept.deptno 對...