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

news2025/6/12 20:55:40

可以使用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 填充右表的字段
  • 不管有没有匹配,左表数据都会保留

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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

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

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#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…

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…

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…

华为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…

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

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

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

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

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; ①每个分类下的菜品保持一份缓存数据…

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…

【2025年】解决Burpsuite抓不到https包的问题

环境&#xff1a;windows11 burpsuite:2025.5 在抓取https网站时&#xff0c;burpsuite抓取不到https数据包&#xff0c;只显示&#xff1a; 解决该问题只需如下三个步骤&#xff1a; 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…