Mysql 多表查詢

2021-10-19 14:09:43 字數 4022 閱讀 4235

本文主要記錄關於多表查詢的相關知識:

所用到的資料庫**如下:

-- 部門表

create table dept (

id int primary key primary key, -- 部門id

dname varchar(50), -- 部門名稱

loc varchar(50) -- 部門所在地

);-- 新增4個部門

insert into dept(id,dname,loc) values

(10,'教研部','北京'),

(20,'學工部','上海'),

(30,'銷售部','廣州'),

(40,'財務部','深圳');

-- 職務表,職務名稱,職務描述

create table job (

id int primary key,

jname varchar(20),

description varchar(50)

);-- 新增4個職務

insert into job (id, jname, description) values

(1, '董事長', '管理整個公司,接單'),

(2, '經理', '管理部門員工'),

(3, '銷售員', '向客人推銷產品'),

(4, '文員', '使用辦公軟體');

-- 員工表

create table emp (

id int primary key, -- 員工id

ename varchar(50), -- 員工姓名

job_id int, -- 職務id

mgr int , -- 上級領導

joindate date, -- 入職日期

salary decimal(7,2), -- 工資

bonus decimal(7,2), -- 獎金

dept_id int, -- 所在部門編號

constraint emp_jobid_ref_job_id_fk foreign key (job_id) references job (id),

constraint emp_deptid_ref_dept_id_fk foreign key (dept_id) references dept (id)

);-- 新增員工

insert into emp(id,ename,job_id,mgr,joindate,salary,bonus,dept_id) values

(1001,'孫悟空',4,1004,'2000-12-17','8000.00',null,20),

(1002,'盧俊義',3,1006,'2001-02-20','16000.00','3000.00',30),

(1003,'林沖',3,1006,'2001-02-22','12500.00','5000.00',30),

(1004,'唐僧',2,1009,'2001-04-02','29750.00',null,20),

(1005,'李逵',4,1006,'2001-09-28','12500.00','14000.00',30),

(1006,'宋江',2,1009,'2001-05-01','28500.00',null,30),

(1007,'劉備',2,1009,'2001-09-01','24500.00',null,10),

(1008,'豬八戒',4,1004,'2007-04-19','30000.00',null,20),

(1009,'羅貫中',1,null,'2001-11-17','50000.00',null,10),

(1010,'吳用',3,1006,'2001-09-08','15000.00','0.00',30),

(1011,'沙僧',4,1004,'2007-05-23','11000.00',null,20),

(1012,'李逵',4,1006,'2001-12-03','9500.00',null,30),

(1013,'小白龍',4,1004,'2001-12-03','30000.00',null,20),

(1014,'關羽',4,1007,'2002-01-23','13000.00',null,10);

-- 工資等級表

create table salarygrade (

grade int primary key, -- 級別

losalary int, -- 最低工資

hisalary int -- 最高工資

);-- 新增5個工資等級

insert into salarygrade(grade,losalary,hisalary) values

(1,7000,12000),

(2,12010,14000),

(3,14010,20000),

(4,20010,30000),

(5,30010,99990);

-- 需求:

-- 1.查詢所有員工資訊。查詢員工編號,員工姓名,工資,職務名稱,職務描述

-- 2.查詢員工編號,員工姓名,工資,職務名稱,職務描述,部門名稱,部門位置

-- 3.查詢員工姓名,工資,工資等級

-- 4.查詢員工姓名,工資,職務名稱,職務描述,部門名稱,部門位置,工資等級

-- 5.查詢出部門編號、部門名稱、部門位置、部門人數

-- 6.查詢所有員工的姓名及其直接上級的姓名,沒有領導的員工也需要查詢

foreign key (dept_id) references dept(id) -- 外來鍵,關聯部門表(部門表的主鍵)

笛卡爾積:有兩個集合a,b .取這兩個集合的所有組成情況。要完成多表查詢,需要消除無用的資料

多表查詢的分類:一. 內連線查詢:1. 隱式內連線:使用where條件消除無用資料例子:-- 查詢所有員工資訊和對應的部門資訊

-- 查詢員工表的名稱,性別。部門表的名稱select emp.name,emp.gender,dept.name from emp,dept where emp.`dept_id` = dept.`id`;selectt1.name, -- 員工表的姓名t1.gender,-- 員工表的性別t2.name -- 部門表的名稱fromemp t1,dept t2wheret1.`dept_id` = t2.`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...