环境搭建与第一个查询
第2课:环境搭建与第一个查询
🎯 生活类比
想象你要学习烹饪。在动手做菜之前,你需要:
- 准备厨房 — 安装数据库就像安装灶台和烤箱
- 准备工具 — 命令行和图形化工具就像锅铲和量杯
- 准备食材 — 创建数据库就像把食材摆上台面
- 开始做菜 — 第一条 SQL 查询就像切下第一刀
没有厨房就无法做菜,同样,没有搭建好数据库环境就无法学习 SQL。本课将带你从零开始,搭建属于自己的"SQL 厨房"。
📚 核心概念
1. 安装数据库
主流的关系型数据库有三种,初学者建议先安装其中一个,熟悉后再扩展学习。
MySQL
MySQL 是全球最流行的开源数据库,被广泛用于 Web 开发。
Windows 安装:
- 前往 MySQL 官网 下载安装包
- 运行安装程序,选择 "Developer Default"
- 设置 root 密码(请牢记!)
- 完成安装后,MySQL 服务会自动启动
macOS 安装:
# 使用 Homebrew 安装
brew install mysql
# 启动 MySQL 服务
brew services start mysql
# 安全初始化
mysql_secure_installation
Linux (Ubuntu) 安装:
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo mysql_secure_installation
PostgreSQL
PostgreSQL 是功能最强大的开源数据库,适合复杂查询和企业级应用。
Windows 安装:
- 前往 PostgreSQL 官网 下载安装包
- 运行安装程序,设置密码和端口(默认 5432)
- 勾选 "pgAdmin" 组件(图形化管理工具)
macOS 安装:
brew install postgresql@16
brew services start postgresql@16
Linux (Ubuntu) 安装:
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql
SQLite
SQLite 是轻量级的嵌入式数据库,无需安装服务器,非常适合学习和小型项目。
Windows 安装:
- 前往 SQLite 下载页 下载
sqlite-tools-win64 - 解压到任意目录,将该目录添加到系统 PATH
macOS / Linux 安装:
# macOS(通常已预装)
brew install sqlite
# Linux
sudo apt install sqlite3
验证安装:
sqlite3 --version
2. 使用命令行连接数据库
命令行是与数据库交互最直接的方式。
连接 MySQL:
mysql -u root -p
# 输入密码后进入 MySQL 交互界面
进入后你会看到提示符变为 mysql>,表示可以输入 SQL 语句了。
连接 PostgreSQL:
# 使用 psql 客户端
psql -U postgres
# 指定数据库
psql -U postgres -d mydb
进入后提示符变为 mydb=#。
连接 SQLite:
# 创建或打开数据库文件
sqlite3 mydb.db
# 如果文件不存在会自动创建
进入后提示符变为 sqlite>。
退出数据库命令行:
| 数据库 | 退出命令 |
|---|---|
| MySQL | exit; 或 quit; |
| PostgreSQL | \q |
| SQLite | .exit 或 Ctrl+D |
3. 图形化工具(GUI)
如果你更喜欢可视化的操作界面,以下工具值得推荐:
| 工具 | 支持数据库 | 特点 | 价格 |
|---|---|---|---|
| DBeaver | MySQL / PostgreSQL / SQLite / 几乎所有数据库 | 功能全面,插件丰富 | 免费(社区版) |
| Navicat | MySQL / PostgreSQL / SQLite | 界面美观,操作流畅 | 付费 |
| DB Browser for SQLite | SQLite | 专为 SQLite 设计,轻量 | 免费 |
| pgAdmin | PostgreSQL | 官方出品 | 免费 |
| MySQL Workbench | MySQL | 官方出品 | 免费 |
DBeaver 安装示例(推荐):
- 前往 DBeaver 官网 下载社区版
- 安装后打开,点击 "新建数据库连接"
- 选择数据库类型(如 MySQL)
- 填写主机、端口、用户名、密码
- 点击 "测试连接",成功后即可使用
4. 在线 SQL 练习平台
如果你暂时不想安装任何软件,可以直接使用在线平台练习:
| 平台 | 网址 | 特点 |
|---|---|---|
| SQL Fiddle | http://sqlfiddle.com | 支持 MySQL / PostgreSQL / SQLite |
| DB Fiddle | https://www.db-fiddle.com | 界面现代,支持多版本 |
| SQLiteOnline | https://sqliteonline.com | 零配置,即开即用 |
| LeetCode SQL | https://leetcode.cn/problemset/database | 带题目练习,边学边练 |
📝 基本语法与用法
第一条 SQL 语句:SELECT
SELECT 是 SQL 中最常用的语句,用于从数据库中查询数据。最简单的形式是:
SELECT 表达式;
让我们从最简单的查询开始:
SELECT 1;
这条语句的含义是:计算并返回值 1。它不涉及任何表,纯粹是验证数据库是否正常工作。
在不同数据库中的写法:
-- MySQL / PostgreSQL / SQLite 通用
SELECT 1;
-- 返回一个字符串
SELECT 'Hello, SQL!';
-- 返回计算结果
SELECT 2 + 3;
; 结尾。虽然某些工具中可以省略,但养成加分号的习惯是好实践。
查看数据库信息
连接数据库后,你可能想了解当前环境:
MySQL:
-- 查看所有数据库
SHOW DATABASES;
-- 查看当前数据库
SELECT DATABASE();
-- 查看版本
SELECT VERSION();
PostgreSQL:
-- 查看所有数据库
\l
-- 查看当前数据库
SELECT current_database();
-- 查看版本
SELECT version();
SQLite:
-- 查看所有表
.tables
-- 查看数据库信息
.database
-- 查看版本
SELECT sqlite_version();
SHOW 和 \l 这类命令是各数据库特有的"元命令",不属于标准 SQL。在不同数据库之间迁移时要注意区分。
创建你的第一个数据库和表
在正式学习 SELECT 之前,我们需要先有数据可查。以下是创建数据库和表的完整流程:
MySQL 示例:
-- 创建数据库
CREATE DATABASE learn_sql;
-- 切换到该数据库
USE learn_sql;
-- 创建表
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
city VARCHAR(50)
);
-- 插入示例数据
INSERT INTO students (name, age, city) VALUES
('张三', 20, '北京'),
('李四', 22, '上海'),
('王五', 21, '广州'),
('赵六', 23, '深圳'),
('钱七', 20, '北京');
PostgreSQL 示例:
CREATE DATABASE learn_sql;
-- 退出后重新连接到 learn_sql
\c learn_sql
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT,
city VARCHAR(50)
);
INSERT INTO students (name, age, city) VALUES
('张三', 20, '北京'),
('李四', 22, '上海'),
('王五', 21, '广州'),
('赵六', 23, '深圳'),
('钱七', 20, '北京');
SQLite 示例:
-- SQLite 无需创建数据库,直接建表
CREATE TABLE students (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
city TEXT
);
INSERT INTO students (name, age, city) VALUES
('张三', 20, '北京'),
('李四', 22, '上海'),
('王五', 21, '广州'),
('赵六', 23, '深圳'),
('钱七', 20, '北京');
CREATE TABLE 和 INSERT INTO 将在后续课程中详细讲解,这里只需跟着操作即可。
执行第一个 SELECT 查询
数据准备好了,现在来查询:
-- 查询所有学生的所有信息
SELECT * FROM students;
输出结果:
+----+------+------+------+
| id | name | age | city |
+----+------+------+------+
| 1 | 张三 | 20 | 北京 |
| 2 | 李四 | 22 | 上海 |
| 3 | 王五 | 21 | 广州 |
| 4 | 赵六 | 23 | 深圳 |
| 5 | 钱七 | 20 | 北京 |
+----+------+------+------+
只查询特定列:
-- 只查询姓名和城市
SELECT name, city FROM students;
输出结果:
+------+------+
| name | city |
+------+------+
| 张三 | 北京 |
| 李四 | 上海 |
| 王五 | 广州 |
| 赵六 | 深圳 |
| 钱七 | 北京 |
+------+------+
🧪 示例
示例:使用 SELECT 验证数据库连接
安装完数据库后的第一步,是确认连接是否正常工作。
-- 验证数据库可以正常响应
SELECT '数据库连接成功!' AS message;
-- 查看当前时间和用户
SELECT NOW() AS current_time, CURRENT_USER AS db_user;
SQLite 写法略有不同:
SELECT '数据库连接成功!' AS message;
SELECT datetime('now') AS current_time;
输出示例:
+--------------------+
| message |
+--------------------+
| 数据库连接成功! |
+--------------------+
这个简单的测试可以帮你快速排查连接问题——如果这条语句能执行,说明环境搭建成功。
示例:创建表并插入数据,然后查询
假设我们要管理一个小型图书库。
-- 创建图书表
CREATE TABLE books (
id INT PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(50),
price DECIMAL(8, 2),
publish_year INT
);
-- 插入示例数据
INSERT INTO books (id, title, author, price, publish_year) VALUES
(1, '数据库系统概论', '王珊', 45.00, 2014),
(2, 'SQL必知必会', 'Ben Forta', 39.00, 2020),
(3, '高性能MySQL', 'Baron Schwartz', 89.00, 2013),
(4, 'PostgreSQL实战', '谭峰', 69.00, 2018);
-- 查询所有图书
SELECT * FROM books;
输出结果:
+----+-------------------+-----------------+-------+---------------+
| id | title | author | price | publish_year |
+----+-------------------+-----------------+-------+---------------+
| 1 | 数据库系统概论 | 王珊 | 45.00 | 2014 |
| 2 | SQL必知必会 | Ben Forta | 39.00 | 2020 |
| 3 | 高性能MySQL | Baron Schwartz | 89.00 | 2013 |
| 4 | PostgreSQL实战 | 谭峰 | 69.00 | 2018 |
+----+-------------------+-----------------+-------+---------------+
只查询书名和价格:
SELECT title, price FROM books;
通过指定列名(
title, price)而不是使用*,可以让输出更清晰、查询更高效。
示例:带计算和别名的查询
SQL 的 SELECT 不仅能查询数据,还能进行计算。
-- 计算每本书的出版至今的年数(以2026年为基准)
SELECT
title AS 书名,
author AS 作者,
price AS 原价,
price * 0.8 AS 折后价,
2026 - publish_year AS 出版年数
FROM books;
输出结果:
+-------------------+-----------------+------+--------+----------+
| 书名 | 作者 | 原价 | 折后价 | 出版年数 |
+-------------------+-----------------+------+--------+----------+
| 数据库系统概论 | 王珊 | 45.00| 36.00 | 12 |
| SQL必知必会 | Ben Forta | 39.00| 31.20 | 6 |
| 高性能MySQL | Baron Schwartz | 89.00| 71.20 | 13 |
| PostgreSQL实战 | 谭峰 | 69.00| 55.20 | 8 |
+-------------------+-----------------+------+--------+----------+
关键知识点:
AS关键字用于给列起别名(alias),让输出更易读- 可以对列进行数学运算(如
price * 0.8) - 可以混合使用常量和列名(如
2026 - publish_year)
AS 关键字在所有主流数据库中通用,是 SQL 最常用的特性之一。
🏢 场景应用
场景1:开发环境搭建
你是一名后端开发工程师,新项目需要使用 MySQL 数据库。请完成以下操作:
- 安装 MySQL 并启动服务
- 创建项目数据库
project_db - 创建
users表用于存储用户信息 - 插入一条测试数据并验证
-- 步骤1:创建数据库
CREATE DATABASE project_db CHARACTER SET utf8mb4;
-- 步骤2:切换数据库
USE project_db;
-- 步骤3:创建用户表
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 步骤4:插入测试数据
INSERT INTO users (username, email) VALUES
('testuser', 'test@example.com');
-- 步骤5:验证
SELECT * FROM users;
场景2:数据分析准备
你是一名数据分析师,需要快速查看一份 CSV 数据。将数据导入 SQLite 进行查询。
# 在命令行中操作
sqlite3 sales.db
# 创建表
CREATE TABLE sales (
id INTEGER PRIMARY KEY,
product TEXT,
quantity INTEGER,
unit_price REAL,
sale_date TEXT
);
# 导入 CSV 数据(使用 .import 命令)
.mode csv
.import sales_data.csv sales
# 查看导入结果
SELECT * FROM sales LIMIT 5;
# 查看总记录数
SELECT COUNT(*) AS total_records FROM sales;
.import 命令非常方便,可以快速将 CSV 文件加载为数据库表,适合数据探索和临时分析。
❓ 常见问题
Q:应该选择 MySQL、PostgreSQL 还是 SQLite? A: 初学者建议从 SQLite 开始——零配置,一个文件就是一个数据库。Web 开发选 MySQL,企业级应用或复杂查询选 PostgreSQL。三种都学最好,但先精通一种。
Q:安装时忘记 root 密码怎么办? A: MySQL 可以通过
mysqld_safe --skip-grant-tables启动后重置密码。PostgreSQL 可以修改pg_hba.conf文件将认证方式改为trust后重启服务。SQLite 无密码机制,无需担心。
Q:命令行输入 SQL 语句后没有反应怎么办? A: 检查是否忘记加分号
;。SQL 语句必须以分号结尾才会执行。如果已经输入了内容但没加分号,直接补上;回车即可。
Q:在线平台和本地安装有什么区别? A: 在线平台无需安装、即开即用,但通常有超时限制和数据量限制,且关闭浏览器后数据丢失。本地安装无限制,数据持久保存,适合长期学习和实际项目开发。
📖 小节
本课我们完成了 SQL 学习的环境准备:
- 安装数据库 — 学习了 MySQL、PostgreSQL、SQLite 三种数据库的安装方法
- 命令行连接 — 掌握了使用命令行工具连接和操作数据库
- GUI 工具 — 了解了 DBeaver、Navicat、DB Browser 等图形化工具
- 在线平台 — 认识了 SQL Fiddle、DB Fiddle 等在线练习环境
- 第一个查询 — 学会了
SELECT语句的基本用法,包括查询、计算和别名
环境搭建虽然枯燥,但这是所有后续学习的基础。就像学做菜前要先熟悉厨房一样,熟悉了工具才能专注于"烹饪"本身。
📝 作业
练习1:环境验证
连接到你安装的数据库,执行以下查询并确认输出正确:
SELECT 'Hello SQL!' AS greeting, 1 + 1 AS result;
练习2:创建并查询商品表
创建一个 products 表,包含以下字段并插入至少 3 条数据,然后查询所有记录:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | 整数 | 主键 |
| name | 文本 | 商品名称 |
| category | 文本 | 分类 |
| price | 小数 | 价格 |
| stock | 整数 | 库存数量 |
练习3:带计算的查询
使用练习2创建的 products 表,编写一条查询,计算每种商品的库存总价值(价格 × 库存数量),并为输出列使用中文别名。
预期输出示例:
+----------+------+--------+------------+
| 商品名称 | 价格 | 库存量 | 库存总价值 |
+----------+------+--------+------------+
| ... | ... | ... | ... |
+----------+------+--------+------------+



