数据库系统概论(个人笔记)(第三部分)

news2024/11/17 3:26:56

数据库系统概论(个人笔记)

文章目录

  • 数据库系统概论(个人笔记)
  • 3、SQL介绍
    • 3.1 SQL查询语言概述
    • 3.2 SQL数据定义
    • 3.3 SQL查询的基本查询结构
    • 3.4 其他基本操作
    • 3.5 设置操作
    • 3.6 空值
    • 3.7 聚合函数
    • 3.8 嵌套子查询
    • 3.9 数据库的修改

3、SQL介绍


3.1 SQL查询语言概述

Qveriew of The SQL Query Language


History

IBM Sequel 语言是在 IBM 圣何塞研究实验室开发的 System R 项目的一部分。

重命名为结构化查询语言(SQL)

ANSI 和 ISO 标准 SQL:

  • SQL数据库
  • SQL-89
  • SQL-92
  • SQL:1999(语言名称符合2000年要求!)
  • SQL数据库:2003年

商业系统提供了大部分(如果不是全部的话)SQL-92特性,以及来自后来标准的各种特性集和特殊的专有特性。

  • 并非这里的所有示例都适用于您的特定系统。

SQL Parts

DDL 数据库定义语言——提供用于定义关系模式、删除关系和修改关系式的命令。

DML数据操作语言——提供从数据库查询信息、向数据库中插入元组、从数据库中删除元组以及修改元组的能力。

Integrity 完整性——DDL包括用于指定完整性约束的命令。

View definition 视图定义——DDL包括用于定义视图的命令。

Transaction control 事务控制——包括指定事务的开始和结束的命令。

Embedded SQL and dynamic SQL 嵌入式SQL和动态SQL——定义如何将SQL语句嵌入到通用编程语言中。

Authorization 授权——包括用于指定对关系与视图得访问权限得命令。


3.2 SQL数据定义

SQL Data Definition


Data Definition Language

SQL 数据定义语言(DDL)允许指定有关关系的信息,包括:

  • 每个关系的模式。
  • 与每个属性相关联的值的类型。
  • 完整性约束
  • 要为每个关系维护的索引集。
  • 每个关系的安全性和授权信息。
  • 每个关系在磁盘上的物理存储结构。

Domain Types in SQL

SQL中的域类型
char(n).固定长度的字符串,用户指定长度为n
varchar(n).可变长度字符串,具有用户指定的最大长度n
int.整数(与机器相关的整数的有限子集)
smallint.小整数(依赖于计算机的整数域类型的子集)
numeric(p,d).定点数,用户指定精度为p位数,小数点右侧为d位数。(例如,数字(3,1)允许44.5精确地存储,但不允许444.5或0.32)
real, double precision.浮点数和双精度浮点数,具有与机器相关的精度
float(n).浮点数,用户指定的精度至少为n位
更多内容将在第四章介绍

Create Table Construct

SQL关系是使用 create table 命令定义的:

在这里插入图片描述


Integrity Constraints in Create Table

完整性约束的类型

在这里插入图片描述

SQL阻止任何违反完整性约束的数据库更新。

在这里插入图片描述


And a Few More Relation Definitions

在这里插入图片描述


And more still

在这里插入图片描述


Updates to tables

Insert

insert into instructor values('10211', 'Smith', 'Biology', 66000);

Delete

  • 移除 student 关系里的所有元组
delete from student  

Drop Table

drop table r

Alter

  • alter table r add A D
    
    • 其中A是要添加到关系r中的属性的名称,D是A的域。
    • 关系中所有现有的元组都被指定为null作为新属性的值。
  • alter table r drop A
    
    • 其中A是关系r的属性名
    • 删除许多数据库不支持的属性。

3.3 SQL查询的基本查询结构

Basic Query Struction of SQL Queries


Basic Query Structure

一个典型的SQL查询有这样的表单:

在这里插入图片描述

等价于关系代数表达式:
∏ A 1 , A 2 , … , A n ( σ P ( r 1 × r 2 × … × r m ) ) ∏_{A_1,A_2,…, A_n}(σ_P(r_1× r_2×…×r_m)) A1,A2,,An(σP(r1×r2××rm))
SQL查询的结果是一个关系。


The select Clause

select 子句列出查询结果中所需的属性

  • 对应于关系代数的投影运算

Example:查找所有 instructors 的名字:

select name from instructor

NOTE:SQL名称不区分大小写(即,您可以使用大写字母或小写字母)

  • 例如,Name ≡ NAME ≡ name
  • 有些人在我们用粗体的地方用大写(上面的紫色字体)。

SQL 允许关系和查询结果中的重复。

若要强制删除重复项,请在 select 后插入关键字 distinct

查找所有 instructors 的 department names,并删除重复的名称:

select distinct dept_name from instructor

关键字 all 指定不应删除重复项:

select all dept_name from instructor

select 子句中的星号 asterisk 表示“所有属性”:

select * from instructor

属性可以是不带 from 子句的文字:

select '437'
  • Results是一个包含一列和一行值为“437”的表。

  • 可以给列一个名称,使用:

  • select '437' as FOO
    

属性可以是**带有 from **子句的文字:

select 'A' from instructor
  • 结果是一个包含一列和N行(instructors 表中的元组数量)的表,每行的值为“A”。

select 子句可以包含算术表达式,包括操作+、-、*和/,以及对元组的常量或属性进行操作:

select ID,name,salary/12 from instructor
  • 查询将返回一个与教员关系相同的关系,只是属性salary的值除以12。

  • 可以使用as子句重命名“salary/12”:

  • select ID,name,salary/12 as monthly_salary
    

The where Clause

where 子句指定结果必须满足的条件

  • 对应于关系代数的选择谓词。

为了寻找 Comp.Sci.dept 里所有的 instructors:

select name from instructor where dept_name = 'Comp.Sci.'

SQL 允许使用逻辑连接词andornot

逻辑连接符的操作数可以是包含比较操作符<、<=、>、>=、=和<>的表达式

比较可以应用于算术表达式的结果

为了寻找 Comp.Sci.dept 里且 salary > 70000 所有的 instructors:

select name from instructor where dept_name = 'Comp.Sci.' and salary > 70000

The from Clause

from 子句列出查询中涉及的关系

  • 对应于关系代数中的笛卡尔积运算。

寻找 instructor × teaches 的所有的笛卡尔积:

select * from instructor, teaches
  • 生成所有可能的教师-教学对,并包含双方关系的所有属性。
  • 对于公共属性(例如,ID),结果表中的属性使用关系名称(例如,instructor.ID)进行重命名。

笛卡尔积不是很直接有用,但与where子句条件(关系代数中的选择操作)结合使用很有用。


Examples

查找教过某门课程的所有教员的姓名和course_id

  • select name, course_id from instructor, teaches where instructor.ID = teaches.ID
    

查找艺术系所有教过某门课程的教师的姓名和course_id

  • select name, course_id 
    from instructor, teaches 
    where instructor.ID = teaches.ID and instructor.dept_name = 'Art'
    

3.4 其他基本操作

Additional Basic Operations


The Rename Operation

SQL允许使用 as 子句重命名关系和属性:

old-name as new-name

在“Comp. Sci”中找到所有薪水比某个教员高的教员的名字:

  • select distinct T.name 
    from instructor as T, instructor as S 
    where T.salary > S.salary and S.dept_name = 'Comp.Sci.'
    

关键字 as 是可选的,可以省略:

instructor as T ≡ instructor T

String Operations

SQL包含一个字符串匹配运算符,用于对字符串进行比较。操作符 like 使用使用两个特殊字符描述的模式:

  • 百分比(%) %字符匹配任何子字符串。
  • 下划线( _ ) _ 字符匹配任何字符。

查找名称中包含子字符串“dar”的所有教员的名称:

  • select name from instructor where name like '%dar%'
    

匹配字符串" 100% ":

like '100\%' escape '\'

在上面的代码中,我们使用反斜杠(\)作为转义字符。

模式区分大小写。

模式匹配示例:

  • 'Intro%'匹配任何以’Intro '开头的字符串。
  • '%Comp%'匹配任何包含" Comp "作为子字符串的字符串。
  • ‘_ _ _’ 匹配任何恰好三个字符的字符串。
  • '_ _ _ %'匹配任何至少三个字符的字符串。

SQL支持各种字符串操作,例如:

  • 串联(使用" || ")
  • 从大写到小写的转换(反之亦然)
  • 查找字符串长度,提取子字符串等

Ordering the Display of Tuples

请按字母顺序列出所有教员的姓名:

select distinct name from instructor order by name

我们可以为每个属性指定 desc 表示降序,asc 表示升序;升序是默认的:

  • Example:

    order by name desc
    

可以对多个属性进行排序:

  • Example:

    order by dept_name, name
    

Where Clause Predicates

SQL包含一个 between 比较操作符

Example:查找工资在$90,000到$100,000(即,≥$90,000 和 ≤$100,000)之间的所有教师的姓名:

  • select name from instructor where salary between 90000 and 100000
    

元组比较

  • select name, course_id 
    from instructor, teaches 
    where (instructor.ID, dept_name) = (teaches.ID, 'Biology')
    

3.5 设置操作

Set Operations

查找2017年秋季2018年春季的课程:

(select course_id  from section where sem = 'Fall' and year = 2017)
union
(select course_id  from section where sem = 'Spring' and year = 2018)

查找2017年秋季2018年春季的课程:

(select course_id  from section where sem = 'Fall' and year = 2017)
intersect
(select course_id  from section where sem = 'Spring' and year = 2018)

查找2017年秋季而不是2018年春季的课程:

(select course_id  from section where sem = 'Fall' and year = 2017)
except
(select course_id  from section where sem = 'Spring' and year = 2018)

设置操作 union, intersectexcept

  • 上述每个操作都会自动消除重复项

要保留所有副本,请使用:

  • union all
  • intersect all
  • except all

假设一个元组在 r 中出现 m 次,在 s 中出现 n 次,那么,它出现:

  • m + n times in r union all s
  • min(m, n) times in r intersect all s
  • max(0, m – n) times in r except all s

3.6 空值

Null Values

元组的某些属性可能有一个空值,用 null 表示

null 表示未知值或值不存在

任何涉及 null 的算术表达式的结果都是 null

  • Example:

    5 + null  returns null
    

谓词 is null 可用于检查空值

  • Example:

    select name from instructor where salary is null
    

如果应用谓词的值 is not null ,则谓词不为空成功。

SQL将任何涉及空值的比较的结果视为 unknown(谓词为空和非空除外)。

  • Example:

    5 < null   or   null <> null    or    null = null
    

where 子句中的谓词可以涉及布尔操作(and, or, not);因此,布尔运算的定义需要扩展以处理 unknown

  • and

    (true and unknown) = unknown, 
    (false and unknown) = false,
    (unknown and unknown) = unknown
    
  • or

    (unknown or true) = true,
    (unknown or false) = unknown
    (unknown or unknown) = unknown
    

如果 where 子句谓词的计算结果为 unknown,则将其结果视为 false


3.7 聚合函数

Aggregate Functions

这些函数对关系列的多值集进行操作,并返回一个值

avg平均值
min最小值
max最大值
sum值求和
count值数量

Aggregate Functions Examples

找出计算机科学系讲师的平均工资:

  • select avg (salary) from instructor where dept_name= 'Comp. Sci.'
    

查找在2018年春季学期教授某门课程的教师总数:

  • select count (distinct ID) from teaches where semester = 'Spring' and year = 2018
    

求课程关系中元组的个数:

  • select count (*) from course;
    

Aggregate Functions – Group By

求出各部门教员的平均工资:

  • select dept_name, avg (salary) as avg_salary from instructor group by dept_name
    

在这里插入图片描述

聚合函数之外的 select 子句中的属性必须出现在 group by 列表中:

  • /* erroneous query */
    select dept_name, ID, avg (salary) from instructor group by dept_name
    

Aggregate Functions – Having Clause

查找平均工资大于42000的所有部门的名称和平均工资:

select dept_name, avg (salary) as avg_salary 
from instructor group by dept_name having avg (salary) > 42000

Note:having 子句中的谓词在组形成之后应用,而 where 子句中的谓词在组形成之前应用


3.8 嵌套子查询

Nested Subqueries

Nested 嵌套

SQL 为子查询的嵌套提供了一种机制。子查询 A subquery 是嵌套在另一个查询中的 “select-from-where” 表达式。

嵌套可以在以下 SQL 查询中完成:

select A1, A2, ..., An from r1, r2, ..., rm where P

as follows:

  • From clause:ri 可以被任何有效的子查询替换。

  • Where clause:P 可以用如下形式的表达式代替:

    B (subquery)

    B是稍后定义的属性和。

  • Select clause:

    Ai 可以替换为生成单个值的子查询。


Set Membership

查找2017年秋季和2018年春季提供的课程:

select distinct course_id
from section
where semester = 'Fall' and year= 2017 and
      course_id in (select course_id
                    from section
                    where semester = 'Spring' and year= 2018)

查找2017年秋季但不是2018年春季提供的课程:

select distinct course_id
from section
where semester = 'Fall' and year= 2017 and
      course_id not in (select course_id
                    from section
                    where semester = 'Spring' and year= 2018)

说出所有既不是 “Mozart” 也不是 “Einstein” 的老师的名字:

select distinct name
from instructor
where  name not in ('Mozart', 'Einstein')

查找由 ID 为10101的讲师讲授的课程部分的(不同的)学生总数:

select count (distinct ID)
from takes
where (course_id, sec_id, semester, year) in             
				(select course_id, sec_id, semester, year
				from teaches
                where teaches.ID= 10101);

Note:上面的查询可以用更简单的方式编写。上面的公式只是为了说明 SQL 的特性


Set Comparison


Set Comparison – “some” Clause

找出工资高于生物系某些(至少一个)教师的姓名:

select distinct T.name
from instructor as T, instructor as S
where T.salary > S.salary and S.dept name = 'Biology'

相同的查询使用> some子句:

select name
from instructor
where salary > some (select salary
					from instructor
					where dept name = 'Biology')

Definition of “some” Clause

在这里插入图片描述


Set Comparison – “all” Clause

查找工资高于生物系所有教师工资的所有教师的姓名:

select name
from instructor
where salary > all (select salary
					from instructor
					where dept name = 'Biology')

Definition of “all” Clause

在这里插入图片描述


Test for Empty Relations

如果参数子查询非空,exists 构造返回值 true

在这里插入图片描述


Use of “exists” Clause

这是指定查询“查找2017年秋季学期和2018年春季学期教授的所有课程”的另一种方式:

select course_id 
from section as S 
where semester = 'Fall' and year = 2017 and
		exists (select * 
                from section as T 
                where semester = 'Spring' and year= 2018 
                		and S.course_id = T.course_id)

关联名称 Correlation name ——外部查询中的变量 S

相关子查询 Correlated subquery ——内部查询

select distinct course_id
from section
where semester = 'Fall' and year= 2017 and 
		course_id in (select course_id
                      from section
                      where semester = 'Spring' and year= 2018)

Use of “not exists” Clause

找到所有修过生物系所有课程的学生:

select distinct S.ID, S.name
from student as S
where not exists ( (select course_id
                    from course
                    where dept_name = 'Biology')
                  except
                  (select T.course_id
                   from takes as T
                   where S.ID = T.ID))
  • 第一个嵌套查询列出了生物学提供的所有课程
  • 第二个嵌套查询列出了特定学生所修的所有课程

在这里插入图片描述


Test for Absence of Duplicate Tuples

unique 构造测试子查询的结果中是否有任何重复元组。

如果给定的子查询不包含重复项,则 unique 构造的计算结果为“true”。

查找2017年最多开设一次的所有课程:

select T.course_id 
from course as T 
where unique (select R.course_id
              from section as R 
              where T.course_id= R.course_id 
              		and R.year = 2017)


Subqueries in the From Clause

SQL 允许在 from 子句中使用子查询表达式

找出那些平均工资超过4.2万美元的院系教师的平均工资:

select dept_name, avg_salary
from ( select dept_name, avg (salary) as avg_salary 
      from instructor 
      group by dept_name) 
where avg_salary > 42000

注意,我们不需要使用 having 从句

上述查询的另一种写法:

select dept_name, avg_salary
from (select dept_name, avg (salary) 
      from instructor 
      group by dept_name)
      as dept_avg (dept_name, avg_salary) 
where avg_salary > 42000

With Clause

with 子句提供了一种定义临时关系的方法,该临时关系的定义仅对出现 with 子句的查询可用。

找到所有有最大预算的部门:

with max_budget (value) as 
	(select max(budget) 
     from department) 
select department.name 
from department, max_budget 
where department.budget = max_budget.value;

Complex Queries using With Clause

找出总工资大于所有部门总工资平均值的所有部门:

with dept _total (dept_name, value) as
        (select dept_name, sum(salary)
         from instructor
         group by dept_name),
dept_total_avg(value) as
       (select avg(value)
       from dept_total)
select dept_name
from dept_total, dept_total_avg
where dept_total.value > dept_total_avg.value

Scalar Subquery

标量 Scalar 子查询是在需要单个值的地方使用的查询

列出所有部门以及每个部门的教师人数:

select dept_name, 
	(select count(*) 
     from instructor 
     where department.dept_name = instructor.dept_name) 
    as num_instructors
from department

如果子查询返回多个结果元组,则运行时错误


3.9 数据库的修改

Modification of the Database

  • 从给定关系中删除元组
  • 在给定的关系中插入新的元组
  • 更新给定关系中某些元组中的值

Deletion

删除所有教员

delete from instructor

删除财务部门的所有教员

delete from instructor where dept_name = 'Finance'

删除教员关系中与Watson大楼中某个部门相关联的教员的所有元组

delete from instructor
where dept_name in (select dept_name
                    from department
                    where building = 'Watson')

删除所有工资低于教员平均工资的教员

delete from instructor
where salary < (select avg (salary) 
                from instructor)
  • Problem:当我们从教员中删除元组时,平均工资发生了变化
  • SQL中使用的解决方案:
    • 首先,计算 avg (salary)并找到所有要删除的元组
    • 接下来,删除上面找到的所有元组(不重新计算 avg 或重新测试元组)

Insertion

向course添加一个新的元组

insert into course values ('CS-437', 'Database Systems', 'Comp. Sci.', 4)

或者同样的

insert into course (course_id, title, dept_name, credits) 
values ('CS-437', 'Database Systems', 'Comp. Sci.', 4)

添加一个新的元组到student, tot_creds设置为null

insert into student values ('3003', 'Green', 'Finance', null)

让每个获得超过144个学分的音乐系学生成为音乐系讲师,年薪18000美元

insert into instructor 
	select ID, name, dept_name, 18000 
	from student 
	where dept_name = 'Music' and total_cred > 144

在将 select from where 语句的任何结果插入到关系中之前,将对其进行完全求值。

否则,如下的查询将导致问题:

insert into table1 select * from table1

Updates

给所有教员加薪5%

update instructor set salary = salary * 1.05

对收入低于7万的指导员加薪5%

update instructor set salary = salary * 1.05 where salary < 70000

对工资低于平均水平的指导员,给予5%的加薪

update instructor 
set salary = salary * 1.05
where salary <  (select avg (salary)
                 from instructor)

对年薪超过10万美元的教员加薪3%,其他教员加薪5%

  • 写两个 update 语句:

    update instructor set salary = salary * 1.03 where salary > 100000
    update instructor set salary = salary * 1.05 where salary <= 100000
    
  • 顺序很重要

  • case 语句可以做得更好(如下)


Case Statement for Conditional Updates

与之前相同的查询,但使用case语句

update instructor
	set salary = case
		when salary <= 100000 then salary * 1.05
		else salary * 1.03
		end

Updates with Scalar Subqueries

重新计算并更新所有学生的tot_creds值

update student S 
set tot_cred = (select sum(credits)
                from takes, course
                where takes.course_id = course.course_id  and
                	S.ID= takes.ID.and
                takes.grade <> 'F' and
                takes.grade is not null)

对于没有上过任何课程的学生,将tot_creds设置为null

代替 sum(credits),使用:

case
	when sum(credits) is not null then sum(credits)
	else 0
end

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

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

相关文章

VSCODE常用插件记录

重点提名&#xff1a; back & ForthBookmarksC/ChighlightSSH FS //SSH插件

SQL2017附加从其他电脑复制过来的mdf数据后出现【只读】无法写入数据

1. 尝试给它所在的文件夹的属性中的“只读”去勾&#xff0c;无果。 2. 其他文章提示是文件的问题。 该错误为文件权限错误&#xff0c;找到该数据库的 数据库文件 和 日志文件&#xff0c;在安全中添加 Authenticated Users 用户的权限&#xff0c;并设置 “完全控制”

Linux:进程控制(二.详细讲解进程程序替换)

上次讲了&#xff1a;Linux&#xff1a;进程地址空间、进程控制&#xff08;一.进程创建、进程终止、进程等待&#xff09; 文章目录 1.进程程序替换1.1概念1.2原理1.3使用一个exec 系列函数execl&#xff08;&#xff09;函数结论与细节 2.多进程时的程序替换3.其他几个exec系…

【链表】Leetcode 82. 删除排序链表中的重复元素 II【中等】

删除排序链表中的重复元素 II 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5] 解题思路 由于链表…

【小呆的力学笔记】连续介质力学的知识点回顾一:运动和变形

文章目录 1. 运动的描述2. 拉格朗日描述下的变形2.1 线元的变化2.2 体元的变化2.3 面元的变化 1. 运动的描述 在连续介质力学中&#xff0c;存在着两种对运动的描述&#xff0c;一种为拉格朗日描述&#xff0c;即通过描述每个物质点的运动来描述整个变形体的运动&#xff0c;也…

电脑如何远程访问?

【天联】的使用场景 电脑远程访问在现代科技的发展中扮演了重要的角色。对于企业和个人用户来说&#xff0c;远程访问的便利性提供了许多机会和可能性。作为一种高效的工具&#xff0c;【天联】具有广泛的应用场景&#xff0c;可以实现异地统一管理、协同办公以及远程数据采集…

一文了解MyBatis

文章目录 MyBatis1. MyBatis的执行流程2. MyBatis是否支持延迟加载3. MyBatis延迟加载的底层原理4. MyBatis的二级缓存机制用过吗5. 谈谈MyBatis框架的优势6. 简单描述MyBatis的工作原理7. MyBatis中的sql标签8. MyBatis中的${}和#{}的区别9. MyBatis中ResulyMap的作用[重要]10…

在Python中实现限定抽奖次数的机制

目录 一、引言 二、需求分析 三、设计思路 四、代码实现 4.1 使用字典存储用户抽奖次数 4.2 使用数据库存储用户抽奖次数 五、扩展与优化 六、总结 一、引言 在当今互联网应用中&#xff0c;抽奖系统作为吸引用户、提高用户参与度和活跃度的重要手段&#xff0c;已经被…

展望跨境智慧银行在全球化金融服务中的发展趋势和机遇

一、引言 随着全球经济的不断融合和金融科技的迅猛发展,跨境智慧银行作为连接不同国家和地区金融市场的桥梁,正逐渐展现出其独特的魅力和潜力。跨境支付与结算作为跨境智慧银行的核心业务之一,随着全球化的深入发展和国际贸易的日益频繁,其业务场景也愈发丰富和复杂。本文…

【智能算法应用】灰狼算法GWO求解三维路径规划问题

目录 1.算法原理2.三维路径规划数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 【智能算法】灰狼算法&#xff08;GWO&#xff09;原理及实现 2.三维路径规划数学模型 三维地形可以等效处理成山峰地形&#xff0c;数学模型为: z ( x , y ) h 0 ∑ j 1 N h j max ⁡…

Vitis HLS 学习笔记--块级控制协议-ap_ctrl_chain/ap_ctrl_hs/ap_ctrl_none

目录 1. 简介 2. 详细分析 2.1 使用场景区别 2.2 ap_continue 行为详解 2.3 ap_ctrl_chain 行为详解 3. 总结 1. 简介 块级控制协议允许硬件模块表明&#xff1a; 何时可以开始处理数据。何时完成了数据处理。以及何时处于空闲状态&#xff0c;准备接受新的数据输入。 …

【放球问题】920. 播放列表的数量

本文涉及知识点 【组合数学 隔板法 容斥原理】放球问题 本题同解 【动态规划】【组合数学】【C算法】920播放列表的数量 LeetCode 920. 播放列表的数量 你的音乐播放器里有 n 首不同的歌&#xff0c;在旅途中&#xff0c;你计划听 goal 首歌&#xff08;不一定不同&#x…

冯喜运:5.29市场避险情绪升温,黄金原油小幅收涨

【黄金消息面分析】&#xff1a;周二&#xff08;5月28日&#xff09;美盘时段&#xff0c;由于美元走弱且市场情绪出现负面变化&#xff0c;黄金收复早前跌幅&#xff0c;站上2350美元关口。金价早盘一度走弱&#xff0c;源于美联储降息可能性降低带来压力&#xff0c;投资者在…

工作软件新宠儿

想要让你的工作效率飞起来吗&#xff1f;&#x1f440; 是时候告别那些大众化的工作软件啦&#xff01;今天&#xff0c;我要给大家种草几款不常见的但超级实用的工作软件&#x1f331;&#xff0c;保证让你事半功倍哦&#xff01;&#x1f31f; 1️⃣ 亿可达 它是一款自动化…

基于ssm的微信小程序的居民健康监测系统

采用技术 基于ssm的微信小程序的居民健康监测系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringMVCMyBatis 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 页面展示效果 后端页面 用户信息管理 健康科普管理 公告管理 论坛…

读人工智能时代与人类未来笔记17_人类未来

1. 人类未来 1.1. 在印刷读物出现之前&#xff0c;中世纪的欧洲人主要通过社区传统获取知识 1.1.1. 通过参与收割和季节轮作积累民间智慧 1.1.2. 在礼拜场所践行信仰并遵守圣礼 1.1.3. 加入行业公会&#xff0c;学习技术&…

颈源性头痛症状及表

颈源性头痛一般表现为&#xff0c;就是说从枕后一直颞侧&#xff0c;到太阳穴附近&#xff0c;这个是枕小的一个疼痛&#xff0c;还有一部分人从枕后&#xff0c;沿着一个弧线&#xff08;如下图&#xff09;的轨迹到了前额&#xff0c;到我们前额&#xff0c;这样一个疼痛&…

详解makefile中的$(wildcard pattern)

在 Makefile 中&#xff0c;$(wildcard pattern) 是一个函数&#xff0c;用于匹配指定模式的文件&#xff0c;并返回符合条件的文件列表。这个函数通常用于获取符合特定模式的文件名&#xff0c;在编写 Makefile 时非常有用。 语法&#xff1a; makefile $(wildcard pattern)…

Vue 菜单组件开发教程

在 Vue 项目中&#xff0c;我们常常需要构建各种菜单结构。下面就来详细介绍如何基于给定的代码来开发一个菜单组件。 组件部分 一、模板部分 <template> <template v-for"item in menuTree" :key"item._id"> <el-sub-menu v-if"i…

LeetCode---栈与队列

232. 用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int pee…