目录
查询结果过滤
- 数据库表中一般包含大量的数据,很少需要查询表中所有行,通常只会根据特定的需要提取表中的一部分数据。这个时候需要指定查询条件,即过滤条件。
- 在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操作符特点
- in操作符的语法清晰直观;
- 计算次序容易管理;
- in操作符一般比or操作符执行速度更快;
- 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:使用concat()函数进行字符拼接,给查询出来的数据列指定新名字。
使用别名
- 使用新列名,并进行字符拼接
- select concat(vend_name,'(',vend_country,')') from vendors;
创建别名
- 别名是一个字符或值的替换名,使用AS关键字创建。
算术运算
MySQL支持对查询出的数据进行算术计算,支持的运算类型有
操作符 | 说明 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
MySQL常用函数--文本处理函数
- 文本处理函数:字符拼接concat() 、小写字母转换为大写字母upper() 、 大写字母转换为小写字母lower() 、 获取字段的长度(占用的字节)length() 、char_length() 、获取字符串 substring()
substring函数---返回串中的子串
MySQL常用函数--日期与实践处理函数
多用于报表:统计数据
-
获取当前日期时间函数
- curdate() 返回当前日期
- curtime() 返回当前时间
- now() 返回当前日期时间
-
时间计算函数
- AddDate() 增加一个日期(天、周等)
- DateDiff() 计算两个日期之差
-
获取日期时间的一部分
- date() 返回日期时间的日期部分
- year() 返回日期时间的年的部分
- month() 返回日期时间的月的部分
- day() 返回日期时间的天的部分
聚集函数☆☆☆
- 查MySQL提供了聚集操作函数,是在列上面进行运算的。
-
函数 说明 AVG() 返回某列的平均值 COUNT() 返回某列的行数 MAX() 返回某列的最大值 MIN() 返回某列的最小值 SUM() 返回某列值之和
AVG()函数计算列的平均值,AVG()统计所有的行,但不包括值为null的行;
使用COUNT()确定表中的数目
SUM()用于返回指定列值的总和
函数组合使用
- select语句中可根据需要使用多个函数。