理论依据:笛卡尔积

通过笛卡尔乘积,把两个或多个表变成一个大表,里面包含了有效的、无效的记录(需要添加条件进行过滤数据)。

语法:

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='金小子');

  1. 子查询一定要放在小括号中,优先查询;
  2. 子查询放在查询条件的右边,充当搜索值;
  3. 子查询分为单行子查询、多行子查询

单行子查询:子查询返回的结果只有一行,一个值(一个列)

多行子查询:子查询返回的结果是多个行,多个值(一个列)

单行子查询的运算符:=,!=,<,<=,>,>=,<>

多行子查询的运算符: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 多表联合查询相关推荐

  1. mysql教程详解之多表联合查询,MYSQL教程mysql多表联合查询返回一张表的内容实现代码...

    搜索热词 <MysqL教程MysqL多表联合查询返回一张表的内容实现代码>要点: 本文介绍了MysqL教程MysqL多表联合查询返回一张表的内容实现代码,希望对您有用.如果有疑问,可以联系 ...

  2. springboot+mybatis+mysql 多表联合查询

    ###springboot+mybatis+mysql 多表查询 这里有两张表 用户表和用户信息表user.info 两个实体类展示他们一对一的关系 通过springboot注解的方式实现多表联合查询 ...

  3. MySQL 多表联合查询有何讲究?

    今天我们来聊聊微信中的多表联合查询,应该是小表驱动大表还是大表驱动小表? 1. in VS exists 在正式分析之前,我们先来看两个关键字 in 和 exists. 假设我现在有两张表:员工表和部 ...

  4. MySQL多表联合查询

    阅读目录 部门.员工表数据 内连接 inner join 外连接 outer join 左外连接 右外连接 自连接 联合查询 交叉连接 cross join 笛卡尔积 子查询 标量子查询 列子查询 行 ...

  5. mysql多表联合查询练习题

    1.查询至少有一个员工的部门,显示部门编号,部门名称,部门位置,部门人数 /*1.查询至少有一个员工的部门,显示部门编号,部门名称,部门位置,部门人数列:d.deptno, d.dname, d.lo ...

  6. MYSQL多表联合查询排序

    主要思想:先联合查询数据,再对查询结果按照某标签进行排序 code: String sql = "SELECT * FROM (SELECT task.idTask,task.task_na ...

  7. Mysql 多表联合查询效率分析及优化

    1. 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: [sql] view plaincopy print? S ...

  8. mysql 多表联合查询怎么一行显示_使用 explain 优化你的 mysql 性能

    本文是关于在学习<高性能 Mysql>附录 D 中关于 Explain 如何获取执行计划信息相关总结.MySQL 提供了一个 EXPLAIN 命令,它可以对 SELECT 语句进行分析,获 ...

  9. mysql多表联合查询事例_MySQL——多表查询详细介绍以及实例

    1.表与表之间的关系 一对一:用户表和身份信息表,用户表是主表 例如:男人表 .女人表create table man( mid int primary key auto_increment, mna ...

  10. mysql 多表 查询慢_详解Mysql多表联合查询效率分析及优化

    1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOI ...

最新文章

  1. lol个服务器在线人数,LOL除国服外,全球在线人数达1380万,韩服最多380万
  2. tcpdump命令---Linux学习笔记
  3. 五:Java+SpringBoot集成SwaggerUI
  4. oracle索引大小暴增_oracle海量数据中提升创建索引的速度
  5. JSJQuery必备技能
  6. 【Caffe代码分析】DataLayer
  7. MatConvNet对自己的图片分两类及提取图片特征
  8. php 阿里短信接口
  9. 零信任学习系列一——研读NIST零信任架构(正式版)
  10. 将本地调试gdb移植到arm板
  11. Linux系统 (二)- 指令学习2
  12. 【笔记】嵌入式系统概述
  13. error: conflicting declaration ‘typedef struct
  14. 【稳定性day0】稳定性治理的三种思想—亚马逊、Netflix与蚂蚁金服
  15. pmp考试题目常见套路
  16. SSL证书中的通配符证书
  17. 好领导,六字诀“先之、劳之、无倦”,出自《论语》子路问政。子曰:“先之劳之。”请益,曰:“无倦。”
  18. 2008七款免费杀毒软件权威推荐
  19. 【译】浅谈SOLID原则
  20. 雷电模拟器9指针位置不显示,怎么办?

热门文章

  1. Android实例开发中按钮(Button)的四种点击方式的实现
  2. 2微信小程序的UI设计
  3. [Windows][卓越性能模式]win10上如何开启卓越性能模式?
  4. 正弦交流电的瞬时值、最大值、有效值
  5. R语言ggplot2可视化条形图:通过双色渐变配色颜色主题可视化条形图、为每个条形添加标签文本(geom_text函数)
  6. Inverting Visual Representations with Convolutional Networks论文理解
  7. 关于Euler-Poisson积分的几种解法
  8. 8芯网线中哪几根是有用的?
  9. thinkphp集成webuploader实战
  10. 【渝粤题库】陕西师范大学201951 明清小说史 作业