使用python对学生表的查询_Python 41 多表查询 和 子查询 温暖你的心

1、查询

完整的查询语句

select [distinct] {* | 字段 | 聚合函数 | 表达式}from 表名

where  筛选数据,过滤数据

group by  分组,为了让聚合函数统计

having  分完组后过滤的条件

order by  字段名,字段名(字段名后面再加字段名) desc | asc

limit  限制显示的条数 a | b 第一个是起始位置,默认是0;第二个是显示的记录数,常用于分页查询

2、多表查询

inner join  内连接 左右两个表仅显示匹配成功的记录

left join  左右全部显示 右边显示匹配

right join  右表全部显示 左边显示匹配

full join  mysql 使用   union 间接完成

一:多表查询

1、什么是多表查询?

在多个表中查询需要的数据

例如:有班级表 和学生表

给你已给班级名称  请查询所有的学员数据

先查班级表 得到一个班级的id  再根据id去学院表查询对应的学员

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

准备数据:

create table emp (idint,name char(10),sex char,dept_id int);

insert emp values(1,"大黄","m",1);

insert emp values(2,"老王","m",2);

insert emp values(3,"老李","w",30);

create table dept (idint,name char(10));

insert dept values(1,"市场");

insert dept values(2,"财务");

insert dept values(3,"行政");

多表查询小练习

2、多表查询的方式

1.笛卡尔积查询

什么是笛卡尔积,用坐标中的一条记录 去链接另一张表的所有记录

就像是把 两张表的数据做了一个乘法

这将导致 产生大量的无用重复数据

我们要的效果是:员工表中的部门id 与 部门表中的id相同 就拼接在一起

用 where 筛选出正确的数据

select *from emp,dept where emp.dept_id = dept.id;

on关键字

作用: 用于多表查询是 进行条件限制

select *from emp,dept on emp.dept_id = dept.id;  这是错误的语法 ,因为 on 它只能用在专门多表查询语句中

2.内连接查询

inner join

select *from emp inner join dept  on emp.dept_id = dept.id;# 查询 所有的员工以及他们所属的部门信息

3.左外连接

left join   左边表中的数据完全显示   右边表中的数据匹配上才显示

select *from emp left join dept  on emp.dept_id = dept.id; # 查询 所有的部门以及他们所有的员工信息

4 .右外连接

right join         左边表中的数据匹配上才显示   右边表中的数据完全显示

select *from emp right join dept  on emp.dept_id = dept.id;# 在一个表中 显示多个表中的所有数据

5. 全外链接

full join  mysql不支持  oracle支持

可以通过union 间接实现

union  表示合并查询  意思是把多个查询结果合并在一起显示,

要求是 被合并的表结构必须相同,默认去除重复

合并但是不去除重复  union all

select *from emp right join dept  on emp.dept_id = dept.id

union

select *from emp left join dept  on emp.dept_id = dept.id;

总结:多表链接 在书写时 按照填空来书写   如果左边要全部显示 用left join

右边全部显示 用right join

全部显示 把左链接的结果和右链接的结果 合并

当然 也可以更多表一起查 但是 没有意义  并且你要尽量避免 太多表 一起查

最多三张 在多对多的时候

select *from emp left join dept left join xxtable on emp.dept_id = dept.id;

二:子查询

1、什么是子查询:

将上一次查询的结果 作为本次查询的原始数据(或是查询条件)

需求 查询出工资最高的人的信息     先查询出 财务部 最高工资是多少     拿着最高工资 去表中看 谁的工资和最高工资匹配

select *from emp where salary = (select max(salary) from emp);

2、子查询是干什么用的

当你的需求一次查询无法满足需求时(一次select找不到你要的数据,得多次查询),这个子查询所实现的功能,完全可以被多表联查代替,子查询能干的事,多表联查也能干

3、如何使用子查询

首先明确子查询就是一个普通的查询,当一个查询需要作为查询使用时,用括号包裹即可

子查询的语法特点:就是一个select a中,包含另一个select b,b只能位于a的where后面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值