SQL 语句学习总结:

news2024/12/28 22:01:04

1. 四范式&&范式好处:

数据库范式是数据表设计的规范,在范式规范下,数据库里每个表存储的重复数据降到最少(这有助于数据的一致性维护),同时在数据库范式下,表和表之间不再有很强的数据耦合,可以独立的增长 (ie. 比如汽车引擎的增长和汽车的增长是完全独立的). 范式带来了很多好处,

1. 基本结构:

1. distinct 关键字:

select distinct col1, col2, col3 from table1 ;

要求distinct 只能放在列名的前面,且会修饰每一个语句中涉及的列,即,会要求 col1,col2,col3都是唯一的

2. limit offset 关键字:

可以不指定offset从哪里截取,默认从结果返回出截取,只指定截取多少个的limit值

limit 和 offset 搭配 :获得 第x个内容:

如果按片长排列,John Lasseter导演导过片长第3长的电影是哪部,列出名字即可 :

select title from movies
where director='John Lasseter'
order by Length_minutes desc
limit 1 offset 2

3. order by :

字符串也是有序的,按照升序排列

4. 字符串的模糊匹配使用的是 like :

select * from movies

where title like 'arch%' 

5. 在输出时不想要空值:

select distinct building from employees
where building != 'NULL'

5. 连表查询:

inner join :交集

想获得两个表中所有项 可以直接 : select * from XXX inner join YYY ON XXX.id = YYY.id

因为连表操作就是先会把所有列拼接在一起,并且对应的项如果不指定不会去除:

由于是left join 那么:会满足以下几个原则:(left join 是以主表为主)

【下图 未命名3 是主表;未命名2 是从表 ; 未命名是 返回结果】

(1)作为主表的内容即使与其他表不相匹配,也会把主表的内容留下来,不匹配的内容值值为NULL

(2)对于从表可以匹配的就按照要求匹配,匹配不上的就不会被返回了,如从表画×部分

6. 在查询中使用表达式并定义变量,在同一个语句中使用这个变量 【使用 as 关键字】

题目 :John Lasseter导演的每部电影每分钟值多少钱,告诉我最高的3个电影名和价值就可以

==》定义 val 变量,并在排序的时候直接使用

select title,(Domestic_sales+International_sales)/Length_minutes as val
from movies 
inner join boxoffice
on id = movie_id
where director = 'John Lasseter'
order by val desc
limit 3

8. 统计函数 :

 

9. 聚合函数(avg sum max min)的一些使用要求:

因为聚合函数通过作用于一组数据而只返回一个单个值:

因此,在SELECT语句中 : select  AA,BB,sum(CC) 中 的 AA和BB应该也是与sum(CC)对应的一个单个值  ==》sum(CC)由于可能被划分成m个组,因此会有m个sum(CC)的值,因此,AA和BB应该被划分后也是有m个,若AA或BB被划分后内容不是m个,那MySQL就会报错呀

==》因此,可以简记为select 中的 内容,要么为一个聚合函数的输入值,要么为GROUP BY语句的参数,否则会出错。(因为自从 mysql 5.7开始:ONLY_FULL_GROUP_BY 就默认打开 ,这个属性就要求了我们select内容要么是聚合值要么是group by 参数)

【注意】where语句中不可以使用聚合函数:

(where之所以不能使用聚合函数是因为 执行流程要求 先通过 where把数据范围确定下来,此时的数据表中条目具体是啥都没定下来,根本也不可能执行的了 聚合函数)

==》但 ,偏要使用聚合函数中的某些值怎么办? -- 用子查询:

如果想要:查询TEACHER表中年纪最大的教师的教工号、姓名、性别等信息。

需要用到子查询:

实例代码:

SELECT TNAME, DNAME, TSEX, SAL, AGE

FROM     TEACHER

WHERE   AGE=(SELECT MAX (AGE)  FROM   TEACHER)

10. select 作为输出内容可以执行一些计算处理:

例如  :

select count(*) as cnt ,building is not Null 
from table1

 

11. group by 和 where 和 having 的配合 :

已知:

① 执行顺序是:先where确定数据表内容,再group by 分组,最后根据 having 再次对输出进行处理,获得最终的结果

② `group by col ` 的含义:根据 col 属性的值来确定如何分组,假设col在where后的表中可以有5个取值(包括Null),那么,就会被分为 5个组

     `group by col1,col2` 的含义:根据col1,col2 实际在表中存在多少种不同的组合去分组

      ==》例如,col1可以取值11,12,14 ;col2可以取值 23,24,25,26 ;

     然鹅,在where后的表中存在 col1,col2取值为(11,23)(11,24)(11,25)(12,24)(14,25)(14,26),

     那么,根据col1,col2的group by 就只会将 表内容分为 6 组,而不是3*4=12 个分组

having 的出现是为了弥补 where中不允许使用 聚合函数 的缺陷 :

(where之所以不能使用聚合函数是因为 执行流程要求 先通过 where把数据范围确定下来,此时的数据表中条目具体是啥都没定下来,根本也不可能执行的了 聚合函数)

==》having 中也可以使用 非聚集函数,但是,如果having中使用非聚集函数,和 where中使用非聚集函数没有区别

例如:select count(*) where age >5 group by age

           等价于

           select count(*) group by age having age>5

【注意】【格式要求】:GROUP BY子句中的分组依据列必须是表中存在的列名,不能使用AS子句指派的结果集列的别名

11.优雅得分组展示各块内容:

注意 :各个分组方式的名字要被 ' ' 包括住

输出是:

12. 执行顺序

14. 建表,建索引,等操作:

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

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

相关文章

C语言——多文件编程

多文件编程 把函数声明放在头文件xxx.h中,在主函数中包含相应头文件在头文件对应的xxx.c中实现xxx.h声明的函数 防止头文件重复包含 当一个项目比较大时,往往都是分文件,这时候有可能不小心把同一个头文件 include 多次,或者头…

Python 潮流周刊#18:Flask、Streamlit、Polars 的学习教程

你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。标题取自其中三则分享,不代表全部内容都是该主题,特此声明。 本周刊由 Python猫 出品,精心筛选国内外的 250 信息源,为你挑选…

API接口接入电商平台案例,数据采集获取商品历史价格信息示例

商品历史价格接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取天猫商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、最低价、当前价格、价格信息等详细信息 。 获取商品历史价格接口API是一种用于获取电商平台上商品历…

2023腾讯全球数字生态大会预约报名入口

报名入口 2023腾讯全球数字生态大会即将开启,点击打开预约报名入口。 主题与介绍 主题 2023腾讯全球数字生态大会将聚焦产业未来发展新趋势,针对云计算、大数据、人工智能、安全、SaaS等核心数字化工具做关键进展发布,并联合生态伙伴推出最…

大数据助你预测精准营销客户转化率

在移动互联网时代,越来越多的传统产业已经开始乘坐完成华丽转身,营销数据分析方法:大数据预测精准营销客户转化率。汽车企业是典型的代表。虽然大多数汽车公司都建立了完整的用户数据库,但数据只是在服务器上。在当今人工智能和机器学习的世界…

原神剑冢三层封印怎么解开 原神剑冢三层封印在哪里打

在原神游戏中原神探索剑冢封印并解开三层封印,玩家可以去蒙德城接取一个隐藏任务,这项任务需要玩家去解开剑冢三层封印,才能完成任务。然而,许多玩家可能还不知道如何解开这个封印,今天小编为大家整理了一份详细的攻略…

【051】基于Vue、Springboot电商管理系统(含源码、详细论文、数据库)

基于Vue、Springboot、Mysql的前后端分离的电商管理系统,不仅功能完善,还有详细课设报告供查看,这不收藏起来,源码和论文获取见文末结尾 部分报告内容如下(省略图片) c 目录 1 引言 4 1.…

luckfox pico 使用记录

连接 使用USB转TTL 连接 USB 也要一起插上 在显示控制台窗口上会显示板子的IP地址 USB接上后 会在网络和共享中心发现 以太网2(通过RNDIS 通过USB 将板当网卡用,但使用网络共享,无法ping 通外部网) 可以不关闭防火墙(WIN10 6…

C++/C:pass-by-value(值传递)与pass-by-reference(引用传递)

一、C的引用(reference) 1.1、引用的概念 c中新增了引用(reference)的概念,引用可以作为一个已定义变量的别名。 Declares a named variable as a reference, that is, an alias to an already-existing object or f…

vulnhub靶机EvilBox---One

靶机地址:EvilBox: One ~ VulnHub 主机发现 arp-scan -l 端口扫描 nmap --min-rate 10000 -p- 192.168.21.153 扫描端口信息 nmap -sV -sT -O -p22,80 192.168.21.153 漏洞扫描 nmap --scriptvuln -p22,80 192.168.21.153 访问网站 再去看看robots.txt 之前扫描…

GoT:用大语言模型解决复杂的问题

GoT:用大语言模型解决复杂的问题 摘要介绍背景和符号表示语言模型和上下文学习Input-Output(IO)Chain of thought(CoT)Multiple CoTTree of thoughts(ToT) GoT框架推理过程思维变换聚合变换&…

数据结构-第一期——数组(Python)

目录 00、前言: 01、一维数组 一维数组的定义和初始化 一维变长数组 一维正向遍历 一维反向遍历 一维数组的区间操作 竞赛小技巧:不用从a[0]开始,从a[1]开始 蓝桥杯真题练习1 读入一维数组 例题一 例题二​ 例题三 实战训…

清理docker镜像方法

首先stop ps -a里的容器,然后rm容器,最后再rmi镜像 先停止容器 rm容器 docker rmi 镜像 删除后可以发现已经不存在

(数字图像处理MATLAB+Python)第十一章图像描述与分析-第五、六节:边界描述和矩描述

文章目录 一:边界描述(1)边界链码A:概述B:边界链码改进C:程序 (2)傅里叶描绘子A:概述B:程序 二:矩描述(1)矩A:…

软件测试Day5|软件测试理论03

白盒测试方法 针对程序的代码进行测试,代码覆盖率高;缺点:覆盖所有代码路径大、业务功能可能覆盖不全、测试开销大 静态方法:1)桌面检查(一个人检查);2)代码审查&#…

音频——硬件拓扑

文章目录 硬件拓扑I2S 数据通路五线模式四线模式两线 TX两线 RX 典型应用硬件连接数据流 硬件拓扑 控制路径:UART/I2C/SPI数据路径:I2S 简略图如下 I2S 数据通路 五线模式 四线模式 两线 TX 两线 RX 典型应用 硬件连接 控制信号:SPI 用…

网络通讯接收组播异常问题技术分析报告

1、问题概述 2023年8月24日,深夜约22:10分,内部网络E5刀片上运行的组播接收软件未收到目的地址是230.1.6.4的航迹组播报文,利用交换机Web页面查看交换机组播表项,发现E5刀片连接的交换机29端口没有任何组播表项。重新运行组播接收…

每日一题 2511. 最多可以摧毁的敌人城堡数目

难度:简单 翻译:寻找距离最远的 1 和 -1 的组合,要求它们之间只有0 class Solution:def captureForts(self, forts: List[int]) -> int:res, t 0, -1for i, fort in enumerate(forts):if fort -1 or fort 1:if t > 0 and fort ! f…

687. 最长同值路径

687. 最长同值路径 C代码:DFS int res; // int res 0; 这种初始化有问题int dfs(struct TreeNode* root, int val) {if (root NULL) {return 0;}int left dfs(root->left, root->val);int right dfs(root->right, root->val);res fmax(res, lef…

【STM32】学习笔记(TIM定时器)

TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且…