Java实现数据库表中的七种连接【Mysql】

news2024/12/30 3:00:17

Java实现数据库表中的七种连接【Mysql】

  • 前言
  • 版权
  • 推荐
  • Java实现数据库表中的七种连接
    • 左外连接
    • 右外连接
    • 其他连接
  • 附录
    • 七种连接
    • SQL测试
    • Java测试
      • 转换方法
      • 类 Cla1
      • 类 Cla2
      • 类Cla3
  • 最后

前言

2023-8-4 16:51:42

以下内容源自《【Mysql】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://blog.csdn.net/qq_51625007
禁止其他平台发布时删除以上此话

推荐

Java实现数据库表中的七种连接

左外连接

  /**
     * 左外连接
     * 计算
     *     SELECT cla1.`id`,cla1.`type`,cla2.`name`
     *     FROM cla1
     *     LEFT JOIN cla2
     *     ON cla1.`id`=cla2.`id`
     *     (Where cla2.id IS NULL);
     *
     * @param list1
     * @param list2
     * @param isNull 有没有括号中的IS NULL这条语句
     * @param out 输出吗?
     * @return
     */
    public static  List<Cla3> leftJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {
       List<Cla3> leftJoin=new ArrayList<>();

       //左表遍历
       list1.forEach(c1->{
           //在右表中有没有找到
           AtomicBoolean flag= new AtomicBoolean(false);
           list2.forEach(c2->{
               //找到了
               if(c1.id.equals(c2.id)){
                   //如果cla2.id is null,就不需要添加
                   if (!isNull) {
                       leftJoin.add(new Cla3(c1.id, c1.type, c2.name));
                   }
                   flag.set(true);
               }
           });
           //没有找到添加 右表属性 NULL
           if(!flag.get()){
               leftJoin.add(new Cla3(c1.id,c1.type,"null"));
           }
       });
       
        return leftJoin;
    }


右外连接

    /**
     * 右外连接
     * 计算
     *     SELECT cla2.`id`,cla1.`type`,cla2.`name`
     *     FROM cla1
     *     RIGHT JOIN cla2
     *     ON cla1.`id`=cla2.`id`
     *     (WHERE cla1.`id` IS NULL);
     *
     * @param list1
     * @param list2
     * @param isNull 有没有括号中的IS NULL这条语句
     * @return
     */
    public static  List<Cla3> rightJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {
        List<Cla3> rightJoin=new ArrayList<>();
        //右表遍历
        list2.forEach(c2->{
            //在左表中有没有找到
            AtomicBoolean flag= new AtomicBoolean(false);
            list1.forEach(c1->{
                //找到了
                if(c1.id.equals(c2.id)){
                    //如果cla1.id is null,就不需要添加
                    if (!isNull){
                        rightJoin.add(new Cla3(c2.id, c1.type,c2.name));
                    }
                    flag.set(true);
                }
            });
            //没有找到添加 左表属性 NULL
            if(!flag.get()){
                rightJoin.add(new Cla3(c2.id,"null",c2.name));
            }
        });

        return rightJoin;
    }

其他连接

外连接
 * 左外+右外
 * 右外+左外
内连接
 * 左外-左外ISNULL
 * 右外-右外ISNULL
外连接-内连接

附录

七种连接

MySQL笔记:第06章_多表查询

在这里插入图片描述

SQL测试

CREATE DATABASE cla;


USE cla;

CREATE TABLE cla1(
	`id` 	VARCHAR(10),
	`type` 	VARCHAR(10)
);

CREATE TABLE cla2(
	`id` 	VARCHAR(10),
	`name` 	VARCHAR(10)
);



INSERT INTO cla1 VALUES('22','cde');
INSERT INTO cla1 VALUES('11','abc');
INSERT INTO cla1 VALUES('44','cdef');
INSERT INTO cla1 VALUES('55','cdefg');

INSERT INTO cla2 
VALUES
('11','name1'),
('22','name2'),
('33','name3'),
('44','name4'),
('aa','nameaa');

#leftJoin 
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
/*
id	type	name
22	cde	name2
11	abc	name1
44	cdef	name4
55	cdefg	\N
*/

#leftJoin isnull
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla2.`id` IS NULL;
/*
id	type	name
55	cdefg	\N
*/


#rightJoin 
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
/*
id	type	name
11	abc	name1
22	cde	name2
33	\N	name3
44	cdef	name4
aa	\N	nameaa
*/

#rightJoin ISNULL
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla1.`id` IS NULL;
/*
id	type	name
33	\N	name3
aa	\N	nameaa
*/


#innerJoin leftBefore
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
INNER JOIN cla2
ON cla1.`id`=cla2.`id`
/*
id	type	name
11	abc	name1
22	cde	name2
44	cdef	name4
*/

#innerJoin rightBefore
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla2
INNER JOIN cla1
ON cla2.`id`=cla1.`id`
/*
id	type	name
11	abc	name1
22	cde	name2
44	cdef	name4
*/

#outJoin leftBefore
#左1+右2
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
UNION ALL
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla1.`id` IS NULL;
/*
id	type	name
22	cde	name2
11	abc	name1
44	cdef	name4
55	cdefg	\N
33	\N	name3
aa	\N	nameaa
*/

#outJoin rightBefore
#右1+左2
SELECT cla2.`id`,cla1.`type`,cla2.`name`
FROM cla1
RIGHT JOIN cla2
ON cla1.`id`=cla2.`id`
UNION ALL
SELECT cla1.`id`,cla1.`type`,cla2.`name`
FROM cla1
LEFT JOIN cla2
ON cla1.`id`=cla2.`id`
WHERE cla2.`id` IS NULL;
/*
id	type	name
11	abc	name1
22	cde	name2
33	\N	name3
44	cdef	name4
aa	\N	nameaa
55	cdefg	\N
*/

Java测试

转换方法


package test.algo;


import test.algo.main2.Cla1;
import test.algo.main2.Cla2;
import test.algo.main2.Cla3;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;



public class testJoin {

    static List<Cla1> claList1 = new ArrayList<>();
    static List<Cla2> claList2 = new ArrayList<>();

    static List<Cla3> list1 = new ArrayList<>();
    static List<Cla3> list2 = new ArrayList<>();


    public static void main(String[] args) {

        test();

        init(claList1,claList2);

        leftJoin(list1, list2,false,true);
        /*
        {id: 22, type: cde, name: name2}
        {id: 11, type: abc, name: name1}
        {id: 44, type: cdef, name: name4}
        {id: 55, type: cdefg, name: null}
         */

        leftJoin(list1, list2,true,true);;
        /*
        {id: 55, type: cdefg, name: null}
         */

        rightJoin(list1, list2,false,true);
        /*
        {id: 11, type: abc, name: name1}
        {id: 22, type: cde, name: name2}
        {id: 33, type: null, name: name3}
        {id: 44, type: cdef, name: name4}
        {id: aa, type: null, name: nameaa}
         */

        rightJoin(list1, list2,true,true);
        /*
        {id: 33, type: null, name: name3}
        {id: aa, type: null, name: nameaa}
         */


        outJoin(list1, list2,true,true);
        /*
        {id: 22, type: cde, name: name2}
        {id: 11, type: abc, name: name1}
        {id: 44, type: cdef, name: name4}
        {id: 55, type: cdefg, name: null}
        {id: 33, type: null, name: name3}
        {id: aa, type: null, name: nameaa}
         */

        outJoin(list1, list2,false,true);
        /*
        {id: 11, type: abc, name: name1}
        {id: 22, type: cde, name: name2}
        {id: 33, type: null, name: name3}
        {id: 44, type: cdef, name: name4}
        {id: aa, type: null, name: nameaa}
        {id: 55, type: cdefg, name: null}
         */


        innerJoin(list1,list2,true,true);
        /*
        {id: 22, type: cde, name: name2}
        {id: 11, type: abc, name: name1}
        {id: 44, type: cdef, name: name4}
         */

        innerJoin(list1,list2,false,true);
        /*
        {id: 11, type: abc, name: name1}
        {id: 22, type: cde, name: name2}
        {id: 44, type: cdef, name: name4}
         */

        outJoin_InnerJoin(list1,list2,true,true);
        /*
        {id: 55, type: cdefg, name: null}
        {id: 33, type: null, name: name3}
        {id: aa, type: null, name: nameaa}
         */
        outJoin_InnerJoin(list1,list2,false,true);
        /*
        {id: 33, type: null, name: name3}
        {id: aa, type: null, name: nameaa}
        {id: 55, type: cdefg, name: null}
         */

    }

    /**
     * 初始两个表中的数据
     */
    public static void test(){
        claList1.add(new Cla1("22", "cde"));
        claList1.add(new Cla1("11", "abc"));
        claList1.add(new Cla1("44", "cdef"));
        claList1.add(new Cla1("55", "cdefg"));

        claList2.add(new Cla2("11", "name1"));
        claList2.add(new Cla2("22", "name2"));
        claList2.add(new Cla2("33", "name3"));
        claList2.add(new Cla2("44", "name4"));
        claList2.add(new Cla2("aa", "nameaa"));
    }


    /**
     * 初始结果表中的数据
     */
    public static void init(List<Cla1> claList1, List<Cla2> claList2){
        claList1.forEach(cla1 -> list1.add(new Cla3(cla1.getId(), cla1.getType(), "null")));
        claList2.forEach(cla2 -> list2.add(new Cla3(cla2.getId(), "null", cla2.getName())));
    }


    /**
     *外连接-内连接
     * @param list1
     * @param list2
     * @param leftBefore 左边在前
     * @param out 是否输出
     * @return
     */
    public static List<Cla3> outJoin_InnerJoin(List<Cla3> list1, List<Cla3> list2,boolean leftBefore,boolean out){
        List<Cla3> outJoin_InnerJoin=new ArrayList<>();

        outJoin_InnerJoin.addAll(outJoin(list1, list2, leftBefore, false));
        outJoin_InnerJoin.removeAll(innerJoin(list1, list2, leftBefore, false));


        if(out){
            System.out.println("--------------------outJoin_InnerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");
            outJoin_InnerJoin.forEach(System.out::println);
            System.out.println("--------------------outJoin_InnerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");
        }
        return outJoin_InnerJoin;

    }

    /**
     * 内连接
     * 左外-左外ISNULL
     * 右外-右外ISNULL
     * @param list1
     * @param list2
     * @param leftBefore 左边在前
     * @param out 是否输出
     * @return
     */
    public static List<Cla3> innerJoin(List<Cla3> list1, List<Cla3> list2,boolean leftBefore,boolean out){
        List<Cla3> innerJoin=new ArrayList<>();

        if(leftBefore){
            innerJoin.addAll(leftJoin(list1, list2, false, false));
            innerJoin.removeAll(leftJoin(list1, list2, true, false));
        }else {
            innerJoin.addAll(rightJoin(list1, list2, false, false));
            innerJoin.removeAll(rightJoin(list1, list2, true, false));
        }

        if(out){
            System.out.println("--------------------innerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");
            innerJoin.forEach(System.out::println);
            System.out.println("--------------------innerJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");
        }
        return innerJoin;
    }


    /**
     * 左外连接
     * 计算
     *     SELECT cla1.`id`,cla1.`type`,cla2.`name`
     *     FROM cla1
     *     LEFT JOIN cla2
     *     ON cla1.`id`=cla2.`id`
     *     (Where cla2.id IS NULL);
     *
     * @param list1
     * @param list2
     * @param isNull 有没有括号中的IS NULL这条语句
     * @param out 输出吗?
     * @return
     */
    public static  List<Cla3> leftJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {
       List<Cla3> leftJoin=new ArrayList<>();

       list1.forEach(c1->{
           AtomicBoolean flag= new AtomicBoolean(false);
           list2.forEach(c2->{
               if(c1.id.equals(c2.id)){
                   if (!isNull) {
                       leftJoin.add(new Cla3(c1.id, c1.type, c2.name));
                   }
                   flag.set(true);
               }
           });
           if(!flag.get()){
               leftJoin.add(new Cla3(c1.id,c1.type,"null"));
           }
       });

       if(out){
            System.out.println("--------------------leftJoin---"+((isNull)?"isNull":"----")+"-------------------------------");
            leftJoin.forEach(System.out::println);
            System.out.println("--------------------leftJoin---"+((isNull)?"isNull":"----")+"-------------------------------");
            System.out.println();
       }

        return leftJoin;
    }

    /**
     * 右外连接
     * 计算
     *     SELECT cla2.`id`,cla1.`type`,cla2.`name`
     *     FROM cla1
     *     RIGHT JOIN cla2
     *     ON cla1.`id`=cla2.`id`
     *     (WHERE cla1.`id` IS NULL);
     *
     * @param list1
     * @param list2
     * @param isNull 有没有括号中的IS NULL这条语句
     * @return
     */
    public static  List<Cla3> rightJoin(List<Cla3> list1, List<Cla3> list2,boolean isNull,boolean out) {
        List<Cla3> rightJoin=new ArrayList<>();
        list2.forEach(c2->{
            AtomicBoolean flag= new AtomicBoolean(false);
            list1.forEach(c1->{
                if(c1.id.equals(c2.id)){
                    if (!isNull){
                        rightJoin.add(new Cla3(c2.id, c1.type,c2.name));
                    }
                    flag.set(true);
                }
            });
            if(!flag.get()){
                rightJoin.add(new Cla3(c2.id,"null",c2.name));
            }
        });
        if (out){
            System.out.println("--------------------rightJoin---"+((isNull)?"isNull":"----")+"-------------------------------");
            rightJoin.forEach(System.out::println);
            System.out.println("--------------------rightJoin---"+((isNull)?"isNull":"----")+"-------------------------------");
            System.out.println();
        }
        return rightJoin;
    }

    /**
     * 外连接
     * 左外+右外
     * 右外+左外
     *     SELECT *
     *     FROM tableA A
     *     FULL OUTER JOIN TableB B
     *     ON A.key=B.key
     *
     * @param leftBefore 结果集左表在前还是右边在前
     * @param out 输出吗
     * @return
     */
    public static List<Cla3> outJoin(List<Cla3> list1, List<Cla3> list2,boolean leftBefore,boolean out) {


        List<Cla3> outJoin=new ArrayList<>();
        List<Cla3> leftJoin = leftJoin(list1, list2,!leftBefore,false);
        List<Cla3> rightJoin = rightJoin(list1, list2,leftBefore,false);

        if (leftBefore){
            outJoin.addAll(leftJoin);
            outJoin.addAll(rightJoin);
        }else {
            outJoin.addAll(rightJoin);
            outJoin.addAll(leftJoin);
        }

        if(out){
            System.out.println("--------------------outJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");
            outJoin.forEach(System.out::println);
            System.out.println("--------------------outJoin"+((leftBefore)?"leftBefore":"rightBefore")+"-------------------------------");
        }

        return outJoin;

    }

}

类 Cla1

package test.algo.main2;

public class Cla1 {
    public String id;
    public String type;

    public Cla1(String id, String type) {
        this.id = id;
        this.type = type;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "{id: " + id + ", type: " + type + "}";
    }
}

类 Cla2

package test.algo.main2;

public class Cla2 {
    public String id;
    public String name;

    public Cla2(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "{id: " + id + ", name: " + name + "}";
    }
}

类Cla3

需要重写equals()
id==id

package test.algo.main2;

import java.util.Objects;

public class Cla3 {
    public String id;
    public String name;
    public String type;

    public Cla3(String id, String type, String name) {
        this.id = id;
        this.type = type;
        this.name = name;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Cla3 cla3 = (Cla3) o;
        return Objects.equals(id, cla3.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return "{id: " + id + ", type: " + type + ", name: " + name + "}";
    }
}

最后

2023-8-4 17:04:28

我们都有光明的未来

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦

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

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

相关文章

ARCGIS地理配准出现的问题

第一种。已有省级行政区矢量数据&#xff0c;在网上随便找一个相同省级行政区图片&#xff0c;利用地理配准工具给图片添加坐标信息。 依次添加省级行政区选择矢量数据、浙江省图片。 此时&#xff0c;图层默认的坐标系与第一个加载进来的省级行政区选择矢量数据的坐标系一致…

opencv基础40-礼帽运算(原始图像减去其开运算)cv2.MORPH_TOPHAT

礼帽运算是用原始图像减去其开运算图像的操作。礼帽运算能够获取图像的噪声信息&#xff0c;或者得到比原始图像的边缘更亮的边缘信息。 例如&#xff0c;图 8-22 是一个礼帽运算示例&#xff0c;其中&#xff1a; 左图是原始图像。中间的图是开运算图像。右图是原始图像减开运…

人工智能的最新进展:2024年将会发生什么?

文章目录 2024年AI最新发展2024年AI具体应用2024年AI的具体预测 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社区 &#x1f4d9; 专栏地址&#…

滥⽤合法商⽤程序⽤以进⾏访问控制

背景 攻击对抗日益激烈的局势下&#xff0c;安全产品的围追堵截使得攻击者将目光逐渐转向合法工具的滥用。通过使用具有合法签名的应用程序进行访问控制可以有效提高攻击隐匿性&#xff0c;也对防守及检测提出新的挑战。本文以Vscode、AnyDesk、GotoAssist为例探索攻击者用于访…

海外热门地区/国家常见主体证件示例

海外热门地区/国家常见主体证件示例&#xff08;本页面内容较多&#xff0c;你可以通过CtrlF搜索&#xff09; Overseas Popular Areas / Countries Examples of Common certificates &#xff08;This page has more content, you can search by CtrlF&#xff09; 中国香港…

C++数据结构之平衡二叉搜索树(一)——AVL的实现(zig-zag/左右双旋/3+4重构)

目录 00.BBST——平衡二叉搜索树01.AVL树02.AVL的插入2.1单旋——zig 与 zag2.2插入节点后的单旋实例2.3手玩小样例2.4双旋实例2.5小结 03.AVL的删除3.1单旋删除3.2双旋删除3.3小结 04.34重构05.综合评价AVL5.1优点5.2缺点 00.BBST——平衡二叉搜索树 本文是介绍众多平衡二叉搜…

Sui的赞助交易(gas代付),打开Web2用户丝滑使用Web3之路

Sui Move包括一个功能&#xff0c;允许开发者为其应用程序的一些或全部交易支付gas费&#xff0c;消除了用户在进入Web3时面临的一个最大障碍。在Web3网络中&#xff0c;通常用户需要支付所谓的 gas费才能使用应用程序。Sui的赞助交易功能为愿意采用的开发者消除了这种阻碍。 …

仓库管理系统有哪些功能,如何对仓库进行有效管理

阅读本文&#xff0c;您可以了解&#xff1a;1、仓库管理系统有哪些功能&#xff1b;2、如何对仓库进行有效管理。 仓库是制造业的开端&#xff0c;原材料的领料开始。企业的仓库管理是涉及企业生产、企业资金流和企业的经营风险的关键环节。在众多的工业企业、制造型企业、贸…

都市信息供求网servlet+jsp新闻广告出售java源代码mysql

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 都市信息供求网servletjsp 系统1权限&#xff1a;管理…

怎么做自动化测试?8年测试老鸟自动化测试总结,史上最全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、为什么做自动化…

AutoML工具-AutoGluon

1、简介 AutoGluon是AutoML的自动化工具&#xff0c;涉及方面有图像、文本、时间序列和表格式数据。 2、入门 2.1 安装 pip install autogluon 2.2 使用 &#xff08;1&#xff09;Tabular&#xff08;解释是表格式数据&#xff0c;不知道对不对&#xff09; 两个函数Ta…

Vue使用QuillEditor富文本编辑器问题记录

1.内容绑定的问题 绑定内容要使用 v-model:content"xxx" 的形式。 2.设置字体字号 字体以及字号大小的设置需要先注册。 <script> import { QuillEditor,Quill } from vueup/vue-quill import vueup/vue-quill/dist/vue-quill.snow.css; // 设置字体大小 c…

认识聚类算法【机器学习必学】

什么是聚类算法? 聚类算法是一种典型的无监督学习算法&#xff0c;主要用于将相似的样本自动归到一个类别中。 在聚类算法中根据样本之间的相似性&#xff0c;将样本划分到不同的类别中&#xff0c;对于不同的相似度计算方法&#xff0c;会得到不同的聚类结果&#xff0c;常…

为代码生成一个良好可读的API文档-Doxygen简单实战

需求&#xff1f;为什么要有API文档 在代码开发过程中&#xff0c;我们会发现有这样的情况&#xff0c;其他团队的代码和自己团队的代码相异甚大&#xff0c;如果没有一个统一规范的文档来对接&#xff0c;会造成很多交流沟通上的不便&#xff0c;但我们又不想浪费时间去边写说…

探索产品项目管理软件的种类及功能

随着科技的不断发展&#xff0c;越来越多的企业开始重视产品项目管理的重要性。产品项目管理软件作为一种有效的工具&#xff0c;可以帮助企业更好地规划、执行和控制项目&#xff0c;提高项目的成功率。本文将分为两部分&#xff0c;分别介绍产品项目管理软件的功能以及一些知…

微信认证申请流程(其他组织)

第一步&#xff1a;登录微信公众平台->设置->微信认证->开通 第二步&#xff1a;同意协议&#xff1a;签署《微信公众平台认证服务协议》 第三步&#xff1a;验证管理员 第三步&#xff1a;选择认证类型及填写认证资料 选择认证类型及上传申请公函 其他组织资质信息 …

制作分班查询系统必备软件,轻松解决分班查询烦恼

常用的分班查询系统制作工具有以下几种&#xff1a; 1. 编程语言和框架&#xff1a;使用编程语言和相关的框架&#xff0c;如Java、Python、PHP等&#xff0c;可以自行开发分班查询系统。这种方式可以根据学校的具体需求进行定制开发&#xff0c;灵活性较高。 2. 数据库管理系…

管理类联考——逻辑——形式逻辑——汇总篇——专业术语

专业术语 专业术语 日常描述 符号化 符号表达 表达含义 常见标志词充分条件假言判断如果P&#xff0c;那么Q→P→Q如果P为真&#xff0c;则Q一定为真&#xff1b;如果Q为假&#xff0c;那么P一定为假。也就是P→Q和┐Q→┐P一定为真。如果P&#xff0c;那么Q&#xff1b;只要P&…

51单片机(普中HC6800-EM3 V3.0)实验例程软件分析 实验三 LED流水灯

目录 前言 一、原理图及知识点介绍 二、代码分析 知识点五&#xff1a;#include 中的库函数解析 _crol_&#xff0c;_irol_&#xff0c;_lrol_ _cror_&#xff0c;_iror_&#xff0c;_lror_ _nop_ _testbit_ 前言 第一个实验:51单片机&#xff08;普中HC6800-EM3 V3.0…

OpenLayers入门,OpenLayers使用fetch加载并显示TopoJson格式区划边界数据并叠加文字标注,动态创建要素样式

专栏目录: OpenLayers入门教程汇总目录 前言 上一章中已经说明了TopoJson格式数据,《OpenLayers入门,OpenLayers加载TopoJson数据,使用行政区划边界作为示例》,大家应该都已经有所了解。 本章在上一章基础上改用fetch加载TopoJson格式数据,并手动解析数据为Feature要素…