当前位置: 首页 > article >正文

like字符通配符%_、查询空值、去重、and、or、MySQL数据库 - 单表查询(二)(头歌实践教学平台)

文章目的初衷是希望学习笔记分享给更多的伙伴,并无盈利目的,尊重版权,如有侵犯,请官方工作人员联系博主谢谢。

目录

第1关:带 LIKE 的字符匹配查询

任务描述

相关知识

使用通配符%模糊匹配数据内容

使用通配符_模糊匹配数据内容

编程要求

第2关:查询空值与去除重复结果

任务描述

相关知识

查询空值

去除重复结果

编程要求

 第3关:带 AND 与 OR 的多条件查询

任务描述

相关知识

带AND关键字的多条件查询

带OR关键字的多条件查询

编程要求


第1关:带 LIKE 的字符匹配查询

任务描述

本关任务:使用通配符%检索数据表中指定字段的数据。

相关知识

为了完成本关任务,你需要掌握:如何使用通配符%模糊匹配数据内容。

在前面的检所操作中,我们讲述了如何进行比较查询或者是范围查询,但如果我们想查找所有包含字符ir的内容该么办呢?用之前的方法好像行不通了。在这里,我们需要用通配符进行匹配查找。而执行匹配查找的关键字就是LIKESQL语句支持很多种通配符,其中可以和LIKE一起搭配使用的就是通配符%_了。

使用通配符%模糊匹配数据内容

百分号通配符%可以匹配任意长度的字符,甚至包括零字符。

语法规则为: SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符%'; 。 其中 % 的位置可以根据需要在字符间变化。

举个例子 假设我们现在有一张表Mall_products,内容如下:

我们将使用LIKE关键字和通配符%检索出所有商品名称带ir的商品信息。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_name LIKE '%ir%';

结果为:

分析:

该语句查询的结果返回所有商品的名字中间带ir字符的所有信息。通配符%告诉MySQL,返回字符串中间带ir字符的记录,不管ir前面和后面分别有多少字符。

通配符%可以放在不同的位置以满足你查询的需要,仔细想想,如果我们想要查找商品名称以B开头的所有记录,%应该放在哪里?

查询过程如下:

使用通配符_模糊匹配数据内容

下划线通配符_与百分号通配符%类似,也用于模糊匹配。但是区别在于下划线通配符_只能模糊匹配1个字符。如果你执意想用下划线通配符_匹配多个字符,那只能多用几个_咯!

语法规则为: SELECT 字段名 FROM 表名 WHERE 字段名 LIKE '字符_'; 。 其中`_`的位置可以根据需要在字符间变化。

举个例子 假设我们现在有一张表Mall_products,内容如下:

我们将使用LIKE关键字和通配符_检索出所有商品名称以r结尾,且前边有9个字母的商品信息。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_name LIKE '_________r';

结果为:

看到查询结果中prod_name对应的Teddy bear,大家可能注意到了,我们把空格也当成了一个字符来计算。

查询过程如下:

好了,下面轮到你们来上手试试了!

编程要求

根据提示,在右侧编辑器Begin-End处补充代码;

我们为你新建了一个数据表tb_emp,结构如下:

  • 请你查询所有Name以字母C为起始的员工的NameSalary的内容;

测试说明

我会对你编写的代码进行测试,最终结果会如下图所示:

USE Company;

select Name,Salary
from tb_emp
where Name like 'C%';

第2关:查询空值与去除重复结果

任务描述

本关任务:使用关键字IS NULL检索数据表中指定的字段的空值;使用关键字DISTINCT检索数据表中指定的不重复的内容。

相关知识

为了完成本关任务,你需要掌握: 1.如何使用关键字IS NULL检索数据表中的空值, 2.使用关键字DISTINCT检索数据表中不重复的内容。

查询空值

在数据表创建之初,创建者可以指定某个字段是否为空值NULL。注意了,这个NULL既不代表0,也不代表空字符,而是代表一种未知的状态,比如不适用或者放着等将来有合适数据了再添加进去。

语法规则为: SELECT 字段名 FROM 表名 WHERE 字段名 IS NULL; 。

举个例子 假设我们现在有一张表Mall_products,内容如下:

我们将使用IS NULL关键字检索出所有prod_country字段为NULL的商品信息。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_country IS NULL;

结果为:

查询过程如下:

可以看到,结果成功显示了prod_country字段为NULL的商品信息。与关键字IS NULL查询结果相反的是关键字IS NOT NULL,我们来看看实际操作的效果。

查询代码如下:

SELECT *
FROM Mall_products
WHERE prod_country IS NOT NULL;

结果为:

查询过程如下:

可以看到,查出来了prod_country字段的非NULL记录。

去除重复结果

有的时候,出于对数据分析的要求,分析人员需要消除数据表中重复的数据,那么如何消除呢?别担心,SQL语句也贴心的为你准备好了消除重复数据的关键字DISTINCT

语法规则为: SELECT DISTINCT 字段名 FROM 表名; 。

举个例子 假设我们现在有一张表Mall_products,内容如下:

可以从表中看到,除了字段ID没有重复项,剩下的字段里都出现了重复项。

我们将使用DISTINCT关键字去除prod_name字段中的重复数据。

查询代码如下:

SELECT DISTINCT prod_name, prod_country, prod_price
FROM Mall_products;

结果为:

查询过程如下:

可以看到,使用了关键字DISTINCT后,我们返回的记录都不再有重复值。


编程要求

根据提示,在右侧编辑器Begin-End处补充代码:

我们为你新建了一个数据表tb_emp,内容如下:

  • 使用关键字IS NULL返回数据表中字段DeptIdNULL的所有字段的内容,注意,返回的是指定行所有字段的内容;

  • 使用关键字DISTINCT返回数据表中字段Name不重复的内容,注意,只需返回字段Name的内容。

测试说明

我会对你编写的代码进行测试,最终结果会如下图所示:

USE Company;

######### Begin ##########
SELECT * FROM tb_emp WHERE DeptId IS NULL;##选择DeptId为NULL的

######### End #########

######### Begin #########
SELECT DISTINCT Name FROM tb_emp;##选择Name只有唯一值的

######### End #########

 第3关:带 AND 与 OR 的多条件查询

任务描述

本关任务:使用关键字AND检索数据表中指定的字段的内容;使用关键字IN检索数据表中指定的字段的内容。

相关知识

为了完成本关任务,你需要掌握: 1.如何使用关键字AND检索数据表中指定的字段的内容, 2.使用关键字IN检索数据表中指定的字段的内容。

AND关键字的多条件查询

大家在前两章使用WHERE关键字限定查询内容的时候,有没有注意到我们使用的都是单一条件查询。有没有同学曾经在检索的时候觉得力不从心:“我需要的结果只用单一条件查询是得不到的呀!”

比如,我既想要成熟苹果中直径大于5cm的苹果的品种,又想要成熟苹果果色为黄色的苹果的品种。这两个条件如何综合在一起进行检索呢?

MySQLWHERE子句中使用AND操作符限制只有满足所有条件的查询才会被返回。可以使用AND连接两个甚至更多个查询条件,多个条件表达式之间用AND分开。

语法规则为: SELECT 字段名 FROM 表名 WHERE 表达式1 AND 表达式2; 。

举个例子 假设我们现在有一张表Mall_products,内容如下:

我们想要查询表中哪些商品不仅商品名中带有toy字符,单价又同时大于5,并列出他们的商品信息。

查询代码如下:



  1. SELECT *
  2. FROM Mall_products
  3. WHERE prod_name LIKE '%toy%' AND prod_price > 5;

结果为:

查询过程如下:

分析:

在这个例子中,WHERE子句中的条件分为了两部分,AND关键字指示MySQL返回所有同时满足两个条件的内容。单独满足带toy字符后者单独满足价格大于5都得不到我们想要查询的结果。

小提示: 可以同时添加多个过滤条件,增加条件的同时只需增加一个 AND 关键字。

OR关键字的多条件查询

AND相反,在WHERE声明中使用OR关键字表示只需满足两个条件中的其中一个条件即可返回结果。

语法规则为: SELECT 字段名 FROM 表名 WHERE 表达式1 OR 表达式2; 。

举个例子 假设我们现在有一张表Mall_products,内容如下:

我们想要查询表中商品IDBNBG01BR01的名称和单价。

查询代码如下:



  1. SELECT ID, prod_name, prod_price
  2. FROM Mall_products
  3. WHERE ID = 'BNBG01' OR ID = 'BR01';

结果为:

查询过程如下:

分析:

在这个例子里,关键字OR告诉MySQL只需要满足其中一个条件就可以返回结果,恩,很幸运的是它两个条件都能满足,所以返回了所有条件的结果。这里我们如果使用关键字AND,将不会得到任何结果。

小提示: OR 可以和 AND 一起使用。但是 AND 的优先级要高于 OR 的优先级!

在这里我们不得不提到关键字IN,它能实现与OR相同的功能。

比如以下代码的功能和该例中的代码功能是一样的:



  1. SELECT ID, prod_name, prod_price
  2. FROM Mall_products
  3. WHERE ID IN('BNBG01', 'BR01');
小提示: 虽然两种写法功能一样,但是我们更推荐使用 IN 关键字。因为它不仅逻辑清晰,执行的速度也会快于 OR 关键字。更重要的是,使用 IN 关键字,我们以后可以执行更加复杂的嵌套语句。

好了,下面轮到你们来上手试试了!

编程要求

根据提示,在右侧编辑器Begin-End处补充代码:

我们为你新建了一个数据表tb_emp,内容如下:

结构如下:

  • 使用关键字AND返回数据表中字段DeptId301并且薪水大于3000的所有字段的内容,其中DeptId的倒数第二个字母为i的大写;

  • 使用关键字IN返回数据表中字段DeptId301303的所有字段的内容。

测试说明

我会对你编写的代码进行测试,最终结果会如下图所示:

USE Company;

######### Begin #########
select * from tb_emp where DeptId=301 and Salary >3000;

######### End #########

######### Begin #########
select * from tb_emp where DeptId in('301','303');

######### End #########


http://www.kler.cn/a/9957.html

相关文章:

  • LeetCode【0018】四数之和
  • 现代Web开发:Vue 3 组件化开发实战
  • uniapp分享功能
  • 小程序中引入下载到本地的iconfont字体图标加载不出来问题解决
  • docker compose 多个 Dockerfile
  • PyTorch版本的3D网络Grad-CAM可视化实验记录
  • 【数据结构】栈各个接口的实现
  • 详解AUTOSAR:Green Hills Software(GHS)集成DaVinci Configurator生成的代码(RH850)(环境配置篇—1)
  • springboot+vue学生选课管理系统
  • 循环依赖详解及解决方案
  • 闭包和继承
  • 程序员为了女朋you进了华为,同学去了阿里,2年后对比收入懵了
  • GDPU C语言 天码行空7
  • 代码随想录算法训练营第五十五天 | 392. 判断子序列、115. 不同的子序列
  • 【grafana】使用多级变量解决Granfana模板变量中的大小限制
  • RHCE——shell脚本练习
  • DC 使用记录
  • 一次性搞懂dBSPL、dBm、dBu、dBV、dBFS的区别!
  • 谈ChatGPT基本信息
  • Mac平台上有哪些好用的常用软件?
  • 软件重构方法
  • Nacos 性能报告
  • 2023-04-14 lua + C动态库交叉debug
  • 逆向入门--何为OEP
  • 故障注入的方法与工具
  • 【GITLab】docker部署GitLab