SQL 查询语句入门语法和案例

SQL 查询语句是数据库操作中最基本也是最常用的部分,主要用于从数据库中检索数据。

1. 基本查询语法

语法结构:

SELECT column1, column2, ... 

FROM table_name

WHERE condition

GROUP BY column_name

HAVING condition

ORDER BY column_name [ASC|DESC]

LIMIT number;

2. 语法分解和案例

1. 简单查询

从表中查询指定列的数据。

SELECT name, age 

FROM users;

解释:查询表 users 中的 name 和 age 列。

2. 条件查询

通过 WHERE 子句筛选满足条件的数据。

SELECT name, age 

FROM users 

WHERE age > 25 AND city = 'New York';

解释:查询 users 表中 age 大于 25 且 city 为 ‘New York’ 的记录。

3. 去重查询

使用 DISTINCT 去掉重复数据。

SELECT DISTINCT city 

FROM users;

解释:查询 users 表中所有不重复的 city。

4. 排序查询

通过 ORDER BY 子句对查询结果排序。

SELECT name, age 

FROM users 

ORDER BY age DESC;

解释:查询 users 表中的 name 和 age,并按年龄从大到小排序。

5. 分组查询

通过 GROUP BY 子句对数据分组。

SELECT city, COUNT(*) AS user_count 

FROM users 

GROUP BY city;

解释:统计 users 表中每个城市的用户数量。

6. 分组过滤

通过 HAVING 子句筛选分组后的数据。

SELECT city, COUNT(*) AS user_count 

FROM users 

GROUP BY city 

HAVING user_count > 10;

解释:只显示用户数量大于 10 的城市及其统计值。

7. 分页查询

使用 LIMIT 实现分页。

SELECT name, age 

FROM users 

ORDER BY age DESC 

LIMIT 5;

解释:查询年龄最大的前 5 个用户。

8. 联表查询

(1) 内连接

SELECT u.name, o.order_id, o.amount 

FROM users u 

INNER JOIN orders o ON u.id = o.user_id;

解释:查询用户及其订单信息。

(2) 左连接

SELECT u.name, o.order_id 

FROM users u 

LEFT JOIN orders o ON u.id = o.user_id;

解释:查询所有用户及其对应订单(无订单的用户也会显示)。

(3) 右连接

SELECT u.name, o.order_id 

FROM users u 

RIGHT JOIN orders o ON u.id = o.user_id;

解释:查询所有订单及其对应用户(无用户的订单也会显示)。

(4) 全连接(部分数据库支持)

SELECT u.name, o.order_id 

FROM users u 

FULL JOIN orders o ON u.id = o.user_id;

解释:显示所有用户和订单信息,包括不匹配的记录。

3. 注意事项

1. SQL 区分大小写

SQL 关键字对大小写不敏感(如 SELECT 和 select 等效)。

表名、列名是否区分大小写,取决于数据库设置。

2. NULL 值处理

NULL 不等于 0 或空字符串。

使用 IS NULL 或 IS NOT NULL 检查 NULL 值。

SELECT name FROM users WHERE phone_number IS NULL;

3. 防止 SQL 注入

永远不要将用户输入直接拼接到 SQL 查询中。

使用参数化查询代替拼接字符串。

4. 性能优化

避免 SELECT *,只查询需要的列。

对经常查询的列添加索引(如主键、外键、条件列)。

使用 EXPLAIN 分析查询性能。

5. 表别名的使用

使用别名使 SQL 更简洁易读,特别是在联表查询时。

SELECT u.name, o.amount 

FROM users AS u 

JOIN orders AS o ON u.id = o.user_id;

6. 分组和排序的顺序

如果使用了 GROUP BY,ORDER BY 应作用于分组后的数据。

7. 避免笛卡尔积

联表时如果忘记指定 ON 条件,可能会导致笛卡尔积,查询结果数据量急剧膨胀。

4. 综合案例

需求:

查询年龄大于 30 岁的用户,统计每个城市的用户数量,按用户数量降序排序,只显示用户数量大于 5 的城市前 3 个。

SQL 实现:

SELECT city, COUNT(*) AS user_count 

FROM users 

WHERE age > 30 

GROUP BY city 

HAVING user_count > 5 

ORDER BY user_count DESC 

LIMIT 3;

解释

1. WHERE 筛选年龄大于 30 的用户。

2. GROUP BY 按城市分组。

3. HAVING 筛选用户数量大于 5 的城市。

4. ORDER BY 按用户数量降序排序。

5. LIMIT 返回前 3 个结果。

掌握这些基础语法后,可以根据需求组合使用不同语句,完成复杂的查询任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值