SQL其实很简单,掌握这些就够了
学习SQL并没有想象中那么难。SQL是专门用来管理和操作关系型数据库的语言。经过一段时间的学习,我整理了日常工作中最常用的SQL语法,分享给大家作为学习参考。
写SQL语句时,可以写成单行或多行,用分号结束。关键字大小写都可以,但一般建议用大写,这样更清晰。注释有两种:单行注释用--,多行注释用/*注释内容*/。
SQL语言主要分为四种类型:DDL、DML、DQL、DCL。下面我们逐一了解。
DDL 数据定义语言
DDL用来操作数据库和表,比如创建数据库、删除数据库、创建表、修改表等。
-- 连接数据库(以PostgreSQL为例)
psql -d postgres -U postgres;
-- 创建数据库
CREATE DATABASE db_name;
-- 删除数据库
DROP DATABASE db_name;
-- 查看所有数据库
\l
-- 切换数据库
\c db_name;
-- 创建表
CREATE TABLE table_name(
id INT PRIMARY KEY,
name VARCHAR(50)
);
-- 修改表名
ALTER TABLE table_name RENAME TO new_table_name;
-- 查看所有表
\dt
-- 删除表
DROP TABLE table_name;DML 数据操纵语言
DML负责数据的增删改操作,也就是我们常说的CRUD操作。
INSERT 添加数据
-- 方式1:不指定列名,按表结构顺序插入
INSERT INTO table_name VALUES(value1, value2, value3);
-- 方式2:指定列名插入
INSERT INTO table_name (column1, column2, column3)
VALUES(value1, value2, value3);UPDATE 修改数据
UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;
-- 注意:一定要加WHERE条件,否则会修改所有数据DELETE 删除数据
DELETE FROM table_name
WHERE condition;
-- 同样要注意WHERE条件,避免误删DQL 数据查询语言
这是日常工作中最常用的部分,用来从数据库中查询数据。
WHERE 条件筛选
-- 查询特定列
SELECT column1, column2 FROM table_name WHERE id = 1;
-- 查询所有列
SELECT * FROM table_name WHERE country = 'CN';
-- 多条件查询
SELECT * FROM table_name
WHERE column1 >= 40000 AND column1_date >= '2024-01-01';AS 别名
SELECT name1 AS name2 FROM table_name;ORDER BY 排序
-- 单字段排序
SELECT * FROM table_name ORDER BY age;
-- 多字段排序
SELECT column1, column2 FROM table_name
ORDER BY column1 ASC, column2 DESC;LIKE 模糊查询
-- 查找以a开头的名称
SELECT column1, column2 FROM table_name
WHERE column_name LIKE 'a%';
-- 查找第二个字母是b的名称
SELECT column1, column2 FROM table_name
WHERE column_name LIKE '_b%';
-- 查找包含name的名称
SELECT column1, column2 FROM table_name
WHERE column_name LIKE '%name%';MAX 最大值和 MIN 最小值
-- 找最大值
SELECT MAX(column1) FROM table_name;
-- 同时找最大值和最小值
SELECT MAX(column1) AS max_column1,
MIN(column2) AS min_column2
FROM table_name;AND 和 OR 逻辑运算
SELECT * FROM table_name
WHERE country = 'CN' AND alexa > 50;BETWEEN 范围查询
-- 包含边界值
SELECT column1, column2 FROM table_name
WHERE column BETWEEN value1 AND value2;
-- 不包含边界值
SELECT column1, column2 FROM table_name
WHERE column NOT BETWEEN value1 AND value2;AVG 平均值
SELECT AVG(column_name) FROM table_name;COUNT 计数
-- 统计某列非空值的数量
SELECT COUNT(column_name) AS cnt FROM table_name;
-- 统计总行数
SELECT COUNT(*) FROM table_name;SUM 求和
SELECT SUM(column_name) AS nums FROM table_name;GROUP BY 分组
SELECT column_name, COUNT(*)
FROM table_name
GROUP BY column_name;DATE 日期处理
-- 查询特定日期的记录
SELECT * FROM table_name
WHERE table_date = '2025-11-10';DISTINCT 去重
SELECT DISTINCT column_name1, column_name2
FROM table_name;LIMIT 限制结果数量
-- MySQL写法
SELECT * FROM table_name LIMIT 10; -- 前10条
SELECT * FROM table_name LIMIT 10, 10; -- 第2页,每页10条
-- PostgreSQL写法
SELECT * FROM table_name LIMIT 10; -- 前10条
SELECT * FROM table_name LIMIT 10 OFFSET 10; -- 跳过10条,取10条IS NULL 空值判断
SELECT * FROM table_name
WHERE age IS NULL;DCL 数据控制语言
DCL用来管理数据库用户的权限,平时用得相对较少。
用户管理
-- 创建用户
CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';
-- 删除用户
DROP USER 'username'@'hostname';
-- 查询用户
SELECT * FROM mysql.user;权限管理
-- 查看权限
SHOW GRANTS FOR 'username'@'hostname';
-- 授予权限
GRANT permission_list ON database.table
TO 'username'@'hostname';
-- 撤销权限
REVOKE permission_list ON database.table
FROM 'username'@'hostname';实际应用技巧
组合使用示例
-- 查询每个国家的用户平均年龄,按平均年龄降序排列,只显示前5个
SELECT country, AVG(age) AS avg_age
FROM users
WHERE age IS NOT NULL
GROUP BY country
ORDER BY avg_age DESC
LIMIT 5;日期范围查询
-- 查询2024年1月的订单
SELECT * FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-01-31';
-- 查询最近7天的活跃用户
SELECT * FROM users
WHERE last_login_date >= CURRENT_DATE - INTERVAL '7 days';多表关联查询
-- 查询用户及其订单信息
SELECT u.name, o.order_date, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE u.status = 'active';学习建议
先掌握基础:把基本的SELECT、INSERT、UPDATE、DELETE练熟
理解WHERE条件:这是SQL查询的核心
多练习分组统计:GROUP BY是数据分析的利器
注意性能:避免使用SELECT *,只查询需要的列
SQL是一种声明式语言,你只需要告诉数据库"要什么",不需要关心"怎么做"。这种特性让SQL学习起来相对容易。虽然不同数据库(MySQL、Oracle、PostgreSQL等)有细微差别,但核心语法是相通的。
记住,学好SQL的关键是多练习。从简单的查询开始,逐步尝试复杂的统计分析,很快你就能熟练运用这个强大的工具了。
本文内容仅供个人学习/研究/参考使用,不构成任何决策建议或专业指导。分享/转载时请标明原文来源,同时请勿将内容用于商业售卖、虚假宣传等非学习用途哦~感谢您的理解与支持!