Mysql从表中检索信息

来自泡泡学习笔记
BrainBs讨论 | 贡献2023年6月24日 (六) 15:22的版本 (创建页面,内容为“SELECT 语句用于从表格中提取信息。语句的一般形式如下: SELECT 要选择的内容 FROM 哪个表格 WHERE 满足的条件; 要选择的内容指示您想要查看什么。这可以是列的列表,或者 * 表示“所有列”。哪个表格指示您要从中检索数据的表格。WHERE 子句是可选的。如果存在,满足的条件指定一个或多个行必须满足的条件才能符合检索要求。 ===选择所有数…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索

SELECT 语句用于从表格中提取信息。语句的一般形式如下:

SELECT 要选择的内容
FROM 哪个表格
WHERE 满足的条件;

要选择的内容指示您想要查看什么。这可以是列的列表,或者 * 表示“所有列”。哪个表格指示您要从中检索数据的表格。WHERE 子句是可选的。如果存在,满足的条件指定一个或多个行必须满足的条件才能符合检索要求。


选择所有数据

SELECT的最简单形式从表中检索所有内容:

mysql> SELECT * FROM pet;
+----------+--------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+----------+--------+---------+------+------------+------------+
| Fluffy | Harold | cat | f | 1993-02-04 | NULL |
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
| Fang | Benny | dog | m | 1990-08-27 | NULL |
| Bowser | Diane | dog | m | 1979-08-31 | 1995-07-29 |
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+--------+---------+------+------------+------------+

这种SELECT形式使用*,它是“选择所有列”的速记符号。如果您想查看整个表格,例如在刚刚加载初始数据集之后,这非常有用。例如,您可能会发现Bowser的出生日期似乎不太正确。查阅您的原始家谱文件后,您发现正确的出生年份应为1989年,而不是1979年。

有至少两种方法可以解决这个问题:

编辑pet.txt文件以更正错误,然后使用DELETE和LOAD DATA清空表格并重新加载它:

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

但是,如果这样做,您还必须重新输入Puffball的记录。

仅使用UPDATE语句更正错误的记录:

mysql> UPDATE pet SET birth = '1989-08-31' WHERE name = 'Bowser';
UPDATE仅更改有问题的记录,无需重新加载表格。

有一个例外原则,即SELECT 选择所有列。如果表中包含不可见列,则不包括它们。


选择特定的行

如前一节所示,检索整个表很容易,只需从SELECT语句中省略WHERE子句即可。但通常你不想看到整个表,特别是当它变得很大时。相反,你通常更感兴趣的是回答一个特定的问题,在这种情况下,你需要指定一些约束条件来获取所需的信息。让我们看看一些关于你的宠物的问题所回答的选择查询。

你可以只从你的表中选择特定的行。例如,如果你想验证你对Bowser的出生日期所做的更改,可以像这样选择Bowser的记录:

mysql> SELECT * FROM pet WHERE name = 'Bowser';
+--------+-------+---------+------+------------+------------+
| name | owner | species | sex | birth | death |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+

输出确认年份被正确记录为1989,而不是1979。

字符串比较通常是不区分大小写的,所以你可以将名字指定为'bowser'、'BOWSER'等等。查询结果是相同的。

你可以在任何列上指定条件,而不仅仅是名字。例如,如果你想知道哪些动物是在1998年或之后出生的,就测试出生列:

mysql> SELECT * FROM pet WHERE birth >= '1998-1-1';
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Puffball | Diane | hamster | f | 1999-03-30 | NULL | 
+----------+-------+---------+------+------------+-------+

你可以结合条件,例如找到雌性狗:

mysql> SELECT * FROM pet WHERE species = 'dog' AND sex = 'f';
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+

上述查询使用了AND逻辑运算符。还有一个OR运算符:

mysql> SELECT * FROM pet WHERE species = 'snake' OR species = 'bird';
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Chirpy | Gwen | bird | f | 1998-09-11 | NULL |
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| Slim | Benny | snake | m | 1996-04-29 | NULL |
+----------+-------+---------+------+------------+-------+

AND和OR可以混合使用,尽管AND的优先级高于OR。如果同时使用两个运算符,最好使用括号明确指示条件应该如何分组:

mysql> SELECT * FROM pet WHERE (species = 'cat' AND sex = 'm')
OR (species = 'dog' AND sex = 'f');
+-------+--------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen | cat | m | 1994-03-17 | NULL |
| Buffy | Harold | dog | f | 1989-05-13 | NULL |
+-------+--------+---------+------+------------+-------+