MYSQL 55从零开始学查询数据.docx
- 文档编号:29877141
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:95
- 大小:321.06KB
MYSQL 55从零开始学查询数据.docx
《MYSQL 55从零开始学查询数据.docx》由会员分享,可在线阅读,更多相关《MYSQL 55从零开始学查询数据.docx(95页珍藏版)》请在冰豆网上搜索。
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[
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下划线通配符‘_’,一次只能匹配任意一个字符
另一个非常有用得通配符是下划线通配符‘_’,该通配符的用法和‘%’相同,区别是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MYSQL 55从零开始学查询数据 55 从零开始 查询 数据