首页 > 数据库 >Chapter 33 SQL语言

Chapter 33 SQL语言

时间:2024-08-13 19:54:02浏览次数:14  
标签:Chapter name 33 age student SQL 数据 id

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

标签:Chapter,name,33,age,student,SQL,数据,id
From: https://blog.csdn.net/2302_80253507/article/details/141098017

相关文章

  • 尚硅谷MYSQL(第七章)
    从函数定义的角度出发,我们可以将函数分成内置函数和自定义函数。在SQL语言中,同样也包括了内置函数和自定义函数。内置函数是系统内置的通用函数,而自定义函数是我们根据自己的需要编写的里面有因子的话因子相同 随机数相同四舍五入中......
  • RK3399 Android8.1静默安装APK
    在RK3399Android8.1上面,实现APK静默安装功能,下面是我们的测试验试过程:1.在RK3399Android8.1源码目录下生成系统签名KEY:  进入build/target/product/security目录:cdbuild/target/product/security  创建build_system_jks2.sh文件,内容如下:#!/bin/bashecho"生......
  • 《SQL 中复杂条件多表关联查询的性能优化秘籍》
    在当今数据驱动的时代,数据库的操作和查询性能对于企业的业务运营至关重要。当面对复杂的业务逻辑和大规模的数据时,实现复杂条件的多表关联查询并确保高效的性能成为了数据库开发者和管理员面临的重要挑战。多表关联查询是在关系型数据库中获取全面和准确数据的常见操作。然......
  • 《优化 SQL 索引策略:提升大规模数据检索效率的关键》
    在当今数字化时代,数据量呈爆炸式增长,企业和组织面临着处理大规模数据的巨大挑战。对于数据库管理员和开发者来说,如何在大规模数据环境中优化SQL中的索引策略,以减少数据检索时间,成为了至关重要的任务。索引是数据库中用于加速数据检索的重要结构。然而,在大规模数据场景下,......
  • 实习记录day02:MySQL是有null和空的区别的
    实习第二天今天第一次骑电动车,平时不敢骑,但是这次来的路上实现没有单车,本人又不想走路X(,骑车无惊无险平安落地(撒花!)上午的时候被分配了一个小任务,优化一个逻辑,让一个不接受参数的死接口变成可接受参数的活接口。我本来想直接改原来的代码实现目的,一改突然就爆红了。原来这个se......
  • postgresql清理空闲连接
    问题今天突然无法连接postgresql,出现的异常如下:FATAL:sorry,toomanyclientsalready解决查看当前活跃和空闲连接selectpid,datname,application_name,client_addr,statefrompg_stat_activitywherestatein('idle','active');根据条件清理空闲连接s......
  • 基于Spring Boot+MySQL的医疗企业固定资产管理系统
    目录前言 一、技术栈二、系统功能介绍三、核心代码1、登录模块 2、文件上传模块3、代码封装前言系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对北京医疗企业固定资产管理的现状进行系统调查。采用结构化的分析设计,该方法要......
  • SQL进阶技巧:利用Stack()函数进行列转行及动态列转行方法
    目录0需求描述1数据分析 2 stack()函数应用stack(intn,v_1,v_2,...,v_k)n设为3,将后面6个元素按顺序分为3行2列n设为2,将后面6个元素按顺序分为2行3列n设为3,将后面7个元素按顺序分为3行3列n设为6,将后面6个元素转为为6行1列 3小结0需求描述在hive数仓中......
  • 基于Flask与MySQL的在线问答系统的设计与实现/Python/计算机毕业设计
    摘要为了更够是学生更快更方便的获取问题答案,开发一款在线问答系统供学生使用。基于系统的业务要求,系统开发平台为Windows10,主要使用Python语言进行开发,以及Python开发语言的框架Flask,使用MySQL作为数据库存储相关数据。开发软件为PyCharm,与此同时运用Navicat作为数据库管......
  • TapData 信创数据源 | 国产信创数据库 PolarDB MySQL 数据同步指南,加速国产化进程,推进
    随着国家对自主可控的日益重视,目前在各个行业和区域中面临越来越多的国产化,采用有自主知识产权的国产数据库正在成为主流。长期以来,作为拥有纯国产自研背景的TapData,自是非常重视对于更多国产信创数据库的数据连接器支持,旗下产品已陆续与**阿里云、华为云、麒麟软件、优炫数据库......