当前位置: 首页 > news >正文

SQL入门

一、SQL 语言概述

数据库就是指数据存储的库,作用就是组织数据并存储数据,数据库如按照:库 -> 表 -> 数据三个层级进行数据组织,而 SQL 语言,就是一种对数据库、数据进行操作、管理、查询的工具,通过SQL 语言,可以完成对数据的增删改查等操作。

数据库软件就是提供库 -> 表 -> 数据,这种数据组织形式的工具软件,也称之为数据库管理系统,常见的数据库软件有: Oracle 、 MySQL 、 SQLServer 、 PostgreSQL 、 SQLite ,本文使用MySQL 软件进行学习,同时用第三方图形化工具DBeaver操作 MySQL。

SQL 全称是“ Structured Query Language ”,即“结构化查询语言”,用于访问和处理数据库的标准的计算机语言。SQL 语言 1974 年由 Boyce 和 Chamberlin 提出,并首先在 IBM 公司研制的关系数据库系统 SystemR 上实现,经过多年发展, SQL 已经成为数据库领域统一的数据操作标准语言,几乎市面上所有的数据库系统都支持使用 SQL 语言来操作。

MySQL安装:手把手教你安装MySQL(最新版本安装)_哔哩哔哩_bilibili

DBeaver安装:【黑马程序员python教程,8天python从入门到精通,学python看这套就够了】 【精准空降到 03:06】 https://www.bilibili.com/video/BV1qW4y1a7fU/?p=130&share_source=copy_web&vd_source=b7e4ae388f33cefa375c8fb8789aa3bc&t=186

二、SQL基础语法

2.1 SQL 的语法特征

 SQL 的语法特征:

  • 大小写不敏感
  • 字符串的值必须要用单引号包围起来
  • 可以单行或多行书写,最后以分号( ; )号结束
  • SQL 支持注释:
    1. 单行注释: -- 注释内容( -- 后面一定要有一个空格)
    2. 单行注释: # 注释内容( # 后面可以不加空格,推荐加上)
    3. 多行注释: /* 注释内容 */

我们打开DBeaver,来验证一下:

首先打开编辑器,如下图所示。

输入“SHOW DATABASES;”(查看数据库),如下图所示,无论是大写,小写,还是大小写混杂,得到的输出结果相同,证明SQL 确实大小写不敏感。

运用3种注释方式,运行正常:

2.2 SQL 语言的分类

由于数据库管理系统(数据库软件)功能众多,不仅仅是存储数据,还包含:数据的管理、表的管理、库的管理、账户管理、权限管理等等。所以,操作数据库的 SQL 语言,也基于功能,可以划分为 4 类

  • 数据定义: DDL ( Data Definition Language )
    • 库的创建删除、表的创建删除等
  • 数据操作: DML ( Data Manipulation Language )
    • 新增数据、删除数据、修改数据等
  • 数据控制: DCL ( Data Control Language )
    • 新增用户、删除用户、密码修改、权限管理等
  • 数据查询: DQL ( Data Query Language )
    •  基于需求查询和计算数据

2.2.1 DDL(数据定义)

2.2.1.1 DDL库管理

基础语法:

SHOW DATABASES;   # 查看数据库

USE 数据库名称;   # 使用数据库

CREATE DATABASE 数据库名称 [CHARSET UTF8];   # 创建数据库,方框[ ]的意思是里面的内容是可选的

DROP DATABASE  数据库名称;    # 删除数据库

SELECT DATABASE();    #  查看当前使用的数据库

我们在DBeaver中应用一下DDL库管理基础语法:

1.创建数据库test

create database test charset utf8;-- 创建数据库test

运行后:

2.创建数据库后,我们接着查看数据库,验证数据库test是否已存在。

create database test charset utf8;-- 创建数据库test
show databases;-- 查看数据库

运行后:

3.使用数据库test,再查看当前使用的数据库是否是test

create database test charset utf8;-- 创建数据库test
show databases;-- 查看数据库
use test;-- 使用数据库test
select database ();-- 查看当前使用的数据库

运行后:

4.删除数据库test后,我们接着查看数据库,验证数据库test是否已不存在。

create database test charset utf8;-- 创建数据库test
show databases;-- 查看数据库
use test;-- 使用数据库test
select database ();-- 查看当前使用的数据库
drop database test;-- 删除数据库test
show databases;-- 查看数据库

运行后:

2.1.1.2 DDL表管理

基础语法:

SHOW TABLES;   # 查看表(需要先选择数据库)

CREATE TABLE 表名称 (

    列名称  列类型,

    列名称  列类型,

    ……

);        # 创建表

DROP TABLE 表名称;    # 删除表

DROP TABLE IF EXISTS 表名称;    # 删除表

其中在创建表时提到了列类型,列类型有:

  • int  --整数
  • float  --浮点数
  • varchar(长度) --文本,长度为数字,作最大长度限制
  • data --日期类型
  • timestamp --时间戳类型

我们在DBeaver中应用一下DDL表管理基础语法:

1.在前面建立的数据库test中建立表student,然后查看。

use test;# 一定先选择数据库
create table student(id int,name varchar(10),age int
);
show tables;

运行后:

2.在左边数据库导航栏中打开表student查看。

3.删除表student(在2.2.1DDL中我们只学习基础语法,在后面学习添加数据)

注意:在第2步中,打开了表student,要关闭表student后才能删除。

2.2.2 DML(数据操作)

关键字:

  1. 插入 INSERT
  2. 删除 DELETE
  3. 更新 UPDATE

基础语法:

# 数据插入

INSERT INTO 表[(列1,列2,列3,列4,……,列N)] VALUES(值1,值2,值3,值

4,……,值N)[,(值1,值2,值3,值4,……,值N),……,(值1,值2,值3,值4,……,值N)];  #方框[ ]的意思是里面的内容是可选的

# 数据删除

DELETE FROM 表名称 [WHERE 条件判断];

#数据更新

UPDATE 表名称 SET 列=值 [WHERE 条件判断];

条件判断:列 操作符 值

操作符:= 、<、 >、 <=、 >=、 !=

DML语法应用:

1.在数据库test表student中插入数据。

use test;
create table student(ID int,name varchar(10),age int
);
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);
# 仅插入ID列数据
insert into student (ID) values(04),(05);

运行后在左边数据库导航栏中打开表student查看,可以看到,2次插入数据成功,仅插入的ID数据“04”和“05”所对应的name和age为空。

如果我们要插入的数据,每组都包括表中所有属性,可以写得更简便。

# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);

可以写成:

# 插入全部列数据
insert into student values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);

这也是列名加上了方括号的原因。

2.在表student中删除数据。

use test;
create table student(ID int,name varchar(10),age int
);
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23);
# 仅插入ID列数据
insert into student (ID) values(04),(05);
#删除name为乔恩的数据
delete from student where name='乔恩';
#删除age<3的数据
delete from student where age<3;

运行后:

注意:

# 数据删除

DELETE FROM 表名称 [WHERE 条件判断]

在数据删除的语法中,“WHERE 条件判断”在方框内,是可选的,如果我们不选,就会删除全部数据。

3.更新表student中的数据。

use test;
create table student(ID int,name varchar(10),age int
);
# 插入全部列数据
insert into student (ID,name,age) values(01,'加菲猫',3),(02,'欧迪',2),(03,'乔恩',23)
#将ID=03的name修改为Mary
update student set name='Mary' where ID=03;

运行后:

2.2.3 DQL(数据查询)

下面我们将从基础查询、分组聚合、排序分页3个方面认识DQL。

我们先建立一个表info:

use test;
create table info(ID int,name varchar(10),sex varchar(10),age int
);
insert into info(ID,name,sex,age) values(01,'张三','男',26),(02,'李四','女',16),(03,'王五','男',56),(04,'小明','男',6),(05,'coco','女',36);

生成的图表:

下面的操作基于此表。

2.2.3.1基础查询

通过 SELECT 关键字开头的 SQL 语句,进行数据的基础查询,语法如下:

SELECT 字段列表 |* FROM 表;  #从(FROM)表中选择(SELECT )某些列进行展示

SELECT 字段列表 |* FROM 表 WHERE 条件判断;   #从(FROM)表中选择(SELECT )某些符合条件的列进行展示 ,也称为过滤

基于表info进行查询:

代码:

#查询name和age两个列
select name,age from info;
#查询全部列
select ID,name,sex,age from info;
#查询全部列的简便写法
select * from info;

过滤查询:

代码:

#查询ID和name两个列,年龄<30岁
select ID,name from info where age<30;
#查询全部列,name为coco
select ID,name,sex,age from info where name='coco';
#简便写法
select * from info where name='coco';
2.2.3.2分组聚合

分组聚合应用场景非常多,如:统计班级中,男生和女生的人数。按需要分组并统计每个组的人数,这就称之为:分组聚合。

基础语法:

SELECT 字段 | 聚合函数 FROM 表 [WHERE 条件判断] GROUP BY 列;

聚合函数:

  • SUM(列) 求和
  • AVG(列) 求平均值
  • MIN(列) 求最小值
  • MAX(列) 求最大值
  • COUNT(列 | *) 求数量

基于表info进行分组查询:

注意:SELECT 中,除了聚合函数外, GROUP BY后面出现了哪个列,哪个列在能出现SELECT 中。

代码:

#按照性别分组,统计各组人数
select sex ,count(*) from info group by sex;
#按照性别分组,统计平均年龄
select sex,avg(age) from info group by sex;
#按照性别分组,统计最大最小年龄
select sex,max(age),min(age) from info group by sex;
2.2.3.3排序分页

使用 ORDER BY 关键字可以对查询的结果指定某个列进行排序。

语法:

SELECT 字段 | 聚合函数 FROM 表

WHERE 条件判断 

GROUP BY 列

ORDER BY 列 [ASC|DESC];

基于表info进行查询,并对查询结果进行排序:

代码:

#按照年龄升序排列结果
select * from info order by age asc;
#按照ID降序排列结果
select * from info order by ID desc;

使用 LIMIT 关键字可以对查询结果进行数量限制或分页显示。

语法:

SELECT 字段 | 聚合函数 FROM 表

WHERE 条件判断 

GROUP BY 列

ORDER BY 列 [ASC|DESC]

LIMIT n [,m];

基于表info进行查询,并对查询结果进行限制:

代码:

#查询结果只保留3条
select * from info limit 3;
#找出年龄最大的2个人
select * from info order by age desc limit 2;
#从第3条开始,取后面2条
select * from info limit 3,2;

注意:

  • 关键字WHERE 、 GROUP BY 、 ORDER BY 、 LIMIT 均可按需求省略。
  • SELECT 和 FROM 是必写的。
  • 执行顺序:FROM -> WHERE -> GROUP BY 和聚合函数 ->SELECT -> ORDER BY -> LIMIT

相关文章:

SQL入门

一、SQL 语言概述 数据库就是指数据存储的库&#xff0c;作用就是组织数据并存储数据&#xff0c;数据库如按照&#xff1a;库 -> 表 -> 数据三个层级进行数据组织&#xff0c;而 SQL 语言&#xff0c;就是一种对数据库、数据进行操作、管理、查询的工具&#xff0c;通过…...

Java中的Math类

关于Math类的介绍&#xff0c;这是一个在Java和其他许多编程语言中常见的内置库或模块&#xff0c;主要用于提供各种数学运算的方法。在Java中&#xff0c;Math类位于java.lang包下&#xff0c;它包含大量静态方法执行基本的数学函数&#xff0c;如三角函数、指数函数、对数函数…...

大厂常问iOS面试题–Runloop篇

大厂常问iOS面试题–Runloop篇 一.RunLoop概念 RunLoop顾名思义就是可以一直循环(loop)运行(run)的机制。这种机制通常称为“消息循环机制” NSRunLoop和CFRunLoopRef就是实现“消息循环机制”的对象。其实NSRunLoop本质是由CFRunLoopRef封装的&#xff0c;提供了面向对象的AP…...

【解决】mac报错“zsh: command not found: nvm”

问题描述&#xff1a; 安装nodejs时要先安装nvm,按照网上教程安装之后出现以下异常情况&#xff1a; 1.终端运行npm -v能查到版本&#xff0c;idea运行同样命令提示没找到&#xff0c;像是没安装一样 2.终端关闭重新打开之后&#xff0c;也像是没安装一样&#xff0c;需要重…...

MySQL同步到ES的方案选型

文章目录 1. 同步双写优点缺点实现方式 2. 异步双写优点缺点实现方式 3. 另起应用 SQL 查询写入优点缺点实现方式 4. Binlog 实时同步优点缺点实现方式 5. 应用场景 本文参考: https://www.bilibili.com/video/BV13hvZeaErr/?vd_sourceb7e4d17fd13ffa91c4da6d37c08a6c7c 最近在…...

Transformer 与 CNN的对比

Transformer 相比于 CNN 的优点主要体现在以下几个方面: Transformer 相比 CNN 的优点: 全局依赖建模能力:Transformer 的核心机制是 自注意力机制,它可以直接建模输入序列中任意两个位置之间的依赖关系,无论它们之间的距离有多远。 相比之下,CNN 更擅长处理局部信息,它…...

Maven入门到进阶:构建、依赖与插件管理详解

文章目录 一、Maven介绍1、什么是Maven2、Maven的核心功能 二、Maven核心概念1、坐标GAVP1.1、GroupId1.2、ArtifactId1.3、Version1.3.1、版本号的组成 1.4、Packaging 2、POM、父POM和超级POM2.1、POM (Project Object Model)2.1、父POM&#xff08;Parent POM&#xff09;2.…...

炒股VS炒游戏装备,哪个更好做

这个项目&#xff0c;赚个10%都是要被嫌弃的 虽然天天都在抒发自己对股市的看法&#xff0c;但自己自始至终也没有买进任何一支股票。之所以对这个话题感兴趣&#xff0c;着实是因为手上的游戏搬砖项目也是国际性买卖&#xff0c;跟国际形势&#xff0c;国际汇率挂钩&#xff0…...

AI图像处理工具:开发者高阶用法与最佳实践

引言 随着人工智能技术的迅猛发展&#xff0c;AI图像处理工具正日益成为开发者工作流程中不可或缺的一部分。这些工具不仅能有效处理图像&#xff0c;还能通过深度学习模型实现复杂的图像理解和生成任务。本文将深入探讨开发者在使用AI图像处理工具时的高阶用法&#xff0c;提…...

Spring Boot 2.6=>2.7 升级整理

版本变更&#xff1a; 1、SpringBootTest 属性源优先级&#xff1a;使用 SpringBootTest 注解的测试现在将命令行属性源置于测试属性源之上 在 Spring Boot 2.7 及更高版本中&#xff0c;对 SpringBootTest 的属性源优先级进行了调整&#xff0c;使得通过命令行传递的属性&am…...

Race Track Generator Ultimate:Race Track Generator(赛车场赛道看台场景创建工具)

下载&#xff1a;​​Unity资源商店链接资源下载链接 效果图&#xff1a;...

数据结构7——二叉树的顺序结构以及堆的实现

在上篇文章数据结构6——树与二叉树中&#xff0c;我们了解了树和二叉树的概念&#xff0c;接着上篇文章&#xff0c;在本篇文章中我们学习二叉树顺序结构的实现。 目录 1. 二叉树的顺序存储结构 2. 堆的概念及结构 1. 堆的概念 2. 堆的结构 3. 堆的实现 1. 堆节点 2. 交…...

leetcode hot100 之【LeetCode 21. 合并两个有序链表】 java实现

LeetCode 21. 合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接两个链表的节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 …...

Android Camera系列(五):Camera2

Life was like a box of chocolates, you never know what you’re gonna get. 生命就像一盒巧克力&#xff0c;你永远无法知道下一个是什么味道的。 Android Camera系列&#xff08;一&#xff09;&#xff1a;SurfaceViewCamera Android Camera系列&#xff08;二&#xff0…...

从DexMV、VideoDex、MimicPlay到SeeDo:从人类视频中学习:机器人的主流训练方法之一

前言 在此文《UMI——斯坦福刷盘机器人&#xff1a;从手持夹持器到动作预测Diffusion Policy(含代码解读)》的1.1节开头有提到 机器人收集训练数据一般有多种方式&#xff0c;比如来自人类视频的视觉演示 有的工作致力于从视频数据——例如YouTube视频中进行策略学习 即最常见…...

如何在Docker中运行Squid

测试环境 VMware Rocky Linux 9.4 实现步骤 过程&#xff1a;写一个Dockerfile构建Squid镜像; 再写一个启动脚本start_squid.sh&#xff0c;在启动脚本中配置并运行Squid。 编写Dockerfile 以rockylinux9.3做基础镜像&#xff0c;通过yum安装Squid, 拷贝squid.conf FROM …...

Ubuntu22.04 加入AD域

Ubuntu22.04 加入AD域 要在Ubuntu 22.04上加入Active Directory (AD) 域&#xff0c;你可以使用realmd和sssd服务。以下是加入AD域的步骤和示例配置&#xff1a; 更新系统软件包列表&#xff1a; sudo apt update 下载安装必要的软件包&#xff1a; sudo apt install realm…...

Docker 构建 Miniconda3 Python 运行环境实战指南

Docker 构建 Miniconda3 Python 运行环境实战指南 文章目录 Docker 构建 Miniconda3 Python 运行环境实战指南一 准备 environment.yml二 获取项目 pip 信息三 Dockerfile 编写四 构建多平台镜像1 准备组件2 构建镜像3 导出镜像4 导入镜像 五 注意事项 本文详细介绍了如何通过 …...

029 elasticsearch文档管理(ElasticsearchRepository、ElasticsearchRestTemplate)

文章目录 BlogRepository.javaBlogRepositoryTest.javaBulkTest.java 文档的管理 ElasticSearchRepository接口 使用方法&#xff1a; 创建一个接口&#xff0c;继承于ElasticSearchRepository&#xff0c;指定使用的Entity类及对应主键数据类型 Springboot自动扫描接口并创建代…...

【Flutter】Dart:Isolate

在 Dart 和 Flutter 中&#xff0c;所有的代码默认都运行在单一的线程&#xff08;即主线程&#xff09;上&#xff0c;这个线程也叫做 UI 线程。当进行耗时操作&#xff08;如复杂计算或网络请求&#xff09;时&#xff0c;如果不使用多线程处理&#xff0c;主线程会被阻塞&am…...

simia_joystick:面向心理生理实验的低延迟摇杆驱动设计

1. simia_joystick 组件深度解析&#xff1a;面向嵌入式心理生理交互系统的摇杆驱动设计1.1 组件定位与工程目标simia_joystick是专为simia embedded嵌入式平台设计的摇杆&#xff08;Joystick&#xff09;输入组件&#xff0c;其核心使命并非通用HID设备模拟&#xff0c;而是服…...

I2C设备扫描器:嵌入式系统总线拓扑发现与地址诊断工具

1. I2C设备扫描器&#xff1a;嵌入式系统中总线拓扑发现的核心工具IC&#xff08;Inter-Integrated Circuit&#xff09;总线因其仅需两根信号线&#xff08;SCL时钟线与SDA数据线&#xff09;、支持多主多从架构、内置仲裁与应答机制等特性&#xff0c;成为嵌入式系统中传感器…...

前端CSS精讲05:Grid网格布局——现代页面最强二维布局方案

文章目录 一、什么是 Grid 布局 二、开启 Grid 三、最核心:划分行和列 1. 定义列数与宽度 2. 定义行数与高度 3. 自适应等分:fr 单位(Grid 神器) 4. 自动适应内容 四、格子之间的间距 五、对齐方式(和 Flex 很像) 1. 整个网格在容器里的位置 2. 整个网格整体对齐 六、子项…...

基于Yolov5的钢轨表面缺陷检测:数据集与含训练好的模型

基于yolov5的钢轨表面缺陷检测 数据集含训练好的模型一、项目概述 本项目基于YOLOv5 7.0版本构建&#xff0c;专注于钢轨表面缺陷检测任务&#xff0c;提供了完整的模型训练、推理、导出及性能评估工具链。项目包含47个核心文件&#xff0c;涵盖数据加载、模型构建、训练优化、…...

四开关Buck-Boost双向DC-DC电源系统全套学习资料:STM32F334C8T6控制下...

四开关Buck-Boost双向DC-DC电源整套学习资料 功能&#xff1a;采用STM32F334C8T6芯片&#xff0c;能够根据输入电压和输出电压的大小关系&#xff0c;实现自动切换工作模式&#xff0c;将参数信息进行显示&#xff0c;并且可以实现稳压输出 程序仿真硬件软件说明报告原理图计算…...

IDM激活开源工具:永久使用Internet Download Manager的完整指南

IDM激活开源工具&#xff1a;永久使用Internet Download Manager的完整指南 【免费下载链接】IDM-Activation-Script IDM Activation & Trail Reset Script 项目地址: https://gitcode.com/gh_mirrors/id/IDM-Activation-Script 当你发现下载工具突然停用&#xff0…...

夸克网盘自动化助手:彻底告别手动转存的智能管理方案

夸克网盘自动化助手&#xff1a;彻底告别手动转存的智能管理方案 【免费下载链接】quark_auto_save 夸克网盘签到、自动转存、命名整理、发推送提醒和刷新媒体库一条龙 项目地址: https://gitcode.com/gh_mirrors/qu/quark_auto_save 还在为每天重复的夸克网盘转存操作而…...

虚拟机网络救急指南:当ens33突然丢失IP时必做的6个检查项

虚拟机网络救急指南&#xff1a;当ens33突然丢失IP时必做的6个检查项 虚拟化环境中&#xff0c;ens33网卡突然丢失IP地址的情况并不罕见。这种突发状况往往让开发者措手不及&#xff0c;尤其是在远程连接或自动化部署的关键时刻。本文将系统性地梳理6个关键检查项&#xff0c;帮…...

【物联网】基于STM32F429与TMS320F28377的储能变流器控制软件架构设计

目录 一、双处理器架构设计概述 &#xff08;一&#xff09;异构双核系统定位 &#xff08;二&#xff09;硬件资源协同策略 二、STM32F429ZGT6 核心功能开发 &#xff08;一&#xff09;系统管理模块设计 1. 任务调度与状态监控 2. 多源数据融合存储 &#xff08;二&am…...

Kubernetes中的StatefulSet应用实践

Kubernetes中的StatefulSet应用实践 引言&#xff1a;StatefulSet的重要性 哥们&#xff0c;别整那些花里胡哨的&#xff01;作为一个前端开发兼摇滚鼓手&#xff0c;我最烦的就是有状态应用的部署问题。在云原生时代&#xff0c;StatefulSet是管理有状态应用的关键。今天&…...