Python學習--day41-mysql多表查詢
阿新 • • 發佈:2019-01-11
目錄
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 * fromdep; # 子查詢, 最終結果只能顯示單表的資訊, 但需求是同時顯示兩張表的資訊 => 先將兩張表合成一張表 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 | 市場部 | 銷售 | +----+----------+--------+--------+----+-----------+--------+ # 注意: 同時查詢兩張表形成新的表,可以稱之為虛擬表, 原表與表之間可能存在重複欄位, 同時使用時需要明確所屬表,必要時還需明確所屬資料庫