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

CodeCosmicRover
• 阅读 130

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

前言

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 语句用于从数据库中查询数据。

SELECT column1, column2, ...
FROM table_name;

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

SELECT first_name, last_name
FROM employees;
  1. 插入数据

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

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

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

INSERT INTO employees (first_name, last_name, email)
VALUES ('John', 'Doe', 'john.doe@example.com');
  1. 更新数据

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

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

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

UPDATE employees
SET email = 'john.doe@company.com'
WHERE employee_id = 1;
  1. 删除数据

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

DELETE FROM table_name
WHERE condition;

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

DELETE FROM employees
WHERE employee_id = 1;

高级 SQL 操作

  1. 条件查询

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

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

SELECT first_name, last_name
FROM employees
WHERE last_name = 'Smith';
  1. 排序

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

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

SELECT first_name, last_name
FROM employees
ORDER BY last_name ASC;
  1. 分组

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

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

SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id;
  1. 联合查询

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

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

SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
JOIN departments ON employees.department_id = departments.department_id;

实践操作

环境搭建

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

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

示例数据库

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

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. 查询所有员工信息:
SELECT * FROM employees;
  1. 查询工程部门的员工信息:
SELECT first_name, last_name
FROM employees
WHERE department_id = 2;
  1. 添加新员工:
INSERT INTO employees (employee_id, first_name, last_name, email, department_id)
VALUES (4, 'Mark', 'Brown', 'mark.brown@example.com', 1);
  1. 更新员工邮箱:
UPDATE employees
SET email = 'john.doe@newcompany.com'
WHERE employee_id = 1;
  1. 删除销售部门的员工:
DELETE FROM employees
WHERE department_id = 3;

总结

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

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Easter79 Easter79
3年前
sql注入
反引号是个比较特别的字符,下面记录下怎么利用0x00SQL注入反引号可利用在分隔符及注释作用,不过使用范围只于表名、数据库名、字段名、起别名这些场景,下面具体说下1)表名payload:select\from\users\whereuser\_id1limit0,1;!(https://o
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql查询每个学生的各科成绩,以及总分和平均分
今天看一个mysql教程,看到一个例子,感觉里面的解决方案不是很合理。问题如下:有学生表:!在这里插入图片描述(https://oscimg.oschina.net/oscnet/07b001b0c6cb7e0038a9299e768fc00a0d3.png)成绩表:!在这里插入图片描述(https://oscimg.o
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
CodeCosmicRover
CodeCosmicRover
Lv1
碛里征人三十万,一时回向月明看。
文章
4
粉丝
0
获赞
0