mysql獲取多張表中的資料 mysql之多表查詢

2021-10-12 15:08:38 字數 4453 閱讀 8100

1.新建的乙個資料庫db3

create database db3 charset utf8;

2.為db3資料庫建立兩張表和資料

(1)建立person表

create tableperon (

idint(11) not nullauto_increment,

namevarchar(50) not null,

agetinyint(4) default '0',

*** enum('男','女','人妖') not null default '人妖',

salarydecimal(10, 2) not null default '250.00',

hire_date datenot null,

dept_idint(11) default null,primary key(id)

) engine=innodb auto_increment = 13 default charset = utf8;

(2)為person表建立資料

# 教學部insert into peron values('1', 'alex', '28', '人妖', '53000.00', '2010-06-21', '1');insert into peron values('2', 'wupeiqi', '23', '男', '8000.00', '2011-02-21', '1');insert into peron values('3', 'egon', '30', '男', '6500.00', '2015-06-21', '1');insert into peron values('4', 'jingnvshen', '28', '女', '6680.00', '2014-06-21', '1');

# 銷售部insert into peron values('5', '歪歪', '20', '女', '3000.00', '2015-02-21', '2');insert into peron values('6', '星星', '20', '女', '2000.00', '2018-01-30', '2');insert into peron values('7', '格格', '20', '女', '2000.00', '2018-02-27', '2');insert into peron values('8', '周周', '20', '女', '2000.00', '2015-06-21', '2');

#市場部insert into peron values('9', '月月', '21', '女', '4000.00', '2014-07-21', '3');insert into peron values('10', '安琪', '22', '女', '4000.00', '2015-07-15', '3');

# 人事部insert into peron values('11', '周明月', '17', '女', '5000.00', '2014-06-21', '4');

# 鼓勵部insert into peron values('12', '蒼老師', '33', '女', '1000000.00', '2018-02-21', null);

(3)建立乙個部門表dept。 comment 表示為字段新增注釋

create tabledept(

didint not null comment '部門id記錄' auto_increment primary key,

dnamevarchar(50) not null comment '部門名稱') engine=innodb default charset utf8;

(4)為dept部門表,建立部門資料

# 新增部門資料insert into dept values('1', '教學部');insert into dept values('2', '銷售部');insert into dept values('3', '市場部');insert into dept values('4', '人事部');insert into dept values('5', '鼓勵部');

(5)此時部門表與人員表為

3.多表聯合查詢

3.1 笛卡爾乘積(多個表的結果集相乘)。查詢人員表和dept部門表,結果卻查詢出來了60條,重複的記錄出現,這個笛卡爾乘積現象。兩個表資料的結果集相乘。這是在多表聯合查詢時不加條件調導致的

select * from person, dept; --查詢人員表和dept表

3.2 多表聯合查詢使用where條件限定。將person表的部門id和dept表的id記錄相等的記錄查詢出來。注意:多表查詢時,一定要找到多個表的關聯字段,並且將這個關聯字段作為條件使用

select * from person as p, dept as d where p.dept_id = d.did; --person表和dept表進行多表聯合查詢,條件是人員表的部門dept_id必須和部門表的did相同。

4.多表連線查詢。

4.1左連線查詢(左側表為基準表,基準表去匹配右側的表,不管匹配沒匹配上,基準表的資料都會顯示出來)

這種方式查詢會將person表中的dept_id和dept表中的did欄位相等的記錄都查詢出來,同時還會將person表中沒匹配上dept表中的記錄查詢出來。如人員表中小溢這個記錄沒有dept_id部門字段值,但是有了左連線所以會將person人員表中dept_id欄位沒匹配上dept部門表中的did欄位的記錄也查詢出來,左連線,左側表中沒匹配上的記錄也會查詢出來。

select * from person left join dept on person.dept_id = dept.did; --left join關鍵字,連線關鍵字左連線

4.2右連線查詢(右側表為基準表,基準表去匹配左側的表,不管匹配沒匹配上,基準表的資料都會顯示出來)

這種方式查詢會將person表中的dept_id和dept表中的did欄位相等的記錄都查詢出來,同時還會將dept表中沒匹配上person表中的記錄查詢出來。如dept部門表did中開車部沒有被person人員表中的dept_id部門id匹配上,但是有了右連線所以會將dept部門表中did欄位沒匹配上的記錄也查詢出來,沒配上就會顯示空值,右連線,右側表中沒匹配上的記錄也會查詢出來。

select * from person right join dept on person.dept_id = dept.did; --right join關鍵字,左連線關鍵字

4.3內連線查詢(與多表聯合查詢的效果一樣),兩表匹配上的才會被查詢出來

select * from person inner join dept on person.dept_id = dept.did; -- inner為內連線關鍵字

4.4全連線查詢(顯示左右表的全部資料)使用union 可以將左右表的資料去重查詢出來,union all 不會講左右表的資料去重

(1)union,全連線查詢關鍵字,並將左右兩表資料去重

select * from person left join dept on person.dept_id =dept.didunion

select * from person right join dept on person.dept_id = dept.did;

(2)union all,全連線查詢關鍵字,不會將左右兩表的資料去重

--union all 關鍵不會將兩表重複的資料去重

select * from person left join dept on person.dept_id =dept.didunion all

select * from person right join dept on person.dept_id = dept.did;

5.複雜條件多表查詢

5.1要求查詢出教學部年齡大於20歲,並且工資小於40000的員工,按工資時間倒序排序

(1)使用子語句的方法查詢

select * from person where age > 20 and dept_id = (select did from dept where dname = '教學部') and salary < 40000 order by salary desc;

(2)使用多表聯合查詢的方法查詢

select * from person as p, dept as d where p.dept_id = d.did and d.dname= '教學部' and p.age > 20 and p.salary < 40000 order by p.salary desc;

5.2查詢每個部門中最高工資和最低工資是多少,顯示部門名稱

(1)使用多表連線查詢的方法

select max(salary), min(salary),dname from person left join dept on person.dept_id = dept.did group by dept_id;

(2)使用多表聯合查詢的方法

select max(salary), min(salary),dname from person as p, dept as d where p.dept_id = d.did group by p.dept_id;

Mysql 如何實現多張無關聯表查詢資料並分頁

在三張沒有主外來鍵關聯的表中取出自己想要的資料,並且分頁。水果表 堅果表 飲料表 資料庫隨便建的,重在方法。union all 操作符用於合併兩個或多個 select 語句的結果集。請注意,union all內部的 select 語句必須擁有相同數量的列。列也必須擁有相似的資料型別。同時,每條 se...

php mysqli批量查詢多張表資料的方法

注意這裡使用到了兩個新的函式multi query與store result,具體 如下 複製 如下 1 建立資料庫連線物件 mysqli new mysqli localhost root 123456 liuyanwqcswvpd if mysqli connect error wqcswvpd...

Mysql中使用逗號隔開多張表生成的表例項

摘自 mysql中使用使用逗號隔開多張表生成的表例項等價於使用join inner join cross join,而在標準sql中,它們並不等價,inner join 和 on 一起使用,cross join則使用其它方式 select from t1 left join t2,t3,t4 on ...