3-4 MySQL条件查询与通配符------MySQL数据库技术

本文深入探讨了SQL查询中的where语句应用,包括条件过滤、操作符使用、通配符匹配及函数处理。通过实例讲解了and、or、in、not、like等操作符的用法,以及avg、count、max、min、sum等聚集函数的应用场景。

目录

查询结果过滤

where 语句实例

where语句支持的操作符

and操作符

or操作符

and/or 条件组合中的顺序

in操作符

in操作符特点

not操作符

like操作符

百分号(%)通配符

通配符特点

MySQL结果数据处理与函数

列的别名+concat函数

使用别名

创建别名

算术运算

MySQL常用函数--文本处理函数

substring函数---返回串中的子串

MySQL常用函数--日期与实践处理函数

获取当前日期时间函数

时间计算函数

 获取日期时间的一部分

聚集函数☆☆☆

函数组合使用


查询结果过滤

  • 数据库表中一般包含大量的数据,很少需要查询表中所有行,通常只会根据特定的需要提取表中的一部分数据。这个时候需要指定查询条件,即过滤条件。
  • 在select语句中,数据库根据where子句中指定的查询条件进行过滤。where子句位于表名只会。
  • 格式:select 列名 from 表名 where 列满足的条件;

where 语句实例

  • 从products表中查询两列,只返回prod_price值为2.50的行。
  • select prod_name,prod_price from products where prod_price=2.50;
  • select * from products where vend_id='1003' order by prod_price desc;
  • 注意:在同事使用order by 和 where 子句时,order by应位于where之后,否则将会产生错误。
  • desc 表名; #查看表的字段,返回表的结构

where语句支持的操作符

  • where子句使用的操作符列表
操作符  说明
=等于
<>不等于
!=不等于
<=小于等于
>大于
>=大于等于
BETWEEN    AND在指定的两个值之间

 

 

 

 

 

 

 

        

 

select * from products where prod_price between 5 and 10;

and操作符

  • MySQL支持在where子句中给出多个条件,这些条件可以使用and子句表示条件都满足时返回指定的行。
  • 格式: select 列名 from 表 where '列1满足条件'  'and' 列2满足条件' ;
  • 实例: select vend _id,prod_name,prod_price from products where vend_id=1003 and prod_price<10;

or操作符

  • MySQL支持在where子句中给出多个条件,这些条件可以使用or子句表示条件中只需要有一个满足时返回指定的行。
  • 格式: select 列名 from 表 where '列1满足条件'  'or' 列2满足条件' ;
  • 实例: select vend _id,prod_name,prod_price from products where vend_id=1003 or prod_price<10;

and/or 条件组合中的顺序

  • and的优先级高于or,当and/or中有多个条件的时候,需要使用()把各个条件明确的分组,防止条件的错误组合导致返回的结果不正确。
  • 例子:圆括号具有比and/or更高的优先级,MySQL首先执行圆括号内的条件。
  •            select vend _id,prod_name,prod_price from products where (vend_id=1002 or vend_id=1003) and prod_price<10;
  • 注意:在使用and/or操作符的where子句中,都应该使用圆括号明确地分组操作符,已达到期望的查询目的。

in操作符

  • in操作符用来指定条件范围,范围中的每个条件都可以进行匹配。in取值包含在圆括号中,以逗号分隔。
  • 格式:select 列 from 表 where 列 in (value1,value2,...);
  • select * from products where vend_id='1003' or vend_id='1002';
  • 等价于
  • select * from products where vend_id in('1003','1002');

in操作符特点

  1. in操作符的语法清晰直观;
  2. 计算次序容易管理;
  3. in操作符一般比or操作符执行速度更快;
  4. in可以包含其他select语句,使得能够动态地建立where子句。

not操作符

  • where子句中的not操作符只有一个功能,即否定它之后所跟的任何条件。
  • 使用not很容易找出与条件列表不匹配的行。
  • 例1:not否定跟在它之后的条件,因此,MySQL不匹配1002和1003的vend_id,而是匹配1002和1003之外的vend_id。
  • select * from products where vend_id not in('1003','1002');
  • select vend_id,prod_price from products where prod_price not between 5 and 10;
  • select * from customers where cust_email is null;
  • select * from customers where cust_email is not null;

like操作符

  • 通配符是用来匹配值的一部分的特殊字符。
  • 为了在查找子句中使用通配符,必须使用like操作符,like指示MySQL后跟的查找模式利用通配符匹配而不是直接相等匹配进行比较

百分号(%)通配符

百分号(%)在查处串中,%表示任何字符出现任意次数。但是不能匹配NULL。

  • 例1:找出所有以jet开头的产品
  • select prod_id,prod_name from crashcourse.products where prod_name like 'jet%';
  • select prod_id,prod_name from crashcourse.products where prod_name like '&anvi%';
  • #查找产品表中prod_id第二个字符是T的产品信息
  • select * from products where prod_id like '_T%';

通配符特点

  • %不一样,_总是匹配一个字符,不能多也不能少。
  • 使用通配符会比没有通配符更消耗数据库执行查询的实际,应该在需要使用通配符的地方才使用。

MySQL结果数据处理与函数

列的别名+concat函数

  1. 表列名比较繁琐,为了简化和方便使用,给列取别名;
  2. 有些应用中,存储在表中的数据不是应用所需要的,需要创建新的字段来并表示数据库中的数据进行通过计算或函数运算转换后的数据。
  • 例1:使用concat()函数进行字符拼接,给查询出来的数据列指定新名字。

使用别名

  • 使用新列名,并进行字符拼接
  • select concat(vend_name,'(',vend_country,')') from vendors;

创建别名

  • 别名是一个字符或值的替换名,使用AS关键字创建。

算术运算

MySQL支持对查询出的数据进行算术计算,支持的运算类型有

操作符说明
+
-
*
/

 

 

 

 

 

MySQL常用函数--文本处理函数

  • 文本处理函数:字符拼接concat() 、小写字母转换为大写字母upper() 、 大写字母转换为小写字母lower() 、 获取字段的长度(占用的字节)length() 、char_length() 、获取字符串 substring() 

substring函数---返回串中的子串

MySQL常用函数--日期与实践处理函数

多用于报表:统计数据

  • 获取当前日期时间函数

  1. curdate()        返回当前日期
  2. curtime()        返回当前时间
  3. now()             返回当前日期时间

  • 时间计算函数

  1. AddDate()   增加一个日期(天、周等)
  2. DateDiff()   计算两个日期之差 

  •  获取日期时间的一部分

  • date()       返回日期时间的日期部分
  • year()        返回日期时间的年的部分
  • month()     返回日期时间的月的部分
  • day()          返回日期时间的天的部分

聚集函数☆☆☆

  • 查MySQL提供了聚集操作函数,是在列上面进行运算的。
  • 函数说明
    AVG()返回某列的平均值
    COUNT()返回某列的行数
    MAX()返回某列的最大值
    MIN()返回某列的最小值
    SUM()返回某列值之和

     

AVG()函数计算列的平均值,AVG()统计所有的行,但不包括值为null的行;

使用COUNT()确定表中的数目

 

 

SUM()用于返回指定列值的总和

函数组合使用

  • select语句中可根据需要使用多个函数。

 

### MySQL 单表查询的基础知识 单表查询是 SQL 中最基本的查询形式,主要用于从单一表格中提取所需的数据。以下是关于 MySQL 单表查询的一些核心知识点: #### 1. 基本 SELECT 查询语句 `SELECT` 是用来检索数据的核心命令。其基本语法如下: ```sql SELECT column_name(s) FROM table_name; ``` 此语句可以从指定的 `table_name` 表格中选取所需的列名(`column_name`)。如果希望获取所有列,则可以用通配符 `*` 替代具体的列名。 例如,假设有一个名为 `employees` 的表,其中包含员工的信息,可以通过以下方式查询所有记录: ```sql SELECT * FROM employees; ``` #### 2. 条件过滤 (WHERE 子句) 为了进一步缩小查询范围,可以在 `SELECT` 后附加 `WHERE` 子句以设置条件。这允许只返回满足特定条件的行。 ```sql SELECT column_name(s) FROM table_name WHERE condition; ``` 例如,要查询工资大于等于 5000 的员工信息: ```sql SELECT name, salary FROM employees WHERE salary >= 5000; ``` #### 3. 排序结果 (ORDER BY 子句) 通过使用 `ORDER BY` 子句,可以根据某一列或多列对结果集进行升序或降序排列,默认情况下为升序 (`ASC`)。 ```sql SELECT column_name(s) FROM table_name ORDER BY column_name ASC|DESC; ``` 示例:按薪资降序显示所有员工的名字和薪水: ```sql SELECT name, salary FROM employees ORDER BY salary DESC; ``` #### 4. 数据去重 (DISTINCT 关键字) 当某些字段存在重复值时,可利用 `DISTINCT` 删除这些冗余项并仅保留唯一值。 ```sql SELECT DISTINCT column_name FROM table_name; ``` 实例:找出公司里所有的不同职位名称: ```sql SELECT DISTINCT position FROM employees; ``` #### 5. 范围限定 (LIMIT 子句) 对于大数据量的情况,可能只需要查看前几条或者某一段区间内的记录,这时就可以借助 `LIMIT` 实现这一需求。 ```sql SELECT column_name(s) FROM table_name LIMIT number_of_rows OFFSET offset_value; ``` 例子:展示前三名最高薪者的姓名及其对应的薪酬数额: ```sql SELECT name, salary FROM employees ORDER BY salary DESC LIMIT 3; ``` 以上就是有关于 MySQL 单表查询的主要内容概述[^1]。它涵盖了如何构建简单的查询请求到加入更多控制参数如排序、筛选等技巧的应用场景介绍[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值