欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!
文章目录
前言
SQL不仅是数据库管理系统(DBMS)的标准语言,更是数据分析和数据驱动决策的基础工具。本章将详细讲解SQL语言的数据定义(DDL)、数据操纵(DML)与数据查询(DQL)这三个方面。
本篇文章参考:黑马程序员
一、概述
①定义
SQL全称为结构化查询语言(Structured Query Language),是一种用于访问和处理数据库的标准计算机语言。
SQL 语言于1974年由 Boyce 和 Chamberlin 提出,并首次在 IBM 公司的关系数据库系统 System R 上实现。经过多年的发展,SQL 已成为数据库领域的统一数据操作标准语言。几乎所有市面上的数据库系统都支持使用 SQL 语言进行操作。
②分类
由于数据库管理系统(数据库软件)功能众多,除了存储数据外,还包括数据管理、表管理、库管理、账户管理和权限管理等。因此,SQL 语言可以根据其功能划分为四类:
- 数据定义语言(DDL,Data Definition Language):
用于库的创建删除、表的创建删除等 - 数据操纵语言(DML,Data Manipulation Language):
负责数据的新增、删除和修改等 - 数据控制语言(DCL,Data Control Language):
用于新增用户、删除用户、修改密码和权限管理等 - 数据查询语言(DQL,Data Query Language):
基于需求查询和计算数据
③语法特征
特征一:SQL语言大小写不敏感
我们可以利用DBeaver图形化工具的SQL编辑器编写SQL语句。
Show databases;
Show DataBases;
特征二:SQL可以单行或多行书写,最后以;
号结束
SHOW
databases;
特征三:SQL支持注释
- 单行注释:
--
注释内容(--
后面一定要有一个空格) - 单行注释:
#
注释内容(# 后面可以不加空格,建议加上) - 多行注释:
/*
注释内容*/
单行注释:
SHOW
-- 我是注释(写法一)
# 我是注释(写法二)
databases;
多行注释:
SHOW
/*
我
是
注释
*/
databases;
二、数据定义(DDL)
数据定义语言(DDL,Data Definition Language),用于定义和管理数据库结构,包括数据库和表的创建、修改和删除。
①库管理
②表管理
三、数据操纵(DML)
数据操纵语言(DML,Data Manipulation Language),用于管理和处理数据库中的数据,包括数据的插入、更新和删除。
①数据插入
基础语法:
示例:
CREATE TABLEstudent(
id INT,
name VARCHART(20),
age INT
);
# 仅插入id列数据
INSERT INTO student(id)VALUES(10001),(10002),(10003)
#插入全部列数据
INSERT INTo student(id, name, age)VALUES(10001,'小明',31),(10002,'小王',33)(10003,'小节',26)
# 插入全部列数据(快捷写法)
INSERT INTO student VALUES(10001,'小明',31),(10002,'小王',33),(10003,'小节'
26
【注意】
- 插入字符串数据,需要用单引号包围
- 插入全部列的时候,列的列表可以省略
②数据删除
基础语法:
示例:
DROP TABLE IF EXISTS stucent;
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT
);
INSERT INTo student(id, name, age)VALUES(10001,'小明',31),(10002,'小王',33)(10003,'小节',26)
# 删除name为小节的数据
DELETE FROM student WHERE name ='小节';# 注意,不要忘记单引号''
#删除age >33 的数据
DELETE FROM student WHERE age > 33;
#删除全部数据
DELETE FROM student:
③数据更新
基础语法:
示例:
DROP TABLE IF EXISTS student;
CREATE TABLE student(
id INT,
name VARCHAR(20)
age INT
);
INSERT INTo student(id, name, age)VALUES(10001,'小明',31),(10002,'小王',33)(10003,'小节',26)
# 修改id为10001的name为小陈
UPDATE student sET name ='小陈' WHERE id = 10001;
# 修改全部数据的age为11
UPDATE student SET age = 11:
四、数据查询(DQL)
数据查询语言(DQL,Data Query Language),主要用于从数据库中检索数据,通常是用户与数据库交互的主要方式。
①基础查询
在SQL中,通过SELECT关键字开头的SQL语句进行数据的查询。
基础语法:
含义:从(FROM)表中,选择(SELECT)某些列进行展示
示例:
DROP TABLE IF EXISTS student;
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT
);
INSERT INTo student(id, name, age)VALUES(10001,'小明',31),(10002,'小王',33)(10003,'小节',26)
# 查询id和name两个列
SELECT id, name FROM student;
#查询全部列
SELECT id, name, age FROM student;
#查询全部列(快捷写法)
SELECT * FROM student;
查询也可以带有指定条件,基础语法如下:
示例:
# 查询id和name两个列,年龄小于33岁
SELECT id, name FROM student WHERE age < 33;
# 查询全部列,id等于10003
SELECT id,name, age FROM student WHERE id = 10003
②分组聚合
在 SQL 中,分组聚合是指将数据按某个或多个列进行分组,并对每个组应用聚合函数以汇总数据。通过这种方式,可以方便地计算每个组的统计信息,如总数、平均值、最大值、最小值等。
- 分组(GROUP BY):使用 GROUP BY 语句对结果集中的数据进行分组,通常基于一个或多个列
- 聚合函数:在分组后,可以使用聚合函数(如 COUNT、SUM、AVG、MAX、MIN 等)计算每个组的统计数据
- 聚合列:在查询中被聚合函数处理的列,这类函数用于对一组数据执行计算,并返回一个单一的结果,例如 COUNT()、SUM()、AVG() 等
- 非聚合列:在查询中未被聚合函数处理的列,通常用于直接显示结果,它们可以是用作分组的列或仅仅用于选择结果
基础语法:
常见的聚合函数:
- SUM(列):求和
- AVG(列):求平均值
- MIN(列):求最小值
- MAX(列):求最大值
- COUNT(列|*):求数量
示例:
DROP TABLE IF EXISTS student;
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT,
gender VARCHAR(10)
);
INSERT INTO student(id, name, age)VALUES(10001,'小周',31,'男'),(10002,'小王',33,'男'),(10003,'小琳',35,'女'),(10004,'小灵',36,'女'),(10005,'小德',30,'男')
#按性别分组,统计各组人数
SELECT gender,COUNT(*) FROM student GROUP BY gender;
# 按性别分组,统计平均年龄
SELEcT gender,AVG(age) FROM student GROUP BY gender;
#按性别分组,统计最大最小年龄
SELEcT gender, MAX(age),MIN(age) FROM student GROUP BY gender;
【注意】
在 SELECT 语句中,如果想选择非聚合列,这些列必须出现在 GROUP BY 子句中。这是因为 SQL 需要明确如何将结果集中的记录汇总成组,以确保所有非聚合列在分组的上下文中都有清晰的含义。
例如,以下查询会报错:
SELECT 性别, 年龄, COUNT(*) AS 学生人数
FROM 学生
GROUP BY 性别;
在这个例子中,“年龄”既没有使用聚合函数,也不在 GROUP BY 子句中,因此 SQL 无法确定如何将“年龄”与性别的分组结果关联起来。
如果想要按性别和年龄进行分组,可以将“年龄”也添加到 GROUP BY 中,如下所示:
SELECT 性别, 年龄, COUNT(*) AS 学生人数
FROM 学生
GROUP BY 性别, 年龄;
③排序
定义:
排序 (Sorting)是指按照指定的列对查询结果集进行排列。SQL 通常使用 ORDER BY 子句来实现排序操作。可以根据一个或多个列进行升序或降序排列。
方式:
- 升序 (ASC): 默认方式,从小到大排列
- 降序 (DESC):从大到小排列
基本语法:
示例:
DROP TABLE IF EXISTS student;
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT,
gender VARCHAR(10)
);
INSERT INTo student(id, name, age)VALUES(10001,'小周',31,'男'),(10002,'小王',33,'男'),(10003,'小琳',35,'女'),(10004,'小灵',36,'女'),(10005,'小德',30,'男')
# 按年龄降序排序结果
SELECT * FROM student ORDER BY age DESC:
#按ID升序排序结果
SELECT *FROM student WHERE age > 31 ORDER BY id;
④分页
定义:
分页是将查询结果分成多个部分(页),使用户可以分步查看数据,而不是一次性返回所有记录。SQL 通常使用 LIMIT 关键字实现分页。
基本语法:
示例:
DROP TABLE IF EXISTS student;
CREATE TABLE student(
id INT,
name VARCHAR(20),
age INT,
gender VARCHAR(10)
);
INSERT INTo student(id, name, age)VALUES(10001,'小周',31,'男'),(10002,'小王',33,'男'),(10003,'小琳',35,'女'),(10004,'小灵',36,'女'),(10005,'小德',30,'男')
# 查询结果只保留2条
SELECT * FROM student LIMIT 2;
# 找出年龄最大的3人
SELECT *FROM Student ORDER BY age DESC LIMIT 3;
【注意】
将排序和分页结合使用时,通常先进行排序,然后再进行分页,确保在进行分页时,数据是按照指定的顺序排列的。
在 SQL 查询中,执行顺序遵循特定的步骤:
FROM → WHERE → GROUP BY 和聚合函数 → SELECT → ORDER BY → LIMIT
首先,从数据表中选择数据(FROM),然后通过条件筛选来过滤记录(WHERE)。接着,对结果进行分组与聚合(GROUP BY),再提取所需的列(SELECT)。随后,对结果进行排序(ORDER BY),最后限制返回的记录数量或进行分页(LIMIT)。这一执行顺序确保了在处理数据时获得准确且有序的输出。