0
点赞
收藏
分享

微信扫一扫

MySQL必知必会---探索mysql及实例探析:检索、过滤、函数


基础应用篇

mysql从播种到收获

学过了mysql,想着吧一些重要的、易错的内容罗列出来,也算是自我复习吧。。


检索数据

select,这是固定的,不再多说,其格式:

select 列名(或:*) from 表名;

“*”,通配符,代表全部信息/列;这里列名可以多项,中间用逗号隔开。
mysql不区分大小写(搜索可以区分,只是“可以”)
那么,如何限制结果,也就是说,只返回结果的前几行?、
limit子句:limit n; 返回的结果不多于n行;
limit n,m; 返回的结果是从第n行开始的m行;
且由于某种原因,mysql 5支持另一种写法:

limit 4 offset 3;    //意为从第3行开始取4行
//等价于
limit 3,4;

检索出的数据往往杂乱无章,那么问题来了,如何排序这些数据呢?
我们选择用order by子句
如下(在文首链接博客中有实际操作):

select prod_name
from products
order by prod_name;

对Pro_name列按默认升序排序。
同样,order by后面可以跟多个列名,中间用逗号隔开。逗号前后有先后顺序,先按逗号前排序,若逗号前内容有相同,再按逗号后排序。
而且,在如上命令order by一行最后地方加DESC关键字则会降序排序。(这里记住:对哪一列逆序,关键字加在哪一个列名后,若都要,则每一个列名后面都加。即:DESC关键字只应用到直接位于其前面的列名

order by和limit配合,可以找出最…的值!

过滤数据

mysql中所谓过滤数据,即通过where子句,IS NULL子句,和一些操作符达到“限制输出”的目的。
在select中,数据根据where子句中指定的搜索条件进行过滤,where子句在表名(from子句)之后给出,如下:

select prod_name,prod_price
from products
where prod_price=2.50;

搜寻products表中满足prod_price=2.50的prod_name和prod_price值(行)。
这,就是过滤。

where子句的位置:在同时应用order by和where子句时,应该让order by位于where之后(对照博客和上面程序想想为什么)。
where子句操作符:=、<>(不等于)、!=、<、<=、>、>=、BETWEEN(范围值检查)

空值检查:NULL,无值,不等于0,也不等于空字符串或空格。select中有一个特殊的where子句,用来检查NULL值列:IS NULL子句。

select prod_name
from products
where prod_price is null;

组合where子句:and操作符(和),or操作符(或),都加在where行使用,进一步确定范围。如下:

select prod_id
from products
where vend_id=1003 and prod_price<=10;

如上所见,where等条件句中条件完全不必用select(查找)的列名。甚至可以用其他表中的列名,这一点后面会说到。
那么,既有and又有or,是不是会产生计算次序问题呢?
SQL(像多属语言一样)在处理or操作符前,会优先处理and操作符。换句话说,and在计算次序中优先级更高。 此问题的解决方法是用圆括号明确的分组相应的操作符

select prod_id
from products
where (vend_id=1003 or vend_id=1002) and prod_price<=10;

IN操作符:圆括号在where中海油一种用法:IN操作符用来指定条件范围,范围中的每个条件都可以匹配。重要的是,IN里面还可以有select语句,这一特性用在父子表中(在文首第一篇链接博客中有实际操作及介绍),简直爽翻。。。

select prod_id
from products
where vend_id IN (1003 or 1002);

这里和上一条操作结果一模一样,in的好处在哪里?事实证明,IN操作符一般比or清单执行更快。

下面再深入一点

通配符:如LIKE操作符,百分号(%)通配符,下划线(_)~等等
like:顾名思义,像。
通配符:用来匹配值的一部分的特殊字符。
%:在搜索串中,%表示任何字符出现任意次数。例如:为了找出所有以jet起头的产品
(不管它有多少字符)

select *
from products
where prod_name LIKE 'jet%';

那以jet结尾的呢?

where prod_name LIKE '%jet';

那中间含有jet的呢?

where prod_name LIKE '%jet%';

而下划线就是为了限制字符长度,如:LIKE ‘张_’; 就是搜寻姓张且名字只有两个字的行信息。

正则表达式

REGEXP
用法:

select name from stu where name REGEXP '1000';

这条命令是为了检索name包含文本1000的所有行

REGEXP和LIKE的不同:LIKE匹配整个列(完全匹配)。

select name from stu where name REGEXP '1000|2000';

检索包含文本1000或2000的所有行

select name from stu where name REGEXP '[0-9]T';

返回0T或1T或2T或3T或4T或。。。或9T

匹配特殊字符——必须用“\”为前导,如:

select name from stu where name REGEXP '\\.';

返回包含文本“.”的所有行
还有一些“奇形怪状”的表达式,如:REGEXP’[[:digit:]]{4}’——连在一起的4位数字:[[:digit:]]是匹配任意数字(同[0-9]);等等,就请大家移步某度了。。。

计算字段

这里主要介绍一个:AS。
as一般用在select后的字段(列)后,给列取别名;或是在from后的表名后面,给表取一个别名,方便处理。
但是,这里赋的新名是“虚名”,也就是说,在原表中不会改变,只是为了操作方便,减少“误会”。

数据处理函数

先记住一点:函数没有SQL的可移植性强。
1.文本处理函数
L/RTrim()函数:出去列值左/右边的空格。
Upper()函数:将文本转换为大写。
Left()函数:返回串左边的字符。
Length()函数:返回串的长度。
和其他操作一样,只是select后面想操作的列名放在这些函数括号内即可。

还有日期和时间处理函数,网上一搜一堆,在这里就不详说了。。。

OK,这里为止,这是重温前面、尤其是where过滤的好机会。

多看课本,多看课本,多看课本。。。

汇总数据

只说一下“聚集函数”:
AVG()函数:通过对表中行数基数并计算特定列值之和,求得该列的平均值。
COUNT()函数:确定整个表的或是符合条件的行的数目。
MAX()函数:返回特定列的最大值。
MIN()函数:返回 最小值。
SUM()函数:返回指定列值的和。

以上所有的函数、关键字什么的,都可以对所有列操作~~~(改为“*”即可)
示例:

select AVG(DISTINCT prod_price) as avg_price
from products
where vend_id=1008;

其中有一个关键字:DISTINCT。其作用为返回不同值,也就是:消除值相同的“多余列”。可以不加
如:count(distinct 列名)—只包括列名指定列,返回指定列的不同值的记录数,在统计结果的时候,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内

分组函数

group函数,在文首第一篇博客中有详细介绍及应用。。。

下一篇:​​高阶应用篇​​ (在这里,我就不说如何安装mysql及编译器了,请自行某度。。。)


举报

相关推荐

0 条评论