MySql笔记

MySql笔记

01 基础

学习的是YouTube上面的一个up主,B站也有同步课程,有兴趣可以关注一下,视频讲的更加详细。
YouTube链接:https://www.youtube.com/channel/UCRCqgMdsAHK3yfvW4en6JpA

基础知识

  • Database中包含多个相关的table,每个Table中有行和列。
  • Table中包含Primary Key(主键)和Foreign Key(外键)。主键是独一无二的,并且是有唯一存在的,不可以重复或空。给一个主键,可以找出一条独一无二的记录。 主键可以不止有一个信息。
  • 主键是唯一的,用于标识一张表。外键可以有多个,用于建立表和表的关系。

在这里插入图片描述

之后会用到的示例数据库:

在这里插入图片描述

SELECT&FROM

语法:

SELECT * FROM table_name; --选择所有列(*为通配符)

SELECT column_name1,column_name2 FROM table_name;  --选择两列

SELECT DISTINCT column_name FROM table_name; --提取出该列独一无二的数值,去除重复

SELECT column_name  FROM table_name LIMIT 5 OFFSET 4  --检索五行,从第四行开始(不包含第4行)

语句结束之后要加分号:

WHERE&AND

  • 数据库中很少需要检索所有行,通常只会根据指定操作或报告的需要提取表数据的子集。只检索所需要的条件需要指定搜索条件(过滤条件)。

  • 可以使用的操作符有:“=”、“<>” “ !=” “ <” “>” “BETWEEN” “Like” “IN” “IS NULL”等

例:

SELECT * FROM Employee WHERE Salay>70000 AND Salary<85000;--检索工资大于70000且小于85000的行

SELECT * FROM Employee WHERE Salarry IN (70000,85000);-- 检索工资为70000或者85000的行

SELECT * FROM Employee WHERE Name LIKE%an%;  --检索名字中包含an的行

LIKE后面需要写单引号

GROUP BY

SELECT DepartmentID,COUNT(Name) FROM Employee GROUP BY DepartmentId; 
--COUNT是按照GROUP BY计数的,并不是按照COUNT内的计数,但是输出的列名会是COUNT(Name),也可以对这列重新命名,语句如下:

SELECT DepartmentID,COUNT(Name) AS Number_Empolyee FROM Employee GROUP BY DepartmentId;
--AS 后面跟的是重命名之后的名字,也可以跟其他函数,比如

SELECT DepartmentID,COUNT(Salary) AS Total,MIN(Salary) AS MinSalary,Max(Salary) AS MaxSalary FROM Employee GROUP BY DepartmentId;

HAVING &ORDER BY

  • HAVING 一定要和GROUP BY一起用,一定要在分好组的基础上用。
SELECT DepartmentID FROM Employee GROUP BY DepartmentId HAVING COUNT(*) >3;  
-- 按照DepartmentID,并且选择数量大于3个的。

SELECT Name,Salary,DepartmentId FROM Employee ORDER BY Salary,DepartmentId;  
--从小到大排序,根据Salary排序,如果Salary重复或相等,则按照DepartmentId排序。

SELECT Name,Salary,DepartmentId FROM Employee ORDER BY Salary DESC; 
--降序排(默认是升序)

CASE WHEN

基本用法:

CASE input_expression
    WHEN when_expression THEN result_expression
        [ ...n ]
    [ 
        ELSE else_result_expression
    END

注意事项:

  • Case函数只返回第一个符合条件的值,剩下的Case部分将会被自动忽略。(CASE WHEN里面的一个)

02 提高篇

表之间的连接方式:
在这里插入图片描述
所有内容都是基于以下表:

在这里插入图片描述

INNER JOIN

  • 返回两个table同时存在的内容。可以理解为求一下并集(满足条件的)
  • FROM Left_table_Name INNER JOIN Right_Table_Name

示例语句:

SELECT Employee.Id AS Id,Employee.Name AS Name,Employee.Salary AS Salary,Employee.DepartmentId AS DepartmentId,Department.Name AS DepartmentName FROM Employee INNER JOIN Department ON Employee.DepartmentId = Department.Id;
--ON后面跟的是条件,选取符合条件的,然后内连接。

执行之后的结果为:
在这里插入图片描述

LEFT JOIN

  • LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行,没有输出为空(<N/A>)。
  • 用法:SELECT column_name(s) FROM table_name1
    LEFT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

示例:

SELECT Employee.Id AS Id,Employee.Name AS Name,Employee.Salary AS Salary,Employee.DepartmentId AS DepartmentId,Department.Name AS DepartmentName FROM Employee LEFT JOIN Department ON Employee.DepartmentId = Department.Id;

返回结果:

在这里插入图片描述

需要注意的点:在写SELECT时,后面要写成table.column,而不是直接写列的名字。比较好的习惯是利用AS重命名一下列名。

RIGHT JOIN & OUTER JOIN

RIGHT JOIN

  • RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。
  • 关键字用法:
    SELECT column_name(s) FROM table_name1 RIGHT JOIN table_name2 ON table_name1.column_name=table_name2.column_name

示例:

SELECT Employee.Id AS Id,Employee.Name AS Name,Employee.Salary AS Salary,Employee.DepartmentId AS DepartmentId,Department.Name AS DepartmentName FROM Employee RIGHT JOIN Department ON Employee.DepartmentId = Department.Id;

输出结果:

在这里插入图片描述

OUTER JOIN

  • 把所有的内容都保留,与INNER JOIN相反

UNION

  • UNION 操作符用于合并两个或多个 SELECT 语句的结果集。UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
  • UNION 命令只会选取不同的值,如果有重复值只会选出来一个。
  • UNION ALL 命令和 UNION 命令几乎是等效的,不过 UNION ALL 命令会列出所有的值。

示例:

在这里插入图片描述

SELECT title as Position,Name,Salary FROM professor UNION SELECT title as Position,Name,Salary FROM RTA;

结果:

在这里插入图片描述

注意:

注意UNION 和 UNION ALL的区别;
列的顺序和数量要一样;

UNION与JOIN的区别

  • join 是两张表做交连后里面条件相同的部分记录产生一个记录集。SELECT 后的FROM的内容连接,通常用
  • union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集 。两个SELECT语句得到的结果连接,添加行。
  • UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

补充

UPDATE 函数

Update 语句用于修改表中的数据。
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值

LIMIT

LIMIT是指从某条数据之后,取出n条数据,一般有两种用法:

LIMIT a,b # 从a+1开始取b条数据

LIMIT a # 直接取a条数据(相当于省略了0)

开窗函数

开窗的定义:
窗口就是一个字段的数据范围。有了窗口,实际上我们可以在一个细粒度上的结果集上,进行分组。让后再对分组中的值进行 sum 、avg、count、first_value、last_value、lag、lead、row_number、dense_rank、rank 等操作。所以分组不仅仅是 group by 的专属,开窗函数也可以的。

窗口
开窗函数在聚合函数后增加了一个OVER 关键字。开窗函数的调用格式为:

函数名() OVER(选项)
# 举例
sum(amt) over(partition by year_mon)
#窗口的定义就是 over 里面的内容了,partition 从单词语义上解释是分区的意思,其实就是分组。
#partition by 就是根据哪个字段作为分组。
#根据 year_mon 分组,并且把每个窗口里面的字段 amt 进行求和操作。

OVER关键字表示把函数当成开窗函数而不是聚合函数。SQL标准允许将所有聚合函数用做开窗函数,使用OVER 关键字来区分这两种用法。

开窗函数中可以在OVER关键字后的选项中使用ORDER BY子句来指定排序规则,而且有的开窗函数还要求必须指定排序规则。使用ORDER BY子句可以对结果集按照指定的排序规则进行排序,并且在一个指定的范围内进行聚合运算。

ORDER BY 字段名 RANGE|ROWS BETWEEN 边界规则1 AND 边界规则2

# RANGE表示按照值的范围进行范围的定义,而ROWS表示按照行的范围进行范围的定义;

可取:
在这里插入图片描述
例如:

select fname,
       fcity,
       fage,
       fsalary,
       sum(fsalary) over(order by fsalary rows between unbounded preceding and current row) 到当前行工资求和
  from t_person

# range
select fname,
       fcity,
       fage,
       fsalary,
       sum(fsalary) over(order by fsalary range between unbounded preceding and current row) 到当前行工资求和
  from t_person

求和结果1 ROWS
结果2

  • 这里的开窗函数“SUM(FSalary) OVER(ORDER BY FSalary ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)”表示按照FSalary进行排序,然后计算从第一行(UNBOUNDED PRECEDING)到当前行(CURRENT ROW)的和,这样的计算结果就是按照工资进行排序的工资值的累积和。

  • RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW”是开窗函数中最常使用的定位框架,为了简化使用,如果使用的是这种定位框架,则可以省略定位框架声明部分

  • 这个SQL语句与例1中的SQL语句唯一不同的就是“ROWS”被替换成了“RANGE”。“ROWS”
    是按照行数进行范围定位的,而“RANGE”则是按照值范围进行定位的,这两个不同的定位方式
    主要用来处理并列排序的情况。比如 Lily、Swing、Bill这三个人的工资都是2000元,如果按照
    “ROWS”进行范围定位,则计算从第一条到当前行的累积和,而如果 如果按照 “RANGE”进行
    范围定位,则仍然计算从第一条到当前行的累积和,不过由于等于2000元的工资有三个人,所
    以计算的累积和为从第一条到2000元工资的人员结,所以对 Lily、Swing、Bill这三个人进行开
    窗函数聚合计算的时候得到的都是7000( “ 1000+2000+2000+2000 ”)

  • partition by 和order by可以一起使用

rank(),dense_rank(),row_number()
  • dence_rank在并列关系是,相关等级不会跳过。rank则跳过
  • rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
  • dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。
  • row_number() 【语法】ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)
    【功能】表示根据COL1分组,在分组内部根据 COL2排序,而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)
    row_number() 返回的主要是“行”的信息,并没有排名

聚合函数

聚合函数,是对一组值进行计算并且返回单一值的函数:sum—求和,count—计数,max—最大值,avg—平均值等

WHERE 和 HAVING的区别

从整体声明的角度来理解:

Where是一个约束声明,在查询数据库的结果返回之前对数据库中的查询条件进行约束,即在结果返回之前起作用,且where后面不能使用聚合函数

Having是一个过滤声明,所谓过滤是在查询数据库的结果返回之后进行过滤,即在结果返回之后起作用,并且having后面可以使用聚合函数。

从使用的角度来看:

where后面之所以不能使用聚合函数是因为where的执行顺序在聚合函数之前;

having一般跟在group by之后,执行记录组选择的一部分来工作的。where则是执行所有数据来工作的。

不同的连接方式

INNER JOIN:如果表中有至少一个匹配,则返回行(可以理解为求并集)

LEFT JOIN:即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN:即使左表中没有匹配,也从右表返回所有的行

FULL JOIN:只要其中一个表中存在匹配,则返回行

SQL语句的内部执行顺序

(1)from

(3) join

(2) on

(4) where

(5)group by(开始使用select中的别名,后面的语句中都可以使用)

(6) avg,sum…

(7)having

(8) select

(9) distinct

(10) order by

在当今数字化教育蓬勃发展的背景下,校园网络作为教学与科研的关键基础设施,其重要性日益凸显。本文旨在探讨小型校园网络的规划与设计,以满足网络实验教学的需求,为相关专业师生提供一个高效、稳定且功能完备的网络实验环境,助力教学活动顺利开展,提升学生的实践能力和创新思维。 网络实验教学要求校园网络具备高度的灵活性与可扩展性。学生需在实验过程中模拟各种网络拓扑结构、配置不同网络设备参数,这就要求网络能够快速调整资源分配,适应多样化的实验场景。同时,为保证实验数据的准确性和实验过程的稳定性,网络的高可靠性与低延迟特性不可或缺。此外,考虑到校园内多用户同时接入的场景,网络还需具备良好的并发处理能力,确保每位用户都能流畅地进行实验操作。 采用层次化结构构建小型校园网络,分为核心层、汇聚层与接入层。核心层选用高性能交换机,负责高速数据转发与关键路由决策,保障网络主干的稳定运行;汇聚层连接不同教学区域,实现数据的汇聚与初步处理,通过划分虚拟局域网(VLAN)对不同专业或班级的实验流量进行隔离,避免相互干扰;接入层则直接连接学生终端设备,提供充足的接入端口,满足大量用户同时接入的需求,并通过端口安全策略限制非法设备接入,保障网络安全。 在设备选型上,核心层交换机需具备高吞吐量、低延迟以及丰富的路由协议支持能力,以满足复杂网络流量的转发需求;汇聚层交换机则注重VLAN划分与管理功能,以及对链路聚合的支持,提升网络的可靠性和带宽利用率;接入层交换机则需具备高密度端口、灵活的端口配置以及完善的用户认证功能。配置方面,通过静态路由与动态路由协议相结合的方式,确保网络路径的最优选择;在汇聚层与接入层设备上启用VLAN Trunk技术,实现不同VLAN间的数据交换;同时,利用网络管理软件对设备进行集中监控与管理,实时掌握网络运行状态,及时发现并解决潜在问题。 网络安全是校园网络规划的关键环节。在接入层设置严
管理后台HTML页面是Web开发中一种常见的实践,主要用于构建企业或组织内部的管理界面,具备数据监控、用户管理、内容编辑等功能。本文将探讨一套美观易用的二级菜单目录设计,帮助开发者创建高效且直观的后台管理系统。 HTML5:作为超文本标记语言的最新版本,HTML5增强了网页的互动性和可访问性,提供了更多语义元素,如<header>、<nav>、<section>、<article>等,有助于清晰地定义网页结构。在管理后台中,HTML5可用于构建页面布局,划分功能区域,并集成多媒体内容,如图像、音频和视频。 界面设计:良好的管理后台界面应具备清晰的导航、一致的布局和易于理解的图标。二级菜单目录设计能够有效组织信息,主菜单涵盖大类功能,次级菜单则提供更具体的操作选项,通过展开和折叠实现层次感,降低用户认知负担。 CSS:CSS是用于控制网页外观和布局的语言,可对HTML元素进行样式设置,包括颜色、字体、布局等。在管理后台中,CSS能够实现响应式设计,使页面在不同设备上具有良好的显示效果。借助CSS预处理器(如Sass或Less),可以编写更高效、模块化的样式代码,便于维护。 文件结构: guanli.html:可能是管理页面的主入口,包含后台的主要功能和布局。 xitong.html:可能是系统设置或配置页面,用于管理员调整系统参数。 denglu.html:登录页面,通常包含用户名和密码输入框、登录按钮,以及注册或忘记密码的链接。 image文件夹:存放页面使用的图片资源,如图标、背景图等。 css文件夹:包含后台系统的样式文件,如全局样式表style.css或按模块划分的样式文件。 响应式设计:在移动设备普及的背景下,管理后台需要支持多种屏幕尺寸。通过媒体查询(Media Queries)和流式布局(Fluid Grids),可以确保后台在桌面、平板和手机上都能良好展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值