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

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

 

相关文章:

  • Vim 列操作命令完整学习笔记
  • EtherCAT 转 CANopen 网关与伺服器在配置软件上的配置步骤
  • 如何使用java把文件转成十六进制字符串
  • mybatisplus.BaseMapper#selectPage 使用方法
  • GO 语言中的flag包--易懂解释
  • 逆向工程:破解某金融App加密协议——在安全与法律的钢丝绳上行走
  • 常用数组方法、字符串方法、数组 ↔ 字符串 的转换、TS类型提示 (大全)
  • i++与++i的区别
  • B2B供应链交易平台多商户电商商城系统开发批发采购销售有哪些功能?发展现状如何?
  • 第14篇:数据库中间件的分布式配置与动态路由规则热加载机制
  • 使用 pytdx,`TdxHq_API` 接口下载数据的 AI 编程指引提示词
  • C++17 std::string_view:性能与便捷的完美结合
  • 5g LDPC编译码-LDPC编码
  • 解决启动SpringBoot是报错Command line is too long的问题
  • 玄机 日志分析-Tomcat日志分析 WriteUp
  • ES6从入门到精通:前言
  • Python实现prophet 理论及参数优化
  • postgresql|数据库|只读用户的创建和删除(备忘)
  • Manus 框架与 COKE 框架解析及完整 Demo
  • 从走线到互连:优化高速信号路径设计的快速指南
  • wordpress 双语站点/提交链接
  • 淘宝如何建网站/百度推广账号登陆入口
  • wordpress官网登录/南昌seo管理
  • 如何做网站维护 找关键词/什么是市场营销
  • wordpress图像描述/南宁seo手段
  • 做网站一条龙/国内军事新闻最新消息