JavaWeb开发-07-MySQL(二)

2023-09-21 21:36:56

一.数据库操作-DQL

-- 准备测试数据
INSERT INTO tb_emp (id, username, password, name, gender, image, job, entrydate, create_time, update_time) VALUES
(1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:35'),
(2, 'zhangwuji', '123456', '张无忌', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:37'),
(3, 'yangxiao', '123456', '杨逍', 1, '3.jpg', 2, '2008-05-01', '2022-10-27 16:35:33', '2022-10-27 16:35:39'),
(4, 'weiyixiao', '123456', '韦一笑', 1, '4.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:41'),
(5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05', '2022-10-27 16:35:33', '2022-10-27 16:35:43'),
(6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:45'),
(7, 'jixiaofu', '123456', '纪晓芙', 2, '7.jpg', 1, '2005-08-01', '2022-10-27 16:35:33', '2022-10-27 16:35:47'),
(8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09', '2022-10-27 16:35:33', '2022-10-27 16:35:49'),
(9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', '2022-10-27 16:35:33', '2022-10-27 16:35:51'),
(10, 'zhaomin', '123456', '赵敏', 2, '10.jpg', 1, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:53'),
(11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 2, '2007-02-01', '2022-10-27 16:35:33', '2022-10-27 16:35:55'),
(12, 'hebiweng', '123456', '鹤笔翁', 1, '12.jpg', 2, '2008-08-18', '2022-10-27 16:35:33', '2022-10-27 16:35:57'),
(13, 'fangdongbai', '123456', '方东白', 1, '13.jpg', 1, '2012-11-01', '2022-10-27 16:35:33', '2022-10-27 16:35:59'),
(14, 'zhangsanfeng', '123456', '张三丰', 1, '14.jpg', 2, '2002-08-01', '2022-10-27 16:35:33', '2022-10-27 16:36:01'),
(15, 'yulianzhou', '123456', '俞莲舟', 1, '15.jpg', 2, '2011-05-01', '2022-10-27 16:35:33', '2022-10-27 16:36:03'),
(16, 'songyuanqiao', '123456', '宋远桥', 1, '16.jpg', 2, '2010-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:05'),
(17, 'chenyouliang', '12345678', '陈友谅', 1, '17.jpg', null, '2015-03-21', '2022-10-27 16:35:33', '2022-10-27 16:36:07'),
(18, 'zhang1', '123456', '张一', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:09'),
(19, 'zhang2', '123456', '张二', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:11'),
(20, 'zhang3', '123456', '张三', 1, '2.jpg', 2, '2018-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:13'),
(21, 'zhang4', '123456', '张四', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:15'),
(22, 'zhang5', '123456', '张五', 1, '2.jpg', 2, '2016-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:17'),
(23, 'zhang6', '123456', '张六', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:19'),
(24, 'zhang7', '123456', '张七', 1, '2.jpg', 2, '2006-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:21'),
(25, 'zhang8', '123456', '张八', 1, '2.jpg', 2, '2002-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:23'),
(26, 'zhang9', '123456', '张九', 1, '2.jpg', 2, '2011-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:25'),
(27, 'zhang10', '123456', '张十', 1, '2.jpg', 2, '2004-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:27'),
(28, 'zhang11', '123456', '张十一', 1, '2.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:29'),
(29, 'zhang12', '123456', '张十二', 1, '2.jpg', 2, '2020-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:31');

-- ========================= DQL : 基本查询 =========================
-- 1.查询指定字段 name, entrydate 并返回
select name, entrydate from tb_emp;


-- 2.查询返回所有字段
-- (推荐)
select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;

-- (不推荐: 不直观,性能低)
select * from tb_emp;


-- 3.查询所有员工的 name, entrydate, 并起别名(姓名, 入职日期)
select name '姓名', entrydate '入职日期' from tb_emp;


-- 4.查询已有的员工关联了哪几种职业(不要重复)
-- distinct 去重复
select distinct job from tb_emp;

-- ========================= DQL : 条件查询 =========================
-- 1.查询 姓名 为 杨逍 的员工
select * from tb_emp where name='杨逍';

-- 2.查询 id 小于等于 5 的 员工信息
select * from tb_emp where id <= 5;

-- 3.查询 没有分配职务的 员工信息
select * from tb_emp where job is null;

-- 4.查询 有职位的 员工信息
select * from tb_emp where job is not null;

-- 5.查询 密码不等于 '123456' 的员工信息
select * from tb_emp where password != '123456';
select * from tb_emp where password <> '123456';

-- 6.查询 入职日期 在'2000-01-01' (包含) 到 '2010-01-01' (包含) 之间的员工信息'
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';

select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01';

-- 7.查询 入职日期在 '2000-01-01' (包含) 到 '2010-01-01' (包含) 之间 且性别为 女 的员工信息
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01' && gender = 2;

select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01' and gender = 2;

-- 8.查询 职位是 2 (讲师), 3(班主任), 4(教研主管) 的员工信息
select * from tb_emp where job between 2 and 4;

select * from tb_emp where job = 2 or job = 3 or job = 4;

select * from tb_emp where job in (2,3,4);

-- 9.查询 姓名 为两个字的员工信息
select * from tb_emp where name like '__';

-- 10.查询 姓 '张' 的员工信息
select * from tb_emp where name like '张%';

 

-- ========================= DQL : 条件查询 =========================
-- 聚合函数 : 不对null值运算
-- 1.统计企业员工数量
--   A.count(字段)
select count(id) from tb_emp;

--   B.count(常量)
select count(0) from tb_emp;

--   C.count(*)                 --推荐
select count(*) from tb_emp;

-- 2.统计企业最早入职的员工 -- min
select min(entrydate) from tb_emp;

-- 3.统计企业最晚入职的员工
select max(entrydate) from tb_emp;

-- 4.统计企业员工 ID 的平均值 -- avg
select avg(id) from tb_emp;

-- 5.统计企业员工 ID 之和 -- sum
select sum(id) from tb_emp;

 面试题:

where与having区别:

        1.执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而

                                    having是分组之后对结果进行过滤。


        2.判断条件不同:where不能对聚合函数进行判断,而having可以。

-- 分组
-- 分组查询:select  字段列表  from   表名  [ where   条件 ]  group   by  分组字段名  [ having  分组后过滤条件 ];
-- 1.根据性别分组, 统计男性和女性的员工数量
select gender,count(*) from tb_emp group by gender;

-- 2.先查询入职时间在 '2015-01-01' (包含) 以前的员工, 并对结果根据职位分组, 获取员工数量大于等于2的职位
select job,count(*) from tb_emp where entrydate <= '2015-01-01' group by job having count(*) >= 2;

-- ========================= DQL : 排序查询 =========================
-- 条件查询:select  字段列表  from   表名   [ where   条件列表 ] [ group by  分组字段 ] order  by  字段1  排序方式1 , 字段2  排序方式2 ......
-- ASC:升序(默认值)              DESC:降序
-- 1.根据 入职时间,对员工进行升序排序
select * from tb_emp order by entrydate asc;
select * from tb_emp order by entrydate;

-- 2.根据 入职时间,对员工进行降序排序
select * from tb_emp order by entrydate desc;

-- 3.根据 入职时间,对公司的员工进行升序排序,入职时间相同,在按照 更新时间 进行降序排序
select * from tb_emp order by entrydate asc, update_time desc ;
select * from tb_emp order by entrydate, update_time desc ;

-- ========================= DQL : 分页查询 =========================
-- 分页查询:select  字段列表  from   表名  limit  起始索引, 查询记录数 ;
-- 1.从 起始索引0 开始查询员工数据, 每页显示5条记录
select * from tb_emp limit 0, 5;

-- 2.查询 第1页 员工数据,每页展示5条记录
select * from tb_emp limit 0, 5;

-- 3.查询 第2页 员工数据,每页展示5条记录
select * from tb_emp limit 5, 5;

-- 3.查询 第3页 员工数据,每页展示5条记录
select * from tb_emp limit 10, 5;

-- 公式: 起始索引 = (页 - 1) * 条

 公式: 起始索引 = (页码 - 1) * 条数

-- 案例一: 按需求完成员工管理的条件分页查询 - 根据输入条件, 查询第一页数据, 每页展示10条记录
-- 输入条件;
    -- 姓名: 张
    -- 性别: 男
    -- 入职时间: 2000-01-01     2015-12-13
select *
from tb_emp
where name like '张%'
  and gender = 1
  and entrydate between '2000-01-01' and '2015-12-13'
order by update_time desc
limit 0,10;

-- 案例2-1: 根据需求,完成员工性别信息的统计 -- count
-- if(条件表达式,true取值,false取值)
select if(gender = 1, '男性员工','女性员工') '性别', count(*) '数量' from tb_emp group by gender;

-- 案例2-2: 根据需求, 完成员工职位信息的统计
-- if嵌套 --经典屎山,不推荐
select if(job <= 2, if(job = 1, '班主任', '讲师'), if(job = 3, '教研主管', if(job = 4,'学工主管','未分配职位'))) '职位', count(*) '数量'
from tb_emp
group by job;

-- case 表达式 when 值 1 then 结果1 when 值 2 then 结果2 when 值 3 then 结果3...else...end
select case job when 1 then '班主任' when 2 then '讲师' when 3 then '教研主管' when 4 then '学工主管' else '未分配职位' end '职位', count(*) '数量'
from tb_emp
group by job;

 

二.多表设计

1.一对多

-- ===========================================一对多=====================================
-- 员工
create table tb_emp
(
    id          int unsigned primary key auto_increment comment 'ID',
    username    varchar(20)      not null unique comment '用户名',
    password    varchar(32) default '123456' comment '密码',
    name        varchar(10)      not null comment '姓名',
    gender      tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
    image       varchar(300) comment '图像',
    job         tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',
    entrydate   date comment '入职时间',
    dept_id     int unsigned comment '归属部门ID',
    create_time datetime         not null comment '创建时间',
    update_time datetime         not null comment '修改时间'
) comment '员工表';

-- 新增部门
create table tb_dept
(
    id          int unsigned primary key auto_increment comment 'ID',
    name        varchar(20) not null unique comment '部门名称',
    create_time datetime    not null comment '创建时间',
    update_time datetime    not null comment '修改时间'
) comment '部门表';

-- 插入测试数据
insert into tb_dept (id, name, create_time, update_time)
values (1, '学工部', now(), now()),
       (2, '教研部', now(), now()),
       (3, '咨询部', now(), now()),
       (4, '就业部', now(), now()),
       (5, '人事部', now(), now());

INSERT INTO tb_emp
(id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)
VALUES (1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', 2, now(), now()),
       (2, 'zhangwuji', '123456', '张无忌', 1, '2.jpg', 2, '2015-01-01', 2, now(), now()),
       (3, 'yangxiao', '123456', '杨逍', 1, '3.jpg', 2, '2008-05-01', 2, now(), now()),
       (4, 'weiyixiao', '123456', '韦一笑', 1, '4.jpg', 2, '2007-01-01', 2, now(), now()),
       (5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05', 2, now(), now()),
       (6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', 1, now(), now()),
       (7, 'jixiaofu', '123456', '纪晓芙', 2, '7.jpg', 1, '2005-08-01', 1, now(), now()),
       (8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09', 1, now(), now()),
       (9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', 1, now(), now()),
       (10, 'zhaomin', '123456', '赵敏', 2, '10.jpg', 1, '2013-09-05', 1, now(), now()),
       (11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 1, '2007-02-01', 1, now(), now()),
       (12, 'hebiweng', '123456', '鹤笔翁', 1, '12.jpg', 1, '2008-08-18', 1, now(), now()),
       (13, 'fangdongbai', '123456', '方东白', 1, '13.jpg', 2, '2012-11-01', 2, now(), now()),
       (14, 'zhangsanfeng', '123456', '张三丰', 1, '14.jpg', 2, '2002-08-01', 2, now(), now()),
       (15, 'yulianzhou', '123456', '俞莲舟', 1, '15.jpg', 2, '2011-05-01', 2, now(), now()),
       (16, 'songyuanqiao', '123456', '宋远桥', 1, '16.jpg', 2, '2010-01-01', 2, now(), now()),
       (17, 'chenyouliang', '123456', '陈友谅', 1, '17.jpg', NULL, '2015-03-21', NULL, now(), now());


2.一对一


-- ===========================================一对一=====================================
create table tb_user
(
    id     int unsigned primary key auto_increment comment 'ID',
    name   varchar(10)      not null comment '姓名',
    gender tinyint unsigned not null comment '性别, 1 男  2 女',
    phone  char(11) comment '手机号',
    degree varchar(10) comment '学历'
) comment '用户信息表';

insert into tb_user
values (1, '白眉鹰王', 1, '18812340001', '初中'),
       (2, '青翼蝠王', 1, '18812340002', '大专'),
       (3, '金毛狮王', 1, '18812340003', '初中'),
       (4, '紫衫龙王', 2, '18812340004', '硕士');


create table tb_user_card
(
    id           int unsigned primary key auto_increment comment 'ID',
    nationality  varchar(10)  not null comment '民族',
    birthday     date         not null comment '生日',
    idcard       char(18)     not null comment '身份证号',
    issued       varchar(20)  not null comment '签发机关',
    expire_begin date         not null comment '有效期限-开始',
    expire_end   date comment '有效期限-结束',
    user_id      int unsigned not null unique comment '用户ID',
    constraint fk_user_id foreign key (user_id) references tb_user (id)
) comment '用户信息表';

insert into tb_user_card
values (1, '汉', '1960-11-06', '100000100000100001', '朝阳区公安局', '2000-06-10', null, 1),
       (2, '汉', '1971-11-06', '100000100000100002', '静安区公安局', '2005-06-10', '2025-06-10', 2),
       (3, '汉', '1963-11-06', '100000100000100003', '昌平区公安局', '2006-06-10', null, 3),
       (4, '回', '1980-11-06', '100000100000100004', '海淀区公安局', '2008-06-10', '2028-06-10', 4);


3.多对多


--  ======================================多对多=============================
create table tb_student
(
    id   int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    no   varchar(10) comment '学号'
) comment '学生表';

insert into tb_student(name, no)
values ('黛绮丝', '2000100101'),
       ('谢逊', '2000100102'),
       ('殷天正', '2000100103'),
       ('韦一笑', '2000100104');

-- ------------------- -----------------

create table tb_course
(
    id   int auto_increment primary key comment '主键ID',
    name varchar(10) comment '课程名称'
) comment '课程表';

insert into tb_course (name)
values ('Java'),
       ('PHP'),
       ('MySQL'),
       ('Hadoop');

-- ------------------- -----------------

create table tb_student_course
(
    id         int auto_increment comment '主键' primary key,
    student_id int not null comment '学生ID',
    course_id  int not null comment '课程ID',
    constraint fk_courseid foreign key (course_id) references tb_course (id),
    constraint fk_studentid foreign key (student_id) references tb_student (id)
) comment '学生课程中间表';

insert into tb_student_course(student_id, course_id)
values (1, 1),
       (1, 2),
       (1, 3),
       (2, 2),
       (2, 3),
       (3, 4);

4.案例

 

-- auto-generated definition
create table category
(
    id          int unsigned auto_increment comment '主键id'
        primary key,
    name        varchar(20)                  not null comment '分类名称',
    type        tinyint unsigned             not null comment '分类类型:1 菜品分类, 2 套餐分类',
    sort        tinyint unsigned             not null comment '排序',
    status      tinyint unsigned default '0' not null comment '状态: 0 停用, 1 启用',
    create_time datetime                     not null comment '创建时间',
    update_time datetime                     not null comment '修改时间',
    constraint category_name_uindex
        unique (name)
)
    comment '分类表';

-- auto-generated definition
create table dish
(
    id          tinyint unsigned auto_increment comment '主键id'
        primary key,
    name        varchar(20)                  not null comment '菜品名称',
    category_id int unsigned                 not null comment '菜品分类id',
    price       decimal(8, 2) unsigned       not null comment '价格',
    image       varchar(300)                 not null comment '图片',
    description varchar(200)                 null comment '描述',
    status      tinyint unsigned default '0' not null comment '状态:0 停售, 1 启售',
    create_time datetime                     not null comment '创建时间',
    update_time datetime                     not null comment '修改时间',
    constraint dish_name_uindex
        unique (name)
)
    comment '菜品表';

-- auto-generated definition
create table setmeal
(
    id          int unsigned auto_increment comment '主键id'
        primary key,
    name        varchar(20)                  not null comment '套餐名称',
    category_id int unsigned                 not null comment '套餐分类',
    price       decimal(8, 2) unsigned       not null comment '价格',
    image       varchar(300)                 not null comment '图片',
    description varchar(200)                 null comment '套餐描述',
    status      tinyint unsigned default '0' not null comment '状态:0 停售, 1 启售',
    create_time datetime                     not null comment '创建时间',
    update_time datetime                     not null comment '修改时间',
    constraint setmeal_name_uindex
        unique (name)
)
    comment '套餐表';

-- auto-generated definition
create table setmeal_dish
(
    id         int unsigned auto_increment comment '主键id'
        primary key,
    setmeal_id int unsigned     not null comment '套餐id',
    dish_id    int unsigned     not null comment '菜品id',
    copies     tinyint unsigned not null comment '菜品份数'
)
    comment '套餐菜品关系表';

更多推荐

【Hadoop】HDFS API 操作大全

🍁博主"开着拖拉机回家"带您GotoNewWorld.✨🍁🦄个人主页——🎐开着拖拉机回家_Linux,大数据运维-CSDN博客🎐✨🍁🪁🍁希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁🪁🪁🍁🪁🍁🪁🍁🪁🍁🪁🍁�

多台服务器sessionId共享

目录多台服务器sessionId共享解决方案:ASP.NETCore参考代码(NET7):登录处理登录(请求)过滤器过滤器使用BaseController多台服务器sessionId共享sessionid是服务器首次与浏览器创建连接时,生成的id值,存入浏览器端cookie中,值加密的,下次请求时,浏览器自动带上ses

Flutter——启动页白屏的优化

flutter启动页白屏的优化:使用图片替代白屏结构图核心的代码如上图,修改两个launch_background.xml里的代码为:<item><bitmapandroid:gravity="center"android:src="@mipmap/ic_launcher"/></item>@mipmap/ic_lau

探讨代理IP与Socks5代理在跨界电商中的网络安全应用

在数字化时代,跨界电商已经成为了商业世界中的一大趋势。然而,跨越国界的电商活动也伴随着网络安全挑战。本文将讨论如何利用代理IP和Socks5代理技术来提高跨界电商中的网络安全,同时也探讨了与游戏相关的爬虫应用。1.代理IP和Socks5代理的基本概念1.1代理IP代理IP是一种网络技术,允许用户在访问互联网时使用中间服

JWT令牌

一、JWT(JsonWebToken)能干什么1、安全认证(权限认证)比如登录系统的时候,服务器会检查前端请求数据中携带的token信息,符合标准则允许访问,不符合则拒绝你的访问请求。2、信息传递比如两个系统之间传递信息,a服务器向B服务器发送token信息,b服务器对token进行解签名,发现签名对的上就接收数据,对

进程程序替换

✅<1>主页::我的代码爱吃辣📃<2>知识讲解:Linux——进程替换☂️<3>开发环境:Centos7💬<4>前言:我们创建子进程的目的是什么?想让子进程帮我们执行特定的任务。那么如何让子进程去执行一段新的代码呢?一.背景二.子进程程序替换三.替换函数1.execv2.execlp3.execle4.命名理解四.

打工人的灵魂,五天在囚笼里,剩下两天在骂街

点击文末“阅读原文”即可参与节目互动剪辑、音频/卷圈运营/SandLiu卷圈监制/姝琦封面/姝琦@midjourney产品统筹/bobo场地支持/声湃轩天津录音间在不想上班这件事上,从古至今,从名人大师到渺小如我们,所有人的想法都是一样的。高尔基他老人家说过:工作是快乐时,人生便是幸福;工作是义务时,人生便是苦役。按照

FastAPI学习大纲

FastAPI是一个现代的、快速的(高性能的)、基于标准Python类型的Web框架,用于构建APIs。它基于标准的Python类型提示,并且它的主要优点是速度、类型安全以及自动的API文档生成。如果您要使用FastAPI,以下是一些必须了解的关键点及相关命令:安装:pipinstallfastapi[all]pipi

第三、四、五场面试

第三场共享屏幕做题(三道简单题)替换空格成%20(双指针)删除升序链表中的重复元素(指针)有效的括号(栈)第四场、第五场自我介绍项目拷打整个项目架构rpc模块的情况分析的数据从那里获取,如何获取整个项目还有哪些不足与改进docker模块的主要工作说一下DNSmap底层的红黑树跟二叉搜索树有什么区别?介绍一下HTTP介绍

DataSheet专业名词解读——每天10个专业名词(1)23.9.18 (NXP)MPC5604B/C

文章目录1.variablelengthencoding(VLE)可变长度编码2.ErrorCorrectionCode(ECC)纠错编码3.Memoryprotectionunit(MPU)内存保护单元4.Interruptcontroller(INTC)中断控制器5.Frequencymodulatedphase-

机器视觉-标定篇

3D结构光标定结构光视觉的优点:非接触、信息量大、测精度高、抗干扰能力强。结构光视觉传感器参数的标定包括:摄像机参数标定、结构光平面参数标定。结构光视觉测量原理图我们不考虑镜头的畸变,将相机的成像模型简化为小孔成像模型,则特征点的图像坐标Pf与其在摄像机坐标系下的三维坐标P之间的关系可表示为:其中:(u,v)是特征点的

热文推荐