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

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。

链接如下:

sqliteviz

注意:

在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到SQL语法是否能正确地执行,顺序如下:

SELECT(读取)——FROM(来源)——WHERE(条件)——GROUP BY(分组)——HAVING(条件)——ORDER BY(顺序)——LIMIT(条数限制)

比如:order by要排在limit之前

group by必须排在having之前,因为having是用来筛选分组地结果

目录

1.创建数据库表

2. 向表中插入数据

3.删除整个数据表

4.删除表中全部数据

5.查询表中相关信息

①limit用法

②Where用法

③order by语法

④通配符用法 

⑤between and用法 

⑥avg、sum、max、min、count、round等用法

⑦group by用法

⑧Having用法

注意:group by分组后不能用where进行筛选了,得用having进行筛选!

⑨DISTINCT用法

⑩UPDATE SET的用法

⑪Left join的用法

⑫Inner left的用法

6.left join 和inner join的区别

1.创建数据库表
CREATE TABLE students (student_id INT PRIMARY KEY,         -- 学号(主键)name VARCHAR(50),                   -- 姓名class VARCHAR(50),                  -- 班级score DECIMAL(5,2),                 -- 成绩(百分制)club_id INT                         -- 社团编号
);

其中

CREATE TABLE students ( ... );
  • 创建一个名为 students 的新表。
  • 表中包含多个字段(列),括号内定义这些字段。
student_id INT PRIMARY KEY
  • 字段名: student_id
  • 类型: INT(整数)
  • 约束: PRIMARY KEY
    • 表示该字段是这张表的主键,唯一标识每一条记录。
    • 主键不能重复,也不能为 NULL。
name VARCHAR(50)
  • 字段名: name
  • 类型: VARCHAR(50)(可变长度字符串,最大长度为 50 个字符)
class VARCHAR(50)
  • 字段名: class
  • 类型: VARCHAR(50),表示学生所属班级名称。
score DECIMAL(5,2)
  • 字段名: score
  • 类型: DECIMAL(5,2),表示精度为 5 位、小数点后保留 2 位的十进制数。
    • 最大值可以是 999.99
club_id INT
  • 字段名: club_id
  • 类型: INT,表示学生所加入社团的编号。
2. 向表中插入数据
INSERT INTO students (student_id, name, class, score, club_id)
VALUES(1001, '张三', '高一(1)班', 92, 101),(1002, '李四', '高一(2)班', 78, 103),(1003, '王五', '高一(1)班', 58, 102),(1004, '赵六', '高一(3)班', 98, 101),(1005, '钱七', '高一(2)班', 89, NULL),(1006, '孙八', '高一(3)班', 84, 103),(1007, '周九', '高一(1)班', 86,102),(1008, '吴十', '高一(2)班', 94,104),(1009, '郑十一', '高一(3)班', 68,103),(1010, '王十二', '高一(1)班', 72,101),(1011, '陈十三', '高一(2)班', 84,102),(1012, '刘十四', '高一(3)班', 89,103),(1013, '杨十五', '高一(1)班', 91,101),(1014, '黄十六', '高一(2)班', 92,104),(1015, '徐十七', '高一(3)班', 52,103),(1016, '何十八', '高一(1)班',85,NULL),(1017, '吕十九', '高一(2)班', 76,102),(1018, '施二十', '高一(3)班', 64,101),(1019, '沈二十一', '高一(1)班', 100,101),(1020, '朱二十二', '高一(2)班',99,102);
3.删除整个数据表
DROP TABLE students;
4.删除表中全部数据
DELETE FROM students; 或者
DELETE
FROM students
where club_id=104;
5.查询表中相关信息
SELECT * FROM "students"; 
SELECT 姓名,班级,成绩 FROM "students"; 
①limit用法
SELECT * FROM "students" limit 5; --显示前5行数据
SELECT * FROM "students" limit 5 OFFSET 5; --跳过前5行,接着显示后5行
SELECT * FROM "students" limit 5 OFFSET 10; --第10行后边的5行,即跳过前10行,显示后边的5行
②Where用法
SELECT * from students where 学号 = 1001;
SELECT * from students where 学号 <> 1001;  学号不等于1001的其它数据
SELECT * from students where 班级 = '高一(1)班';
③order by语法
SELECT * from students where 班级 <> '高一(2)班' ORDER BY 班级,成绩 DESC;--降序按照班级升序、成绩降序排列
④通配符用法 
SELECT * from students where 姓名 LIKE '张%'--%多个字元
--LIKE '张%':表示以“张”开头,后面可以有任意多个字符(包括 0 个)。
--% 是通配符,代表 任意数量的字符(包括没有字符)。SELECT * from students where 姓名 LIKE '张_'--_一个字源
查询姓名为“张”姓且全名只有两个字的学生
_ 是通配符,代表 一个且仅有一个字符。
⑤between and用法 
SELECT * from students where 成绩>=80 and 成绩<=90;
SELECT * from students where 成绩 BETWEEN 80 AND 90;SELECT * from students where 成绩 BETWEEN 80 AND 90 AND 班级='高一(2)班';SELECT * from students where 成绩 BETWEEN 80 AND 90 AND (班级='高一(2)班' or 班级='高一(1)班');SELECT * from students where 成绩 BETWEEN 80 AND 90 AND (班级 in ('高一(2)班','高一(1)班'));
⑥avg、sum、max、min、count、round等用法
SELECT AVG(成绩),SUM(成绩),MAX(成绩),MIN(成绩),COUNT(成绩) FROM students;
SELECT AVG(成绩) AS 成绩平均,MAX(成绩) as 最高分  FROM students;
SELECT ROUNd(AVG(成绩),1) AS 成绩平均,MAX(成绩) as 最高分  FROM students; --四舍五入保留一位小数
⑦group by用法
SELECT 班级,ROUNd(AVG(成绩),1) AS 成绩平均,MAX(成绩) as 最高分  FROM students GROUP BY 班级 ORDER BY 成绩平均 DESC;
⑧Having用法
SELECT 班级,ROUNd(AVG(成绩),1) AS 成绩平均 FROM students GROUP BY 班级 HAVING 成绩平均>=80 ORDER BY 成绩平均 DESC;
注意:group by分组后不能用where进行筛选了,得用having进行筛选!
⑨DISTINCT用法
SELECT DISTINCT club_id FROM students;
作用: 显示所有出现过的 club_id 值(包括 NULL)。
DISTINCT 表示去重。SELECT COUNT(DISTINCT club_id) FROM students;
作用: 统计学生来自多少个不同的社团。
注意: NULL 值不会被计入统计结果。SELECT DISTINCT club_id FROM students WHere club_id is not null order by club_id;
查询所有非空的不同社团编号,并排序:
⑩UPDATE SET的用法
更新数据,补充缺失值,删除行
UPDATE students 
set club_id=104 
where student_id=1005;将 student_id = 1005 的学生的 club_id 更新为 104
这个操作通常用于补充缺失值(如之前该字段为 NULL)
⑪Left join的用法
SELECT s.name AS 姓名,s.club_id AS 社团编号,c.club_name AS 社团名称
FROM students s
LEFT JOIN club c ON s.club_id = c.club_id
WHERE s.class = '高一(1)班';

查询“高一(1)班”学生的姓名、社团编号和对应的社团名称,并使用了 LEFT JOIN 来连接 studentsclub 表。

⑫Inner left的用法
SELECT s.name AS 姓名,s.club_id AS 社团编号,c.club_name AS 社团名称
FROM students s
INNER JOIN club c ON s.club_id = c.club_id
WHERE s.class = '高一(1)班';
6.left join 和inner join的区别

LEFT JOININNER JOIN 是 SQL 中最常用的两种表连接方式(JOIN),它们用于将两个或多个表根据某个关联条件合并在一起。但它们在行为和结果上有着本质的区别。

Inner join(内连接)

  • 只返回两个表中“匹配”的行
  • 如果左表某行在右表中没有匹配的行,则不返回该行
  • 相当于取两个表的交集

LEFT JOIN(左连接 / 左外连接)

  • 返回左表中的所有行
  • 如果右表中没有匹配的行,则用 NULL 填充右表的字段
  • 不管有没有匹配,左表数据都会保留

 

相关文章:

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

P3 QT项目----记事本(3.8)

3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

生成 Git SSH 证书

&#x1f511; 1. ​​生成 SSH 密钥对​​ 在终端&#xff08;Windows 使用 Git Bash&#xff0c;Mac/Linux 使用 Terminal&#xff09;执行命令&#xff1a; ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ​​参数说明​​&#xff1a; -t rsa&#x…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户&#xff0c;但你不希望用 root 权限运行 ns-3&#xff08;这是对的&#xff0c;ns3 工具会拒绝 root&#xff09;&#xff0c;你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案&#xff1a;创建非 roo…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

苍穹外卖--缓存菜品

1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得&#xff0c;如果用户端访问量比较大&#xff0c;数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据&#xff0c;减少数据库查询操作。 缓存逻辑分析&#xff1a; ①每个分类下的菜品保持一份缓存数据…...