目录
一.子查询概述:
二:标量子查询:
三:列子查询:
四:行子查询:
五:表子查询:
六:练习部分:
写在之前:本文承接上文MySQL-----多表查询(一)-CSDN博客
一.子查询概述: 首先引出子查询的概念:子查询指一个查询语句嵌套在另一个查询语句内部的查询,即SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询
SQL 中子查询的使用大大增强了 SELECT 查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量,也可能是某个集合)进行比较。
如下面这种形式: SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2 ); 子查询分类:
A. 标量子查询(子查询结果为单个值)B. 列子查询(子查询结果为一列)C. 行子查询(子查询结果为一行)D. 表子查询(子查询结果为多行多列) 查询位置可分为:
A. WHERE之后B. FROM之后C. SELECT之后 接着,基于上面的概述,相信你对子查询有了一定了解了,首先我们导入要查询的数据,下面在根据子查询的分类一个一个说明:(在查询之前,我们先导入数据(建立表以及表之间的关系))
-- 创建部门表 create table dept( id int auto_increment comment 'ID' primary key, name varchar(50) not null comment '部门名称' )comment '部门表'; INSERT INTO dept (id, name) VALUES (1, '研发部'), (2, '市场部'),(3, '财务部'), (4, '销售部'), (5, '总经办'), (6, '人事部'); -- 创建员工表 create table emp( id int auto_increment comment 'ID' primary key, name varchar(50) not null comment '姓名', age int comment '年龄', job varchar(20) comment '职位', salary int comment '薪资', entrydate date comment '入职时间', managerid int comment '直属领导ID', dept_id int comment '部门ID' )comment '员工表'; -- 设置外键约束 alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references dept(id); -- 插入数据 INSERT INTO emp (id, name, age, job,salary, entrydate, managerid, dept_id) VALUES (1, '金庸', 66, '总裁',20000, '2000-01-01', null,5), (2, '张无忌', 20, '项目经理',12500, '2005-12-05', 1,1), (3, '杨逍', 33, '开发', 8400,'2000-11-03', 2,1), (4, '韦一笑', 48, '开发',11000, '2002-02-05', 2,1), (5, '常遇春', 43, '开发',10500, '2004-09-07', 3,1), (6, '小昭', 19, '程序员鼓励师',6600, '2004-10-12', 2,1), (7, '灭绝', 60, '财务总监',8500, '2002-09-12', 1,3), (8, '周芷若', 19, '会计',4800, '2006-06-02', 7,3), (9, '丁敏君', 23, '出纳',5250, '2009-05-13', 7,3), (10, '赵敏', 20, '市场部总监',12500, '2004-10-12', 1,2), (11, '鹿杖客', 56, '职员',3750, '2006-10-03', 10,2), (12, '鹤笔翁', 19, '职员',3750, '2007-05-09', 10,2), (13, '方东白', 19, '职员',5500, '2009-02-12', 10,2), (14, '张三丰', 88, '销售总监',14000, '2004-10-12', 1,4), (15, '俞莲舟', 38, '销售',4600, '2004-10-12', 14,4), (16, '宋远桥', 40, '销售',4600, '2004-10-12', 14,4), (17, '陈友谅', 42, null,2000, '2011-10-12', 1,null); 创建好后的表中数据及其对应关系:
在Web开发中,经常需要在网页上显示当前的日期和时间。HTML本身并不具备这样的动态功能,但我们可以借助JavaScript来实现。JavaScript是一种常用的前端脚本语言,它可以轻松地获取系统时间,并将其插入到HTML元素中。
下面是一个简单的示例,演示如何在HTML中使用JavaScript实时显示当前的日期和时间:
首先,我们创建一个HTML文件,并在其中添加一个用于显示日期和时间的<p>元素。给它一个唯一的id,这样我们就可以通过JavaScript找到它并更新其内容。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>实时显示当前日期和时间</title> </head> <body> <p id="currentDateTime">加载中...</p> <!-- 引入JavaScript代码 --> <script src="display-datetime.js"></script> </body> </html> 接下来,我们创建一个名为display-datetime.js的JavaScript文件,并编写用于获取和格式化当前日期时间的函数。
// 显示当前日期时间的函数 function showCurrentDateTime() { const now = new Date(); const year = now.getFullYear(); const month = String(now.getMonth() + 1).padStart(2, '0'); // 月份从0开始,所以+1 const day = String(now.getDate()).padStart(2, '0'); const hours = String(now.getHours()).padStart(2, '0'); const minutes = String(now.getMinutes()).padStart(2, '0'); const seconds = String(now.getSeconds()).padStart(2, '0'); const formattedDateTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; document.
💓博主CSDN主页:杭电码农-NEO💓
⏩专栏分类:Go语言专栏⏪
🚚代码仓库:NEO的学习日记🚚
🌹关注我🫵带你学习更多Go语言知识
🔝🔝
GO快速上手 1. 前言2. GO语言的文件操作2. 初识协程3. 协程的等待问题4. 协程的资源竞争问题5. 总结以及拓展 1. 前言 本篇文章将会将GO语言的一大杀器,那就是协程. 为啥很多大厂都在慢慢的转GO.看完这篇文章你可能会有所感悟
本章重点:
本篇文章会讲解GO语言中如何读写/创建文件,也就是我们所谓的IO流的用法. 然后, 会讲解协程的基本概念和GO语言中是如何操控协程的, 在协程的讲解中会穿插资源竞争下的锁问题,会讲解互斥锁和读写锁在GO语言中是如何使用的. 最后会给大家讲解GO语言中的特殊的类型: channel管道
2. GO语言的文件操作 这里就不多叙述什么是IO操作了,毕竟本系列的文章不是0基础. 首先最经典的IO操作函数,open和close:
请注意, open是函数,而close是方法,他们的用法是不同的,并且,open函数位于os包下,使用前记得import包进去. 除此之外,打开文件后不能直接读取内容,需要创建一个流,这个流你可以理解为是一条管道,连接被打开的文件和程序, 利用这条管道来读取文件中的数据
package main import ( "bufio" "fmt" "os" ) func main() { //打开文件 f, err := os.Open("test.txt") if err != nil{ fmt.Println("打开文件失败 } defer f.close() //函数执行完后关闭 //创建一个流) reader := bufio.NewReader(f) //读取操作 for{ //以回车作为标识符,遇见\n后就是一次读取 str.err := reader.ReadString("\n") if err!=io.EOF{ break } fmt.
文章目录 一、日期格式化1、获取年 - getFullYear2、获取月 - getMonth3、获取每月的第几天 - getDate4、获取每周的第几天 - getDay5、获取每天的第几小时 - getHours6、完整代码示例 Date 日期对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date
一、日期格式化 1、获取年 - getFullYear 调用 Date.prototype.getFullYear() 方法 可以获取指定日期的年份 ;
Date 是 JavaScript 的内置对象 , 用于处理日期和时间 ;prototype 是 JavaScript 中 每一个对象都有一个 prototype 属性 , 该属性 是 指向原型对象的指针 , 原型对象 包含可以由特定类型的所有实例共享的属性和方法 ;getFullYear 是一个定义在 Date 的原型对象上的方法 , 所以所有的 Date 对象实例都可以调用这个方法 ; 参考 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/getFullYear 文档 ;
调用 Date 构造函数 , 创建一个新的 Date 对象时 , 该新对象会继承 Date 的 原型对象 上的所有属性和方法 ;
双指针经常服务于需要一边遍历数组,一边对数组元素进行改动的题目,有些人也称双指针为快慢指针。
同时双指针只是一种思想,实际做题时并不一定会真的采用指针。
移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12] 输出: [1,3,12,0,0] 本题的思路,并非是着重于将0往后移,实际上是要将非0数按顺序往前移。
由题意,我们可以将数据分成两大类:0和非0,那么我们的两个指针,一个就去找0,一个就去找非0。
两个指针均从0下标开始,其中cur找0,dest找非0。cur找到0即停下,dest找到非0即停下。
这样,dest总会走在cur的前面,两者将数据进行交换,就可以将非0元素前移,0元素后移。直至dest走到数组末尾。
class Solution { public: void moveZeroes(vector<int>& nums) { int size = nums.size(); int cur = 0; int dest = 0; while(dest < size) { if(nums[cur] == 0 && nums[dest] == 0) { dest++; } else { swap(nums[cur++],nums[dest++]); } } } }; 快乐数 「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
程序员缓解工作压力的小窍门 强烈推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能
引言 Redis作为一种高性能的内存数据库,其优势之一在于能够高效地利用内存,从而提供快速的数据访问和存储。
然而,在实际应用中,如何有效地管理和节省Redis所使用的内存,对于应用的性能和成本都具有重要意义。
在本文中,我们将探讨一些使用Redis时能够极大节省内存的技巧,通过这些技巧,你可以更加有效地利用Redis,提高应用的性能并降低成本。
优化技巧 下面就介绍10中能大大节省内容的技巧,提高redis的性能。
1.使用数据结构的最小存储形式: 假设你需要存储一组唯一的用户ID。你可以使用Redis的集合数据结构来实现,而不是使用列表,因为集合只存储唯一值,节省内存。
// 存储一组唯一用户ID的示例 Jedis jedis = new Jedis("localhost"); jedis.sadd("unique_user_ids", "user1", "user2", "user3"); 2.压缩列表和哈希:
如果你有一个小型的哈希表,只包含几个字段,Redis会将其存储为压缩哈希表,从而节省内存。
3.合并小对象:
假设你有多个小型用户配置信息,每个用户信息包含用户名、年龄和地址。你可以将这些信息合并到一个大的哈希表中,每个用户使用一个字段来存储,而不是为每个用户创建单独的哈希表,从而减少固定开销。
// 合并多个小型用户信息到一个哈希表中的示例 jedis.hset("user:1", "name", "Alice"); jedis.hset("user:1", "age", "30"); jedis.hset("user:1", "address", "123 Main St"); 4.优化数据结构:
如果你需要存储一个只包含唯一值的列表,例如用户的兴趣爱好,你可以使用Redis的集合数据结构,而不是列表,这样可以节省内存。
// 使用集合数据结构存储唯一值的示例 jedis.sadd("unique_interests", "sports", "music", "travel"); 5.使用整数编码:
如果你需要存储用户的年龄信息,将年龄存储为整数值,而不是字符串表示,可以节省内存。
// 存储用户的年龄信息,以整数值表示 jedis.set("user:1:age", "30"); 6.设置适当的过期时间:
如果你需要缓存某些数据,但知道它们在一段时间后将不再使用,可以为这些数据设置适当的过期时间,以确保它们在不再需要时及时释放内存。
// 设置缓存数据并为其设置过期时间的示例 jedis.setex("cached_data", 3600, "some_value"); // 缓存数据1小时 7.使用虚拟内存:
如果你的数据集很大,而可用内存有限,可以配置Redis使用虚拟内存,将不常访问的数据交换到磁盘上,以释放内存。
8.限制数据集大小:
你可以通过配置maxmemory参数来限制Redis数据集的大小,当数据集达到预设的内存限制时,Redis将根据你的配置策略来淘汰数据,以保持内存使用在可控范围内。
9.关闭持久化:
如果你的应用可以接受一定程度的数据丢失,可以考虑关闭Redis的持久化功能,以减少对内存的消耗。
// 关闭持久化功能的示例 jedis.