MYSQL 55从零开始学查询数据.docx

上传人:b****5 文档编号:29877141 上传时间:2023-08-03 格式:DOCX 页数:95 大小:321.06KB
下载 相关 举报
MYSQL 55从零开始学查询数据.docx_第1页
第1页 / 共95页
MYSQL 55从零开始学查询数据.docx_第2页
第2页 / 共95页
MYSQL 55从零开始学查询数据.docx_第3页
第3页 / 共95页
MYSQL 55从零开始学查询数据.docx_第4页
第4页 / 共95页
MYSQL 55从零开始学查询数据.docx_第5页
第5页 / 共95页
点击查看更多>>
下载资源
资源描述

MYSQL 55从零开始学查询数据.docx

《MYSQL 55从零开始学查询数据.docx》由会员分享,可在线阅读,更多相关《MYSQL 55从零开始学查询数据.docx(95页珍藏版)》请在冰豆网上搜索。

MYSQL 55从零开始学查询数据.docx

MYSQL55从零开始学查询数据

7.1基本查询语句

MySQL从数据表中查询数据的基本语句为SELECT语句。

SELECT语句的基本格式是:

SELECT

{*|<字段列表>}

[

FROM<表1>,<表2>...

[WHERE<表达式>]

[GROUPBY]

[HAVING[{}...]]

[ORDERBY]

[LIMIT[,]]

]

SELECT[字段1,字段2,…,字段n]

FROM[表或视图]

WHERE[查询条件];

{*|<字段列表>}包含星号通配符和选字段列表,‘*’表示查询所有的字段,‘字段列表’表示查询指定的字段,字段列至少包含一个子段名称,如果要查询多个字段,多个字段之间用逗号隔开,最后一个字段后不要加逗号;

FROM<表1>,<表2>...表1和表2表示查询数据的来源,可以是单个或者多个;

WHERE子句是可选项,如果选择该项,[查询条件]将限定查询行必须满足的查询条件;

GROUPBY<字段>,该子句告诉MySQL如何显示查询出来的数据,并按照指定的字段分组;

[ORDERBY<字段>],该子句告诉MySQL按什么样的顺序显示查询出来的数据,可以进行的排序有:

升序(ASC)、降序(DESC);

[LIMIT[,]],该子句告诉MySQL每次显示查询出来的数据条数。

SELECT的可选参数比较多,读者可能无法一下子完全理解,不要紧,接下来从最简单的开始,一步一步深入学习之后,读者会对各个参数的作用有清晰的认识。

下面,创建数据表fruits,该表中包含了本章中需要用到的数据。

首先定义数据表,

CREATETABLEfruits

f_idchar(10)NOTNULL,

s_idINTNOTNULL,

f_namechar(255)NOTNULL,

f_pricedecimal(8,2)NOTNULL,

PRIMARYKEY(f_id)

);

为了演示如何使用SELECT语句,需要插入数据,请读者插入如下数据:

mysql>INSERTINTOfruits(f_id,s_id,f_name,f_price)

->VALUES('a1',101,'apple',5.2),

->('b1',101,'blackberry',10.2),

->('bs1',102,'orange',11.2),

->('bs2',105,'melon',8.2),

->('t1',102,'banana',10.3),

->('t2',102,'grape',5.3),

->('o2',103,'coconut',9.2),

->('c0',101,'cherry',3.2),

->('a2',103,'apricot',2.2),

->('l2',104,'lemon',6.4),

->('b2',104,'berry',7.6),

->('m1',106,'mango',15.6),

->('m2',105,'xbabay',2.6),

->('t4',107,'xbababa',3.6),

->('m3',105,'xxtt',11.6),

->('b5',107,'xxxx',3.6);

使用SELECT语句查询f_id和f_name字段的数据。

mysql>SELECTf_id,f_nameFROMfruits;

+------+------------+

|f_id|f_name|

+------+------------+

|a1|apple|

|a2|apricot|

|b1|blackberry|

|b2|berry|

|b5|xxxx|

|bs1|orange|

|bs2|melon|

|c0|cherry|

|l2|lemon|

|m1|mango|

|m2|xbabay|

|m3|xxtt|

|o2|coconut|

|t1|banana|

|t2|grape|

|t4|xbababa|

+------+------------+

16rowsinset(0.00sec)

该语句的执行过程是,SELECT语句决定了要查询的列值,在这里查询f_id和f_name两个字段的值,FROM子句指定了数据的来源,这里指定数据表fruits,因此返回结果为fruits表中这f_id和f_name两个字段下所有的数据。

其显示顺序为添加到表中的顺序。

7.2单表查询

单表查询是只从一张数据表中查询所需的数据。

本节将介绍单表查询中的各种基本的查询方式,主要有:

查询所有字段、查询指定字段、查询指定记录、查询空值、多条件的查询以及对查询结果进行排序等。

7.2.1查询所有字段

1.在SELECT语句中使用星号“*”通配符查询所有字段

SELECT查询记录最简单的形式是从一个表中检索所有记录,实现的方法是使用星号(*)通配符指定查找所有的列的名称。

语法格式如下:

SELECT*FROM表名;

【例7.1】从fruits表中检索所有字段的数据,SQL语句如下:

mysql>SELECT*FROMfruits;

+------+------+------------+---------+

|f_id|s_id|f_name|f_price|

+------+------+------------+---------+

|a1|101|apple|5.20|

|a2|103|apricot|2.20|

|b1|101|blackberry|10.20|

|b2|104|berry|7.60|

|b5|107|xxxx|3.60|

|bs1|102|orange|11.20|

|bs2|105|melon|8.20|

|c0|101|cherry|3.20|

|l2|104|lemon|6.40|

|m1|106|mango|15.60|

|m2|105|xbabay|2.60|

|m3|105|xxtt|11.60|

|o2|103|coconut|9.20|

|t1|102|banana|10.30|

|t2|102|grape|5.30|

|t4|107|xbababa|3.60|

+------+------+------------+---------+

可以看到,使用星号(*)通配符时,将返回所有列,列按照定义表的时候的顺序显示。

2.在SELECT语句中指定所有字段

另外一种查询所有字段值的方法,根据前面SELECT语句格式,SELECT关键字后面字段名为将要查找的数据,因此可以将表中所有字段的名称跟在SELECT子句右面,如果忘记了字段名称,可以使用DESC命令查看表的结构,有时候,可能表中的字段比较多,不一定能记得所有字段的名称,因此该方法有时候很不方便,不建议使用。

例如查询fruits表中的所有数据,SQL语句也可以书写如下,

SELECTf_id,s_id,f_name,f_priceFROMfruits;

查询结果与【例7.1】相同。

7.2.2查询指定字段

1.查询单个字段

查询表中的某一个字段,语法格式为:

SELECT列名FROM表名;

【例7.2】查询当前表中f_name列所有水果名称,SQL语句如下:

SELECTf_nameFROMfruits;

该语句使用SELECT声明从fruits表中获取名称为f_name字段下的所有水果名称,指定字段的名称紧跟在SELECT关键字之后,查询结果如下:

mysql>SELECTf_nameFROMfruits;

+------------+

|f_name|

+------------+

|apple|

|apricot|

|blackberry|

|berry|

|xxxx|

|orange|

|melon|

|cherry|

|lemon|

|mango|

|xbabay|

|xxtt|

|coconut|

|banana|

|grape|

|xbababa|

+------------+

输出结果显示了fruits表中f_name字段下的所有的数据。

2.查询多个字段

使用SELECT语句,可以获取多个字段下的数据,只需要在关键字SELECT后面指定要查找的字段的名称,不同字段名称之间用逗号(,)分隔开,最后一个字段后面不需要加逗号,语法格式如下:

SELECT字段名1,字段名2,…,字段名nFROM表名;

【例7.3】例如,从fruits表中获取f_name和f_price两列,SQL语句如下:

SELECTf_name,f_priceFROMfruits;

该语句使用SELECT声明从fruits表中获取名称为f_name和f_price两个字段下的所有水果名称和价格,两个字段之间用逗号分隔开,查询结果如下:

mysql>SELECTf_name,f_priceFROMfruits;

+------------+---------+

|f_name|f_price|

+------------+---------+

|apple|5.20|

|apricot|2.20|

|blackberry|10.20|

|berry|7.60|

|xxxx|3.60|

|orange|11.20|

|melon|8.20|

|cherry|3.20|

|lemon|6.40|

|mango|15.60|

|xbabay|2.60|

|xxtt|11.60|

|coconut|9.20|

|banana|10.30|

|grape|5.30|

|xbababa|3.60|

+------------+---------+

输出结果显示了fruits表中f_name和f_price两个字段下的所有的数据。

7.2.3查询指定记录

数据库中包含大量的数据,根据特殊要求,可能只需查询表中的指定数据,即对数据进行过滤。

在SELECT语句中通过WHERE子句,对数据进行过滤,语法格式为:

SELECT字段名1,字段名2,…,字段名n

FROM表名

WHERE查询条件

在WHERE子句中,MySQL提供了一系列的条件判断符,查询结果如下:

表7.1WHERE字节判断符

操作符

说明

=

相等

<>,!

=

不相等

<

小于

<=

小于或者等于

>

大于

>=

大于或者等于

BETWEEN

位于两值之间

【例7.4】查询价格为10.2元的水果的名称,SQL语句如下:

SELECTf_name,f_price

FROMfruits

WHEREf_price=10.2;

该语句使用SELECT声明从fruits表中获取价格等于10.2的水果的数据,从查询结果可以看到价格是10.2的水果的名称blackberry,其他的均不满足查询条件,查询结果如下:

mysql>SELECTf_name,f_price

->FROMfruits

->WHEREf_price=10.2;

+------------+---------+

|f_name|f_price|

+------------+---------+

|blackberry|10.20|

+------------+---------+

本例采用了简单的相等过滤,查询一个指定列f_price具有值10.20。

相等还可以用来比较字符串,如下:

【例7.5】查找名称为“apple”的水果的价格,SQL语句如下:

SELECTf_name,f_price

FROMfruits

WHEREf_name='apple';

该语句使用SELECT声明从fruits表中获取名称为“apple”的水果的价格,从查询结果可以看到只有名称为“apple”行被返回,其它的均不满足查询条件。

mysql>SELECTf_name,f_price

->FROMfruits

->WHEREf_name='apple';

+--------+---------+

|f_name|f_price|

+--------+---------+

|apple|5.20|

+--------+---------+

【例7.6】查询价格小于10的水果的名称,SQL语句如下:

SELECTf_name,f_price

FROMfruits

WHEREf_price<10;

该语句使用SELECT声明从fruits表中获取价格低于10的水果名称,即f_price小于10的水果信息被返回,查询结果如下:

mysql>SELECTf_name,f_price

->FROMfruits

->WHEREf_price<10.00;

+---------+---------+

|f_name|f_price|

+---------+---------+

|apple|5.20|

|apricot|2.20|

|berry|7.60|

|xxxx|3.60|

|melon|8.20|

|cherry|3.20|

|lemon|6.40|

|xbabay|2.60|

|coconut|9.20|

|grape|5.30|

|xbababa|3.60|

+---------+---------+

可以看到查询结果中所有记录的的f_price字段的值均小于10.00元。

而大于10.0.元的记录没有被返回。

7.2.4带IN关键字的查询

IN操作符用来查询满足指定条件范围内的记录,使用IN操作符时,将所有检索条件用括号括起来,检索条件用逗号分隔开,只要满足条件范围内的一个值即为匹配项。

【例7.7】查询s_id为101和102的记录,SQL语句如下:

SELECTs_id,f_name,f_price

FROMfruits

WHEREs_idIN(101,102)

ORDERBYf_name;

查询结果如下:

+------+------------+---------+

|s_id|f_name|f_price|

+------+------------+---------+

|101|apple|5.20|

|102|banana|10.30|

|101|blackberry|10.20|

|101|cherry|3.20|

|102|grape|5.30|

|102|orange|11.20|

+------+------------+---------+

相反的,可以使用关键字NOT来检索不在条件范围内的记录。

【例7.8】查询所有s_id不等于101也不等于102的记录,SQL语句如下:

SELECTs_id,f_name,f_price

FROMfruits

WHEREs_idNOTIN(101,102)

ORDERBYf_name;

查询结果如下:

+------+---------+---------+

|s_id|f_name|f_price|

+------+---------+---------+

|103|apricot|2.20|

|104|berry|7.60|

|103|coconut|9.20|

|104|lemon|6.40|

|106|mango|15.60|

|105|melon|8.20|

|107|xbababa|3.60|

|105|xbabay|2.60|

|105|xxtt|11.60|

|107|xxxx|3.60|

+------+---------+---------+

可以看到,该语句在IN关键字前面加上了NOT关键字,这使得查询的结果与前面一个的结果正好相反,前面检索了s_id等于101和102的记录,而这里所要求的查询的记录中的s_id字段值不等于这两个值中的任一个。

7.2.5带BETWEENAND的范围查询

BETWEENAND用来查询某个范围内的值,该操作符需要两个参数,即范围的开始值和结束值,如果记录的字段值满足指定的范围查询条件,则这些记录被返回。

【例7.9】查询价格在2.00元到10.5元之间水果名称和价格,SQL语句如下:

SELECTf_name,f_priceFROMfruitsWHEREf_priceBETWEEN2.00AND10.20;

查询结果如下:

mysql>SELECTf_name,f_price

->FROMfruits

->WHEREf_priceBETWEEN2.00AND10.20;

+------------+---------+

|f_name|f_price|

+------------+---------+

|apple|5.20|

|apricot|2.20|

|blackberry|10.20|

|berry|7.60|

|xxxx|3.60|

|melon|8.20|

|cherry|3.20|

|lemon|6.40|

|xbabay|2.60|

|coconut|9.20|

|grape|5.30|

|xbababa|3.60|

+------------+---------+

可以看到,返回结果包含了价格从2.00元到10.20元之间的字段值,并且端点值10.20也包括在返回结果中,即BETWEEN匹配范围中所有值,包括开始值和结束值。

BETWEENAND操作符前可以加关键字NOT,表示指定范围之外的值,如果字段值不满足指定的范围内的值,则这些记录被返回。

【例7.10】查询价格在2.00元到10.5元之外的水果名称和价格,SQL语句如下:

SELECTf_name,f_price

FROMfruits

WHEREf_priceNOTBETWEEN2.00AND10.20;

查询结果如下:

+--------+---------+

|f_name|f_price|

+--------+---------+

|orange|11.20|

|mango|15.60|

|xxtt|11.60|

|banana|10.30|

+--------+---------+

由结果可以看到,返回的记录只有f_price字段大于10.20的,f_price字段小于2.00的记录也满足查询条件,因此如果表中有f_price字段小于2.00的记录,也应当作为查询结果。

7.2.6带LIKE的字符匹配查询

在前面的检索操作中,讲述了如何查询多个字段的记录,如何进行比较查询或者是查询一个条件范围内的记录,如果要查找所有的包含字符“ge”的水果名称,该如何查找呢?

简单的比较操作在这里已经行不通了,在这里,需要使用通配符进行匹配查找,通过创建查找模式对表中的数据进行比较。

执行这个任务的关键字是LIKE。

通配符是一种在SQL的WHERE条件子句中拥有特殊意思的字符,SQL语句中支持多种通配符,可以和LIKE一起使用的通配符有‘%’和‘_’。

1百分号通配符‘%’,匹配任意长度的字符,甚至包括零字符

【例7.11】查找所有以‘b’字母开头的水果,SQL语句如下:

SELECTf_id,f_name

FROMfruits

WHEREf_nameLIKE'b%';

查询结果如下:

+------+------------+

|f_id|f_name|

+------+------------+

|b1|blackberry|

|b2|berry|

|t1|banana|

+------+------------+

该语句查询的结果返回所有以‘b’开头的水果的id和name,‘%’告诉MySQL,返回所有f_name字段以字母‘g’开头的记录,不管‘g’后面有多少个字符。

在搜索匹配时通配符‘%’可以放在不同位置。

如【例7.12】。

【例7.12】在fruits表中,查询f_name中包含字母‘g’的记录,SQL语句如下:

SELECTf_id,f_name

FROMfruits

WHEREf_nameLIKE'%g%';

查询结果如下:

+------+--------+

|f_id|f_name|

+------+--------+

|bs1|orange|

|m1|mango|

|t2|grape|

+------+--------+

该语句查询包含字符串中包含字母‘g’的水果名称,只要名字中有字符‘g’,而前面或后面不管有多少个字符,都满足查询的条件。

【例7.13】查询以‘b’开头,并以‘y’结尾的水果的名称,SQL语句如下:

SELECTf_name

FROMfruits

WHEREf_nameLIKE'b%y';

查询结果如下:

+------------+

|f_name|

+------------+

|blackberry|

|berry|

+------------+

通过以上查询结果,可以看到,‘%’用于匹配在指定的位置的任意数目的字符。

2下划线通配符‘_’,一次只能匹配任意一个字符

另一个非常有用得通配符是下划线通配符‘_’,该通配符的用法和‘%’相同,区别是

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 法学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1