检索数据
睡不醒的鲤鱼 2021-12-21 MySQL SQL 必知必会
本文讲解如何使用 SELECT 语句从表中检索一个或多个数据列。
# 一、检索单个列
SELECT prod_name
FROM Products;
1
2
2
# 二、检索多个列
SELECT prod_id, prod_name, prod_price
FROM Products;
1
2
2
# 三、检索所有列
SELECT *
FROM Products;
1
2
2
注意
除非确实需要表中的每一列,否则最好别使用 *
通配符。检索不需要的列通常会降低检索速度和应用程序的性能。
# 四、检索不同的值
SELECT DISTINCT vend_id
FROM Products;
1
2
2
注意
不能部分使用 DISTINCT
。DISTINCT
关键字作用于所有的列,不仅仅是跟在其后的那一列。
# 五、限制结果
SELECT prod_name
FROM Products
LIMIT 5;
1
2
3
2
3
SELECT prod_name
FROM Products
LIMIT 5 OFFSET 5;
1
2
3
2
3
注意
LIMIT 4 OFFSET 3
语句可以简化为 LIMIT 3,4
。
使用这个语法,逗号之前的值对应 OFFSET,逗号之后的值对应 LIMIT(反着的,要小心)。
# 六、使用注释
SELECT prod_name -- 这是一条注释
FROM Products;
1
2
2
# 这是一条注释
SELECT prod_name
FROM Products;
1
2
3
2
3
/* SELECT prod_name, vend_id
FROM Products; */
SELECT prod_name
FROM Products;
1
2
3
4
2
3
4
# 七、小结
本文讲解了如何使用 MySQL 的 SELECT 语句来检索单个表列、多个表列以及所有表列,以及如何返回不同的值,如何注释代码。
# 八、挑战题
# 8.1 从 Customers 表中检索所有的 ID
描述
现有表 Customers 如下:
cust_id |
---|
A |
B |
C |
问题
编写 SQL 语句,从 Customers 表中检索所有的 cust_id。
示例
DROP TABLE IF EXISTS `Customers`;
CREATE TABLE IF NOT EXISTS `Customers`(
cust_id VARCHAR(255) DEFAULT NULL
);
INSERT `Customers` VALUES ('A'),('B'),('C');
1
2
3
4
5
2
3
4
5
解答
SELECT cust_id
FROM Customers;
1
2
2
# 8.2 检索并列出已订购产品的清单
描述
表 OrderItems 含有非空的列 prod_id 代表商品 id,包含了所有已订购的商品(有些已被订购多次)。
prod_id |
---|
a1 |
a2 |
a3 |
a4 |
a5 |
a6 |
a7 |
问题
编写 SQL 语句,检索并列出所有已订购商品(prod_id)的去重后的清单。
示例
DROP TABLE IF EXISTS `OrderItems`;
CREATE TABLE IF NOT EXISTS `OrderItems`(
prod_id VARCHAR(255) NOT NULL COMMENT '商品id'
);
INSERT `OrderItems` VALUES ('a1'),('a2'),('a3'),('a4'),('a5'),('a6'),('a6');
1
2
3
4
5
2
3
4
5
解答
SELECT DISTINCT prod_id
FROM OrderItems;
1
2
2
# 8.3 检索所有列
描述
现在有 Customers 表(表中含有列 cust_id 代表客户 id,cust_name 代表客户姓名) 。
cust_id | cust_name |
---|---|
a1 | andy |
a2 | ben |
a3 | tony |
a4 | tom |
a5 | an |
a6 | lee |
a7 | hex |
问题
需要编写 SQL 语句,检索所有列。
示例
DROP TABLE IF EXISTS `Customers`;
CREATE TABLE IF NOT EXISTS `Customers`(
cust_id VARCHAR(255) NOT NULL COMMENT '客户id',
cust_name VARCHAR(255) NOT NULL COMMENT '客户姓名'
);
INSERT `Customers` VALUES ('a1','andy'),('a2','ben'),('a3','tony'),('a4','tom'),('a5','an'),('a6','lee'),('a7','hex');
1
2
3
4
5
6
2
3
4
5
6
解答
SELECT *
FROM Customers;
1
2
2