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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值