CT的MySQL学习(二)——检索数据

二、MySQL检索数据

1 基础查询

基础查询语法:
SELECT 查询列表 FROM 表名;

特点:

  • 查询列表可以是:表中的字段、常量值、表达式、函数;
  • 查询的结果是一个虚拟的表格。

1.1 单列多列查询

  1. 查询表中的单个列:
    SELECT last_name FROM employees;
  2. 查询表中的多个列:
    SELECT first_name,last_name FROM employees;
  3. 查询表中的所有列:
    SELECT * FROM employees;
    注意此方式查找出的所有列的顺序为表中定义的顺序。

1.2 检索不同的行(去重)

使用DISTINCT关键字,可以去掉列中重复的值,只显示不同的值。

使用SELECT manager_id FROM employees;时,可以看到显示了重复的manager_id值。
在这里插入图片描述
使用DISTINCT关键字:
SELECT DISTINCT manager_id FROM employees;
可以看到只显示了不同的值。
在这里插入图片描述

1.3 限制结果

使用LIMIT关键字,可以只返回指定的行数。
输入:
SELECT last_name FROM employees LIMIT 5;
在这里插入图片描述

输入:
SELECT last_name FROM employees LIMIT 5,5;
此时指的是从行5开始的前5行(当然行数从0开始)
在这里插入图片描述

2 排序检索的数据

  • 按单列排序:
    SELECT last_name FROM employees ORDER BY last_name;
    在这里插入图片描述

  • 按多列排序:在排序方式一内容相同的情况下,按排序方式二排序。
    SELECT last_name,first_name FROM employees ORDER BY last_name,first_name;

  • 默认排序:字符(从A到Z),数字从小到大。

  • 指定方向排序:DESC关键字可以将默认排序方式反向。
    SELECT last_name FROM employees ORDER BY last_name DESC;
    在这里插入图片描述

3 数据过滤

数据库一般包含大量数据。只检索所需数据需要指定搜索条件,也称为过滤条件。在SELECT语句中,我们可以通过使用WHERE子句中指定的搜索条件进行过滤。

首先,我们使用默认排序显示employees表中的salary:
SELECT salary FROM employees ORDER BY salary;
在这里插入图片描述
使用WHERE子句添加检索条件salary>5000:
SELECT salary FROM employees WHERE salary>5000 ORDER BY salary;
在这里插入图片描述

3.1 WHERE子句操作符

类似>之类的操作符包括以下几种。

操作符说明
=等于
<>不等于
!=不等于
<小于
<=小于等于
>大于
>=大于等于
BETWEEN在指定的两个值之间

3.2 范围值检查

使用WHERE子句中的BETWEEN操作符设定在指定了两个值之间的范围,两个值之间必须用AND连接。
SELECT salary FROM employees WHERE salary BETWEEN 5000 AND 6200 ORDER BY salary;
在这里插入图片描述

3.3 空值检查

空值NULL与0、空格不同。是使用WHERE子句的IS NULL来检索
SELECT manager_id FROM employees WHERE manager_id IS NULL;
在这里插入图片描述

3.4 AND操作符与OR操作符

在WHERE子句中可以使用AND或OR来连接多个WHERE子句:

  1. AND语句:“与”
    检索salary>5000且id<110的行。每添加一个条件使用一个AND。
    SELECT employee_id,first_name,salary FROM employees WHERE salary>5000 AND employee_id<110;
    在这里插入图片描述
  2. OR语句:“或”
    检索salary<5000或salary>10000的行。
    SELECT employee_id,first_name,salary FROM employees WHERE salary<5000 OR salary>10000;
    在这里插入图片描述
    说明:
    当AND和OR同时出现时,优先计算AND语句。例如,
    SELECT employee_id,first_name,salary FROM employees WHERE salary<5000 OR salary>10000 AND employee_id <110;
    在这里插入图片描述
    我输入语句的目的:输出id<110中salary<5000或salary>10000的员工。
    实际输出:输出salary<5000的员工(无论id)或者id<110且salary>10000的员工
    二者不相同,因为MySQL优先计算AND语句。为了解决这种问题,建议使用()将条件包裹起来,手动设置优先级。
    SELECT employee_id,first_name,salary FROM employees WHERE (salary<5000 OR salary>10000) AND employee_id <110;
    在这里插入图片描述

此时的输出就是我们想要的结果了。

3.5 IN操作符

IN操作符类似于OR操作符连接。括号中的即为所有合法值清单,而非范围。
找出salary=5000或salary=10000的员工
SELECT employee_id,first_name,salary FROM employees WHERE salary IN(5000,10000);
在这里插入图片描述

3.6 NOT操作符

NOT操作符只有一个用处,否定后面的语句,即取反。
找出salary在5000-10000的员工(我故意写复杂以显示NOT的作用)
SELECT employee_id,first_name,salary FROM employees WHERE NOT (salary<5000 OR salary>10000);
在这里插入图片描述

4 使用通配符过滤

LIKE操作符指示MySQL,后跟的搜索模式为通配符匹配而不是相等匹配。

  1. 百分号(%)通配符
    %表示任意字符出现任意次数。
    展示id中以’1’结尾的员工。
    SELECT employee_id,first_name,salary FROM employees WHERE employee_id LIKE '%1';
    在这里插入图片描述
    与此相同,’1%‘指以’1‘开头的值,’%1%‘指值中带有’1‘即满足条件。

  2. 下划线(_)操作符
    _指单个字符,仅仅只有一个!!
    查找id中以1结尾且前面仅有一个字符的值。
    SELECT employee_id,first_name,salary FROM employees WHERE employee_id LIKE '_1';
    在这里插入图片描述
    将上一条语句的%改为_,查询不到任何值。这是因为_只代表一个字符,所以如果能搜仅能搜到“81”,”71“之类的值,但我这的id三位数起步,嘻嘻。

5 使用正则表达式搜索

5.1 基本字符匹配

检索id中带有’13’的所有行
SELECT employee_id,first_name,salary FROM employees WHERE employee_id REGEXP '13';
在这里插入图片描述
是不是感觉上与LIKE语句类似。但是,我们使用LIKE语句时
SELECT employee_id,first_name,salary FROM employees WHERE employee_id LIKE '13';
在这里插入图片描述
没有结果。这是因为,LIKE语句检索的是整行,而正则表达式检索的是行中有没有相关字段。当然我们也可以使用LIKE+通配符实现:
SELECT employee_id,first_name,salary FROM employees WHERE employee_id LIKE '%13%';

说明:
我们还可以使用.来匹配任意一个字符来增加过滤条件。
在这里插入图片描述

5.2 进行OR匹配

我们可以在正则表达式中使用|来达成”或“的效果。
查找id为135或150的员工
SELECT employee_id,first_name,salary FROM employees WHERE employee_id REGEXP '135|150';
在这里插入图片描述

5.3 匹配特定字符

如果只想匹配特定的字符,可以使用[]。
[12]意味匹配1或2,所以整体来讲即为匹配id为100或200的员工
SELECT employee_id,first_name,salary FROM employees WHERE employee_id REGEXP '[12]00';
在这里插入图片描述
可以使用^对结果取反

5.4 匹配范围

集合可以用来匹配范围内的一个或多个字符:如[0-5]
查找id为1开头,0结尾,中间为0到5的员工。
SELECT employee_id,first_name,salary FROM employees WHERE employee_id REGEXP '1[0-5]0';
在这里插入图片描述

5.5 匹配特殊字符

当我们需要匹配类似.,[]之类的字符时,我们需要用到转义字符\\
使用转义后,搜索带.的salary。
SELECT employee_id,first_name,salary FROM employees WHERE salary REGEXP '10000\\.00';
在这里插入图片描述
说明:\\也被用来引用空白元字符。

元字符说明
\\f换页
\\n换行
\\r回车
\\t制表
\\v纵向制表
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页