SQL语言

2024-08-11 01:54:23 浏览数 (2)

一、概述

①定义

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语句。

代码语言:sql复制
Show databases;
代码语言:sql复制
Show DataBases;

特征二:SQL可以单行或多行书写,最后以;号结束

代码语言:sql复制
SHOW
databases;

特征三:SQL支持注释

  • 单行注释: -- 注释内容(--后面一定要有一个空格)
  • 单行注释:# 注释内容(# 后面可以不加空格,建议加上)
  • 多行注释:/* 注释内容 */

单行注释:

代码语言:sql复制
SHOW
-- 我是注释(写法一)
# 我是注释(写法二)
databases;

多行注释:

代码语言:sql复制
SHOW
/*
我
是
注释
*/
databases;

二、数据定义(DDL)

数据定义语言(DDL,Data Definition Language),用于定义和管理数据库结构,包括数据库和表的创建、修改和删除。

①库管理

②表管理

三、数据操纵(DML)

数据操纵语言(DML,Data Manipulation Language),用于管理和处理数据库中的数据,包括数据的插入、更新和删除。

①数据插入

基础语法:

示例:

代码语言:sql复制
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

【注意】

  • 插入字符串数据,需要用单引号包围
  • 插入全部列的时候,列的列表可以省略

②数据删除:

基础语法:

示例:

代码语言:sql复制
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:

③数据更新

基础语法:

示例:

代码语言:sql复制
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)某些列进行展示。

示例:

代码语言:sql复制
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;

查询也可以带有指定条件,基本语法如下:

示例:

代码语言:sql复制
# 查询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(列|*):求数量

示例:

代码语言:sql复制
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 需要明确如何将结果集中的记录汇总成组,以确保所有非聚合列在分组的上下文中都有清晰的含义。

例如,以下查询会报错:

代码语言:sql复制
SELECT 性别, 年龄, COUNT(*) AS 学生人数  
FROM 学生  
GROUP BY 性别;

在这个例子中,“年龄”既没有使用聚合函数,也不在 GROUP BY 子句中,因此 SQL 无法确定如何将“年龄”与性别的分组结果关联起来。

如果想要按性别和年龄进行分组,可以将“年龄”也添加到 GROUP BY 中,如下所示:

代码语言:sql复制
SELECT 性别, 年龄, COUNT(*) AS 学生人数  
FROM 学生  
GROUP BY 性别, 年龄;  

③排序

定义:

排序 (Sorting)是指按照指定的列对查询结果集进行排列。SQL 通常使用 ORDER BY 子句来实现排序操作。可以根据一个或多个列进行升序或降序排列。

方式:

  • 升序 (ASC): 默认方式,从小到大排列
  • 降序 (DESC):从大到小排列

基本语法:

示例:

代码语言:sql复制
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 关键字实现分页。

基本语法:

示例:

代码语言:sql复制
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)。这一执行顺序确保了在处理数据时获得准确且有序的输出。

0 人点赞