当前位置:网站首页>mysql多表查询之_笛卡尔乘积_内连接_隐式连接

mysql多表查询之_笛卡尔乘积_内连接_隐式连接

2022-07-23 12:10:00 Camellia——

-- 什么是多表查询:查询多个表中多个字段
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` ;

原网站

版权声明
本文为[Camellia——]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_57219176/article/details/125945705