欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL(二)select检索数据

程序员文章站 2022-05-01 19:45:47
MySQL检索数据1.检索单个列2.检索多个列3.检索所有列3.1检索不同的行4.限制结果5.检索后的数据排序5.1 ORDER BY关键字5.2多列排序5.3指定的排序方向记:)下面的所有语句检索的表都为 exampletableexampletable表的内容如下:namecityagezipemailergouHRB391101203xxxx@163.comjoeBJ201021024xxxx@163.comjohnBD141541...


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

name city age zip email
ergou HRB 39 110120 3xxxx@163.com
joe BJ 20 102102 4xxxx@163.com
john BD 14 154143 1xxxx@163.com
mike TJ 18 112165 5xxxx@163.com
smith SJZ 45 132123 2xxxx@163.com
szq BJ 23 110223 6xxxx@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;

得到结果

name city age
ergou HRB 39
joe BJ 20
john BD 14
mike TJ 18
smith SJZ 45
szq BJ 23

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

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;

得到结果:

name city age zip email
ergou HRB 39 110120 3xxxx@163.com
joe BJ 20 102102 4xxxx@163.com
john BD 14 154143 1xxxx@163.com
mike TJ 18 112165 5xxxx@163.com
smith SJZ 45 132123 2xxxx@163.com
szq BJ 23 110223 6xxxx@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;
name city age zip email
ergou HRB 39 110120 3xxxx@163.com
joe BJ 20 102102 4xxxx@163.com
john BD 14 154143 1xxxx@163.com

读取第2-4条数据

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

得到结果:

name city age zip email
joe BJ 20 102102 4xxxx@163.com
john BD 14 154143 1xxxx@163.com
mike TJ 18 112165 5xxxx@163.com

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

5.检索后的数据排序

5.1 ORDER BY关键字

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

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

得出结果:

name city
john BD
joe BJ
szq BJ
ergou HRB
smith SJZ
mike TJ

可以看到结果以城市的首字符按照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;

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

name city age zip email
john BD 14 154143 1xxxx@163.com
mike TJ 18 112165 5xxxx@163.com
joe BJ 20 102102 4xxxx@163.com
szq BJ 23 110223 6xxxx@163.com
ergou HRB 39 110120 3xxxx@163.com
smith SJZ 45 132123 2xxxx@163.com
SELECT *
FROM test.exampletable
ORDER BY age DESC;

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

name city age zip email
smith SJZ 45 132123 2xxxx@163.com
ergou HRB 39 110120 3xxxx@163.com
szq BJ 23 110223 6xxxx@163.com
joe BJ 20 102102 4xxxx@163.com
mike TJ 18 112165 5xxxx@163.com
john BD 14 154143 1xxxx@163.com

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

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

记:)

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

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