MySQL的SELECT查询基础

mysql的增删改查中,查询无疑是最重要的,增删改还是比较简单的,而查询就复杂的多,本篇文章试图全面解析查询语句 。
先导入数据库到或者其他的mysql客户端,本篇的数据库并不是简单的一张表,而是一个完整的员工系统,这样学习起来更加的真实 。
数据库文件:
有下面这几张表 。用到的时候再具体说明 。
建议每个表都看下,熟悉有什么字段,这几张表练习非常的好用 。
* FROM 表名
这是一个最简单的查询,在正式环境里面一般不会用,因为正式环境的表数据可能非常的大,直接查询整个表可能造成系统卡顿 。
我们查询数据比较少的一个表,这是一个地区表 。
【MySQL的SELECT查询基础】SELECT * FROM regions;
根据列名查询
一个表可能有非常多的列,有时我们只想查询几个列,可以使用类似下面的语句 。
SELECT 列名1,列名2,...列名n FROM 表名;
例如我们现在要查询这个表的员工id,名字和工资 。
SELECT employee_id,last_name,salary FROM `employees`
列名的别名
别名的最主要作用是方便阅读,可以用as关键字给 取别名为,这样简短一些,as并不是英文单词 。而是alias的缩写 。as可以被省略 。例如 lname可以不用写as,**还有一点是别名可以用双引号包裹,这样的主要用途是有些别名可能有空格 。**例如 “工 资”,我就想工资两个字中间有空格 。用单引号也不会报错,但这是因为mysql语法不严谨,按照ANSI的SQL标准,就是应该用双引号,用单引号直接报错 。
SELECT employee_id as empl_id,last_name lname,salary "工 资" FROM `employees`
使用去重
例如我们需要知道表有多少个,通过下面的语句查出的结果是有非常多的重复的,使用关键字就可以去重 。

MySQL的SELECT查询基础

文章插图
错误情况:
下面这样写是不行的,因为去重和和查询出来的行数是对不上的,会直接报错 。
这样写是没有错误的,表示对部门id和工资的查询结果去重 。
空值和空值参与运算
员工表有一个字段,这个字段表示绩效 。可以看到有些员工是没有绩效,绩效为null,null不等同于0,也不等同于‘’ 。null就是没有值的意思 。如果用null值参与运算,那么得到的结果还是null 。
例如年工资等于月工资*(1+)*12 ,因为有的员工为null,导致计算出的年工资也是null,对于mysql来说,这是合理的,但对于业务来说这是不合理的,要是把当成0不就可以了?这个想法会让你陷入误区,null不等于0 。
要实现年工资的功能也是可以的,null实际上就等同于没有赋值,如果为null的话,我们赋初值为0就行了 。可以通过语句来实现这个功能(后面会讲到) 。这样就可以实现年工资的功能了 。
反引号处理关键字
如果执行下面的语句,会发现报错,这是因为order是一个关键字,这里恰好有一个表正好叫order,要让sql正确的运行可以使用反引号处理关键字 。
SELECT * from order
写成下面这样就可以了 。
SELECT * from `order`
常量查询
有时候我们希望在查询结果前面添加一些东西,就可以通过常量查询来实现,可以是字符串,或者数值,字符串必须有双引号 。
用DESC显示表结构
使用desc或者 。
过滤查询
最简单的就是使用where语句 。
这里还有细节要说,在下,字符串也是不区分大小写的,在Linux下就区分大小写 。这里把‘King’改为‘king’也是可以查出结果的 。
练习
【题目】
1.查询员工12个月的工资总和,并起别名为
2.查询表中去除重复的以后的数据
3.查询工资大于12000的员工姓名和工资
4.查询员工号为176的员工的姓名和部门号
5.显示表的结构,并查询其中的全部数据
【答案】
1.查询员工12个月的工资总和,并起别名为
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.查询表中去除重复的以后的数据
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.显示表的结构,并查询其中的全部数据
DESC departments;SELECT * FROM departments;