• MySqL速成教程笔记系列七


    distinct关键字

    把查询结果去除重复记录,注意:原表数据不会被修改,知识查询结果去重。
    需要的关键字是:distinct

    例子:
    查询emp表中的工作岗位
    select distinct job from emp;
    在这里插入图片描述
    注意:
    select ename,distinct job from emp;
    //这样编写是错误的,语法错误
    //distinct只能出现在所有字段的最前方

    //distinct出现在job和deptno两个字段之前,表示两个字段联合起来去重。
    select distinct job,deptno from emp;
    在这里插入图片描述
    统计一下工作岗位的数量
    select count(distinct job) from emp;
    在这里插入图片描述

    连接查询

    从一张表中单独查询,称为单表查询

    emp表和dept表联合起来查询数据,从emp表中取员工名字,从dept表中取部门名字。这种跨表查询,多张表联合起来查询数据,被称为连接查询

    (1)分类
    根据表连接的方式分类:
    内连接:
    等值连接
    非等值连接
    自连接

    外连接:
    左外连接(左连接)
    右外连接(右连接)

    全连接

    (2)两张表连接没有任何条件限制时
    select ename,dname from emp,dept;
    在这里插入图片描述
    会发生笛卡尔积现象 。
    为了避免这种现象,需要添加连接时的条件。
    select ename,dname from emp,dept where emp.deptno=dept.deptno;
    在这里插入图片描述
    思考:最终显示的查询结果减少了,但是匹配的过程有简单吗?
    没有!!!!

    为了再提高效率,可以给表取个别名。
    select ename,dname from emp e,dept d where e.deptno=d.deptno;
    在这里插入图片描述
    (3)内连接之等值连接

    案例:查询每个员工所在部门名称,显示员工名和部门名。

    SQL92语法:
    select e.ename,d.dname from emp e,dept d where e.deptno=d.deptno;

    缺点:结构不清晰,表的连接条件和后期进一步筛选的条件,都放到了where后面。
    在这里插入图片描述
    SQL99语法:
    select e.ename,d.dname from emp e join dept d on e.deptno = d.deptno;
    (条件是等值条件,所以是等值连接)

    优点:表连接的条件是独立的,连接之后,如果还需要进一步筛选,再往后继续添加where
    在这里插入图片描述select e.ename,d.dname from emp e inner join dept d on e.deptno = d.deptno;
    (inner可以省略,但是带着inner可读性更好,一看就是内连接)
    在这里插入图片描述
    (4)内连接之非等值连接
    例子:找出每个员工的薪资等级,要求显示员工名、薪资、薪资等级。

    首先看看emp表和salgrade表。
    select * from emp;
    在这里插入图片描述

    select * from salgrade;
    在这里插入图片描述
    然后发现连接条件是sal在losal和hisal之间。

    select ename,sal,grade from emp inner join salgrade on sal between losal and hisal;
    在这里插入图片描述
    (5)内连接之自连接
    例子:查询员工的上级领导,要求显示员工名和对应的领导名。

    首先看看emp表:
    select * from emp;
    在这里插入图片描述
    思路:
    需要找到的是员工的ename,员工的mgr对应的ename,
    所以需要找emp表两次
    第一次找员工的ename 和 他的mgr
    第二次根据mgr找到对应的ename,也就是上级领导的名字。

    于是可以把emp表a看成员工表,emp表b看成领导表
    在a表中找到的ename是员工名字,b表中找到的ename也就是领导的名字。

    连接的条件就是a表中的mgr和b表中的empno相等。
    因为a表中的mgr是员工的领导,而b表中的empno已经看成了是领导的工号。

    select a.ename,b.ename from emp a join emp b on a.mgr=b.empno;
    在这里插入图片描述
    自连接技巧:一张表看作两张表。

  • 相关阅读:
    如何使用大语言模型来绘制图画
    力扣 8. 字符串转换整数 (atoi)
    jmeter实现webservice接口测试
    opencv形态学-腐蚀
    【Linux/Ubuntu】 部署docker时遇到的问题
    TX Text Control .NET Server for ASP.NET 31.0
    在没有硬盘的情况下进行电脑数据迁移
    解析java线程中的常用方法
    什么是视觉特效师,我如何才能成为一名艺术家?
    VS 调试Hololens 2工程报错 有未经处理的异常: Microsoft C++ 异常:
  • 原文地址:https://blog.csdn.net/weixin_54248223/article/details/127471911