暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 基础教程-03 从表中检索数据

林员外聊编程 2020-06-13
184

1. 向表中加载数据

创建表之后,需要向其中填充数据,可以用LOAD DATA INSERT 语句做这件事。

假设你的宠物记录如下表所示:

 

name

owner

species

sex

birth

death

Fluffy

Harold

cat

f

1993-02-04


Claws

Gwen

cat

m

1994-03-17


Buffy

Harold

dog

f

1989-05-13


Fang

Benny

dog

m

1990-08-27


Bowser

Diane

dog

m

1979-08-31

1995-07-29

Chirpy

Gwen

bird

f

1998-09-11


Whistler

Gwen

bird


1997-12-09


Slim

Benny

snake

m

1996-04-29


 

因为开始是一张空表,一种简单的填充数据方式就是创建一个文本文件,每个动物对应一行信息,然后用一条语句将文件内容加载到表中。

例如:可以创建一个pet.txt 文件,文件中每行包含一条记录信息,每条记录中各值以TAB键分隔,值的内容按照CREATE TABLE语句中创建列指定的顺序给出,对于缺失的值(例如未知的性别或者活着的动物的死亡日期)可以设置NULL值,在文本文件中用\N(反斜杠加大写N),例如:

Whistler        Gwen    bird    \N      1997-12-09      \N

要将文本文件pet.txt中的内容加载到pet表中,使用如下语句:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet;

如果文件是在Windows系统中创建,编辑器使用的是\r\n换行符,则应使用如下语句:

mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet

LINES TERMINATED BY '\r\n';

 

(在运行MacOS的苹果机器上,应该使用LINES TERMINATED BY '\r'

可以在LOAD DATA语句中明确指定列分隔符和行结束符,默认值是tab和换行符。

对于用语句正确读取pet.txt文件来说,以上信息就足够了。

如果语句执行失败,可能是你的MySQL安装程序并没有默认启用本地文件功能。

如果需要每次添加一条新记录,这时可以用INSERT语句。简单的使用形式就是按照创建表时提供的顺序为每赋值,例如:

 

mysql> INSERT INTO pet VALUES ('Puffball', 'Diane', 'hamster', 'f', '1999-03-30', NULL);

 

字符值和日期用引号包含,用INSERT语句可以直接插入NULL表示缺失数据,不需要LOAD DATA 中使用的\N

 

2. 从表中检索数据

SELECT 语句用于从表中检索数据,该语句的通用格式如下:

SELECT what_to_select 

FROM which_table 

WHERE conditions_to_satisfy;

 

what_to_select  表示需要查什么信息,可以是多个列,或者用 * 表示所有列。

which_table 指定查询的表,WHERE 子句是可选的,用于指定各个行需要满足的条件。

 

2.1 选择全部数据

SELECT 语句的最简单形式就是从表中查询全部数据:


当查询数据后,如果发现有些数据错了,这时该怎么处理呢?有2种方法可供选择:

·编辑pet.txt文件,改正错误信息,清空pet表,重新加载数据:

 

mysql> DELETE FROM pet; 

mysql> LOAD DATA LOCAL INFILE 'pet.txt' INTO TABLE pet;

 

·使用UPDATE 语句修复错误记录

 

mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';

 

2.2 选择特定行

前面讲过,如果不加WHERE子句查询将返回全部信息,但是一般来说,我们不需要查看全表信息,尤其是当表数据量很大的时候更是如此。下面看一些选择查询例子。

验证刚刚修改过的 Bowser 的生日:

 


字符串比较通常是不区分大小写的,因此指定名字为 ‘bowser’或者’BOWSER’ 结果是相同的。

查询时可以在任何列上指定条件,例如:

 


还可以使用组合条件:

 

 

之前的查询使用了AND逻辑操作符,还可以使用 OR 操作符:

 

 

AND 和 OR 也可混合使用,当然,混合使用时最好使用括号以明确指定条件分组情况:

 

 

2.3 选择特定列

查询信息时可以只查特定列,列名间以逗号分隔,例如仅查询动物名称和出生日期:

 

 

如只想查出动物主人:

 


上例中我们发现有的主人因有多个宠物多次出现,如果我们想让每个主人都不重复,则可以使用关键字 DISTINCT :

 


可以使用WHERE子句将行选择与列选择结合起来查询:

 


2.4 行排序

大家可能注意到了,之前例子中的查询结果并没有以特定顺序排序,如果以某种有意义的方式对结果排序,更利于我们检查结果,要对结果排序,可以使用ORDER BY子句:

 


可以对多个列进行排序,每个列可以指定不同的排序方式,例如,可以对动物种类进行升序排序,然后对同种类内的动物生日进行降序排序(幼小的动物排在前面),查询示例如下:

 


DESC 关键字仅影响它前面紧跟的列(birth),对species没有影响。


文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论