初识MySQL(1)查询,排序,过滤数据

1.检索中的DISTINCT关键字的应用

在检索中,如果我们需要检索某一行但是如果这一行中只有3个不同的数据,如颜色只有红黄绿三种颜色,但是总共有100个数据,如果我们只是简单的使用下列SQL语句:

SELECT COLOR FROM TABLE1;

则就会产生100个会有许多重复关键字的结果,十分影响用户的体验。因此我们可以使用DISTINCT关键字:

SELECT DISTINCT COLOR FROM TABLE1;

这样在最终的结果展现的过程中就会自动进行去重操作,只得到,RED,GREEN,BLUE三个不同的值,这在要求一个列(属性)中有几个不同的取值中可以使用。
值得注意的是DISTINCT关键字应用于所有列,而不仅仅是他前置的列!
例如:

SELECT DISTINCT COLOR,SHAPE FROM TABLE1;

这时候的DISTINCT不仅影响着COLOR,对于COLOR和SHAPE都产生影响。

2.返回查找结果中的LIMIT关键字

如果我们在使用SELECT语句进行查找的时候,不需要查找出所有的结果,或者所有的结果太多,我们可以使用LIMIT关键字使其只输出有限个结果

SELECT COLOR FROM TABLE1 LIMIT 5;

这样会使输出结果的时候只输出表中符合查询条件的前五个结果。
LIMIT还有另一种使用方法

SELECT COLOR FROM TABLE1 LIMIT 5,5;

即LIMIT后面如果只有一个参数n,则输出第一个结果开始的n个结果;
如果LIMIT后面有两个参数m,n,则第一个参数m表示开始的结果的下标数,第二个参数n表示总共输出几个。

SELECT COLOR FROM TABLE1 LIMIT 5,3;

表示从第5个结果开始输出,总共输出3个。
值得注意的是,SQL语句中与编程语言一样第一个结果的下标是0!
从SQL 5开始,对LIMIT的用法做出了新的规定,为了使使用者不会对于LIMIT后面的两个参数代表的意思感到困惑,SQL 5使用以下写法:

SELECT COLOR FROM TABLE1 LIMIT 3 OFFSET 5;

它表示的意思就是从第5的结果开始,输出三个结果,与上面的语句是等效的。

3.对输出结果进行排序

对一个列进行排序:

SELECT COLOR FROM TABLE1 ORDER BY COLOR;

这就是将输出的结果按照对于COLOR属性的升序进行排列。
SQL语句中如果不指明排序方式,默认为升序,升序关键字ASC,降序关键字DESC,由于默认升序,所以其实ASC基本不会使用到。
对COLOR进行降序排列:

SELECT COLOR FROM TABLE1 ORDER BY COLOR DESC;

对两个列进行排序操作:

SELECT COLOR,SHAPE FROM TABLE1 ORDER BY COLOR DESC,SHAPE;

DESC关键字与DISTINCT关键字不同,他只作用于他之前的属性,并且在对两个属性都执行排序操作的时候,有顺序先后的关系。
例如上面的例子当中,执行的要求是先按照对COLOR的降序进行排列,再按照对SHAPE的升序进行排列。可以看到,只有当两行的COLOR属性一样的时候我们才根据SHAPE对他们进行排列,即如果表中的行的COLOR属性都不一样,我们根本就不用对SHAPE进行排列。

4.数据过滤中的WHERE子句

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

何时需使用引号?
如果将值与串类型的列进行比较的时候需要限定引号,如果与数值进行比较,则不需要使用引号。
如:

SELECT NAME,COLOR FROM TABLE1 WHERE NAME = 'FUSS';
SELECT COLOR,NUMBER FROM TABLE1 WHERE NUMBER = 123;

用where语句查询空值null

SELECT NAME FROM TABLE1 WHERE NAME IS NULL;

注意NULL与字段包含0,空字符串或仅仅包含空格不同!

WHERE子句中还可以使用AND,OR等连接词来进行更高级的条件过滤,并且可以使用括号来改变个条件的优先级别:

SELECT NAME,PRICE FROM TABLE1 WHERE (NAME = 1002 OR NAME = 1003) AND PRICE >=10;

即返回NAME属性是1002或者1003并且同时PRICE大于等于10的结果,这与不添加括号有着本质区别。

IN操作符
还可以使用IN操作符配合括号来对条件指定范围。

SELECT NAME FROM TABLE1 WHERE NAME IN (1002,1003);

括号内制定了NAME属性能够取到的值,该语句的以及就是返回NAME为1002或者1003的所有结果。
所以从另一个角度上看的话IN关键字完成的功能与OR关键字完成的功能是一样的。

NOT操作符
WHERE子句中的NOT操作符有且只有一个功能就是否定他之后跟的任何条件。

SELECT NAME FROM TABLE1 WHERE NAME NOT IN (1002,1003);

即返回NAME不是1002和1003的所有结果。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章