MySQL的SELECT查询基础

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

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

SELECT * FROM 表名

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

SELECT * FROM regions;

在这里插入图片描述

根据列名查询

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

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

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

SELECT employee_id,last_name,salary FROM `employees`

在这里插入图片描述

列名的别名

别名的最主要作用是方便阅读,可以用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`

在这里插入图片描述

使用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

写成下面这样就可以了。

SELECT * from `order`

常量查询

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

用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;

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

SELECT DISTINCT job_id FROM employees;

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

SELECT last_name,salary FROM employees WHERE salary>12000;

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

SELECT last_name,department_id FROM employees WHERE employee_id=176;

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

DESC departments;
SELECT * FROM departments;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值