«

为什么 SQL 如此重要和必备,附 SQL 极简入门学习指令集

时间:2026-4-2 00:18     作者:独元殇     分类: 开发相关


欢迎关注我的公众号,名叫「串串狗小刊」

对于初学者来说,最赚钱的编程语言是 SQL,干翻所有其他语言。你只了解 SQL 而不会做其他事情,照样赚钱。人力资源专家的年薪?也许5万美元。懂 SQL 的人力资源专家?9万美元。

编程本质上就是管理数据的。SQL 是很重要的查询数据用的工具,因此技术人员必须懂,就像高考必须考数学。

而且,你会在你的职业生涯学到很多技能,但是没有比 SQL 更有用的了。

首先 SQL 是超级简单的编程语言,一般学习周期一天就够了。

如果是产品经理,可能不会编程,但如果会 SQL 的话,知道怎么 从 SQL 里调用原始数据,节省的精力会非常大量!无需向他人询问数字。这个很关键。

如果是工程师,SQL 记在心里,对数据的储存会更加的得心应手,完全用不到 Python 编写脚本了。当 Web 变慢了,出性能问题了,会 SQL 执行以及优化 SQL 是必须掌握的技能。

更重要的是!!!

SQL 这门语言已经出来有 30 年了,(几乎)一点都没变过!!!没变过!!!

你只需要学一次,不用再像 JS C++ CSS Python 等等等等一直不断的学.... 当然,确实有零零散散的细小变化,但是相较其他任何语言,都是最永久性的,而且即便使用频次可能会低,但是你的整个职业生涯,根本离不开它!

然而现实是,很多应届大学生,竟然直接跳过 SQL ,虽然可能不会影响干活,毕竟用到了让别人写就行,尤其是 AI 时代.... 还有很多人也只是浅浅学了几句..... 查询是很重要的。

我们应该喜欢学习新的东西,但更优先的,是学一些真正的新东西。SQL 就是一种性价比很高的新东西。

学习 SQL 很简单,就下面这几块儿学完,你就掌握了 95% 了!

这是我用了快 6 年的 SQL 笔记(古法编程时代,我复制代码用的,现在作为入门学习完全可以!):

1.1 数据库操作

创建数据库

-- 语法
CREATE DATABASE database_name;

-- 示例:创建一个名为 myshop 的数据库
CREATE DATABASE myshop;

删除数据库

-- 危险操作!删除后数据无法恢复
DROP DATABASE database_name;

-- 示例
DROP DATABASE myshop;

修改数据库名

-- SQL Server 专用
EXEC sp_renamedb 'old_name', 'new_name';

-- MySQL 用法
ALTER DATABASE old_name RENAME TO new_name;  -- MySQL 5.1+
-- 或
RENAME DATABASE old_name TO new_name;  -- 部分版本支持

1.2 表操作

创建表

-- 基本语法
CREATE TABLE table_name (
    column1 datatype [constraint],
    column2 datatype [constraint],
    ...
);

-- 示例:创建用户表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,  -- MySQL 自增写法
    -- id INT IDENTITY(1,1) PRIMARY KEY,  -- SQL Server 自增写法
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE,
    created_at DATETIME DEFAULT GETDATE()  -- SQL Server
    -- created_at DATETIME DEFAULT NOW()   -- MySQL
);

-- 从现有表创建新表(只复制结构)
-- MySQL
CREATE TABLE new_table LIKE old_table;

-- SQL Server
SELECT * INTO new_table FROM old_table WHERE 1=0;

删除表

DROP TABLE table_name;

-- 安全删除(如果存在才删除)
DROP TABLE IF EXISTS table_name;  -- MySQL
-- IF OBJECT_ID('table_name', 'U') IS NOT NULL DROP TABLE table_name;  -- SQL Server

清空表数据(保留结构)

-- TRUNCATE 比 DELETE 更快,但无法回滚
TRUNCATE TABLE table_name;

-- 等效的 DELETE(可回滚,但更慢)
DELETE FROM table_name;

修改表结构

-- 添加列
ALTER TABLE table_name ADD column_name datatype;

-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;

-- 修改列类型
-- MySQL
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;
-- SQL Server
ALTER TABLE table_name ALTER COLUMN column_name new_datatype;

-- 重命名列
-- MySQL
ALTER TABLE table_name CHANGE old_name new_name datatype;
-- SQL Server
EXEC sp_rename 'table_name.old_name', 'new_name', 'COLUMN';

1.3 主键与约束

-- 添加主键
ALTER TABLE table_name ADD PRIMARY KEY (column_name);

-- 添加复合主键
ALTER TABLE table_name ADD PRIMARY KEY (col1, col2);

-- 删除主键
-- MySQL
ALTER TABLE table_name DROP PRIMARY KEY;
-- SQL Server
ALTER TABLE table_name DROP CONSTRAINT PK_table_name;

-- 添加外键约束
ALTER TABLE orders
ADD CONSTRAINT fk_user_id
FOREIGN KEY (user_id) REFERENCES users(id);

1.4 索引操作

-- 创建索引
CREATE INDEX idx_name ON table_name (column_name);

-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users (email);

-- 创建复合索引
CREATE INDEX idx_name_age ON users (name, age);

-- 删除索引
-- MySQL
DROP INDEX idx_name ON table_name;
-- SQL Server
DROP INDEX table_name.idx_name;

-- 查看表的索引
-- MySQL
SHOW INDEX FROM table_name;
-- SQL Server
EXEC sp_helpindex 'table_name';

经常用于 WHERE、JOIN、ORDER BY 的列适合建索引

小表(<1000行)通常不需要索引

频繁更新的列不宜建太多索引

组合索引注意列顺序(最左前缀原则)

1.5 视图操作

-- 创建视图
CREATE VIEW view_name AS
SELECT column1, column2
FROM table_name
WHERE condition;

-- 示例:创建用户订单视图
CREATE VIEW user_orders AS
SELECT u.username, o.order_id, o.total
FROM users u
JOIN orders o ON u.id = o.user_id;

-- 使用视图(像表一样查询)
SELECT * FROM user_orders WHERE total > 100;

-- 删除视图
DROP VIEW view_name;
-- DROP VIEW IF EXISTS view_name;  -- 安全删除

1.6 基本 CRUD 操作

-- ========== 查询 SELECT ==========

-- 基本查询
SELECT * FROM users;

-- 条件查询
SELECT * FROM users WHERE age > 18;

-- 指定字段
SELECT name, email FROM users;

-- 别名
SELECT name AS 姓名, email AS 邮箱 FROM users;

-- 去重
SELECT DISTINCT category FROM products;

-- 排序(ASC 升序,DESC 降序)
SELECT * FROM users ORDER BY age DESC, name ASC;

-- 限制返回行数
-- MySQL
SELECT * FROM users LIMIT 10;
-- SQL Server
SELECT TOP 10 * FROM users;

-- 分页查询
-- MySQL(推荐)
SELECT * FROM users LIMIT 10 OFFSET 20;  -- 跳过20条,取10条(第3页)
-- SQL Server 2012+
SELECT * FROM users ORDER BY id OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

-- ========== 插入 INSERT ==========

-- 插入单条
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');

-- 插入多条
INSERT INTO users (name, email) VALUES
    ('张三', 'zhang@example.com'),
    ('李四', 'li@example.com'),
    ('王五', 'wang@example.com');

-- 从其他表复制数据
INSERT INTO users_backup (name, email)
SELECT name, email FROM users WHERE active = 1;

-- ========== 更新 UPDATE ==========

-- 务必加 WHERE,否则更新全表!
UPDATE users SET email = 'new@example.com' WHERE id = 1;

-- 更新多个字段
UPDATE users SET name = '新名字', age = 25 WHERE id = 1;

-- ========== 删除 DELETE ==========

-- 务必加 WHERE,否则删除全表!
DELETE FROM users WHERE id = 1;

-- 删除符合条件的多条
DELETE FROM users WHERE last_login < '2020-01-01';

1.7 聚合函数

-- 统计总数
SELECT COUNT(*) AS total FROM users;
SELECT COUNT(DISTINCT category) FROM products;  -- 去重统计

-- 求和
SELECT SUM(amount) AS total_sales FROM orders;

-- 平均值
SELECT AVG(age) AS avg_age FROM users;

-- 最大/最小值
SELECT MAX(price) AS max_price, MIN(price) AS min_price FROM products;

-- 分组统计
SELECT category, COUNT(*) AS count, SUM(price) AS total
FROM products
GROUP BY category
HAVING COUNT(*) > 5   -- HAVING 用于过滤分组后的结果
ORDER BY total DESC;

标签: 原创 SQL

评论:
avatar
八咫烏 2026-04-05 10:44
所以我开了公司后的主要产品就是数据库备份机,可随后的硬件涨价,导致特别不好卖。