第四章 数据查询

在前面几章中,已经慢慢的熟悉了数据库的概念。通过了SQL语句取到了学生表格里的数据,看到了SQL并不是一门难于理解的语言,这么门语言的语法像极了英文代码。

在数据的管理中,如同在管理物件一样,最常见的是取出相应的物品,查询取得数据也同样,先要知道数据存在在哪个仓库,存放在哪一个位置下。

对于数据的查询选取,占据了数据库操作的大半江山,是SQL语句的重点。开始来看看数据是如何查询的。

再来看一下已有的学生的数据:

数据有六行属性字段:序号,名字,性别,年龄,手机号。其中id是自动增长的,在插入的时候不用考虑这一列的数值。

字段的选择

在SQL中 * 号表示通配符,表示选择所有的东西,如

SELECT * FROM `students`

选择了 students 表中所有的字段,在具体的要求中如果并不需要所有的字段的话,有时字段特别的多,SQL的运行规则在前面介绍过,服务器算完了数据要返回给客服端,如果字段特别多,数据量特别大,拖慢了计算速度和数据返回的速度,所以一般在项目的使用过程中通常不会用 * 号来返回所有的数据字段。

对于要返回的数据字段,把 * 替换为字段的名称:

SELECT name,sex FROM `students`

字段之间用 隔开。

结果返回个数

select 如果不加限制的话,返回的是所有的数据,在这个例子中我们只有六条数据,并没有太大的影响,如果有一个几百万条的数据,返回来的数据量太大,容易导致服务端卡死。

一般来说,我们也不需要一次性的返回太多的数据,基本上是看不过来的,在很多网页上对于太多的数据大部分使用分页的办法来处理。SQL的查询就能实现很好的分页功能。

只可惜并不是所有版本的SQL对于结果个数的限制是同样的语法,在MySQL中使用的关键字为limit

假设我们需要每一页显示两个学生,用分页的方式来处理,如下:

SELECT * FROM `students` limit 0,2

显示的结果如下:

结果学生表格里的前面两条数据,这里就能知道 limit 的用法,limit offset,num,即 limit 后面跟的是偏移,和个数,偏移就可以用在sql的分页中了,如下显示第二页的内容:

SELECT * FROM `students` limit 2,2

不出意外的话,显示的应该是 id为 3,4的数据。如下:

limit 中,如果只跟一个数值,那个数值就是返回的结果数,也就是默认的偏移为0。

SELECT * FROM `students` limit 2

显示的结果为前面的两条数据。

不同SQL的分页方法不太一样,但是基本的语法都是相似的,可以根据选用的版本进行选择。

条件选择数据

普通字段查询

SQL语言中,条件选择的关键字 where,用 where 后面跟具体的条件,条件的限制基本上是对字段的限制,如我们要选出班级所有的男学生,用sex来进行限制:

SELECT * FROM `students` where sex = '男' limit 10

结果如下:

where 关键字对条件进行过滤,sex字段限制学生的性别,这里的操作符为 =,除了等号以外,常用的操作符如下:

操作符 说 明
= 等于
< > 不等于
< 小于
<= 小于等于
! 不等于
> 大于
!> 不大于
BETWEEN 两者之间
IS NULL 是否为空
in 在数组中
not 用来否定其后条件

以上的这些操作符,跟我们数学用到的意思差不多,经常用到的是那几个,也不用特别的去记。

多条件

有的时候一个条件的限制并不能满足需要,如需要选出年纪在20岁的男同学,多个条件的组合,条件的组合关键字为 and,or:

SELECT * FROM `students` where sex = '男' and age = 20 limit 10

结果如下:

只有id为1的王小明符合上面的条件,即20岁男同学。

用like匹配字符串

对字符串的查找是搜索最经常见的,想走出某一字符串是否出现在特定的字段中,用以上的操作符是做不到的,例如想查找手机号码以13开头的同学,这是一种匹配的结果,用通配符 %,加操作符 like 。 如下:

SELECT * FROM `students` where tel like '13%'  limit 10

结果如下:

可以试试:

SELECT * FROM `students` where tel like '%23%'  limit 10

的结果是那些同学,语句具体的意思是什么?

通常通配符的查询效率都是比较低的,为什么会是这样,后面会有解释。

对于数据的查询,涉及到了字段的选择,返回个数,条件查询等,查询语句按照固定的顺序组织起来,在写SQL语句时根据需求写出语句就能查到相应的结果。


所有评论

写了这么多年博客,收到的优秀评论少之又少。在这个属于 SNS 的时代也并不缺少向作者反馈的渠道。

还没有评论

撰写评论