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

相关推荐
数据皮皮侠42 分钟前
最新上市公司业绩说明会文本数据(2017.02-2025.08)
大数据·数据库·人工智能·笔记·物联网·小程序·区块链
小云数据库服务专线1 小时前
GaussDB数据库架构师修炼(十六) 如何选择磁盘
数据库·数据库架构·gaussdb
码出财富2 小时前
SQL语法大全指南
数据库·mysql·oracle
异世界贤狼转生码农4 小时前
MongoDB Windows 系统实战手册:从配置到数据处理入门
数据库·mongodb
QuZhengRong4 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
码农阿豪4 小时前
Windows从零到一安装KingbaseES数据库及使用ksql工具连接全指南
数据库·windows
时序数据说10 小时前
时序数据库市场前景分析
大数据·数据库·物联网·开源·时序数据库
听雪楼主.13 小时前
Oracle Undo Tablespace 使用率暴涨案例分析
数据库·oracle·架构
我科绝伦(Huanhuan Zhou)13 小时前
KINGBASE集群日常维护管理命令总结
数据库·database
妖灵翎幺13 小时前
Java应届生求职八股(2)---Mysql篇
数据库·mysql