• MySQL的SELECT查询基础


    mysql的增删改查中,查询无疑是最重要的,增删改还是比较简单的,而查询就复杂的多,本篇文章试图全面解析查询语句。
    先导入数据库到navicat或者其他的mysql客户端,本篇的数据库并不是简单的一张表,而是一个完整的员工系统,这样学习起来更加的真实。
    数据库文件:
    https://pan.baidu.com/s/19pDAvmrPy2KYsfHPtbw0lQ?pwd=yzgr

    有下面这几张表。用到的时候再具体说明。
    建议每个表都看下,熟悉有什么字段,这几张表练习非常的好用。
    在这里插入图片描述

    SELECT * FROM 表名

    这是一个最简单的查询,在正式环境里面一般不会用,因为正式环境的表数据可能非常的大,直接查询整个表可能造成系统卡顿。
    我们查询数据比较少的一个表regions,这是一个地区表。

    SELECT * FROM regions;
    
    • 1

    在这里插入图片描述

    根据列名查询

    一个表可能有非常多的列,有时我们只想查询几个列,可以使用类似下面的语句。

    SELECT 列名1,列名2,...列名n FROM 表名;
    
    • 1

    例如我们现在要查询employees这个表的员工id,名字和工资。

    SELECT employee_id,last_name,salary FROM `employees`
    
    • 1

    在这里插入图片描述

    列名的别名

    别名的最主要作用是方便阅读,可以用as关键字给employee_id 取别名为empl_id,这样简短一些,as并不是英文单词。而是alias的缩写。as可以被省略。例如last_name lname可以不用写as,**还有一点是别名可以用双引号包裹,这样的主要用途是有些别名可能有空格。**例如salary “工 资”,我就想工资两个字中间有空格。用单引号也不会报错,但这是因为mysql语法不严谨,按照ANSI的SQL标准,就是应该用双引号,oracle用单引号直接报错。

    SELECT employee_id as empl_id,last_name lname,salary "工 资" FROM `employees`
    
    • 1

    在这里插入图片描述

    使用DISTINCT去重

    例如我们需要知道employees表有多少个department_id,通过下面的语句查出的结果是有非常多的重复的,使用distict关键字就可以去重。
    在这里插入图片描述
    在这里插入图片描述
    错误情况:

    下面这样写是不行的,因为salary去重和和department_id查询出来的行数是对不上的,会直接报错。
    在这里插入图片描述

    这样写是没有错误的,表示对部门id和工资的查询结果去重。

    在这里插入图片描述

    空值和空值参与运算

    员工表有一个commision_pct字段,这个字段表示绩效。可以看到有些员工是没有绩效,绩效为null,null不等同于0,也不等同于‘’。null就是没有值的意思。如果用null值参与运算,那么得到的结果还是null。
    在这里插入图片描述
    例如年工资等于月工资salary*(1+commission_pct)*12 ,因为有的员工commission_pct为null,导致计算出的年工资也是null,对于mysql来说,这是合理的,但对于业务来说这是不合理的,要是把commission_pct当成0不就可以了?这个想法会让你陷入误区,null不等于0。
    在这里插入图片描述
    要实现年工资的功能也是可以的,null实际上就等同于没有赋值,如果为null的话,我们赋初值为0就行了。可以通过IFNULL语句来实现这个功能(后面会讲到)。这样就可以实现年工资的功能了。
    在这里插入图片描述

    反引号处理关键字

    如果执行下面的语句,会发现报错,这是因为order是一个关键字,这里恰好有一个表正好叫order,要让sql正确的运行可以使用反引号处理关键字。

    SELECT * from order
    
    • 1

    写成下面这样就可以了。

    SELECT * from `order`
    
    • 1

    常量查询

    有时候我们希望在查询结果前面添加一些东西,就可以通过常量查询来实现,可以是字符串,或者数值,字符串必须有双引号。
    在这里插入图片描述

    用DESC显示表结构

    使用desc或者describe。
    在这里插入图片描述

    过滤查询

    最简单的就是使用where语句。
    在这里插入图片描述
    这里还有细节要说,在windows下,字符串也是不区分大小写的,在Linux下就区分大小写。这里把‘King’改为‘king’也是可以查出结果的。
    在这里插入图片描述

    练习

    【题目】
    1.查询员工12个月的工资总和,并起别名为ANNUAL SALARY
    2.查询employees表中去除重复的job_id以后的数据
    3.查询工资大于12000的员工姓名和工资
    4.查询员工号为176的员工的姓名和部门号
    5.显示表 departments 的结构,并查询其中的全部数据

    【答案】
    1.查询员工12个月的工资总和,并起别名为ANNUAL SALARY

    SELECT employee_id , last_name,salary * 12 "ANNUAL SALARY" FROM employees; 
    SELECT employee_id,last_name,salary * 12 * (1 + IFNULL(commission_pct,0)) "ANNUAL SALARY" FROM employees;
    
    • 1
    • 2

    2.查询employees表中去除重复的job_id以后的数据

    SELECT DISTINCT job_id FROM employees;
    
    • 1

    3.查询工资大于12000的员工姓名和工资

    SELECT last_name,salary FROM employees WHERE salary>12000;
    
    • 1

    4.查询员工号为176的员工的姓名和部门号

    SELECT last_name,department_id FROM employees WHERE employee_id=176;
    
    • 1

    5.显示表 departments 的结构,并查询其中的全部数据

    DESC departments;
    SELECT * FROM departments;
    
    • 1
    • 2
  • 相关阅读:
    RPC协议
    最棘手的Java面试题(上)
    SPDK——每秒8千万次I/O性能实现
    mybatis-plus自动生成
    搭建私有仓库Nexus的流程以及npm包的开发和发布
    (202402)多智能体MetaGPT入门2:AI Agent知识体系结构
    生态系统长期观测数据产品体系
    2022年IB六大组别7分率情况分析
    震惊!我竟然在1080Ti上加载了一个35亿参数的模型(ZeRO, Zero Redundancy Optimizer)
    使用WorkBook遍历excel,并封装数据到实体类,之后转成json格式给前端使用
  • 原文地址:https://blog.csdn.net/ScottePerk/article/details/126329321