SQL Literature

SQL运行在资料库管理系统(Database Management System),如MySQL,Postgre SQL,Microsoft SQL Server, Oracle,etc。

SQL练习平台:https://sqliteviz.com/

EXAMPLE

SQL 语法

Basis

SELECT * FROM “students”;
  1. SELECT: 选取
  2. *: 全部
  3. FROM “students” : 从 students表格查询,表格名称需要用""来做标注。

限制columns属性

如果不需要全部的columns,只需要部分,那么可以单独说明需要哪些columns,如:

SELECT 姓名,班级,成绩 FROM “students”;

限制rows属性

  1. 限制rows的数目,如只需要看5行,i.e. 前1-5行
SELECT 姓名,班级,成绩 FROM “students” LIMIT 5;

若看完这前5行,想继续往后看之后的5行,i.e. 前6-10行

SELECT 姓名,班级,成绩 FROM “students” LIMIT 5 OFFSET 5;

OFFSET x像是将前x行屏蔽,再进行LIMIT y操作
因此,若是要看第11-15,OFFSET 10, LIMIT 5

SELECT 姓名,班级,成绩 FROM “students” LIMIT 5 OFFSET 10;

WHERE

文字比对

WHERE 是用来设定查询时的筛选条件
例如,在显示成绩时,只显示1年2班:

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 班级 = '1年2班'

或者,在显示成绩时,就不显示1年2班,(不等于<>)

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 班级 <> '1年2班'

ORDER BY

现在若是想要将同班的同学放在一起,可以使用ORDER BY,ORDER BY会针对一个column或多个columns进行排序。
单个column排序,e.g.

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 班级 <> '1年2班'
ORDER BY 班级

这样就可以使得将同班同学放在一起,以排序

多个columns排序,e.g.

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 班级 <> '1年2班'
ORDER BY 班级, 成绩;

这样就可以先按班级排序,再在班级内部按照成绩正序排序。

若是要按照成绩逆序排序,需要在成绩后添加DESC

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 班级 <> '1年2班'
ORDER BY 班级, 成绩DESC

单个人

现在只想查看某一个学生的信息:

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 姓名 = '张小婷'

但如若忘记该学生姓名,只记得部分,可以使用如下查询:
1.

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 姓名 LIKE '张%'

其中的“%”表示万用字元,表示单个或多个字元。如此系统会将所有张姓同学列出。 一定记得要将=改为LIKE!!!

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 姓名 LIKE '张_'

其中的“_”表示1个字元。如此系统会将所有张姓且名字只包含两个字的同学列出。

数字大小判断

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 成绩 >= 80 AND 成绩< 90;

或者

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 成绩 BETWEEN 80 AND 90;

AND 还可以更复杂的使用,如

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 成绩 BETWEEN 80 AND 90 AND (班级 = '1年1班' OR 班级 = '1年2班');

也可以使用 IN来简化

SELECT 姓名,班级,成绩 FROM “students”;
WHERE 成绩 BETWEEN 80 AND 90 AND (班级 in ('1年1班' OR '1年2班'));

利用函数对多笔资料进行汇总和计算

常见函数

  1. AVG 求平均值
  2. SUM 求和
  3. MAX 求最大值
  4. MIN 求最小值
  5. COUNT 计算数量

AVG

直接将Average函数套用在成绩column,查出所有同学的平均分数

SELECT AVG(成绩) FROM “students”;

PS.

  1. 可利用上述函数得到的值命名为新的值
SELECT AVG(成绩) AS 成绩平均, MAX(成绩) AS 最高分
FROM “students”;
  1. 对于所求值四舍五入
SELECT ROUND(AVG(成绩))
FROM “students”;

ROUND(AVG(成绩)) 四舍五入保留整数位
ROUND(AVG(成绩), 1) 四舍五入并保留小数1位

  1. 想分类的并不是全班同学的平均,而是各班的平均
SELECT ROUND(AVG(成绩))
FROM “students”;
GROUP BY 班级;
ORDER BY 成绩平均 DESC; //引入排序

注意,如果使用了GROUP BY分组后的资料,要使用WHERE筛选,需要改为HAVING

SELECT ROUND(AVG(成绩)) AS 平均分
FROM “students”;
GROUP BY 班级;
HAVING 平均分 >= 80;
ORDER BY 成绩平均 DESC; //引入排序

关键字还需要以一定顺序进行书写:
在这里插入图片描述

COUNT

  1. 计算整个表格的总行数
SELECT COUNT(*) 
FROM “students”;
  1. 计算表格中某个column的行数
SELECT COUNT(社团) 
FROM “students”;

数字不同是因为,COUNT在针对单一column进行计数时,会自动忽略null。

  1. COUNT 与DISTINCT 进行配合
    DISTINCT用于排除表格中重复的资料
SELECT COUNT(DISTINCT(社团)) 
FROM “students”;

此时,代码表示学校共有四种不同的社团。

SELECT DISTINCT(社团)
FROM “students”;

这样就能显示出不同社团的名字

UNION 联集

可以将两个搜索结果合并在一起。
先分别将连个部分结果选出,再在中间加入“UNIOIN”

SELECT `name` FROM `clubs`;
UNION
SELECT `name` FROM `student`;

还可以合并多个,使用多个UNIOIN。注意:使用UNIOIN,所涉及属性类别以及数目需要完全一致。

用SQL如何建立表格

首先创建资料库

创建和删除资料库

CREATE DATABASE sql_tutorial;
SHOW DATABASES; // show所有的资料库
DROP DATABASE sql_tutorial;

表格的创立

在某个资料库中,创建表格,可以用SQL来补齐表格的相关信息

USE sql_tutorial;
CREATE TABLE clubs(
社团编号 INT PRIMARY KEY,
社团名称 VARCHAR(15),
);

对于PRIMARY KEY有两种写法:

USE sql_tutorial;
CREATE TABLE clubs(
社团编号 INT,
社团名称 VARCHAR(15),
PRIMARY KEY (社团编号)
);

6种常见的属性(资料形态):

  1. INT: 整数
  2. DECIMAL(m,n): 表示浮点数,m表示一共有几个数字,n表示其中小数占几位。e.g. 2.33: DECIAML(3,2)
  3. VARCHAR(n): 字串,其中n表示最多能存放几个字元
  4. BLOB: Binary large object,用于存放图片,影像,档案等…
  5. DATE: 存放日期 ‘YYYY-MM-DD’
  6. TIMESTAMP: 记录具体时间精确到秒,格式’YYYY-MM-DD HH:MM:SS’

属性的限制:

CREATE TABLE clubs(	社团编号 INT PRIMARY KEY,社团名称 VARCHAR(10) NOT NULL
);
CREATE TABLE clubs(	社团编号 INT PRIMARY KEY,社团名称 VARCHAR(10) UNIQUE
);

对于属性的预设值:

CREATE TABLE clubs(	社团编号 INT PRIMARY KEY,社团名称 VARCHAR(10) DEFAULT `aaa`
);

如果要求编号递增,不想手写:

CREATE TABLE clubs(	社团编号 INT PRIMARY KEY AUTO_INCREMENT,社团名称 VARCHAR(10) DEFAULT `aaa`
);

创建表格流程:
1.创建CREATE 表格TABLE
2.在其中补充需要的column:如社团编号,社团名称
7. 并需要指定column储存的资料是什么类型,在这里INT表示整数,VARCHAR表示字符串,对于VARCHAR需要指出字数上限
8. 表格内需要指定一个column为 PRIMARY KEY(就像是身份证号,不可以重复!!也不可以是NULL)用于识别每一笔的资料,如这里指定社团编号为PRIMARY KEY。 可以设定多个PRIMARY KEY,例如不同销售人员对不同客户对应的销售额。
9. FOREIGN KEY (外键) 对应到另一张表格的PRIMARY KEY。

P.S. 如何删除表格,使用DROP

DROP TABLE clubs2;

创建完毕后检查表格

DESCRIBE clubs;

增删属性

增加一个属性

ALTER TABLE `student` ADD gpa DECIMAL(3,2);

增加FOREIGN KEY属性

ALTER TABLE `student` ADD FOREIGN KEY(`社团编号`) REFERENCES `branch`(`社团编号`) ON DELETE SET NULL;
ALTER TABLE `student` ADD FOREIGN KEY(`社团编号`) REFERENCES `branch` (`社团编号`) ON DELETE CASCADE;

删除属性

ALTER TABLE `student` DROP column gpa;

表格中资料存储

使用 INSERT INTO 表格名(需要插入资料的column标题)

INSERT INTO clubs (社团编号,社团名称)

现在开始输入资料,使用VALUE (),注意括号内的顺序必须要和表格的所有属性相互对应,对于字符串要用单或双引号。这里是按照创建表格时的属性顺序存储。

INSERT INTO clubs
VALUES (101, 'Guitar Club'), (102, 'Piano Clube');

也可以按照自定义属性顺序存储:

INSERT INTO clubs (社团名称,社团编号) VALUES ('Guitar Club', 101), ('Piano Clube', 102);

更新表格中的资料 UPDATE

注意,在更新表格时,要用WHERE说明更新哪一笔记录,若未设定会导致所有社团名称都UPDATE。

UPDATE clubs;
SET 社团名称 = 'Dance Club'
WHERE 社团编号 = 101;

同样,对于删除表格中某一笔记录

DELETE
FROM clubs;
WHERE 社团编号 = 101

SQL跨表格查询

SELECT students.姓名, students.社团, clubs.社团名称
FROM students //先引入1个表格
LEFT JOIN clubs //加入另一个表格
On students.社团 = clubs.社团编号
WHERE 班级 = '1年1班'

表格之间如何连接,此处是用students的社团连接上clubs的社团编号
在这里插入图片描述

  1. INNER JOIN
    只返回两个表中匹配的记录
  2. LEFT JOIN
    以左表为中心,返回左表的所有数据,即使右表中没有匹配;右表没有匹配时用 NULL 填充。
  3. RIGHT JOIN
    以右表为中心,返回右表的所有数据,即使左表中没有匹配。
  4. FULL JOIN
    返回两个表的所有记录,不匹配的部分用 NULL 填充。

Subquery

子查询 subquery 在一个查询语句中筛入另一个查询。
注意::一定要搞清楚 子查询返回的是什么内容!!

SELECT `name` FROM `employee`
WHERE `emp_id` = (SELECT `manager_id` FROM `branch`WHERE `branch_name` = '研发'
);
SELECT * FROM `works_with`;SELECT `name` FROM `employee`
WHERE `emp_id` IN (SELECT `emp_id` FROM `works_with`WHERE `total_sales` > 50000
);

ON DELETE

  1. ON DELETE SET NULL一旦对应的内容删掉,就设置为NULL
  2. ON DELETE CASCADE一旦对应的内容删掉,就删掉整笔资料

注意:有些删掉后对应的内容若是PRIMARY KEY则不可以用ON DELETE SET NULL

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL快速恢复数据的N种方案完全教程

目录 1. 理解MySQL数据恢复的核心逻辑 1.1 数据丢失的常见场景 1.2 MySQL的“救命稻草”:关键文件和机制 2. 方案一:利用全量备份+binlog实现点对点恢复 2.1 准备工作 2.2 恢复步骤 2.3 实战案例 3. 方案二:利用InnoDB的崩溃恢复机制 3.1 崩溃恢复的原理 3.2 恢复步…

双屏加固笔记本电脑C156-2:坚固与高效的完美融合

在当今数字化时代&#xff0c;笔记本电脑已成为人们工作和生活中不可或缺的工具。然而&#xff0c;对于一些特殊行业和恶劣环境下的应用场景&#xff0c;普通笔记本电脑往往难以满足需求。此时&#xff0c;具备坚固耐用、高性能等特点的加固笔记本电脑应运而生。鲁成伟业的双屏…

Jenkins 环境部署

下载相关软件&#xff1a;Jenkins 的安装和设置 相关工具&#xff1a; Git : Git - Downloads java 17: Java Archive Downloads - Java SE 17.0.12 and earlier python : Download Python | Python.org jenkins、jenkins.war : Jenkins 的安装和设置 将所有软件安装后&am…

如何高效解决 Java 内存泄漏问题方法论

目录 一、系统化的诊断与优化方法论 二、获取内存快照:内存泄漏的第一步 (一)自动生成 Heap Dump (二)手动生成 Heap Dump 三、导入分析工具:MAT 和 JProfiler (一)MAT (Memory Analyzer Tool) (二)JProfiler (三)自身企业工具 四、深入分析:逐步排查内存…

HarmonyOS Camera Kit 全解析:从基础拍摄到跨设备协同的实战指南

在移动应用开发中&#xff0c;相机功能往往是提升用户体验的关键模块&#xff0c;但传统相机开发面临权限管理复杂、设备兼容性差、功能实现繁琐等痛点。HarmonyOS 作为面向全场景的分布式操作系统&#xff0c;其 Camera Kit&#xff08;相机服务&#xff09;通过统一的 API 接…

运用词向量模型分辨评论

代码实现&#xff1a;import jieba import pandas as pd hp pd.read_table(优质评价.txt,encodinggbk) cp pd.read_table(差评1.txt,encodinggbk) cp_segments [] contents cp.content.values.tolist() for content in contents:results jieba.lcut(content)if len(result…

基于Apache Flink的实时数据处理架构设计与高可用性实战经验分享

基于Apache Flink的实时数据处理架构设计与高可用性实战经验分享 一、业务场景描述 在现代电商平台中&#xff0c;实时用户行为数据&#xff08;点击、浏览、购物车操作等&#xff09;对业务决策、个性化推荐和风控都至关重要。我们需要搭建一个高吞吐、低延迟且具备高可用性的…

第二十四天:虚函数与纯虚函数

虚函数&#xff08;Virtual Function&#xff09; 定义&#xff1a;在基类中使用 virtual 关键字声明的成员函数&#xff0c;允许在派生类中被重新定义&#xff08;覆盖&#xff0c;override&#xff09;。其目的是实现多态性&#xff0c;即通过基类指针或引用调用函数时&#…

uniapp微信小程序-登录页面验证码的实现(springboot+vue前后端分离)EasyCaptcha验证码 超详细

一、项目技术栈登录页面暂时涉及到的技术栈如下:前端 Vue2 Element UI Axios&#xff0c;后端 Spring Boot 2 MyBatis MySQL Redis EasyCaptcha JWT Maven后端使用IntelliJ IDEA 2024.3.5 前端使用 HBuilder X 和 微信开发者工具二、实现功能及效果图过期管理验证码有…

【Java】HashMap的详细介绍

目录 一.HashMap 1.基本概念 2.底层数据结构&#xff1a; 3.HashCode和equals方法 为什么重写HashCode方法&#xff1f; 为什么重新equals方法&#xff1f; 4.put操作 1.初始化和数组检查 2.计算索引并检查桶是否为空 3.桶不为null&#xff0c;处理哈希冲突 4.判断链…

nifi 增量处理组件

在Apache NiFi中&#xff0c;QueryDatabaseTable 是一个常用的处理器&#xff0c;主要用于从关系型数据库表中增量查询数据&#xff0c;特别适合需要定期抽取新增或更新数据的场景&#xff08;如数据同步、ETL流程&#xff09;。它的核心功能是通过跟踪指定列的最大值&#xff…

【数据可视化-90】2023 年城镇居民人均收入可视化分析:Python + pyecharts打造炫酷暗黑主题大屏

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

Multiverse模型:突破多任务处理和硬件效率瓶颈的AI创新(上)

随着人工智能技术的快速发展&#xff0c;多模态模型成为了当前研究的热点。多模态模型的核心思想是能够同时处理和理解来自不同模态&#xff08;如文本、图像、音频等&#xff09;的数据&#xff0c;从而为模型提供更加全面的语境理解和更强的泛化能力。 杨新宇&#xff0c;卡…

OpenCV 高斯模糊降噪

# 高斯模糊处理(降噪) # 参数1: 原始图像 # 参数2: 高斯核尺寸(宽,高&#xff0c;必须为正奇数) # 其他模糊方法: # - cv.blur(): 均值模糊 # - cv.medianBlur(): 中值模糊 # - cv.bilateralFilter(): 双边滤波 blur cv.GaussianBlur(img, (7,7), cv…

常见通信协议详解:TCP、UDP、HTTP/HTTPS、WebSocket 与 RPC

在现代网络通信中&#xff0c;各种协议扮演着至关重要的角色&#xff0c;它们决定了数据如何在网络中传输、控制其可靠性、实时性与适用场景。对于开发者而言&#xff0c;理解这些常见的通信协议&#xff0c;不仅有助于更好地设计系统架构&#xff0c;还能在面对不同业务需求时…

深入解析MPLS网络中的路由器角色

一、 MPLS概述&#xff1a;标签交换的艺术 在深入角色之前&#xff0c;我们首先要理解MPLS的核心思想。传统IP路由是逐跳进行的&#xff0c;每一台路由器都需要对数据包的目的IP地址进行复杂的路由表查找&#xff08;最长匹配原则&#xff09;&#xff0c;这在网络核心层会造成…

AI的拜师学艺,模型蒸馏技术

AI的拜师学艺&#xff0c;模型蒸馏技术什么是模型蒸馏&#xff0c;模型蒸馏是一种高效的模型压缩与知识转移方法&#xff0c;通过将大型教师模型的知识精炼至小型学生模型&#xff0c;让学生模型模仿教师模型的行为和内化其知识&#xff0c;在保持模型性能的同时降低资源消耗。…

Python爬虫从入门到精通(理论与实践)

目录 1. 爬虫的魅力:从好奇心到数据宝藏 1.1 爬虫的基本流程 1.2 准备你的工具箱 2. 第一个爬虫:抓取网页标题和链接 2.1 代码实战:用requests和BeautifulSoup 2.2 代码解析 2.3 遇到问题怎么办? 3. 进阶爬取:结构化数据抓取 3.1 分析网页结构 3.2 代码实战:抓取…

【DDIA】第三部分:衍生数据

1. 章节介绍 本章节是《设计数据密集型应用》的第三部分&#xff0c;聚焦于多数据系统集成问题。前两部分探讨了分布式数据库的基础内容&#xff0c;但假设应用仅用一种数据库&#xff0c;而现实中大型应用常需组合多种数据组件。本部分旨在研究不同数据系统集成时的问题&#…

Spring配置线程池开启异步任务

一、单纯使用Async注解。1、Async注解在使用时&#xff0c;如果不指定线程池的名称&#xff0c;则使用Spring默认的线程池&#xff0c;Spring默认的线程池为SimpleAsyncTaskExecutor。2、方法上一旦标记了这个Async注解&#xff0c;当其它线程调用这个方法时&#xff0c;就会开…