mysql多表查询
目录
1.多表查询 => 转化为一张联合大表
2.可视化工具
3.pymysql模块
多表数据
create table dep( id int primary key auto_increment, name varchar(16), work varchar(16) ); create table emp( id int primary key auto_increment, name varchar(16), salary float, dep_id int ); insert into dep values(1, '市场部', '销售'), (2, '教学部', '授课'), (3, '管理部', '开车'); insert into emp(name, salary, dep_id) values('egon', 3.0, 2),('yanghuhu', 2.0, 2),('sanjiang', 10.0, 1),('owen', 88888.0, 2),('liujie', 8.0, 1),('yingjie', 1.2, 0);
一、笛卡尔积 (交叉连接)
# 需求: # 查看每位员工的部门的所有信息 select * from emp; select * from dep; # 子查询, 最终结果只能显示单表的信息, 但需求是同时显示两张表的信息 => 先将两张表合成一张表 select * from emp where dep_id in (select id from dep); 笛卡尔积: 集合 X{a, b} * Y{o, p, q} => Z{{a, o}, {a, p}, {a, q}, {b, o}, {b, p}, {b, q}} 交叉查询: select * from emp, dep; | select * from emp course join dep; +----+----------+--------+--------+----+-----------+--------+ | id | name | salary | dep_id | id | name | work | +----+----------+--------+--------+----+-----------+--------+ | 1 | egon | 3 | 2 | 1 | 市场部 | 销售 | | 1 | egon | 3 | 2 | 2 | 教学部 | 授课 | | 1 | egon | 3 | 2 | 3 | 管理部 | 开车 | | 2 | yanghuhu | 2 | 2 | 1 | 市场部 | 销售 | | 2 | yanghuhu | 2 | 2 | 2 | 教学部 | 授课 | | 2 | yanghuhu | 2 | 2 | 3 | 管理部 | 开车 | | 3 | sanjiang | 10 | 1 | 1 | 市场部 | 销售 | | 3 | sanjiang | 10 | 1 | 2 | 教学部 | 授课 | | 3 | sanjiang | 10 | 1 | 3 | 管理部 | 开车 | | 4 | owen | 88888 | 2 | 1 | 市场部 | 销售 | | 4 | owen | 88888 | 2 | 2 | 教学部 | 授课 | | 4 | owen | 88888 | 2 | 3 | 管理部 | 开车 | | 5 | liujie | 8 | 1 | 1 | 市场部 | 销售 | | 5 | liujie | 8 | 1 | 2 | 教学部 | 授课 | | 5 | liujie | 8 | 1 | 3 | 管理部 | 开车 | | 6 | yingjie | 1.2 | 0 | 1 | 市场部 | 销售 | | 6 | yingjie | 1.2 | 0 | 2 | 教学部 | 授课 | | 6 | yingjie | 1.2 | 0 | 3 | 管理部 | 开车 | +----+----------+--------+--------+----+-----------+--------+ 做了筛选, 结果<=完整数据, 非笛卡尔积 select * from emp, dep where db2.emp.dep_id = db2.dep.id; # 同sql语句上表现是从两张表拿数据 +----+----------+--------+--------+----+-----------+--------+ | id | name | salary | dep_id | id | name | work | +----+----------+--------+--------+----+-----------+--------+ | 1 | egon | 3 | 2 | 2 | 教学部 | 授课 | | 2 | yanghuhu | 2 | 2 | 2 | 教学部 | 授课 | | 3 | sanjiang | 10 | 1 | 1 | 市场部 | 销售 | | 4 | owen | 88888 | 2 | 2 | 教学部 | 授课 | | 5 | liujie | 8 | 1 | 1 | 市场部 | 销售 | +----+----------+--------+--------+----+-----------+--------+ # 注意: 同时查询两张表形成新的表,可以称之为虚拟表, 原表与表之间可能存在重复字段, 同时使用时需要明确所属表,必要时还需明确所属数据库