404 Not Found

404 Not Found


nginx

环境搭建与第一个查询

第2课:环境搭建与第一个查询

🎯 生活类比

想象你要学习烹饪。在动手做菜之前,你需要:

  1. 准备厨房 — 安装数据库就像安装灶台和烤箱
  2. 准备工具 — 命令行和图形化工具就像锅铲和量杯
  3. 准备食材 — 创建数据库就像把食材摆上台面
  4. 开始做菜 — 第一条 SQL 查询就像切下第一刀

没有厨房就无法做菜,同样,没有搭建好数据库环境就无法学习 SQL。本课将带你从零开始,搭建属于自己的"SQL 厨房"。


📚 核心概念

1. 安装数据库

主流的关系型数据库有三种,初学者建议先安装其中一个,熟悉后再扩展学习。

MySQL

MySQL 是全球最流行的开源数据库,被广泛用于 Web 开发。

Windows 安装:

  1. 前往 MySQL 官网 下载安装包
  2. 运行安装程序,选择 "Developer Default"
  3. 设置 root 密码(请牢记!)
  4. 完成安装后,MySQL 服务会自动启动

macOS 安装:

BASH
# 使用 Homebrew 安装
brew install mysql

# 启动 MySQL 服务
brew services start mysql

# 安全初始化
mysql_secure_installation

Linux (Ubuntu) 安装:

BASH
sudo apt update
sudo apt install mysql-server
sudo systemctl start mysql
sudo mysql_secure_installation

PostgreSQL

PostgreSQL 是功能最强大的开源数据库,适合复杂查询和企业级应用。

Windows 安装:

  1. 前往 PostgreSQL 官网 下载安装包
  2. 运行安装程序,设置密码和端口(默认 5432)
  3. 勾选 "pgAdmin" 组件(图形化管理工具)

macOS 安装:

BASH
brew install postgresql@16
brew services start postgresql@16

Linux (Ubuntu) 安装:

BASH
sudo apt update
sudo apt install postgresql postgresql-contrib
sudo systemctl start postgresql

SQLite

SQLite 是轻量级的嵌入式数据库,无需安装服务器,非常适合学习和小型项目。

Windows 安装:

  1. 前往 SQLite 下载页 下载 sqlite-tools-win64
  2. 解压到任意目录,将该目录添加到系统 PATH

macOS / Linux 安装:

BASH
# macOS(通常已预装)
brew install sqlite

# Linux
sudo apt install sqlite3

验证安装:

BASH
sqlite3 --version
💡 提示: 初学者推荐从 SQLite 开始——零配置、零门槛,一条命令就能开始学习 SQL。


2. 使用命令行连接数据库

命令行是与数据库交互最直接的方式。

连接 MySQL:

BASH
mysql -u root -p
# 输入密码后进入 MySQL 交互界面

进入后你会看到提示符变为 mysql>,表示可以输入 SQL 语句了。

连接 PostgreSQL:

BASH
# 使用 psql 客户端
psql -U postgres

# 指定数据库
psql -U postgres -d mydb

进入后提示符变为 mydb=#

连接 SQLite:

BASH
# 创建或打开数据库文件
sqlite3 mydb.db

# 如果文件不存在会自动创建

进入后提示符变为 sqlite>

退出数据库命令行:

数据库 退出命令
MySQL exit;quit;
PostgreSQL \q
SQLite .exitCtrl+D
💡 提示: 命令行操作虽然看起来"原始",但在服务器运维和自动化脚本中非常常用,务必掌握。


3. 图形化工具(GUI)

如果你更喜欢可视化的操作界面,以下工具值得推荐:

工具 支持数据库 特点 价格
DBeaver MySQL / PostgreSQL / SQLite / 几乎所有数据库 功能全面,插件丰富 免费(社区版)
Navicat MySQL / PostgreSQL / SQLite 界面美观,操作流畅 付费
DB Browser for SQLite SQLite 专为 SQLite 设计,轻量 免费
pgAdmin PostgreSQL 官方出品 免费
MySQL Workbench MySQL 官方出品 免费

DBeaver 安装示例(推荐):

  1. 前往 DBeaver 官网 下载社区版
  2. 安装后打开,点击 "新建数据库连接"
  3. 选择数据库类型(如 MySQL)
  4. 填写主机、端口、用户名、密码
  5. 点击 "测试连接",成功后即可使用
💡 提示: 建议初学者同时掌握命令行和 GUI 工具——命令行练基本功,GUI 提高日常效率。


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 中最常用的语句,用于从数据库中查询数据。最简单的形式是:

SQL
SELECT 表达式;

让我们从最简单的查询开始:

SQL
SELECT 1;

这条语句的含义是:计算并返回值 1。它不涉及任何表,纯粹是验证数据库是否正常工作。

在不同数据库中的写法:

SQL
-- MySQL / PostgreSQL / SQLite 通用
SELECT 1;

-- 返回一个字符串
SELECT 'Hello, SQL!';

-- 返回计算结果
SELECT 2 + 3;
💡 提示: 每条 SQL 语句以分号 ; 结尾。虽然某些工具中可以省略,但养成加分号的习惯是好实践。


查看数据库信息

连接数据库后,你可能想了解当前环境:

MySQL:

SQL
-- 查看所有数据库
SHOW DATABASES;

-- 查看当前数据库
SELECT DATABASE();

-- 查看版本
SELECT VERSION();

PostgreSQL:

SQL
-- 查看所有数据库
\l

-- 查看当前数据库
SELECT current_database();

-- 查看版本
SELECT version();

SQLite:

SQL
-- 查看所有表
.tables

-- 查看数据库信息
.database

-- 查看版本
SELECT sqlite_version();
💡 提示: SHOW\l 这类命令是各数据库特有的"元命令",不属于标准 SQL。在不同数据库之间迁移时要注意区分。


创建你的第一个数据库和表

在正式学习 SELECT 之前,我们需要先有数据可查。以下是创建数据库和表的完整流程:

MySQL 示例:

SQL
-- 创建数据库
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 示例:

SQL
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 示例:

SQL
-- 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 TABLEINSERT INTO 将在后续课程中详细讲解,这里只需跟着操作即可。


执行第一个 SELECT 查询

数据准备好了,现在来查询:

SQL
-- 查询所有学生的所有信息
SELECT * FROM students;

输出结果:

+----+------+------+------+
| id | name | age  | city |
+----+------+------+------+
|  1 | 张三 |   20 | 北京 |
|  2 | 李四 |   22 | 上海 |
|  3 | 王五 |   21 | 广州 |
|  4 | 赵六 |   23 | 深圳 |
|  5 | 钱七 |   20 | 北京 |
+----+------+------+------+

只查询特定列:

SQL
-- 只查询姓名和城市
SELECT name, city FROM students;

输出结果:

+------+------+
| name | city |
+------+------+
| 张三 | 北京 |
| 李四 | 上海 |
| 王五 | 广州 |
| 赵六 | 深圳 |
| 钱七 | 北京 |
+------+------+

🧪 示例

示例:使用 SELECT 验证数据库连接

安装完数据库后的第一步,是确认连接是否正常工作。

SQL
-- 验证数据库可以正常响应
SELECT '数据库连接成功!' AS message;

-- 查看当前时间和用户
SELECT NOW() AS current_time, CURRENT_USER AS db_user;
▶ 试一试

SQLite 写法略有不同:

SQL
SELECT '数据库连接成功!' AS message;

SELECT datetime('now') AS current_time;

输出示例:

+--------------------+
| message            |
+--------------------+
| 数据库连接成功!   |
+--------------------+

这个简单的测试可以帮你快速排查连接问题——如果这条语句能执行,说明环境搭建成功。


示例:创建表并插入数据,然后查询

假设我们要管理一个小型图书库。

SQL
-- 创建图书表
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 |
+----+-------------------+-----------------+-------+---------------+

只查询书名和价格:

SQL
SELECT title, price FROM books;

通过指定列名(title, price)而不是使用 *,可以让输出更清晰、查询更高效。


示例:带计算和别名的查询

SQL 的 SELECT 不仅能查询数据,还能进行计算。

SQL
-- 计算每本书的出版至今的年数(以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 关键字在所有主流数据库中通用,是 SQL 最常用的特性之一。


🏢 场景应用

场景1:开发环境搭建

你是一名后端开发工程师,新项目需要使用 MySQL 数据库。请完成以下操作:

  1. 安装 MySQL 并启动服务
  2. 创建项目数据库 project_db
  3. 创建 users 表用于存储用户信息
  4. 插入一条测试数据并验证
SQL
-- 步骤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 进行查询。

BASH
# 在命令行中操作
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;
💡 提示: SQLite 的 .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 学习的环境准备:

  1. 安装数据库 — 学习了 MySQL、PostgreSQL、SQLite 三种数据库的安装方法
  2. 命令行连接 — 掌握了使用命令行工具连接和操作数据库
  3. GUI 工具 — 了解了 DBeaver、Navicat、DB Browser 等图形化工具
  4. 在线平台 — 认识了 SQL Fiddle、DB Fiddle 等在线练习环境
  5. 第一个查询 — 学会了 SELECT 语句的基本用法,包括查询、计算和别名

环境搭建虽然枯燥,但这是所有后续学习的基础。就像学做菜前要先熟悉厨房一样,熟悉了工具才能专注于"烹饪"本身。


📝 作业

练习1:环境验证

连接到你安装的数据库,执行以下查询并确认输出正确:

SQL
SELECT 'Hello SQL!' AS greeting, 1 + 1 AS result;

练习2:创建并查询商品表

创建一个 products 表,包含以下字段并插入至少 3 条数据,然后查询所有记录:

字段 类型 说明
id 整数 主键
name 文本 商品名称
category 文本 分类
price 小数 价格
stock 整数 库存数量

练习3:带计算的查询

使用练习2创建的 products 表,编写一条查询,计算每种商品的库存总价值(价格 × 库存数量),并为输出列使用中文别名。

预期输出示例:

+----------+------+--------+------------+
| 商品名称 | 价格 | 库存量 | 库存总价值 |
+----------+------+--------+------------+
| ...      | ...  | ...    | ...        |
+----------+------+--------+------------+

下一课: 第3课:基础查询——SELECT 与 FROM

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏