SQL 专项笔记

news2024/11/23 23:07:17

SQL语句分类

1.DDL 数据库定义语言 主要是用于来操作数据库 以及数据库表 关键字 alter drop create truncate

  1. DQL 数据库查询语言 主要是用于操作数据库表 主要用于查询数据库中的数据 关键字 select
  2. DML 数据库操纵语言 主要是用于操作数据库中数据表 主要是对数据进行 增加 insert 删除 delete 修改 update
  3. DCL 数据库控制语言 主要是用于对数据库的用户的管理 以及权限的管理 运维工程师操作 关键字为grant、revoke

单表查询

1.增删改

intsert into 表名(列名,列名..values(对应列名的数据,对应列名的数据..)

delete from 表名 where 条件 例(id=1#删除多行
delete from 表名 where id in (a,b,c)

update 表名 set 列名=值,列名=where 条件

2.查

select 列名 from 表名 where 条件

3.模糊查询
1. 模糊查询的关键字 like
2. 匹配的符号 % 匹配多个 _ 匹配一个

#查询第二个字为'想'的所有商品
SELECT * FROM product WHERE pname LIKE '_想%'

排序

order by 升序 asc 降序 desc

多个字段排序(未指定默认按升序(ASC)排列),直接在后面加字段就行,用逗号隔开

SELECT * FROM students st ORDER BY st.sAge DESC, st.sGrade DESC; //先按年龄降序,年龄相同再按年级降序

limit分页 查询第一条与第二条数据
SELECT * FROM product LIMIT 0,2 //第一页 每页显示两条数据

去重
SELECT DISTINCT price FROM product

分组
SELECT category_name ,COUNT(1) FROM product GROUP BY category_name
HAVING category_name IS NOT NULL

一般分组之后需要用取最大最小函数min(id),max(id),count(1)或者 limit 1 ,dinstinct来对每个组只取一条数据

聚合函数count()
COUNT(列名) 会统计 不包括null值的所有符合条件的字段的条数
COUNT( * )会统计 包括null值的所有符合条件的字段的条数
count(1)会统计 包括null值的所有符合条件的字段的条数
count(1) 的查询速度比COUNT( * )快

多表查询

select * from 表名 where 条件

直接英翻中 选择筛选 列名,列名… 从 表名,表名… 当 什么条件时
列名…就是显示的结果表的列名
表名 就是从哪张表中查询 ,如果表中没有相应列名就会报错,结果表显示不出来,子查询无连接表的功能
用where 时,表名… 中的多张表会连接起来,只要多张表有的列名都可以在结果表显示出来,不报错
连接表功能的语句还有 INNER JION 内连接
左连接 LEFT JOIN 表名 ON 条件 右连接 RIGHT JOIN 表名 ON 条件
子查询 IN() 就没有连接表的功能,只是通过逻辑连接的外键 在 from紧接的表名 中需要筛选的列进行提前筛选一次

A.一个子查询的结果当做另一查询语句条件使用 B.一个查询语句的结果当前另一个查询语
句的列或者表来使用

第一种体现
查询研发部门下所有的员工
SELECT * FROM emp e WHERE e.did
IN(SELECT d.did FROM dept d WHERE d.dname=“研发部门” )
第二种体现
查询出所有员工的信息 以及部门的名称
SELECT e.*,(SELECT d.dname FROM dept d WHERE d.did=e.did) AS dname FROM
emp e

where 字段名 not in (结果集) 即字段名不在这个结果集里,in 和not in 都是直接用,没有 is not in

select customers.name as 'Customers'
from customers
where customers.id not in
(
    select customerid from orders
);

作者:力扣 (LeetCode)
链接:https://leetcode.cn/problems/customers-who-never-order/solutions/3566/cong-bu-ding-gou-de-ke-hu-by-leetcode/
用左连接,右表id为null,即左表id  不在右表id结果集里
select c.Name as Customers 
from Customers as c
left join Orders as o on c.Id = o.CustomerId
where o.Id is null

笛卡尔积以及多表连接的原理

数据库的连接(内连接,外连接,笛卡尔积)
所用的表为student表和score表
在这里插入图片描述

在这里插入图片描述

  1. 内连接

1.1 自然连接
  自然连接只考虑属性相同的元组对。在本例中考虑的就是id,所以的到的结果如下

在这里插入图片描述

​ 1.2 等值连接
  内连接,又叫等值连接,顾名思义只有两张表中匹配的数据才会发生连接,即只保留相等的数据

select * from student inner join score on student.id =score.id
select * from student join score on student.id =score.id  -- MySQL的join默认为inner jion
/* 对应的where语句 */
select * from student,score where student.id =score.id

在这里插入图片描述

  1. 外连接
    2.1 左外连接
    以第一个关系为主,在第二个关系中找到满足条件的元素,并把他们连接起来,如果没有对应的元素,则在相应位置上的值为null

    select * from 左表 left或right join 右表 on  条件
    
    即只保留左表数据,横向扩充字段,将右表部分的数据添加过来,没有则填充null
    

在这里插入图片描述

2.2 右外连接
  和左外连接一样,右外连接找到满足条件的元素进行连接,不同的只是关系的位置而已,

​ select * from 左表 right join 右表 on 条件

​ 即只保留右表数据,横向扩充字段,将左表部分的数据添加过来,没有则填充null

在这里插入图片描述

2.3 全外连接
  全外连接是左外连接和右外连接的组合。简单说就是将左外连接和右外连接同时做多一次。做在mysql中没有全连接运算,但是根据全连接的定义,我们可以写成左外连接和右外连接组合起来。如下图所示

     左连接的结果集 和右连接的结果集,同时去重

在这里插入图片描述

  1. 笛卡尔积
    笛卡尔积原本是代数的概念,他的意思是对于两个不同的集合A,B。对于A中的每一个元素,都有对于在B中的所有元素做连接运算 。可以见得对于两个元组分别为m,n的表。笛卡尔积后得到的元组个数为m x n个元组。而对于mysql来说,默认的连接就是笛卡尔积连接。

左表所有数据都要连接右边所有数据,基本要杜绝这种情况,因为数据多了,笛卡尔积连接会造成更多数据,效率低
  
  如下图中,select * from 左表,右表
  在这里插入图片描述
参考原文链接:http://t.csdn.cn/IhfFM

null空值比较

带null的列无法与值做比较,需要先把null转为0,或者加上 or 字段名 is null这个条件
ifnull(referee_id,0),校验规则,如果是空就返回0,不是空就返回原值
!= 只能比较值,不能比较 null
<> 等于 !=

不能写 = null 要用 is null 或者 is not null

查找包含null 结果集可以用子查询 not in 相当于取补集

select name from customer
where id not in (select id from customer where referee_id=2)

<=>

<=> 只用于MySQL数据库(不推荐使用),相当于is 和 = 的两者兼顾,只用 =,不会得到值为null 的数据,用is 不能比较具体值

字段名 <=> 值 等价于 字段名 = 值 or 字段名 is null

字段名 <=> null 等价于 字段名 is null

not 字段名 <=> null 等价于 字段名 is not null

not 字段名 <=> 值 等价于 字段名 != 值 or 字段名 is null

SELECT name
FROM customer
WHERE NOT referee_id <=> 2;

unino 联合,连接子查询,union all

都是取结果的并集,unino 类似于where 后的or,但union 效率略高于or

1、union: 对两个结果集进行并集操作, 不包括重复行,相当于distinct, 同时进行默认规则的排序;会对获取的结果进行排序操作

2、union all: 对两个结果集进行并集操作, 包括重复行, 即所有的结果全部显示, 不管是不是重复;不会对获取的结果进行排序操作

例子

1、union看到结果中ID=3的只有一条

select * from student2 where id < 4

union

select * from student2 where id > 2 and id < 6

2、union all 结果中ID=3的结果有两个

select * from student2 where id < 4

union all

select * from student2 where id > 2 and id < 6

union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高

力扣小妙招:可以巧妙的先union,左连接或右连接 将数据结合起来,再进行筛选

union all 的去重和排序

select 
    employee_id 
from 
    (
    select employee_id from employees
    union all 
    select employee_id from salaries
) as t
group by 
    employee_id
having 
    count(employee_id) = 1
order by 
    employee_id;

作者:int_64
链接:https://leetcode.cn/problems/employees-with-missing-information/solutions/1373507/by-jam007-0731/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

union all 与全外连接不同,全外连接用了左连接 union 右连接, 数据表会横向扩充(左右连接),纵向扩充(union)并去重,

union all 不会去重和排序,但是通过

group by 
    employee_id
having 
    count(employee_id) = 1
order by 
    employee_id;
实现了去重排序,操作就是 
通过 employee_id 来分组,筛选出 分组后count(employee_id ) 相等的只有一个结果,在根据employee_id 升序排序

分组gruop by ,having 具体的效果与应用

例子

Employees 表和Salaries 表
在这里插入图片描述

union all 取并集后 即表 纵向添加数据

select employee_id from (select employee_id from employees union all select employee_id from salaries) as t

在这里插入图片描述

分组之后

select employee_id from (select employee_id from employees union all select employee_id from salaries) as t

group by employee_id

此时表重复的数据被聚合了,只显示不重复的

在这里插入图片描述

select employee_id,count(employee) as "该组的聚合数"from (select employee_id from employees union all select employee_id from salaries) as t

group by employee_id

使用group by 分组后,聚合函数就是对每个分组的结果集进行计算,未使用分组,聚合函数则是对所有结果集进行计算
在这里插入图片描述

select employee_id from (select employee_id from employees union all select employee_id from salaries) as t

group by employee_id

having count(employee_id) =1

having 即筛选条件,筛选出分组之后聚合数为1 的结果集

最后在加上order by employee_id 就是想要的结果了

在这里插入图片描述

聚合函数与分组 group的纠葛

  1. MySQL(5.7 ) 官方文档中给出的聚合函数列表(图片)如下:

在这里插入图片描述

  1. 总结

    1. 使用group by 分组后,聚合函数就是对每个分组的结果集进行计算,未使用分组,聚合函数则是对所有结果集进行计算

    2. 分组查询的结果相当于去重,但并没有删除数据

    3. sum(),avg(),min(),max()只能对数字类型的字段使用,count()则是所有类型的字段

    4. 使用HAVING对分组后的结果进行查询限定,限定的条件只能为聚合列,聚合列指的是在 SELECT 列 (SELECT list)中使用聚合函数产生的列,也可以是分组的列(group by 列名),要对非聚合列限定,需在分组前使用where 条件限定

    5. 使用group by 分组后,其最前面的SELECT 列 (SELECT 列名1,列名2) 只能是 分组的列(group by 列名)和使用聚合函数产生的列

    6. 使用group by 多个字段分组,结果是先根据第一字段分组,在对分组后的结果进行第二字段分组,如对国家和性别分组,对国家分组,有3条数据,之后再对国家分组里的性别分组,有3*2 条数据

      #对国家分组

      SELECT SUM(fee) AS country_group_total_fee, country FROM member GROUP BY country

      在这里插入图片描述

      #多分组字段分组,并统计每组个数

      SELECT SUM(fee) AS sex_and_country_group_total_fee, country, sex, COUNT(*) AS row_num FROM member GROUP BY country, sex

      结果如下:

      **在这里插入图片描述
      **

    7. 分组后可以使用order by 排序,可以使用limit 选取其中前几条数据

    参考原文链接:https://blog.csdn.net/weixin_39878760/article/details/113164130

distinct 去重

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZaEYawre-1670055629976)(SQL 专项笔记/d419c8907f0bb06ff2e9d50dbd1129cc.jpeg)]

单列去重

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n6MnrngI-1670055629977)(SQL 专项笔记/c51c97b14854606056354996c93c6047.jpeg)]

多列去重

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cmEyZAr0-1670055629978)(SQL 专项笔记/f46e4d0ca3a46531b5e32855172541fc.jpeg)]

distinct去重后使用count,是计算去重后结果的总数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yRKexXPc-1670055629979)(SQL 专项笔记/f85540bdb633460fdf1db12156c45c90.jpeg)]

与 distinct 相比 group by 可以显示更多的列,而 distinct 只能展示去重的列

distinct是取不同的值,通过对数据两两进行比较,最终去掉重复的值,单reduce执行,group by 是分组,多reduce执行
建议用group by

if函数和case when

if(条件表达式,结果一,结果二) as 字段名 ,相当于三目运算符 即这个字段名的值先通过条件表达式判断,为真,值就是结果一,假就是结果二

case when 条件表达式 then 结果一 else 结果二 end as 字段名

select employee_id, if(employee_id % 2 =1 and left(name,1) !='M',salary,0) as bonus from employees order by employee_id
其中 left(name,1) != 'M'  等价于 name not like 'M%'
employee_id % 2 =1 等价于 mod(employee_id, 2)=1 


select 
employee_id, 
case when employee_id % 2 = 1 and left(name, 1) <> 'M' then salary else 0 end as bonus 
from Employees 
order by employee_id asc;


多条件多情况可以用 多个union ,case when 表达式一 then 结果一 when 表达式二 then 结果二 else 结果三 end , if(表达式一,结果一,if(表达式二,结果二,结果三))

SELECT
    id AS `Id`,
    CASE
        WHEN tree.id = (SELECT atree.id FROM tree atree WHERE atree.p_id IS NULL)
          THEN 'Root'
        WHEN tree.id IN (SELECT atree.p_id FROM tree atree)
          THEN 'Inner'
        ELSE 'Leaf'
    END AS Type
FROM
    tree
ORDER BY `Id`
;


SELECT
    atree.id,
    IF(ISNULL(atree.p_id),
        'Root',
        IF(atree.id IN (SELECT p_id FROM tree), 'Inner','Leaf')) Type
FROM
    tree atree
ORDER BY atree.id


SELECT
    id, 'Root' AS Type
FROM
    tree
WHERE
    p_id IS NULL

UNION

SELECT
    id, 'Leaf' AS Type
FROM
    tree
WHERE
    id NOT IN (SELECT DISTINCT
            p_id
        FROM
            tree
        WHERE
            p_id IS NOT NULL)
        AND p_id IS NOT NULL

UNION

SELECT
    id, 'Inner' AS Type
FROM
    tree
WHERE
    id IN (SELECT DISTINCT
            p_id
        FROM
            tree
        WHERE
            p_id IS NOT NULL)
        AND p_id IS NOT NULL
ORDER BY id;

作者:力扣 (LeetCode)
链接:https://leetcode.cn/problems/tree-node/solutions/23160/shu-jie-dian-by-leetcode/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Limit 和offset

1、当 limit后面跟一个参数的时候,该参数表示要取的数据的数量

例如 select* from user limit 3 表示直接取前三条数据

2、当limit后面跟两个参数的时候,第一个数表示要跳过的数量,后一位表示要取的数量,例如

select * from user limit 1,3;

就是跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据

3、当 limit和offset组合使用的时候,limit后面只能有一个参数,表示要取的的数量,offset表示要跳过的数量 。

例如select * from user limit 3 offset 1;表示跳过1条数据,从第2条数据开始取,取3条数据,也就是取2,3,4三条数据

IFNULL(值,null) as 列名 ,若值不为空,则value 为值,为空则value 为null

截取字符串函数

left(name, 1),right(name,lenth(name)-1)

一般不会用到实际开发中,只是力扣,牛客这样的题目会需要,实际开发都会把一些具体操作在service层解决

行转列用case…when或if分类讨论, group by进行分组。 列转行用union或union all将多列的字段整合到一行。

行转列用groupby+sum/或max/min+if,列转行用union all

1、列转行
SELECT product_id, ‘store1’ store, store1 price FROM products WHERE store1 IS NOT NULL
UNION
SELECT product_id, ‘store2’ store, store2 price FROM products WHERE store2 IS NOT NULL
UNION
SELECT product_id, ‘store3’ store, store3 price FROM products WHERE store3 IS NOT NULL;

其中 select ’ 值’ (as) 列名1, 列名2 (as) 新列名2 from … 第一个as 是将值作为这个列名1 的所有值,第二个as 是将列明2 取别名为新列名2

单引号括起来的是值,双引号括起来的一般是中文字符串当作列名或者值,单引号和双引号区别不大,看所处位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NOYScaj6-1670055629980)(SQL 专项笔记/1658455815-YlCygp-原图.png)]

2、行转列

SELECT
product_id,
SUM(IF(store = ‘store1’, price, NULL)) ‘store1’,
SUM(IF(store = ‘store2’, price, NULL)) ‘store2’,
SUM(IF(store = ‘store3’, price, NULL)) ‘store3’
FROM
Products1
GROUP BY product_id ;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qMaJmyjC-1670055629982)(SQL 专项笔记/1658455824-fvVcVb-转换后.png)]

作者:Strive
链接:https://leetcode.cn/problems/rearrange-products-table/solutions/1688814/by-esqiimulme-pjiy/

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

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

相关文章

Sequence和Item

一、概述 sequence指的是uvm_sequence类&#xff0c;而item指的是uvm_sequence_item类。对于激励生成和场景控制&#xff0c;是由sequence来编织的&#xff0c;而对于激励所需要的具体数据和控制要求&#xff0c;则是从item的成员数据得到的。 二、Sequence Item介绍 item是基…

【前端设计】SDC中生成时钟create_generated_clock语法解析

我们的目标是┏ (゜ω゜)=☞芯片前端全栈工程师~喵! 前言 好久没有写前端设计系列的博客了,这次因为要在系统里加入时钟分频器因此复习一下sdc中关于生成时钟的约束语法,以下内容来自《综合与时序分析的设计约束》和一些自己的理解。 生成时钟 在sdc约束中,由端口输入的…

JavaScript -- 07. 面向对象编程

文章目录面向对象编程1 面向对象编程介绍2 类3 属性4 方法5 构造函数6 封装7 多态8 继承9 对象的内存结构10 原型10.1 原型链10.2 原型的作用&#xff1a;11 修改原型12 instanceof和hasOwn12.1 instanceof12.2 in12.3 hasOwnProperty12.4 hasOwn13 旧类14 new运算符面向对象编…

用上了mac才知道的一些事,献给Mac新手

以前电脑用windows&#xff0c;工作后刚用上mac&#xff0c;发现很多使用逻辑挺让人感觉新奇&#xff0c;甚至摸不着头脑,下面一一列举&#xff0c;帮助想要入手Mac的新手&#xff01; 1、鼠标滚轮的逻辑和Windows相反。 Mac上滚动鼠标控制页面上下滚动的逻辑和Windows刚好相…

使用 Learner Lab - 使用 S3 静态网页上传图片,搭配 API Gateway 与 Lambda

使用 Learner Lab - 使用 S3 静态网页上传图片&#xff0c;搭配 API Gateway 与 Lambda AWS Academy Learner Lab 是提供一个帐号让学生可以自行使用 AWS 的服务&#xff0c;让学生可以在 100 USD的金额下&#xff0c;自行练习所要使用的 AWS 服务&#xff0c;如何进入 Learne…

分割研究~~总结

搬来了基于实例分割的最新进展和发展历程&#xff0c;首先介绍了实例分割的基本逻辑,总结了目前主要研究方法及其原理和网络架构&#xff0c;对已发表的主流实例分割方法进行分析&#xff0c;最后对实例分割任务目前面临 的问题以及未来的发展趋势做出了分析,并针对所面临的问题…

磨金石教育插画干货分享|日本插画为什么独树一帜,那么受欢迎

插画的起源很早&#xff0c;在人类诞生文明的初级阶段&#xff0c;就有了岩画与壁画。在古典文明时代&#xff0c;中国印刷行业有了较大的发展&#xff0c;与之伴随的就是插画的长足发展。中国文化对日本起到了极大的影响。 在插画领域也是如此&#xff0c;客观的说&#xff0c…

CCF走进高校

CCF走进高校&#xff08;山东大学-人机专委&#xff09; 陶建华 人工智能与智能交互 人工智能的能力体系 感知智能&#xff1a;发展较快&#xff0c;人机交互场景运用较多&#xff1b; 认知智能&#xff1a;发展相对不成熟。 此外&#xff0c;专用智能领域发展较快&#xff0…

shell编程(一)

shell 简介 Shell 是一个用 C 语言编写的程序,一般我们说的shell编程&#xff0c;是指编写shell脚本。 Shell 负责完成用户与内核之间的交互&#xff08;shell是一个命令解释器&#xff0c;负责将用户的命令解析成操作系 统所能理解的指令&#xff09; 第一个shell脚本 创建…

Vue刷新后页面数据丢失问题的解决过程

在做vue项目的过程中有时候会遇到一个问题,就是进行F5页面刷新的时候,页面的数据会丢失,这篇文章主要给大家介绍了关于Vue刷新后页面数据丢失问题的解决过程,需要的朋友可以参考下&#xff01; 一、为什么刷新后数据会丢失 vuex存储的数据只是在页面中&#xff0c;相当于全局变…

[附源码]计算机毕业设计学习帮扶网站设计与实现Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Linux文件系统调用接口文件描述符的理解

&#x1f9f8;&#x1f9f8;&#x1f9f8;各位大佬大家好&#xff0c;我是猪皮兄弟&#x1f9f8;&#x1f9f8;&#x1f9f8; 文章目录一、对系统调用进行封装的理由二、文件的系统调用接口① openopen的选项--位图open的权限程序中设置umask权限掩码②close③write④read三、…

字节输入流【InputStream】(读文件)

字节输入流【InputStream】 java.io.InputStream 抽象类是表示字节输入流的所有类的超类&#xff0c;可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。 public void close(): 关闭此输入流并释放与此流相关联的任何系统资源。 public abstract int read(): …

Telegraf

Telegraf是什么&#xff1f; Telegraf 是 InfluxData 公司开源的一款十分流行的指标采集软件&#xff0c;可以从数据库、系统和物联网传感器收集和发送度量和事件&#xff0c;它用Go编写&#xff0c;编译成一个没有外部依赖的二进制文件–需要非常少的内存&#xff0c;相…

数仓建模理论(一)

学习目录一、关系建模与维度建模二、维度表和事实表&#xff08;重点&#xff09;三、事实表类型四、维度模型分类一、关系建模与维度建模 &#xff08;1&#xff09;关系建模 关系建模将复杂的数据抽象为两个概念——实体和关系&#xff0c;并使用规范化的方式表示出来。关系…

【计算机毕业设计】73.房屋租赁系统求租合同源码

一、系统截图&#xff08;需要演示视频可以私聊&#xff09; 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;房屋租赁系统当然也不能排除在外。房屋租赁系统是以实际…

Mybatis源码解析(八):插件机制

Mybatis源码系列文章 手写源码&#xff08;了解源码整体流程及重要组件&#xff09; Mybatis源码解析(一)&#xff1a;环境搭建 Mybatis源码解析(二)&#xff1a;全局配置文件的解析 Mybatis源码解析(三)&#xff1a;映射配置文件的解析 Mybatis源码解析(四)&#xff1a;s…

flex布局列表页(一行内容比较多,长度比较长)

一、Flex 布局是什么&#xff1f; Flex 是 Flexible Box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为 Flex 布局。 二、基本概念 采用 Flex 布局的元素&#xff0c;称为 Flex 容器&#xff08;flex co…

Java开发必须掌握的运维知识 (九)-- Docker容器监控信息可视化仪表:Grafana

一、Grafana 是用来干什么的&#xff1f; Grafana 是一个监控仪表系统&#xff0c;它是由 Grafana Labs 公司开源的的一个系统监测 (System Monitoring) 工具。它可以大大帮助你简化监控的复杂度&#xff0c;你只需要提供你需要监控的数据&#xff0c;它就可以帮你生成各种可视…

jdk11新特性——JShell交互性工具

目录一、jshell概述二、jshell位置三、jshell示例3.1、示例一&#xff08;声明变量并赋值&#xff09;3.2、示例二&#xff08;输出打印内容&#xff09;3.3、示例三&#xff08;帮助命令&#xff09;一、jshell概述 java9引入了jshell这个交互性工具&#xff0c;让Java也可以…