前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL语言

SQL语言

原创
作者头像
Heaven645
修改2024-08-11 01:54:23
491
修改2024-08-11 01:54:23
举报
文章被收录于专栏:Python学习

一、概述

①定义

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概述
  • 二、数据定义(DDL)
  • 三、数据操纵(DML)
  • 四、数据查询(DQL)
相关产品与服务
数据库智能管家 DBbrain
数据库智能管家(TencentDB for DBbrain,DBbrain)是腾讯云推出的一款为用户提供数据库性能、安全、管理等功能的数据库自治云服务。DBbrain 利用机器学习、大数据手段、专家经验引擎快速复制资深数据库管理员的成熟经验,将大量传统人工的数据库运维工作智能化,服务于云上和云下企业,有效保障数据库服务的安全、稳定及高效运行。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档