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去学院表查询对应的学员
准备数据:
create table emp (id int,name char(),sex char,dept_id int);
insert emp values(,"大黄","m",);
insert emp values(,"老王","m",);
insert emp values(,"老李","w",); create table dept (id int,name char());
insert dept values(,"市场");
insert dept values(,"财务");
insert dept values(,"行政");
多表查询小练习
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后面
Python 41 多表查询 和 子查询的更多相关文章
- MySQL中的联表查询与子查询
0.准备数据 1.内连接:INNER JOIN 2.左连接:LEFT JOIN 3.右连接:RIGHT JOIN 4.USING子句 扩展知识点: 0.表别名的使用: 1.group by的用法 2. ...
- MS sql server 基础知识回顾(二)-表连接和子查询
五.表连接 当数据表中存在许多重复的冗余信息时,就要考虑将这些信息建在另一张新表中,在新表中为原表设置好外键,在进行数据查询的时候,就要使用到连接了,表连接就好像两根线,线的两端分别连接两张表的不同字 ...
- MySQL多表查询之外键、表连接、子查询、索引
MySQL多表查询之外键.表连接.子查询.索引 一.外键: 1.什么是外键 2.外键语法 3.外键的条件 4.添加外键 5.删除外键 1.什么是外键: 主键:是唯一标识一条记录,不能有重复的,不允许为 ...
- MySQL开发——【联合查询、多表连接、子查询】
联合查询 所谓的联合查询就是将满足条件的结果进行拼接在同一张表中. 基本语法: select */字段 from 数据表1 union [all | distinct] select */字段 fro ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- mysql查询语句 和 多表关联查询 以及 子查询
原文地址: http://blog.csdn.net/github_37767025/article/details/67636061 1.查询一张表: select * from 表名: 2.查询指 ...
- ORACLE 多表连接与子查询
Oracle表连接 SQL/Oracle使用表连接从多个表中查询数据 语法格式: select 字段列表from table1,table2where table1.column1=table2.co ...
- Server Sql 多表查询、子查询和分页
一.多表查询:根据特定的连接条件从不同的表中获取所需的数据 多表查询语法: SELECT table1.column, table2.column FROM table1, table2 WHERE ...
- ylb:SQL 表的高级查询-多表连接和子查询
ylbtech-SQL Server: SQL Server-表的高级查询-多表连接和子查询 SQL Server 表的高级查询-多表连接和子查询. 1,ylb:表的高级查询-多表连接和子查询 返回顶 ...
- oracle多表关联查询和子查询
oracle多表关联查询和子查询 一.多表关联查询 例子: SQL> create table student1 ( sid ), sname ), sage )); Table created ...
随机推荐
- Symbolicating Crash Reports With atos
地址:0x1000e4000 + 49116 = 0x00000001000effdc都是运行时地址: 0x1000e4000:基址偏移后的地址: 0x100000000: 共知基址:各个环境都知道, ...
- Java中“==”、“compareTo()”和“equals()”的区别
在比较两个对象或者数据大小的时候,经常会用到==.compareTo()和equals(),尤其是在接入了Comparable接口后重写compareTo方法等场景,所以我们来理一下这三个的区别. 1 ...
- 基于owncloud构建私有云储存网盘
注意事项:需要ping通外网 需要LAMP架构yum -y install httpd php php-mysql mariadb-server mariadb sqlite php-dom php- ...
- nginx+tomcat实现负载均衡集群
一台tomcat站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等问题,不能单独应用于生产环境下 所以需要一套可靠的解决方案来完善web站点架构 而Nginx只能访问静态页面,如果需要动态需要 ...
- 2.Linux的用户、用户组、权限、文件系统管理及其网络配置
2.1 Linux的用户及用户组 2.1.1 Linux的用户管理 用户账号管理包含以下三个方面: 用户账号的添加.删除.与修改 用户口令(密码)的管理 用户组的添加.删除管理 Linux系统中用户信 ...
- 15.most_fields策略进行cross-fields search
主要知识点: cross-fields 的使用场景 cross-fields 使用方法 cross-fields 的缺点 一.cross-fields 的使用场景 cross-fiel ...
- 使用Python PIL库中的Image.thumbnail函数裁剪图片
今天,是我来到博客园的第五天,发现自己还没有头像,想着上传ubuntu系统中我很喜欢的一个背景图片来当头像,但是因为图片过大,上传失败了.那么,我们如何使用python中强大的PIL库来进行图片裁剪呢 ...
- 【codeforces 514A】Chewbaсca and Number
[题目链接]:http://codeforces.com/contest/514/problem/A [题意] 允许你把每个数字翻转 ->x变成9-x 然后问你能够变成的最小的数字是什么; 不能 ...
- 【[Offer收割]编程练习赛12 D】 寻找最大值
[题目链接]:http://hihocoder.com/problemset/problem/1496 [题意] [题解] 先把这n个数排个序吧. 这样相邻的数字就在一起了; 这样a[i]&a ...
- 【codeforces 767A】Snacktower
[题目链接]:http://codeforces.com/contest/767/problem/A [题意] 每天掉一个盘子下来;盘子有大小从1..n依次增大n个盘子; 然后让你叠盘子; 最底层为n ...