Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL 入门教程:从基础到实践

SQL 入门教程:从基础到实践

原创
作者头像
霍格沃兹测试开发Muller老师
发布于 2024-06-17 14:23:35
发布于 2024-06-17 14:23:35
6530
举报

前言

SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准语言。无论你是测试工程师、开发人员,还是数据分析师,掌握 SQL 都能帮助你更高效地工作。本文将详细介绍 SQL 的基本概念、常用语法和实践操作,帮助初学者快速入门。

什么是 SQL?

SQL 是一种标准化的语言,用于访问和操作数据库。它能够执行查询、插入、更新、删除数据库中的数据,并能创建、修改和管理数据库结构。

数据库基础

在学习 SQL 之前,了解一些基本的数据库概念是很有帮助的。

数据库(Database)

数据库是一个组织化的数据集合,用于存储和管理数据。

表(Table)

表是数据库中的基本存储单位,包含若干行和列。每一行表示一条记录,每一列表示一个字段。

行(Row)和列(Column)

  • 行(Row):也称为记录,每一行包含了一组相关的数据。
  • 列(Column):也称为字段,每一列表示某种类型的数据。

SQL 基本语法

SQL 语法可以分为以下几类:

数据查询语言(DQL)

用于查询数据库中的数据,最常用的语句是 SELECT。

数据定义语言(DDL)

用于定义数据库结构,例如创建、修改和删除数据库对象(如表)。

数据操纵语言(DML)

用于插入、更新、删除数据库中的数据。

数据控制语言(DCL)

用于定义数据库的访问权限和安全级别。

基本 SQL 操作

  1. 查询数据

SELECT 语句用于从数据库中查询数据。

代码语言:sql
AI代码解释
复制
SELECT column1, column2, ...
FROM table_name;

示例:查询名为 employees 的表中的 first_namelast_name 列。

代码语言:sql
AI代码解释
复制
SELECT first_name, last_name
FROM employees;
  1. 插入数据

INSERT INTO 语句用于向表中插入新数据。

代码语言:sql
AI代码解释
复制
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

示例:向 employees 表中插入一条新记录。

代码语言:sql
AI代码解释
复制
INSERT INTO employees (first_name, last_name, email)
VALUES ('John', 'Doe', 'john.doe@example.com');
  1. 更新数据

UPDATE 语句用于修改表中的数据。

代码语言:sql
AI代码解释
复制
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

示例:将 employees 表中 employee_id 为 1 的记录的 email 字段更新为 john.doe@company.com

代码语言:sql
AI代码解释
复制
UPDATE employees
SET email = 'john.doe@company.com'
WHERE employee_id = 1;
  1. 删除数据

DELETE 语句用于删除表中的数据。

代码语言:sql
AI代码解释
复制
DELETE FROM table_name
WHERE condition;

示例:删除 employees 表中 employee_id 为 1 的记录。

代码语言:sql
AI代码解释
复制
DELETE FROM employees
WHERE employee_id = 1;

高级 SQL 操作

  1. 条件查询

使用 WHERE 子句进行条件查询。

示例:查询 employees 表中 last_nameSmith 的记录。

代码语言:sql
AI代码解释
复制
SELECT first_name, last_name
FROM employees
WHERE last_name = 'Smith';
  1. 排序

使用 ORDER BY 子句对结果进行排序。

示例:按 last_name 升序排序查询结果。

代码语言:sql
AI代码解释
复制
SELECT first_name, last_name
FROM employees
ORDER BY last_name ASC;
  1. 分组

使用 GROUP BY 子句对结果进行分组。

示例:按 department_id 分组并统计每个部门的员工数量。

代码语言:sql
AI代码解释
复制
SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id;
  1. 联合查询

使用 JOIN 关键字进行表之间的联合查询。

示例:查询 employees 表和 departments 表,获取每个员工及其所属部门的名称。

代码语言:sql
AI代码解释
复制
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
JOIN departments ON employees.department_id = departments.department_id;

实践操作

环境搭建

为了实际操作 SQL 语句,我们需要一个数据库环境。可以使用以下工具之一:

  1. 本地数据库:安装 MySQLPostgreSQL数据库管理系统。
  2. 在线 SQL 编辑器:使用如 SQLFiddle 等在线工具。

示例数据库

我们将使用一个简单的示例数据库,其中包含 employeesdepartments 两个表。

代码语言:sql
AI代码解释
复制
CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(50)
);

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

INSERT INTO departments (department_id, department_name) VALUES
(1, 'HR'),
(2, 'Engineering'),
(3, 'Sales');

INSERT INTO employees (employee_id, first_name, last_name, email, department_id) VALUES
(1, 'John', 'Doe', 'john.doe@example.com', 1),
(2, 'Jane', 'Smith', 'jane.smith@example.com', 2),
(3, 'Emily', 'Jones', 'emily.jones@example.com', 3);

操作示例

  1. 查询所有员工信息:
代码语言:sql
AI代码解释
复制
SELECT * FROM employees;
  1. 查询工程部门的员工信息:
代码语言:sql
AI代码解释
复制
SELECT first_name, last_name
FROM employees
WHERE department_id = 2;
  1. 添加新员工:
代码语言:sql
AI代码解释
复制
INSERT INTO employees (employee_id, first_name, last_name, email, department_id)
VALUES (4, 'Mark', 'Brown', 'mark.brown@example.com', 1);
  1. 更新员工邮箱:
代码语言:sql
AI代码解释
复制
UPDATE employees
SET email = 'john.doe@newcompany.com'
WHERE employee_id = 1;
  1. 删除销售部门的员工:
代码语言:sql
AI代码解释
复制
DELETE FROM employees
WHERE department_id = 3;

总结

通过本文的学习,你应该已经掌握了 SQL 的基本概念和常用操作。SQL 是一门非常实用的技能,无论是在开发、测试还是数据分析中都能发挥重要作用。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Linux阅码场 - Linux内核月报(2020年06月)
Linux阅码场内核月报栏目,是汇总当月Linux内核社区最重要的一线开发动态,方便读者们更容易跟踪Linux内核的最前沿发展动向。
Linux阅码场
2020/07/14
1.4K0
Linux内存管理
谈到内存管理,最先想到的就是分段和分页机制。计算机刚出现的时候,并没有这些,刚开始是直接使用的物理地址,也就是代码中操作的地址是可以直接和物理地址对应上的,可是后来随着多进程调度的需求,以及有限的物理内存,于是人们就开始做规定,比如对于一块内存,某个范围是属于内核,然后另外一个范围属于进程A,再另外一个范围属于进程B,如下图所示
一只小虾米
2023/03/19
14K0
Linux内存管理
Linux中进程内存与cgroup内存的统计
在Linux内核,对于进程的内存使用与Cgroup的内存使用统计有一些相同和不同的地方。
用户9732312
2022/05/13
2.8K0
linux那些事之页迁移(page migratiom)
页迁移技术是内核中内存管理的一种比较重要的技术,最早该技术诞生于NUMA系统中(Page migration [LWN.net]),后续由于内存规整以及CMA和COW技术的出现,也需要用到页迁移技术,逐渐称为内核内存子系统中占有比较重要地位。
233333
2023/08/24
8950
linux那些事之页迁移(page migratiom)
Linux的内存回收和交换
Linux的swap相关部分代码从2.6早期版本到现在的4.6版本在细节之处已经有不少变化。本文讨论的swap基于Linux 4.4内核代码。Linux内存管理是一套非常复杂的系统,而swap只是其中一个很小的处理逻辑。希望本文能让读者了解Linux对swap的使用大概是什么样子。阅读完本文,应该可以帮你解决以下问题:
刘盼
2019/05/17
4.8K0
Linux:/proc/meminfo参数详细解释
/proc/meminfo是了解Linux系统内存使用状况的主要接口,我们最常用的”free”、”vmstat”等命令就是通过它获取数据的 ,/proc/meminfo所包含的信息比”free”等命令要丰富得多,然而真正理解它并不容易,比如我们知道”Cached”统计的是文件缓存页,manpage上说是“In-memory cache for files read from the disk (the page cache)”,那为什么它不等于[Active(file)+Inactive(file)]?AnonHugePages与AnonPages、HugePages_Total有什么联系和区别?很多细节在手册中并没有讲清楚,本文对此做了一点探究。
233333
2023/07/24
1.7K0
Linux:/proc/meminfo参数详细解释
LINUX上MYSQL优化三板斧
云豆贴心提醒,本文阅读时间7分钟 现在MySQL运行的大部分环境都是在Linux上的,如何在Linux操作系统上根据MySQL进行优化,我们这里给出一些通用简单的策略。这些方法都有助于改进MySQL的性能。 闲话少说,进入正题。 一、CPU 首先从CPU说起。 你仔细检查的话,有些服务器上会有的一个有趣的现象: 你cat /proc/cpuinfo时,会发现CPU的频率竟然跟它标称的频率不一样: 这个是Intel E5-2620的CPU,他是2.00G * 24的CPU,但是,我们发现第5颗C
小小科
2018/05/02
1.1K0
LINUX上MYSQL优化三板斧
一步一图带你深入理解 Linux 物理内存管理
在上篇文章 《深入理解 Linux 虚拟内存管理》 中,笔者分别从进程用户态和内核态的角度详细深入地为大家介绍了 Linux 内核如何对进程虚拟内存空间进行布局以及管理的相关实现。在我们深入理解了虚拟内存之后,那么何不顺带着也探秘一下物理内存的管理呢?
bin的技术小屋
2023/10/30
1.6K0
一步一图带你深入理解 Linux 物理内存管理
Linux 内核 VS 内存碎片 (下)
从 Linux 内核 VS 内存碎片 (上) 我们可以看到根据迁移类型进行分组只是延缓了内存碎片,而并不是从根本解决,所以随着时间的推移,当内存碎片过多,无法满足连续物理内存需求时,将会引起性能问题。因此仅仅依靠此功能还不够,所以内核又引入了内存规整等功能。
PingCAP
2020/12/16
3.8K0
[linux][memory] 内存回收
前言: 前文《内存映射技术分析》描述了虚拟内存的管理、内存映射;《物理内存管理》介绍了物理内存管理。 本篇介绍一下内存回收。内存回收应该是整个Linux的内存管理上最难理解的部分了。 分析: 1,PFRA Page Frame Reclaim Algorithm,Linux的内存回收算法。 不过,PFRA和常规的算法不同。比如说冒泡排序或者快速排序具有固定的时间复杂度和空间复杂度,代码怎么写都差不多。而PFRA则不然,它不是一个具体的算法,而是一个策略---什么样的情况下需要做内存回收,什么样的page
皮振伟
2018/04/09
3.5K0
[linux][memory] 内存回收
提升内存资源利用率,TencentOS“悟净”硬核技术详解
👉腾小云导读 随着云数据中心应用程序对内存的需求持续增长,TencentOS“悟净”——服务器内存多级卸载方案应运而生。“悟净”利用OS内核侧进行内存优化的天然优势,保障业务内存使用性能前提下,将较冷的内存换出至较便宜的设备上,从而降低整机的内存消耗,提高内存资源利用率,通过平滑降配、负载调压、内存超卖等手段实现降本增效,助力业务和客户商业增值。下面跟着本篇文章,来了解一下TencentOS“悟净”的强大之处吧! 👉看目录,点收藏 1 业界面临的问题与机遇     1.1 高昂的内存成本     1.2 内
腾讯云开发者
2023/06/05
1.8K0
提升内存资源利用率,TencentOS“悟净”硬核技术详解
Linux内存描述之内存区域zone--Linux内存管理(三)
为了支持NUMA模型,也即CPU对不同内存单元的访问时间可能不同,此时系统的物理内存被划分为几个节点(node), 一个node对应一个内存簇bank,即每个内存簇被认为是一个节点
233333
2018/12/17
9.8K1
Linux内存描述之内存区域zone--Linux内存管理(三)
Linux内核分析:页回收导致的cpu load瞬间飙高的问题分析与思考
本文一是为了讨论在Linux系统出现问题时我们能够借助哪些工具去协助分析,二是讨论出现问题时大致的可能点以及思路,三是希望能给应用层开发团队介绍一些Linux内核机制从而选择更合适的使用策略。
刘盼
2024/01/18
7320
Linux内核分析:页回收导致的cpu load瞬间飙高的问题分析与思考
docker cgroup 技术之memory(首篇)
内核使用cgroup对进程进行分组,并限制进程资源和对进程进行跟踪。内核通过名为cgroupfs类型的虚拟文件系统来提供cgroup功能接口。cgroup有如下2个概念:
charlieroro
2020/03/24
1.6K0
docker cgroup 技术之memory(首篇)
宋宝华:论Linux的页迁移(Page Migration)完整版
对于用户空间的应用程序,我们通常根本不关心page的物理存放位置,因为我们用的是虚拟地址。所以,只要虚拟地址不变,哪怕这个页在物理上从DDR的这里飞到DDR的那里,用户都基本不感知。那么,为什么要写一篇论述页迁移的文章呢?
Linux阅码场
2020/08/18
4.8K0
宋宝华:论Linux的页迁移(Page Migration)完整版
聊聊 Linux 的内存统计
本文主要分析 Linux 系统内存统计的一些指标以及进程角度内存使用监控的一些方法。
程序员小强
2020/01/17
6.6K1
聊聊 Linux 的内存统计
系统软件工程师必备技能-进程内存的working set size(WSS)测量
http://www.brendangregg.com/blog/2018-01-17/measure-working-set-size.html
Linux阅码场
2019/10/08
4.1K0
系统软件工程师必备技能-进程内存的working set size(WSS)测量
Linux内存描述之内存页面page--Linux内存管理(四)
分页单元可以实现把线性地址转换为物理地址, 为了效率起见, 线性地址被分为固定长度为单位的组, 称为”页”, 页内部的线性地址被映射到连续的物理地址. 这样内核可以指定一个页的物理地址和其存储权限, 而不用指定页所包含的全部线性地址的存储权限.
233333
2018/12/19
8.8K0
新一代国产Linux操作系统即刻起航
目前,TencentOS Server V4已通过了腾讯近一年的内部环境验证,在稳定性、可靠性上获得了极大提升,感兴趣的用户可以在腾讯公有云(https://cloud.tencent.com)上开启使用:
腾讯 架构师
2025/02/19
2020
新一代国产Linux操作系统即刻起航
Linux-3.14.12内存管理笔记【构建内存管理框架(5)】
前面已经分析了内存管理框架的构建实现过程,有部分内容未完全呈现出来,这里主要做个补充。
233333
2019/10/08
6640
Linux-3.14.12内存管理笔记【构建内存管理框架(5)】
相关推荐
Linux阅码场 - Linux内核月报(2020年06月)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档