在mysql中把查询结果去除重复记录【distinct】

如:select distinct job from emp;// 去除员工表工作字段中的重复记录


需要注意的是distinct只能出现在所有字段的最前方:

如 : 多字段去除重复的记录
select distinct ename, job ,sal from emp;


count() 函数 起到的作用是记数,统计数量

如:select count (distinct job) from emp;select      // 统计工作岗位的数量

在mysql中的连接查询:

2.1、什么是连接查询?
从一张表中单独查询,称为单表查询。
emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取 部门名字。
这种跨表查询,多张表联合起来查询数据,被称为连接查询。

2.2、连接查询的分类

根据语法的年代分类:
SQL92:1992年的时候出现的语法
SQL99:1999年的时候出现的语法
我们这里重点学习SQL99.(这个过程中简单演示一个SQL92的例子)

根据表连接的方式分类:
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接(左连接)
右外连接(右连接)
全连接(不讲)

当两张表进行连接查询,没有任何条件限制的时候,最终查询结果条数,是
两张表条数的乘积,这种现象被称为:笛卡尔积现象。(笛卡尔发现的,这是一个数学现象。)

连接查询如何避免笛卡尔积现象?
连接时加条件,满足这个条件的记录被筛选出来!

select
e.ename,d.dname
from
emp e, dept d
where
e.deptno = d.deptno; // 表起别名。很重要。效率问题。



内连接查询之等值连接查询:

查询每个员工所在部门名称,显示员工名和部门名?

sql 92 语法

select e.ename ,d.dname from emp e, dept d where e.deptno = d.deptno;

使用SQL99 语法进行查询

select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;


//inner可以省略(带着inner可读性更好!!!一眼就能看出来是内连接)
在我们的内连接查询中可以带有inner关键之(带有inner关键字的话效果更好可读性更强)但是inner关键字也可以省略不写。

select e.ename,d.dname
fromemp e
inner joindept d
one.deptno = d.deptno; // 条件是等量关系,所以被称为等值连接。

内连接之非等值连接

找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级?

select e.ename, e.sal, s.grade
fromemp e
inner joinsalgrade s
one.sal between s.losal and s.hisal; // 条件不是一个等量关系,称为非等值连接。

找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级并且升序排列

select e.ename , e.sal , s.grade from emp e inner join salgrade son e.sal between s.losal and hisalorder bye.sal asc;  


内连接查询之(自连接查询)

查询员工的上级领导,要求显示员工名和对应的领导名?

select e.ename ,e.empno, e.mgr from emp e;


技巧:一张表看成两张表。

select a.ename as '员工名', b.ename as '领导名'
fromemp a
joinemp b
ona.mgr = b.empno; //员工的领导编号 = 领导的员工编号


以上就是mysql的内连接查询
主义 :自连接查询将一张表看做是两张表

MYSQL的外连接查询:

内连接:(A和B连接,AB两张表没有主次关系。平等的。)

select e.ename,d.dname
fromemp e
joindept d
one.deptno = d.deptno; //内连接的特点:完成能够匹配上这个条件的数据查询出来。

在mysql中的外连接查询:分为左外连接查询和右外连接查询

select e.ename,d.dname
fromemp e
right outer join dept d
one.deptno = d.deptno;**//右外连接查询**

right代表什么:表示将join关键字右边的这张表看成主表,主要是为了将
这张表的数据全部查询出来,捎带着关联查询左边的表。
在外连接当中,两张表连接,产生了主次关系。

select e.ename,d.dname
fromdept d
left outer join emp e
one.deptno = d.deptno;**//左外连接查询**

带有right的是右外连接,又叫做右连接。
带有left的是左外连接,又叫做左连接。
任何一个右连接都有左连接的写法。
任何一个左连接都有右连接的写法。

外连接的查询结果条数一定是 >= 内连接的查询结果条数?
正确。

如:查询每个员工的上级领导,要求显示所有员工的名字和领导名?

select a.ename as '员工名', b.ename as '领导名'
fromemp a
left joinemp b
ona.mgr = b.empno;


三张表,四张表怎么连接?

语法:select ...fromajoinbona和b的连接条件joincona和c的连接条件right joindona和d的连接条件一条SQL中内连接和外连接可以混合。都可以出现!

如:找出每个员工的部门名称以及工资等级,
要求显示员工名、部门名、薪资、薪资等级?

select e.ename, d.dname, e.sal, s.grade
from emp ejoin dept don d.deptno = e.deptno // 等值连接joinsalgrade son e.sal between s.losal and s.hisal;     // 非等值链接


如:找出每个员工的部门名称以及工资等级,还有上级领导,
要求显示员工名、领导名、部门名、薪资、薪资等级?

select e.ename , e.mgr , d.dname,e.sal, s.grade,l.ename from emp e join dept d on e.deptno = d.deptno join salgrade s on e.sal between s.losal and hisalleft outer join  emp l  on e.mgr = l.empno;


MYSQL子查询:

select语句中嵌套select语句,被嵌套的select语句称为子查询。

子查询都可以出现在哪里呢?select..(select).from..(select).where..(select).

找出比最低工资高的员工姓名和工资?

第一步:查询最低工资是多少

select min(sal) as minsal from emp;


找出>800的

select ename, sal from emp where sal > 800;


两条语句合并:

select ename,sal from emp where sal >(select min(sal) as minsal from emp);


from子句中的子查询

注意:from后面的子查询,可以将子查询的查询结果当做一张临时表。(技巧)

找出每个岗位的平均工资的薪资等级。

第一步:找出每个岗位的平均工资(按照岗位分组求平均值)

select job,avg(sal) from emp group by job; // t表

第二步 :把以上的查询结果就当做一张真实存在的表t

select * from salgrade; // s表

t表和s表进行表连接,条件:t表avg(sal) between s.losal and s.hisal;

select t.*, s.grade // 查询t表中的所有字段,s表中的薪资等级字段from(select job,avg(sal) as avgsal from emp group by job) tjoinsalgrade s // 内连接查询ont.avgsal between s.losal and s.hisal; // 非等值连接


select后面出现的子查询(这个内容不需要掌握,了解即可!!!)

找出每个员工的部门名称,要求显示员工名,部门名?

select e.ename,e.deptno,(select d.dname from dept d where e.deptno = d.deptno) as dname from emp e;


union 关键字 合并查询结果集:

查询工作岗位是MANAGER和SALESMAN的员工?

 select ename '员工名字', job as '工作岗位' from emp where job = 'MANAGER' or job = 'SALESMAN';


同时还可以使用我们的union语句进行查询

select e.ename as '员工名字' , e.job as '工作岗位' from emp e where job ='MANAGER'unionselect e.ename as '员工名字' , e.job as '工作岗位' from emp e where job ='SALESMAN';


union的效率要高一些。对于表连接来说,每连接一次新表,
则匹配的次数满足笛卡尔积,成倍的翻。。。
但是union可以减少匹配的次数。在减少匹配次数的情况下,
还可以完成两个结果集的拼接。

union在使用的时候的注意事项:

union在进行结果集合并的时候,要求两个结果集的列数相同。
在oracle中由于语法严格 ,不可以,报错。要求:结果集合并时列和列的数据类型也要一致。

limit(非常重要)

完整用法:limit startIndex, length
startIndex是起始下标,length是长度。
起始下标从0开始。
缺省用法:limit 5; 这是取前5.

**按照薪资降序,取出排名在前5名的员工?select ename, sal from emp order by sal desc limit 0 ,5;
select ename, sal from emp order by sal desc limit 5;// **缺省写法**

select ename,salfromemporder by sal desclimit 5; //取前5
--------------------------------------------------------------select ename,salfromemporder by sal desclimit 0,5;

注意:mysql当中limit在order by之后执行!!!!!!

取出工资排名在[3-5]名的员工?

 select ename, sal from emp order by sal desc limit 2,3; // 表示的是从第三位开始取,取的位数长度是3


取出工资排名在[5-9]名的员工?

select ename,salfromemporder by sal desclimit4, 5;


分页:分页查询

每页显示3条记录第1页:limit 0,3     [0 1 2]第2页:limit 3,3     [3 4 5]第3页:limit 6,3     [6 7 8]第4页:limit 9,3     [9 10 11]

每页显示pageSize条记录
第pageNo页:limit (pageNo - 1) * pageSize , pageSize

公式是:记住limit (pageNo-1)*pageSize , pageSize
关于DQL语句的大总结:select ...from...where...group by...having...order by...limit...执行顺序?1.from2.where3.group by4.having5.select6.order by7.limit..

查考自动力节点的b站教程

mysql多表查询详解相关推荐

  1. mysql多表查询详解_MySQL多表查询详解上

    时光在不经意间,总是过得出奇的快.小暑已过,进入中暑,太阳更加热烈的绽放着ta的光芒,...在外面被太阳照顾的人们啊,你们都是勤劳与可爱的人啊.在房子里已各种姿势看我这篇这章的你,既然点了进来,那就由 ...

  2. Mysql 多表查询详解

    Mysql 多表查询详解 一.前言  二.示例 三.注意事项 一.前言  上篇讲到Mysql中关键字执行的顺序,只涉及了一张表:实际应用大部分情况下,查询语句都会涉及到多张表格 : 1.1 多表连接有 ...

  3. mysql单表查询详解

    文章目录 一.单表查询 1.1 创建数据库 1.2 单表查询 1.2.1 查询所有字段 1.2.2 使用通配符*查询所有字段 1.2.3 查询指定字段 1.2.4 去重distinct的使用 1.2. ...

  4. 七、MySQL 多表查询详解(附练习题及答案----超详细)

    文章目录 一.笛卡尔积(或交叉连接)的理解 二.多表查询分类讲解 2.1 分类1:等值连接 vs 非等值连接 2.2 分类2:自连接 vs 非自连接 2.3 分类3:内连接 vs 外连接 2.4 SQ ...

  5. mysql 联表比对,MySQL联表查询详解/超详细mysql left join,right join,inner join用法分析比较...

    超详细mysql left join,right join,inner join用法分析 下面是例子分析 表A记录如下: aID aNum 1 a20050111 2 a20050112 3 a200 ...

  6. mysql 联表详解_MySQL多表查询详解

    多表查询 1. 表与表之间的关系 <1> 一对一用户表和身份信息表,用户表是主表 男人表.女人表 create table man(mid int primary key auto_inc ...

  7. mysql 三个表内连接查询_MySQL多表查询详解

    多表查询 1. 表与表之间的关系 <1> 一对一 用户表和身份信息表,用户表是主表 男人表.女人表 create table man( mid int primary key auto_i ...

  8. mysql之慢查询详解,mysqldumpslow的使用

    简言 1. mysql中的慢查询是我们分析问题,定位问题的利器,巧妙使用可以快速解决问题 2. 原理:运行时间超过 long_query_time 的sql语句会被写入到慢查询日志文件中或者mysql ...

  9. MySQL 几种连表查询详解

    第一步:首先介绍表连接分类(内连接,外连接,交叉连接)和连接方法(如下): A)内连接:join,inner join B)外连接:left join,left outer join,right jo ...

最新文章

  1. 自定义全局按键修饰符
  2. 你可能不需要一个 JavaScript 框架(二)
  3. [IE技巧] IE Security Zone 的注册表设置
  4. [转载]Flash P2P 文件共享基础教程
  5. 需求分析的20条法则
  6. P2742 [USACO5.1]圈奶牛Fencing the Cows /【模板】二维凸包
  7. Oracle的 MODEL 查询
  8. Javascript 强制浏览器渲染Dom文档
  9. linux系统安装klocwork,linux下klocwork的使用
  10. react实现动画电子倒计时组件
  11. 最新10款好看的英文字体下载
  12. 水浒传 第三十六回 没遮拦追赶及时雨 船火儿夜闹浔阳江
  13. java读写二进制文件 移动指针 seek_文件与文件夹操作
  14. Lingo 中的各种函数
  15. 公有云厂商服务内容对比
  16. 戴尔服务器R730XD增加万兆光卡后风扇满速运转解决办法
  17. htc刷Android7.0,快来膜拜HTC神机HD2,谁说低配刷不了安卓7.0?
  18. MTK哪些芯片支援VoLTE Feature
  19. 如何用分布式Pollard-Rho法对椭圆曲线离散对数问题(ECDLP)进行攻击(上)
  20. inno setup基础使用教程

热门文章

  1. Error: The apk for your currently selected variant (app-release-unsigned.apk) is not signed. Please
  2. allegro 走线切换层_PCB 18种特殊走线的画法与技巧
  3. 谷歌浏览器 android4.4,谷歌发布移动版Chrome浏览器仅限Android4.0
  4. 组装计算机需要哪九件部件,组装各种电脑配件的规则是什么?组装电脑各配件规则介绍...
  5. XCode 苹果开发者账号,无法本地编译项目,问题所在 The app identifier “xxxx“ cannot be registered to your development team
  6. python词语匹配相似度_python文本相似度计算
  7. Jini技术常见问题解答
  8. bootmgr快速修复win7_Win7进入死亡倒计时,全国一半电脑要遭殃?
  9. Django中filer和get的区别
  10. 史上首次!苹果谷歌高调合作,打通iOS和安卓,蓝牙匿名追踪新冠接触者,5月上线