mysql多表查詢

2021-10-06 11:45:31 字數 1422 閱讀 9802

* 查詢語法:

select

列名列表

from

表名列表

select * from emp,dept; -- 直接查多表 顯示的是笛卡爾積

* 笛卡爾積 有兩個集合a,b 取這兩個集合的所有組成情況

* 多表查詢的分類:

1. 內連線查詢: 只返回兩個表中連線字段相等的行。

隱式內連線:使用where條件消除無用資料

select * from emp,dept where emp.'dept' = dept.'id';

select

t1.name,

t1.gender,

t2.name

from

emp t1,

dept t2

where

t1.'dept_id' = t2.'id';

2. 顯示內連線

* 語法:select 字段列表 from 表名1 inner join 表2 on 條件

select * from emp inner join dept on emp.'dept_id' = dept.'id';

3. 內連線查詢:

1. 從哪些表查詢

2. 判斷條件

3. 查詢哪些字段

2. 外連線查詢

1. 左外連線: 查詢的是左表所有資料 以及 其交集部分。

select 字段列表 form 表1 left outer join 表2 on 條件

2. 右外連線

查詢的是右表所有資料及其交集部分

select 字段列表 from 表1 right outer join 表2 on 條件

3. 子查詢

* 概念: 查詢中巢狀查詢,稱為子查詢.

-- 查詢工資最高的員工資訊

select * from emp where emp.'salary' = (

select max(salary) from emp

);* 子查詢不同情況

1. 子查詢的結果是單行單列的:

* 子查詢可以作為條件 使用運算子去判斷。

select * from emp where emp.'salary' = (

select max(salary) from emp

);2.子查詢的結果是多行單列的:

使用 in 來判斷

3. 子查詢結果是多行多列的:

子查詢可以作為一張虛擬表

-- 查詢員工入職日期是2011-11-11日之後的員工資訊和部門資訊.

select * from dept t1, (select * from emp where emp.'join_data' > '2011-11-11' ) t2 where t1.id = t2.dept_id;

mysql多表 MySQL 多表查詢

多表查詢 select listname from tablename1,tablename2 笛卡爾積 多表查詢中,如果沒有連線條件,則會產生笛卡爾積 數學中的定義 假設集合a 集合b 則兩個集合的笛卡爾積為 實際執行環境下,應避免使用笛卡爾積 解決方案 在where加入有效的連線條件 等值連線 ...

mysql多表查詢方式 MySQL多表查詢方式問題

你的 sql 沒有用到任何索引,對 a b 兩個表都是全表掃瞄,在資料量小的時候是沒有問題的,但是如果資料量超過 100 萬,效能問題就會突顯出來。這裡不清楚你的 created at 欄位是什麼型別,不過從你的 date format created at,y m d 看來,應該是 datetim...

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...