Python 数据库操作之连表查询
【摘要】 python mysqls数据库连表查询相关知识。
一、准备
建表与数据准备
sql 示例:
#建表 create table department( id int, name varchar(20) ); create table employee( id int primary key auto_increment, name varchar(20), gende enum('male','female') not null default 'male', age int, dep_id int ); #插入数据 insert into department values (200,'技术'), (201,'人力资源'), (202,'销售'), (203,'运营'); insert into employee(name,gender,age,dep_id) values ('egon','male',18,200), ('alex','female',48,201), ('wupeiqi','male',38,201), ('yuanhao','female',28,202), ('liwenzhou','male',18,200), ('jingliyang','female',18,204) ; #查看表结构和数据 mysql> desc department;
mysql> desc employee_1;
mysql> select * from department;
mysql> select * from employee_1;
表department与employee
二、多表连接查询
#重点:外链接语法 SELECT 字段列表 FROM 表1 INNER|LEFT|RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;
1 交叉连接:不适用任何匹配条件。生成笛卡尔积
mysql> select * from employee_1,department;
2 内连接:只连接匹配的行
#找两张表共有的部分,相当于利用条件从笛卡尔积结果中筛选出了正确的结果 #department没有204这个部门,因而employee表中关于204这条员工信息没有匹配出来 mysql> select employee_1.id,employee_1.name,employee_1.gender,employee_1.age,department.name from employee_1 inner join department on employee_1.dep_id=department.id;
#上述sql等同于 mysql> select employee_1.id,employee_1.name,employee_1.gender,employee_1.age,department.name from employee_1,department where employee_1.dep_id=department.id;
3 外链接之左连接:优先显示左表全部记录
#以左表为准,即找出所有员工信息,当然包括没有部门的员工 #本质就是:在内连接的基础上增加左边有右边没有的结果 mysql> select employee_1.id,employee_1.name,employee_1.gender,employee_1.age,department.name from employee_1 left join department on employee_1.dep_id=department.id;
4 外链接之右连接:优先显示右表全部记录
#以右表为准,即找出所有部门信息,包括没有员工的部门 #本质就是:在内连接的基础上增加右边有左边没有的结果 mysql> select employee_1.id,employee_1.name,employee_1.gender,employee_1.age,department.name from employee_1 right join department on employee_1.dep_id=department.id;
5 全外连接:显示左右两个表全部记录
全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果 #注意:mysql不支持全外连接 full JOIN #强调:mysql可以使用此种方式间接实现全外连接 mysql> select * from employee_1 left join department on employee_1.dep_id=department.id -> union -> select * from employee_1 right join department on employee_1.dep_id=department.id -> ; #查看结果
#注意 union与union all的区别:union会去掉相同的纪录
符合条件连接查询
#示例1:以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,即找出年龄大于25岁的员工以及员工所在的部门 mysql> select employee_1.id,employee_1.name,employee_1.age,department.name from employee_1 inner join department on employee_1.dep_id=department.id where employee_1.age>25;
#示例2:以内连接的方式查询employee和department表,并且以age字段的升序方式显示 mysql> select * from employee_1,department where employee_1.dep_id=department.id and age>25 order by age asc;
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)