SQL基础教程

SQL基础教程

目录

  1. 简介
  2. 创建数据库和表
    2.1 创建数据库
    2.2 创建表
  3. 使用SELECT语句查询数据
    3.1 基本SELECT语句
    3.2 使用WHERE子句
  4. 表的连接操作
    4.1 [INNER JOIN](#INNER JOIN)
    4.2 [LEFT JOIN](#LEFT JOIN)
    4.3 [RIGHT JOIN](#RIGHT JOIN)
  5. 修改数据:INSERT、UPDATE、DELETE
    5.1 INSERT语句
    5.2 UPDATE语句
    5.3 DELETE语句
  6. 实践练习
  7. 总结

1. 简介

本教程专为没有SQL基础的初学者设计。我们将涵盖SQL操作的基础知识,包括创建数据库和表、查询数据、连接表以及修改数据。每个部分都包含解释、示例代码和练习题。

2. 创建数据库和表

2.1 创建数据库

数据库是用于存储和管理数据的容器。在开始处理数据之前,我们需要先创建一个数据库。

语法:

sql 复制代码
CREATE DATABASE 数据库名称;

示例:

sql 复制代码
CREATE DATABASE my_database;

练习:

创建一个名为student_db的数据库。

2.2 创建表

表是数据库中的基本存储结构。它们由具有指定数据类型的列(字段)组成。

语法:

sql 复制代码
CREATE TABLE 表名 (
    列1 数据类型,
    列2 数据类型,
    列3 数据类型,
    ...
);

示例:

sql 复制代码
USE my_database;

CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    age INT,
    major VARCHAR(50)
);

练习:

student_db数据库中创建一个名为courses的表,包含以下列:

  • course_id:整数,主键,自动递增
  • course_name:VARCHAR(50),非空
  • credits:整数

3. 使用SELECT语句查询数据

3.1 基本SELECT语句

SELECT语句用于从一个或多个表中检索数据。

语法:

sql 复制代码
SELECT 列1, 列2, ...
FROM 表名;

示例:

sql 复制代码
-- 查询students表中的所有数据
SELECT * FROM students;

-- 只查询students表中的name和age列
SELECT name, age FROM students;

练习:

编写一个查询,从courses表中选择所有课程名称和学分。

3.2 使用WHERE子句

WHERE子句用于根据指定条件筛选记录。

语法:

sql 复制代码
SELECT 列1, 列2, ...
FROM 表名
WHERE 条件;

示例:

sql 复制代码
-- 查询年龄大于20岁的学生
SELECT * FROM students WHERE age > 20;

-- 查询主修计算机科学的学生
SELECT * FROM students WHERE major = '计算机科学';

练习:

编写一个查询,选择所有3学分或以上的课程。

4. 表的连接操作

4.1 INNER JOIN

INNER JOIN返回两个表中具有匹配值的记录。

语法:

sql 复制代码
SELECT 列
FROM 表1
INNER JOIN 表2
ON 表1.列 = 表2.列;

示例:

sql 复制代码
SELECT students.name, courses.course_name
FROM students
INNER JOIN enrollments ON students.id = enrollments.student_id
INNER JOIN courses ON enrollments.course_id = courses.course_id;

练习:

编写一个查询,显示每个学生的姓名和他们选修的课程名称。

4.2 LEFT JOIN

LEFT JOIN返回左表中的所有记录,即使右表中没有匹配项。

语法:

sql 复制代码
SELECT 列
FROM 表1
LEFT JOIN 表2
ON 表1.列 = 表2.列;

示例:

sql 复制代码
SELECT students.name, courses.course_name
FROM students
LEFT JOIN enrollments ON students.id = enrollments.student_id
LEFT JOIN courses ON enrollments.course_id = courses.course_id;

练习:

编写一个查询,显示所有学生的姓名和他们选修的课程(如果有)。

4.3 RIGHT JOIN

RIGHT JOIN返回右表中的所有记录,即使左表中没有匹配项。

语法:

sql 复制代码
SELECT 列
FROM 表1
RIGHT JOIN 表2
ON 表1.列 = 表2.列;

示例:

sql 复制代码
SELECT students.name, courses.course_name
FROM students
RIGHT JOIN enrollments ON students.id = enrollments.student_id
RIGHT JOIN courses ON enrollments.course_id = courses.course_id;

练习:

编写一个查询,显示所有课程和选修这些课程的学生姓名(如果有)。

5. 修改数据:INSERT、UPDATE、DELETE

5.1 INSERT语句

INSERT语句用于向表中插入新记录。

语法:

sql 复制代码
INSERT INTO 表名 (列1, 列2, 列3, ...)
VALUES (值1, 值2, 值3, ...);

示例:

sql 复制代码
INSERT INTO students (name, age, major)
VALUES ('张三', 20, '计算机科学');

练习:

courses表中插入一门新课程。

5.2 UPDATE语句

UPDATE语句用于修改表中的现有记录。

语法:

sql 复制代码
UPDATE 表名
SET 列1 = 值1, 列2 = 值2, ...
WHERE 条件;

示例:

sql 复制代码
UPDATE students
SET major = '物理学'
WHERE name = '张三';

练习:

更新courses表中某门课程的学分。

5.3 DELETE语句

DELETE语句用于删除表中的记录。

语法:

sql 复制代码
DELETE FROM 表名
WHERE 条件;

示例:

sql 复制代码
DELETE FROM students
WHERE age < 18;

练习:

courses表中删除学分少于2的课程。

6. 实践练习

  1. 创建一个名为library_db的数据库。
  2. library_db中创建一个books表,包含以下列:
    • book_id:整数,主键,自动递增
    • title:VARCHAR(100),非空
    • author:VARCHAR(50)
    • published_year:整数
  3. books表中插入至少5本书的信息。
  4. 编写一个查询,选择所有2000年之后出版的书籍。
  5. 更新某本书的标题。
  6. 删除某个特定作者的所有书籍。

7. 总结

通过本教程,您已经学习了SQL的基本操作,包括创建数据库和表、查询数据、连接表以及修改数据。这些基础知识将帮助您开始使用SQL进行数据管理和分析。

记住,实践是掌握SQL的关键。尝试在实际的数据库环境中运行这些命令,并创建自己的查询来加深理解。随着您的技能提升,您可以探索更高级的SQL概念和技术。

相关推荐
咕噜企业分发小米8 分钟前
豆包大模型在药物研发中的知识检索效率如何?
java·开发语言·数据库
LaughingZhu15 分钟前
Product Hunt 每日热榜 | 2026-01-20
数据库·人工智能·经验分享·神经网络·搜索引擎·chatgpt
SJLoveIT18 分钟前
sql注入攻击的防御思路总结
数据库·sql
偷星星的贼1120 分钟前
如何为开源Python项目做贡献?
jvm·数据库·python
成为你的宁宁34 分钟前
【Zabbix 监控 Redis 实战教程(附图文教程):从 Zabbix-Server 部署、Agent2 安装配置到自带监控模板应用全流程】
数据库·redis·zabbix
H_unique36 分钟前
MySQL数据库操作核心指南
数据库·mysql
DianSan_ERP1 小时前
从数据到决策:京东接口如何驱动供应链数字化升级
大数据·运维·服务器·数据库·人工智能·性能优化·架构
IT邦德1 小时前
MySQL 9.6.0 正式GA刚刚发布,有重大变更!
数据库·mysql
Python_Study20251 小时前
机械制造业数据采集的终极指南:从设备层到MESERP的系统性实践
数据库
unicrom_深圳市由你创科技1 小时前
MySQL 乐观锁的实际落地:避免并发更新冲突的 3 种实现方式
数据库·mysql