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概念和技术。

相关推荐
流星白龙1 小时前
【MySQL高阶】26.事务(1)
数据库·mysql
三十..2 小时前
Redis 核心原理与高可用架构实践
运维·数据库·redis
这个DBA有点耶2 小时前
索引优化深潜(下):索引合并、ICP 与索引设计的实战法则
数据库·mysql·架构
努力努力再努力wz2 小时前
【内存管理与高并发内存池系列】从 mmap 到 malloc:文件映射、匿名映射与 glibc 内存分配机制详解
linux·c语言·数据结构·数据库·c++·qt·链表
Theo·Chan3 小时前
机房断电搞崩服务器 | 人大金仓 V8 全量备份跨实例完整恢复实录
sql·信创·kingbase·金仓
JdSnE27zv3 小时前
Qt 操作SQLite数据库
数据库·qt·sqlite
tedcloud1233 小时前
HyperFrames部署教程:用HTML生成MP4视频
前端·数据库·人工智能·html·音视频
布朗克1683 小时前
25 IO流高级操作——序列化、NIO与Files工具类
java·数据库·io·nio
阿演3 小时前
DataDjinn 新版本更新:新增 Oracle 支持,查询窗口、表预览和连接树继续打磨
数据库·oracle·ai编程·数据库连接工具
lixora3 小时前
Oracle 11g Active Data Guard Go 自动化部署工具 v1.0
数据库·oracle