当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL(二)select检索数据

MySQL(二)select检索数据

2020年10月09日  | 移动技术网IT编程  | 我要评论
MySQL检索数据1.检索单个列2.检索多个列3.检索所有列3.1检索不同的行4.限制结果5.检索后的数据排序5.1 ORDER BY关键字5.2多列排序5.3指定的排序方向记:)下面的所有语句检索的表都为 exampletableexampletable表的内容如下:namecityagezipemailergouHRB391101203xxxx@163.comjoeBJ201021024xxxx@163.comjohnBD141541


下面的所有语句检索的表都为 exampletable
exampletable表的内容如下:

namecityagezipemail
ergouHRB391101203xxxx@163.com
joeBJ201021024xxxx@163.com
johnBD141541431xxxx@163.com
mikeTJ181121655xxxx@163.com
smithSJZ451321232xxxx@163.com
szqBJ231102236xxxx@163.com

1.检索单个列

SELECT 列名 FROM 表名;

如果想要搜索该表中的所有姓名

SELECT name 
FROM exampletable;

语句执行完毕后将得到结果:

name
ergou
joe
john
mike
smith
szq

需要注意的是,SQL本身是不区分大小写的,但是为了方便阅读和调试,我们最好将SQL关键字诸如SELECT/DROP/CREAT等大写,将列名,表名,条件语句等小写。并且使用关键字后,及时换行来确保语句的可读性。养成良好的习惯可以有效的规避很多坑,例如在未来编写较为复杂的语句时,清晰的调理和良好的书写格式能够更好的帮助我们梳理逻辑。

还有一点需要注意,在语句结束后,一定要在语句的末尾加 ; 来结束语句!

2.检索多个列

检索多个列只需要在各列之间添加逗号即可
例如 检索exampletable中name,city和age列的所有信息

SELECT name,city,age
FROM exampletable;

得到结果

namecityage
ergouHRB39
joeBJ20
johnBD14
mikeTJ18
smithSJZ45
szqBJ23

注:如果在最后一列的列后添加逗号,语句将产生错误

SELECT name,city,age,
FROM exampletable;

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘FROM test.exampletable’ at line 2

3.检索所有列

通过(*)通配符可以检索表中的所有数据

SELECT *
FROM test.exampletable;

得到结果:

namecityagezipemail
ergouHRB391101203xxxx@163.com
joeBJ201021024xxxx@163.com
johnBD141541431xxxx@163.com
mikeTJ181121655xxxx@163.com
smithSJZ451321232xxxx@163.com
szqBJ231102236xxxx@163.com

需要注意的是:在一般情况下,如果不是需要所有的数据不要轻易使用(*)通配符来检索表,这样会降低检索和应用程序的性能。

3.1检索不同的行

现在有需求要求汇总exampletable表中人所在的城市列表,那么该如何操作呢?
如果我们仅仅SELECT city FROM exampletable,那么在显示结果时,BJ这个值就会重复出现,这不是理想的结果。
这时候引入一个关键字 :DISTINCT

SELECT DISTINCT city
FROM exampletable;

得到结果:

city
HRB
BJ
BD
TJ
SJZ

DISTINCT关键字下的列只返回值不相同的行。
注:不能部分使用DISTINCT,在给定DISTINCT关键字后,关键字后的所有列都返回不相同值的行。

4.限制结果

在检索时,也许我们只需要获得第二条到第五条数据,也可能有需求要排除前三个数据又或者只需要前三条数据,这时候就需要引入两个关键字LIMIT和OFFSET

LIMIT y:读取y条数据
LIMIT x,y:跳过x条数据,读取y条数据
LIMIT y OFFSET x:跳过x条数据,读取y条数据

读取前三条数据:

SELECT *
FROM test.exampletable
LIMIT 3;
SELECT *
FROM test.exampletable
LIMIT 0,3;
SELECT *
FROM test.exampletable
LIMIT 3 OFFSET 0;
namecityagezipemail
ergouHRB391101203xxxx@163.com
joeBJ201021024xxxx@163.com
johnBD141541431xxxx@163.com

读取第2-4条数据

SELECT *
FROM test.exampletable
LIMIT 1,3;
SELECT *
FROM test.exampletable
LIMIT 3 OFFSET 1;

得到结果:

namecityagezipemail
joeBJ201021024xxxx@163.com
johnBD141541431xxxx@163.com
mikeTJ181121655xxxx@163.com

注:如果我们的表中只有2行数据,那么在使用limit 3语句后,会返回全部2行数据而不会报错。

5.检索后的数据排序

5.1 ORDER BY关键字

在检索数据后,如果我们想要让得出的结果以城市的首字母顺序排序要如何做呢?
这时候要引入一个关键字 ORDER BY

SELECT name,city
FROM test.exampletable
ORDER BY city;

得出结果:

namecity
johnBD
joeBJ
szqBJ
ergouHRB
smithSJZ
mikeTJ

可以看到结果以城市的首字符按照A-Z的顺序排序了
注:在搜索时也可以按照非选择列进行排序,比如搜索姓名和城市,但排序以年龄大小排序也是可行的。
注1:ORDER BY子句的排序必须在FROM后,如果位置在FROM前则报错,如果使用LIMIT,则必须要在ORDER BY后

SELECT name,city
FROM test.exampletable
ORDER BY age;

5.2多列排序

在实际情况下我们会碰到以下需求:我们按照姓和名的顺序显示数据,并且在姓相同的情况下,在按照名的顺序依次排序。这时候就用到了多列排序。由于表内没有姓和名的列,在此处假设

SELECT xing,ming,age,address
FROM examtable
ORDER BY xing,ming;

5.3指定的排序方向

在实现排序后,新的需求出现了:让我们按照年龄从大到小,或者从小到大显示所有信息,这该怎么办呢?
这时候引入两个关键字:ASC和DESC

ASC(ascend):升序排序
DESC(descend)降序排序

ASC与DESC关键字用于ORDER BY 子句后,在其他位置则报错。
ORDER BY后不添加关键字则默认为ASC升序排序。

SELECT *
FROM test.exampletable
ORDER BY age ASC;

按照年龄从小到大的顺序排序,得出结果:

namecityagezipemail
johnBD141541431xxxx@163.com
mikeTJ181121655xxxx@163.com
joeBJ201021024xxxx@163.com
szqBJ231102236xxxx@163.com
ergouHRB391101203xxxx@163.com
smithSJZ451321232xxxx@163.com
SELECT *
FROM test.exampletable
ORDER BY age DESC;

按照年龄从大到小的顺序排序,得出结果:

namecityagezipemail
smithSJZ451321232xxxx@163.com
ergouHRB391101203xxxx@163.com
szqBJ231102236xxxx@163.com
joeBJ201021024xxxx@163.com
mikeTJ181121655xxxx@163.com
johnBD141541431xxxx@163.com

如果想对ORDER BY的多个参数单独设置排序顺序,则在每个列名后,逗号前添加关键字即可:

SELECT *
FROM test.exampletable
ORDER BY age DESC,city ASC;

记:)

以上是select检索数据的简单概念和例子,在未来查询随着条件越发的复杂,检索的难度会逐级提升,检索的过程中考验的不只是对于语句的使用,在不同的场景下多种实现方式对性能的影响也是不同的,数据库大佬一生都在追求使用最优解去使用数据库,这也督促我学习时不能仅仅停留在表面,要把哪怕一件事做到精通,那么其他事情也就都不会太差了。(逐渐扯远)

本文地址:https://blog.csdn.net/Py_csdn_/article/details/108976872

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网