Mysql基础之单表、多表查询

课程笔记Day26

  • 单表查询
  • 多表查询
  • 多表练习

第一章 单表查询

第01节 分组查询
1、语法格式

基础语法

-- 简化写法
SELECT 分组字段,聚合函数 FROM 表名称 GROUP BY 分组字段;

-- 完整写法
SELECT 分组字段,聚合函数 FROM 表名称 WHERE 分组前条件 GROUP BY 分组字段 HAVING 分组后条件;

理解:分组的效果

1、分组之后,查询的结果只能是两个内容:要么是 分组的字段,要么是聚合函数

2、分组的效果,相当于是 字段当中,对相同的内容,进行去重合并单元格的效果。

2、案例代码
-- 需求:查看学生来自于哪些学院。可以根据学院进行分组
SELECT stu_college FROM student GROUP BY stu_college;

-- 注意:在分组之后,查询的结果必须是分组字段,或者聚合函数
-- 如果查询其他的操作是没有意义的。
SELECT * FROM student GROUP BY stu_college;  -- 错误写法

-- 需求:获取到男生当中的最大年龄和女生当中的最大年龄。
SELECT stu_sex,MAX(stu_age) FROM student GROUP BY stu_sex;

-- 需求:获取到大数据当中,男生当中的最大年龄和女生当中的最大年龄。
SELECT stu_sex,MAX(stu_age) FROM student WHERE stu_major = '大数据' GROUP BY stu_sex;

-- 需求:分别获取到计科当中,男生和女生的人数,要求每组人数不能超过2个人。
-- WHERE  表示分组之前的条件筛选, 后面不能跟聚合函数
-- HAVING 表示分组之后的条件筛选, 后面可以跟上聚合函数
SELECT stu_sex,COUNT(*) FROM student WHERE stu_major = '计科'  GROUP BY stu_sex HAVING COUNT(*)<=2;
3、注意事项

WHERE 和 HAVING 的区别?

1. 条件的区别:
	WHERE 表示的分组前的条件
	HAVING 表示分组后的条件

2. 聚合函数区别:
	WHERE 后面不可以跟上聚合函数
	HAVING 后面可以跟上聚合函数
第02节 分页查询
1、语法格式

基础语法

SELECT * FROM 表名称 LIMIT 跳过前面几条记录,展示几条记录;

公式

如果我们每页显示 N 条数据,想要显示 M 页。
计算公式如下: 
	左边的数据是 (M-1)*N
	右边的数据是 N
	
语法格式:
	SELECT * FROM 表名称 LIMIT (M-1)*N , N;
2、案例代码
-- 分页查询操作
-- 注意细节: 分页查询他是采用的 LIMIT 属于MySQL的方言,只有MySQL才有
-- 另外了解一下,在Oracle当中的分页是 ROWNUM 关键字
-- 在LIMIT后面跟上的两个整数表示的含义是什么?
-- 1. 左边的整数:跳过前面几条记录
-- 2. 右边的整数:显示几条记录
SELECT * FROM student LIMIT 2,3;

-- 后期,这里的两个整数可能会有意义的变化。
-- 第几页? 每页展示几条记录?
-- 每页展示3条数据, 想要展示第2页
-- 例如: 页数是 M, 每页条件是 N
SELECT * FROM student LIMIT (M-1)*N,N;
SELECT * FROM student LIMIT (4-1)*3,3;
SELECT * FROM student LIMIT 9,3;
第03节 单表小结
1、语法格式

书写格式

SELECT
	....查询的结果,我们需要什么字段,就在这里写什么.....
FROM
	....数据库当中,数据表的名称....
WHERE
	....查询的条件,分组前的筛选....
GROUP BY
	....表里面的字段名,根据字段分组....
HAVING
	....查询的条件,分组后的筛选....
ORDER BY
	....字段名称和排序规则....
LIMIT
	....分页....
2、解析格式

当我们拿到一个题目之后,如何编写SQL查询语句的问题。

1. 从哪些表当中去查找,我们想要的字段信息。 FROM 后面的语句
2. 查询的条件是什么呢? WHERE 语句
3. 是否需要分组呢?  如果需要则思考 GROUP BY 语句。 分组之后会不会有筛选,这里就要思考 HAVING 子句
4. 查询的结果和查询字段? 也就是需要写 SELECT 后的语句
-----------------------------
5. 是否需要排序呢?  如果有排序,则采用 ORDER BY
6. 是否需要分页操作? 如果有分页,采用 LIMIT 第几页,每页几条记录?

第二章 多表查询

第01节 基础理论
1、基础说明
在以后大家工作的过程当中,数据库操作不可能是单表的操作,必然是多表处理的操作,单表也会使用到。
当然后期,可以将多表转换成为单表操作之后,再去使用。

如果是多张表一起,如何进行查询操作呢?
常见的几种查询操作:
	(1) 笛卡尔积查询(不推荐使用)
	(2) 内连接查询
	(3) 外连接查询
	(4) 自关联查询
	(5) 子查询
2、数据准备
-- 创建数据库,如果不存在则创建
CREATE DATABASE IF NOT EXISTS mydb05 CHARACTER SET utf8;

-- 使用数据库
USE mydb05;

-- 部门表
DROP TABLE IF EXISTS dept;
CREATE TABLE IF NOT EXISTS  dept (
   id INT PRIMARY KEY PRIMARY KEY, -- 部门id
   dname VARCHAR(50), -- 部门名称
   loc VARCHAR(50) -- 部门所在地
);

-- 添加4个部门
INSERT INTO dept(id,dname,loc) VALUES (10,'教研部','北京'),
(20,'学工部','上海'),(30,'销售部','广州'),(40,'财务部','深圳');

-- 查询表数据
SELECT * FROM dept;

-- 职务表,职务名称,职务描述
DROP TABLE IF EXISTS job;
CREATE TABLE IF NOT EXISTS job (
   id INT PRIMARY KEY,
   jname VARCHAR(20),
   description VARCHAR(50)
);

-- 添加4个职务
INSERT INTO job (id, jname, description) VALUES
   (1, '董事长', '管理整个公司,接单'),(2, '经理', '管理部门员工'),
   (3, '销售员', '向客人推销产品'),(4, '文员', '使用办公软件');

-- 查询表数据
SELECT * FROM job;

-- 员工表
DROP TABLE IF EXISTS emp;
CREATE TABLE IF NOT EXISTS emp (
   id INT PRIMARY KEY, -- 员工id
   ename VARCHAR(50), -- 员工姓名
   job_id INT, -- 职务id
   mgr INT , -- 上级领导
   joindate DATE, -- 入职日期
   salary DECIMAL(7,2), -- 工资
   bonus DECIMAL(7,2), -- 奖金
   dept_id INT, -- 所在部门编号
   CONSTRAINT emp_jobid_ref_job_id_fk FOREIGN KEY (job_id) REFERENCES job (id),
   CONSTRAINT emp_deptid_ref_dept_id_fk FOREIGN KEY (dept_id) REFERENCES dept (id)
);

-- 添加员工
INSERT INTO emp(id,ename,job_id,mgr,joindate,salary,bonus,dept_id) VALUES
(1001,'孙悟空',4,1004,'2000-12-17','8000.00',NULL,20),
(1002,'卢俊义',3,1006,'2001-02-20','16000.00','3000.00',30),
(1003,'林冲',3,1006,'2001-02-22','12500.00','5000.00',30),
(1004,'唐僧',2,1009,'2001-04-02','29750.00',NULL,20),
(1005,'李逵',4,1006,'2001-09-28','12500.00','14000.00',30),
(1006,'宋江',2,1009,'2001-05-01','28500.00',NULL,30),
(1007,'刘备',2,1009,'2001-09-01','24500.00',NULL,10),
(1008,'猪八戒',4,1004,'2007-04-19','30000.00',NULL,20),
(1009,'罗贯中',1,NULL,'2001-11-17','50000.00',NULL,10),
(1010,'吴用',3,1006,'2001-09-08','15000.00','0.00',30),
(1011,'沙僧',4,1004,'2007-05-23','11000.00',NULL,20),
(1012,'李逵',4,1006,'2001-12-03','9500.00',NULL,30),
(1013,'小白龙',4,1004,'2001-12-03','30000.00',NULL,20),
(1014,'关羽',4,1007,'2002-01-23','13000.00',NULL,10);

-- 查询表数据
SELECT * FROM emp;

-- 工资等级表
DROP TABLE IF EXISTS salarygrade;
CREATE TABLE  IF NOT EXISTS salarygrade (
   grade INT PRIMARY KEY,   -- 级别
   losalary INT,  -- 最低工资
   hisalary INT -- 最高工资
);

-- 添加5个工资等级
INSERT INTO salarygrade(grade,losalary,hisalary) VALUES
   (1,7000,12000),(2,12010,14000),(3,14010,20000),(4,20010,30000),(5,30010,99990);

-- 查询表数据
SELECT * FROM salarygrade;
第02节 笛卡尔积
1、语法格式
SELECT * FROM 表名称1,表名称2;
2、查询结果

说明

例如:
	表1当中存在 4条记录
	表2当中存在 14条记录
	
采用笛卡尔积,查询的总记录是 4x14=56 条

说白一点:就是表1的条目总数 乘以 表2的条目总数。

备注:我们不推荐使用 笛卡尔积查询

第03节 内连接查询
1、语法格式
-- 1. 显式内连接 INNER 可以省略
SELECT * FROM 表名称1 INNER JOIN 表名称2 ON 连接条件;

-- 2. 隐式内连接
SELECT * FROM 表名称1,表名称2 WHERE 连接条件;
2、查询结果

案例代码

-- 1. 显式内连接查询
SELECT * FROM dept INNER JOIN emp ON dept.id = emp.dept_id;

-- 2. 显式内连接查询,可以省略 INNER
SELECT * FROM dept JOIN emp ON dept.id = emp.dept_id;

-- 3. 隐式内连接查询
SELECT * FROM dept,emp WHERE dept.id = emp.dept_id;

查询的结果

在这里插入图片描述

第04节 外连接查询
1、语法格式
-- 1. 左外连接
SELECT * FROM 左表的名称 LEFT JOIN 右表的名称 ON 连接条件;

-- 2. 右外连接
SELECT * FROM 左表的名称 RIGHT JOIN 右表的名称 ON 连接条件;
2、查询结果

案例代码

-- 1. 左外连接
SELECT * FROM dept LEFT JOIN emp ON dept.id = emp.dept_id;

-- 2. 右外连接
SELECT * FROM dept RIGHT JOIN emp ON dept.id = emp.dept_id;

查询的结果

在这里插入图片描述

第05节 自关联查询
1、语法格式
自关联查询,并没有固定的语法格式,他属于一种特殊的情况,自己的表和自己的表,相关联,进行查询。
2、查询结果
-- 特殊的查询方式,自关联查询
-- 查询员工的ID、员工的姓名、上级领导的ID、上级领导的姓名
-- 如果没有上级领导的也要查询出来,这里就是说需要查询所有的员工。
-- 内连接呢? 还是外连接?
-- 这里需要使用外连接,因为我们需要查询 员工表的全部内容。(推荐使用左外)
SELECT
	e1.id  '员工ID',
	e1.ename  '员工姓名',
	e1.mgr  '领导的ID',
	e2.ename  '领导姓名'
FROM 
	emp e1   -- 左表,e1是emp的别名
LEFT JOIN
	emp e2   -- 右表,e2是emp的别名
ON
	e1.mgr = e2.id;   -- e1的领导的id是e2的id 

小技巧:在自关联的查询当中,我们一般会给这个表,取别名。例如这里的 e1 和 e2

效果图

在这里插入图片描述

第06节 子查询
1、基础说明
1. 什么是子查询呢?
	子查询就是说,一次查询的结果是下一次查询的条件。(嵌套的查询操作)
	
2. 子查询的情况分类:
	(1)查询结果, 单行单列, 直接使用 =、!=、>、>=、<=、<
	(2)查询结果, 多行单列, 需要使用 IN 或者 NOT IN
	(3)查询结果, 多行多列, 需要建立虚拟表, 进行连接查询
2、单行单列
-- 查询员工表
SELECT * FROM emp;

-- 需要查询,工资高于 宋江的工资 的员工的信息。

-- 可以查询得到宋江的工资
SELECT salary FROM emp WHERE ename = '宋江';

-- 举例,查询工资高于 28500 员工的信息。
SELECT * FROM emp WHERE salary>28500;

-- 结合两部分操作在一起。
SELECT 
	ename,salary 
FROM 
	emp 
WHERE 
	salary>(
		SELECT salary FROM emp WHERE ename = '宋江'
	);
3、多行单列

需求:查看孙悟空或刘备,是否在工资 为 10000 - 30000 之间。

-- 查询员工表
SELECT * FROM emp;

-- 需求:查询工资在 10000 - 30000 之间人的信息,看看孙悟空、 刘备 ..在里面吗?
-- 查询出来,10000-30000 之间人的信息
SELECT ename FROM emp WHERE salary>10000 AND salary<30000;

-- 查询孙悟空和刘备在结果当中吗?
SELECT '刘备' IN (SELECT ename FROM emp WHERE salary>10000 AND salary<30000) AS '结果';
4、多行多列
-- 查询员工表
SELECT * FROM emp;

-- 需求:查询员工工资和员工的奖金,以及最终工资(工资+奖金)以及员工所在的部门信息和员工的姓名。
-- 1、 查询员工的工资、员工的奖金、员工的最终工资、员工的姓名、部门ID
SELECT 
	ename,
	dept_id,
	salary,
	bonus,
	salary+IFNULL(bonus,0) money
FROM
	emp;

-- 2、子查询,查询部门的信息
SELECT
	t1.ename '员工姓名',
	t2.dname '部门名称',
	t1.salary '员工工资',
	t1.bonus  '员工奖金',
	t1.money   '最终工资'
FROM
	(
		SELECT 
			ename,
			dept_id,
			salary,
			bonus,
			salary+IFNULL(bonus,0) money
		FROM
			emp
	) t1
LEFT JOIN
	dept t2
ON
	t2.id = t1.dept_id;
5、常用函数

函数介绍

1. IN 表示在 多个当中选择一个
2. NOT IN 表示不在这些内容当中
3. ANY 表示在 任何一个  相当于是 或 ||
4. ALL 表示所有的  相当于是 且 &&
5. EXISTS 表示存在
6. NOT EXISTS 表示不存在

案例代码

-- 查询员工表
SELECT * FROM emp;

-- 查询工资高于 宋江工资人的信息。
SELECT * FROM emp WHERE salary > (SELECT salary FROM emp WHERE ename='宋江');

-- 查询工资高于 宋江或者林冲的人的信息
-- ANY 表示的是只要满足其中一条就可以了,相当于是 或 || 的关系
SELECT * FROM emp WHERE salary > ANY(SELECT salary FROM emp WHERE ename='宋江' OR ename='林冲');

-- 查询工资高于 宋江并且林冲的人的信息
-- ALL 表示的需要同时满足 高于宋江和高于林冲,相当于是 且 && 的关系
SELECT * FROM emp WHERE salary > ALL(SELECT salary FROM emp WHERE ename='宋江' OR ename='林冲');

第三章 多表练习

第01节 准备工作
1、数据准备
-- 创建数据库,如果不存在则创建
CREATE DATABASE IF NOT EXISTS mydb05 CHARACTER SET utf8;

-- 使用数据库
USE mydb05;

-- 部门表
DROP TABLE IF EXISTS dept;
CREATE TABLE IF NOT EXISTS  dept (
   id INT PRIMARY KEY PRIMARY KEY, -- 部门id
   dname VARCHAR(50), -- 部门名称
   loc VARCHAR(50) -- 部门所在地
);

-- 添加4个部门
INSERT INTO dept(id,dname,loc) VALUES (10,'教研部','北京'),
(20,'学工部','上海'),(30,'销售部','广州'),(40,'财务部','深圳');

-- 查询表数据
SELECT * FROM dept;

-- 职务表,职务名称,职务描述
DROP TABLE IF EXISTS job;
CREATE TABLE IF NOT EXISTS job (
   id INT PRIMARY KEY,
   jname VARCHAR(20),
   description VARCHAR(50)
);

-- 添加4个职务
INSERT INTO job (id, jname, description) VALUES
   (1, '董事长', '管理整个公司,接单'),(2, '经理', '管理部门员工'),
   (3, '销售员', '向客人推销产品'),(4, '文员', '使用办公软件');

-- 查询表数据
SELECT * FROM job;

-- 员工表
DROP TABLE IF EXISTS emp;
CREATE TABLE IF NOT EXISTS emp (
   id INT PRIMARY KEY, -- 员工id
   ename VARCHAR(50), -- 员工姓名
   job_id INT, -- 职务id
   mgr INT , -- 上级领导
   joindate DATE, -- 入职日期
   salary DECIMAL(7,2), -- 工资
   bonus DECIMAL(7,2), -- 奖金
   dept_id INT, -- 所在部门编号
   CONSTRAINT emp_jobid_ref_job_id_fk FOREIGN KEY (job_id) REFERENCES job (id),
   CONSTRAINT emp_deptid_ref_dept_id_fk FOREIGN KEY (dept_id) REFERENCES dept (id)
);

-- 添加员工
INSERT INTO emp(id,ename,job_id,mgr,joindate,salary,bonus,dept_id) VALUES
(1001,'孙悟空',4,1004,'2000-12-17','8000.00',NULL,20),
(1002,'卢俊义',3,1006,'2001-02-20','16000.00','3000.00',30),
(1003,'林冲',3,1006,'2001-02-22','12500.00','5000.00',30),
(1004,'唐僧',2,1009,'2001-04-02','29750.00',NULL,20),
(1005,'李逵',4,1006,'2001-09-28','12500.00','14000.00',30),
(1006,'宋江',2,1009,'2001-05-01','28500.00',NULL,30),
(1007,'刘备',2,1009,'2001-09-01','24500.00',NULL,10),
(1008,'猪八戒',4,1004,'2007-04-19','30000.00',NULL,20),
(1009,'罗贯中',1,NULL,'2001-11-17','50000.00',NULL,10),
(1010,'吴用',3,1006,'2001-09-08','15000.00','0.00',30),
(1011,'沙僧',4,1004,'2007-05-23','11000.00',NULL,20),
(1012,'李逵',4,1006,'2001-12-03','9500.00',NULL,30),
(1013,'小白龙',4,1004,'2001-12-03','30000.00',NULL,20),
(1014,'关羽',4,1007,'2002-01-23','13000.00',NULL,10);

-- 查询表数据
SELECT * FROM emp;

-- 工资等级表
DROP TABLE IF EXISTS salarygrade;
CREATE TABLE  IF NOT EXISTS salarygrade (
   grade INT PRIMARY KEY,   -- 级别
   losalary INT,  -- 最低工资
   hisalary INT -- 最高工资
);

-- 添加5个工资等级
INSERT INTO salarygrade(grade,losalary,hisalary) VALUES
   (1,7000,12000),(2,12010,14000),(3,14010,20000),(4,20010,30000),(5,30010,99990);

-- 查询表数据
SELECT * FROM salarygrade;
2、题目准备
-- 1.查询所有员工信息。查询员工编号,员工姓名,工资,职务名称,职务描述

-- 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置

-- 3.查询员工姓名,工资,工资等级

-- 4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级

-- 5.查询出部门编号、部门名称、部门位置、部门人数
第02节 参考答案
1、第01题
-- 1.查询所有员工信息。查询 员工编号,员工姓名,工资,职务名称,职务描述
/*
   分析过程:
	1. 需要查询的数据来自于哪些表?
		emp
		job
	2. 这些表当中存在什么关联关系?
		emp.job_id = job.id  因为查询所有的员工,外连接
	3. 查询的结果是什么?
		id  ename  salary 
		jname  description
*/
SELECT
	t1.id  '员工的编号',
	t1.ename  '员工的姓名',
	t1.salary '员工的工资',
	t2.jname  '职务的名称',
	t2.description  '职务的描述'
FROM
	emp t1
LEFT JOIN
	job t2
ON
	t1.job_id = t2.id;
2、第02题
-- 2.查询员工编号,员工姓名,工资,职务名称,职务描述,部门名称,部门位置
/*
   分析过程:
	1. 需要查询的数据来自于哪些表?
		emp
		job
		dept
	2. 这些表当中存在什么关联关系?
		emp.job_id = job.id  默认采用内连接查询
		emp.dept_id = dept.id 默认采用内连接查询
	3. 查询的结果是什么?
		id  ename  salary 
		jname  description
		dname  loc
*/
SELECT
	t1.id  '编号',
	t1.ename  '姓名',
	t1.salary  '工资',
	t2.jname  '职务',
	t2.description  '描述',
	t3.dname '部门',
	t3.loc  '位置'
FROM
	emp t1,
	job t2,
	dept t3
WHERE
	t1.job_id = t2.id 
AND
	t1.dept_id = t3.id;
3、第03题
-- 3.查询员工姓名,工资,工资等级
/*
   分析过程:
	1. 需要查询的数据来自于哪些表?
		emp
		salarygrade
	2. 这些表当中存在什么关联关系?
		范围关系. 没有说关系,默认采用 内连接
		emp.salary >= salarygrade.losalary AND emp.salary <= salarygrade.hisalary
	3. 查询的结果是什么?
		ename  salary  
		grade
*/
SELECT 
	t1.ename  '姓名',
	t1.salary '工资',
	t2.grade  '工资等级'
FROM
	emp t1,
	salarygrade t2
WHERE
	t1.salary >= t2.losalary AND t1.salary <= t2.hisalary;
4、第04题
-- 4.查询员工姓名,工资,职务名称,职务描述,部门名称,部门位置,工资等级
/*
   分析过程:
	1. 需要查询的数据来自于哪些表?
		emp
		salarygrade
		job
		dept
	2. 这些表当中存在什么关联关系?
		范围关系. 没有说关系,默认采用 内连接
		emp.salary >= salarygrade.losalary AND emp.salary <= salarygrade.hisalary
		职务和员工  emp.job_id = job.id
		部门和员工  emp.dept_id = dept.id
	3. 查询的结果是什么?
		ename  salary  
		grade
		jname  description
		dname  loc
*/
SELECT 
	t1.ename  '姓名',
	t1.salary  '工资',
	t2.grade  '工资等级',
	t3.jname  '职务',
	t3.description  '描述',
	t4.dname  '部门',
	t4.loc   '位置'
FROM
	emp t1,
	salarygrade t2,
	job t3,
	dept t4
WHERE
	t1.salary >= t2.losalary AND t1.salary <= t2.hisalary
AND
	t1.job_id = t3.id
AND
	t1.dept_id = t4.id;
5、第05题
-- 5.查询出部门编号、部门名称、部门位置、部门人数
/*
   分析过程:
	1. 需要查询的数据来自于哪些表?
		dept
		emp
	2. 这些表当中存在什么关联关系?
		dept.id = emp.dept_id
	3. 查询的结果是什么?
		id  dname  loc
		部门人数: 需要进行分组,聚合COUNT
*/
SELECT
	t1.id  '部门编号',
	t1.dname '部门名称',
	t1.loc  '部门位置',
	COUNT(t2.dept_id)   '部门人数'
FROM 
	dept t1,
	emp t2
WHERE
	t1.id = t2.dept_id
GROUP BY
	t2.dept_id;

今日总结:

今天学习主要是多表查询,子查询,

如何做sql语句的解题思路

1. 从哪些表当中去查找,我们想要的字段信息。 FROM 后面的语句
2. 查询的条件是什么呢? WHERE 语句
3. 是否需要分组呢? 如果需要则思考 GROUP BY 语句。 分组之后会不会有筛选,这里就要思考 >HAVING 子句
4. 查询的结果和查询字段? 也就是需要写 SELECT 后的语句

5. 是否需要排序呢? 如果有排序,则采用 ORDER BY
6. 是否需要分页操作? 如果有分页,采用 LIMIT 第几页,每页几条记录?

sql语句格式

SELECT
	....查询的结果,我们需要什么字段,就在这里写什么.....
FROM
	....数据库当中,数据表的名称....
WHERE
	....查询的条件,分组前的筛选....
GROUP BY
	....表里面的字段名,根据字段分组....
HAVING
	....查询的条件,分组后的筛选....
ORDER BY
	....字段名称和排序规则....
LIMIT
	....分页....

WHERE 和 HAVING 的区别?

1. 条件的区别:
	WHERE 表示的分组前的条件
	HAVING 表示分组后的条件

2. 聚合函数区别:
	WHERE 后面不可以跟上聚合函数
	HAVING 后面可以跟上聚合函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值