mysql 多表联合查询
理论依据:笛卡尔积
通过笛卡尔乘积,把两个或多个表变成一个大表,里面包含了有效的、无效的记录(需要添加条件进行过滤数据)。
语法:
Select 列名1,列名2,列名3,… from 表名1,表名2,… where 1个或多个连接条件 and 查询条件;
- 表起别名/简称:别名与表名空格隔开,
- 查询全部信息、部分列(,间隔),某一个表的全部列 表名.*
- 一个连接条件只能连接两个表,如果需要连接n个表,则需要n-1个连接条件
- 多表联合查询,必须要添加条件过滤,如果不加条件就会出现大量错误数据
- 多表联合查询,多数情况下表和表之间存在主外键关系,但是也有例外
Select 列表1,列表2,… from 表名1,表名2,… where 查询条件;
Select ename,job,sal,grade from emp,salgrade where sal between losal and hisal;
内链接inner join;左链接left join;右连接right join
常规写法:select * from emp,dept where emp.deptno=dept.deptno;
内链接:select * from emp inner join dept on emp.deptno=dept.dept.deptno;
左链接:左表内容全部显示,不管右表是否有对应记录
Select * from emp left join dept on emp.deptno=dept.deptno;
右链接:右表内容全部显示,不管左表是否有对应记录
Select * from emp right join dept mon emp.deptno=dept.deptno;
———————————————分组查询
分组查询主要用来做统计,一般都是按照某一列进行统计
Count(参数):统计查询语句返回的行数
Max(参数):最大的 min(参数):最小的 sum(参数):求和 avg(参数):求平均
参数:一般都是列名,但是count()的参数也可以是*或者1
参数是具体的列名时,函数会自动过滤掉列中是空值的情况。特别是count(),参数是列名时,就只统计列中非空的值;如果count(*)、count(1)即使是空值也会被统计。
查询职工信息的数据,然后统计公司的员工人数,平均薪水,最高薪水,最低薪水。
Select count(ename),count(*),avg(sal),sum(sal)/count(ename),max(sal) from emp where sal is not null;
分组:group by 列名
select count(*),avg(列名),min(列名),列名,… from 表名 group by 列名;
分组后进行数据过滤:having
Select 分组函数,被分组的列 from 表名(1个或多个) [where连接条件] group by 列名(一个或多个) [having 过滤条件];
按照部门编号和岗位进行分组,统计每个部门每个岗位的人数及平均薪水,只保留人数超过3个人的记录
Select count(*),avg(sal),deptno,job from emp group by deptno,job having count(*)>=3;
子查询:嵌套查询:一个语句中包含了查询语句
子查询一般用在条件查询中,(查询条件:列名 运算符 搜索值),用来代替搜索值
Select * from 表名 where 列名 运算符 (子查询语句);
Delate from 表名 where 列名 运算符 (子查询语句);
SELECT * FROM STUDENT WHERE sage>(SELECT sage FROM STUDENT WHERE sname='金小子');
- 子查询一定要放在小括号中,优先查询;
- 子查询放在查询条件的右边,充当搜索值;
- 子查询分为单行子查询、多行子查询
单行子查询:子查询返回的结果只有一行,一个值(一个列)
多行子查询:子查询返回的结果是多个行,多个值(一个列)
单行子查询的运算符:=,!=,<,<=,>,>=,<>
多行子查询的运算符:in all any
All和any必须要结合=,<,<=,>,>=一起使用
All:跟子查询返回的所有值进行比较,比赢所有的值
Any:跟子查询返回的所有值进行比较,比赢其中一个即可
>all(子查询):大于最大的 <all(子查询):小于最小的
>any(子查询):大于最小的 <any(子查询):小于最大的
查询年龄比金小子,叶玉娟,王五都要大的学生信息:
Select * from student where sage >(select max(sage) from student where sname in(‘金小子’,’叶玉娟’,’王五’)); -----单行子查询
Select * from student where sage >all(select sage from student where sanme in(‘金小子’,’叶玉娟’,’王五’)); ------多行子查询
子查询语句当做一个表:
- 子查询当做一个表,一定要给这个表起别名;(mysql中必须)
- (子查询语句)是放在from之后的
查询部门编号为20的员工信息,统计最高工资,用子查询实现
分组查询:
Select max(sal),deptno from emp group by deptno having deptno=20;
Select max(sal) from emp where deptno=20;
子查询:
SELECT * FROM emp WHERE deptno=20 ; -- 当作一个表 aa
SELECT MAX(sal) FROM aa ; -- 实际上是没有 aa 表,但是可以用语句代替
SELECT MAX(sal),deptno FROM (SELECT * FROM emp WHERE deptno=20) aa;
字符处理函数
Lower(参数):将所有字母变小写
Upper(参数):将所有字母变大写
Length(参数):求字符串长度
参数:字符类型的列,也可以是普通字符串
Replacem(X,char1,char2):将字符串X中的char1替换为char2
Substr(参数1,参数2,参数3):取子串
参数1:被处理的字符串
参数2:从第几个字符开始取
参数3:取子串的长度
'HELlo wOrLd!'
SELECT LOWER('HELlo wOrLd!'),UPPER('HELlo wOrLd!'),LENGTH('HELlo wOrLd!'),
SUBSTR('HELlo wOrLd!','2','6'),REPLACE('HELlo wOrLd!','o','G') FROM DUAL;
mysql 多表联合查询相关推荐
- mysql教程详解之多表联合查询,MYSQL教程mysql多表联合查询返回一张表的内容实现代码...
搜索热词 <MysqL教程MysqL多表联合查询返回一张表的内容实现代码>要点: 本文介绍了MysqL教程MysqL多表联合查询返回一张表的内容实现代码,希望对您有用.如果有疑问,可以联系 ...
- springboot+mybatis+mysql 多表联合查询
###springboot+mybatis+mysql 多表查询 这里有两张表 用户表和用户信息表user.info 两个实体类展示他们一对一的关系 通过springboot注解的方式实现多表联合查询 ...
- MySQL 多表联合查询有何讲究?
今天我们来聊聊微信中的多表联合查询,应该是小表驱动大表还是大表驱动小表? 1. in VS exists 在正式分析之前,我们先来看两个关键字 in 和 exists. 假设我现在有两张表:员工表和部 ...
- MySQL多表联合查询
阅读目录 部门.员工表数据 内连接 inner join 外连接 outer join 左外连接 右外连接 自连接 联合查询 交叉连接 cross join 笛卡尔积 子查询 标量子查询 列子查询 行 ...
- mysql多表联合查询练习题
1.查询至少有一个员工的部门,显示部门编号,部门名称,部门位置,部门人数 /*1.查询至少有一个员工的部门,显示部门编号,部门名称,部门位置,部门人数列:d.deptno, d.dname, d.lo ...
- MYSQL多表联合查询排序
主要思想:先联合查询数据,再对查询结果按照某标签进行排序 code: String sql = "SELECT * FROM (SELECT task.idTask,task.task_na ...
- Mysql 多表联合查询效率分析及优化
1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: [sql] view plaincopy print? S ...
- mysql 多表联合查询怎么一行显示_使用 explain 优化你的 mysql 性能
本文是关于在学习<高性能 Mysql>附录 D 中关于 Explain 如何获取执行计划信息相关总结.MySQL 提供了一个 EXPLAIN 命令,它可以对 SELECT 语句进行分析,获 ...
- mysql多表联合查询事例_MySQL——多表查询详细介绍以及实例
1.表与表之间的关系 一对一:用户表和身份信息表,用户表是主表 例如:男人表 .女人表create table man( mid int primary key auto_increment, mna ...
- mysql 多表 查询慢_详解Mysql多表联合查询效率分析及优化
1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOI ...
最新文章
- lol个服务器在线人数,LOL除国服外,全球在线人数达1380万,韩服最多380万
- tcpdump命令---Linux学习笔记
- 五:Java+SpringBoot集成SwaggerUI
- oracle索引大小暴增_oracle海量数据中提升创建索引的速度
- JSJQuery必备技能
- 【Caffe代码分析】DataLayer
- MatConvNet对自己的图片分两类及提取图片特征
- php 阿里短信接口
- 零信任学习系列一——研读NIST零信任架构(正式版)
- 将本地调试gdb移植到arm板
- Linux系统 (二)- 指令学习2
- 【笔记】嵌入式系统概述
- error: conflicting declaration ‘typedef struct
- 【稳定性day0】稳定性治理的三种思想—亚马逊、Netflix与蚂蚁金服
- pmp考试题目常见套路
- SSL证书中的通配符证书
- 好领导,六字诀“先之、劳之、无倦”,出自《论语》子路问政。子曰:“先之劳之。”请益,曰:“无倦。”
- 2008七款免费杀毒软件权威推荐
- 【译】浅谈SOLID原则
- 雷电模拟器9指针位置不显示,怎么办?
热门文章
- Android实例开发中按钮(Button)的四种点击方式的实现
- 2微信小程序的UI设计
- [Windows][卓越性能模式]win10上如何开启卓越性能模式?
- 正弦交流电的瞬时值、最大值、有效值
- R语言ggplot2可视化条形图:通过双色渐变配色颜色主题可视化条形图、为每个条形添加标签文本(geom_text函数)
- Inverting Visual Representations with Convolutional Networks论文理解
- 关于Euler-Poisson积分的几种解法
- 8芯网线中哪几根是有用的?
- thinkphp集成webuploader实战
- 【渝粤题库】陕西师范大学201951 明清小说史 作业