-- 什么是多表查询:查询多个表中多个字段
CREATE DATABASE IF NOT EXISTS mydb_02;
USE mydb_02;
CREATE TABLE dept (
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR (20)
);
INSERT INTO dept (NAME)
VALUES
('开发部'),
('市场部'),
('财务部') ;
SELECT *FROM dept;
DROP TABLE emp;
-- 创建员工表
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) -- 外键,关联部门表(部门表的主键) )
) ;
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);-- 单表查询
-- 查询员工表SELECT *FROM emp;
SELECT *FROM dept;-- 多表查询 查询多个表
-- 需求:同时查询员工以及部门表中所有的字段
-- 产生问题:是一个笛卡尔乘积(A表中所有记录*B表中的所有记录)---字段冗余
SELECT*FROM emp,dept;-- 解决笛卡尔乘积
-- 1)查询哪些表 员工表 emp,部门表 dept
-- 2)查询这些表中的哪些字段 员工表姓名,部门编号,部门表中所有部门名称
-- 3)这多个表的链接条件 员工表中dept_id要关联部门表的主键id-- 内连接
-- 隐式内连接 使用 基本的where语句 连接条件
-- 显示内连接 inner join 连接条件-- 需求:使用隐式内连接查询: 员工表中的姓名,部门id同时查询 部门表中的部门名称
-- 表:emp ,dept
-- emp name,dept_id
-- dept name
-- emp的dept_id = dept的id
SELECT
emp.`name`,
emp.`dept_id`,
dept.`name`
FROM
emp,
dept
WHERE emp.`dept_id` = dept.`id` ;-- 改进:给表起别名操作,简化书写方式
SELECT
t1.`name`,
t1.`dept_id`,
t2.`name`
FROM
emp t1,
dept t2
WHERE t1.`dept_id` = t2.`id` ;
mysql多表查询之_笛卡尔乘积_内连接_隐式连接
于 2022-07-23 11:43:11 首次发布