MySQL的select语句用于从数据库表中检索数据,是日常开发中使用频率最高的SQL语句之一,掌握不同场景下的操作实例能大幅提升数据查询效率。下面通过多个实际案例来讲解select语句的常见用法。

基础查询实例
最基础的select语句可以查询表中的所有数据,也可以指定查询特定字段。假设我们有一个名为user的用户表,表结构如下:
-- 创建用户表
CREATE TABLE user (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
age INT,
city VARCHAR(50)
);
-- 插入测试数据
INSERT INTO user (username, age, city) VALUES
('张三', 25, '北京'),
('李四', 30, '上海'),
('王五', 22, '广州'),
('赵六', 28, '北京');
查询表中所有数据的实例:
SELECT * FROM user;
查询指定字段的实例,比如只获取用户名和城市:
SELECT username, city FROM user;
条件查询实例
使用WHERE子句可以添加查询条件,过滤出符合要求的数据。常见的条件运算符包括=、>、<、LIKE、IN等。
查询年龄大于25岁的用户:
SELECT * FROM user WHERE age > 25;
查询城市为北京的用户:
SELECT * FROM user WHERE city = '北京';
查询年龄在22到28岁之间的用户,使用BETWEEN关键字:
SELECT * FROM user WHERE age BETWEEN 22 AND 28;
查询用户名包含三的用户,使用LIKE模糊匹配:
SELECT * FROM user WHERE username LIKE '%三%';
排序与分页实例
使用ORDER BY可以对查询结果进行排序,ASC表示升序,DESC表示降序,默认是升序。使用LIMIT可以实现分页效果。
按年龄升序查询所有用户:
SELECT * FROM user ORDER BY age ASC;
按年龄降序查询前2条数据:
SELECT * FROM user ORDER BY age DESC LIMIT 2;
查询第2页数据,每页2条,也就是跳过前2条取2条:
SELECT * FROM user LIMIT 2, 2;
分组查询实例
使用GROUP BY可以对数据进行分组,结合聚合函数COUNT、SUM、AVG等可以统计分组数据。使用HAVING可以对分组后的结果进行过滤。
统计每个城市的用户数量:
SELECT city, COUNT(*) AS user_count FROM user GROUP BY city;
统计用户数量大于1的城市:
SELECT city, COUNT(*) AS user_count FROM user GROUP BY city HAVING user_count > 1;
连表查询实例
实际开发中经常需要查询多张关联表的数据,这时候需要使用连表查询。假设我们有一张order订单表,和用户表关联:
-- 创建订单表
CREATE TABLE order_table (
order_id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
order_amount DECIMAL(10,2),
FOREIGN KEY (user_id) REFERENCES user(id)
);
-- 插入测试订单数据
INSERT INTO order_table (user_id, order_amount) VALUES
(1, 199.99),
(1, 299.50),
(2, 150.00);
查询每个用户的用户名和对应的订单金额,使用内连接INNER JOIN:
SELECT u.username, o.order_amount FROM user u INNER JOIN order_table o ON u.id = o.user_id;
查询所有用户及其订单金额,没有订单的用户也显示,使用左连接LEFT JOIN:
SELECT u.username, o.order_amount FROM user u LEFT JOIN order_table o ON u.id = o.user_id;