第04章01节 查询DQL——简单查询

简单查询

查询是SQL语言的核心,用于表达SQL查询的select查询命令是功能最强也是最为复杂的SQL语句,它的作用就是从数据库中检索数据,并将查询结果返回给用户。 select语句由:select子句(查询内容)、from子句(查询对象)、where子句(查询条件)、order by子句(排序方式)、group by子句(分组方式)等组成。查询语句属于SQL语句中的DQL语句,是所有SQL语句中最为复杂也是最重要的语句,所以必须掌握。接下来我们先从简单查询语句开始学习。

一、查一个字段


查询一个字段说的是:一个表有多列,查询其中的一列。
语法格式:select 字段名 from 表名;

  • select和from是关键字,不能随便写
  • 一条SQL语句必须以“;”结尾
  • 对于SQL语句来说,大小写都可以
  • 字段名和表名属于标识符,按照表的实际情况填写,不知道字段名的,可以使用desc命令查看表结构

案例1:查询公司中所有员工编号

1
select empno from emp; 

image.png
案例2:查询公司中所有员工姓名

1
SELECT ENAME FROM EMP;

image.png

在mysql命令行客户端中,sql语句没有分号是不会执行的:

image.png
末尾加上“;”就执行了:

image.png
以上sql虽然以分号结尾之后执行了,但是报错了,错误信息显示:语法错误。
假设一个SQL语句在书写过程中出错了,怎么终止这条SQL呢?\c

image.png

  • 任务1:查询所有部门名称。
  • 任务2:查询所有薪资等级。

二、查多个字段


查询多个字段时,在字段名和字段名之间添加“,”即可。
语法格式:select 字段名1,字段名2,字段名3 from 表名;
案例1:查询员工编号以及员工姓名。

1
select empno, ename from emp;

image.png

字段的前后顺序无所谓(只是显示结果列的时候顺序变了):

1
select ename, empno from emp;

image.png

  • 任务1:查询部门编号、部门名称以及位置。
  • 任务2:查询员工的名字以及工作岗位。

三、查所有字段


查询所有字段的可以将每个字段都列出来查询,也可以采用“*”来代表所有字段
案例1:查询员工的所有信息

1
select * from emp;

image.png
案例2:查询所有部门信息

1
select * from dept;

image.png
采用“*”进行查询存在的缺点:

  • select * from dept; 在执行的时候会被解析为 select DEPTNO, DNAME, LOC from dept; 再执行,所以这种效率方面弱一些。
  • 采用“”的可读性较差,通过“”很难看出都有哪些具体的字段。

什么时候使用“*”?

  • 这个SQL语句不在项目编码中使用,如果平时自己想快速查看表中所有数据的话,这种写法还是很给力的。

  • 任务1:查询所有的薪资等级以及每个薪资等级的最低工资和最高工资。

四、查询时字段可参与数学运算


在进行查询操作的时候,字段是可以参与数学运算的,例如加减乘除等。
案例1:查询每个员工的月薪

1
select ename, sal from emp;

image.png

案例2:查询每个员工的年薪(月薪 * 12)

1
select ename, sal * 12 from emp;

image.png

  • 任务1:查询每个员工月薪加1000之后的月薪
  • 任务2:查询每个员工月薪加1000之后的年薪

五、查询时字段可起别名


我们借用一下之前的SQL语句

1
select ename, sal * 12 from emp;

image.png
以上的查询结果列名“sal * 12”可读性较差,是否可以给查询结果的列名进行重命名呢?

5.1 as关键字

  • 使用as关键字
    1
    select ename, sal * 12 as yearsal from emp;
    image.png
    通过as关键字起别名后,查询结果列显示yearsal,可读性增强。

5.2 省略as关键字

  • 其实as关键字可以省略,只要使用空格即可

    1
    select ename, sal * 12 yearsal from emp;

    image.png

  • 通过以上测试,得知as可以省略,可以使用空格代替as,但如果别名中有空格呢?

5.3 别名中有空格

1
select ename, sal * 12 year sal from emp;

image.png
可以看出,执行报错了,说语法有问题,这是为什么?分析一下:SQL语句编译器在检查该语句的时候,在year后面遇到了空格,会继续找from关键字,但year后面不是from关键字,所以编译器报错了。怎么解决这个问题?

记住:如果别名中有空格的话,可以将这个别名使用双引号或者单引号将其括起来。

1
2
select ename, sal * 12 "year sal" from emp;
select ename, sal * 12 'year sal' from emp;

image.png
在mysql中,字符串既可以使用双引号也可以使用单引号,但还是建议使用单引号,因为单引号属于标准SQL。

5.4 别名中有中文

  • 如果别名采用中文呢?

    1
    select ename, sal * 12 年薪 from emp;

    image.png
    别名是中文是可以的,但是对于低版本的mysql来说会报错,需要添加双引号或单引号。我们当前使用的mysql版本是:8.0.24

  • 任务:查询所有员工的信息,要求每个字段名采用中文显示。