1.表的加减法

1.1 表的加法–UNION

  SELECT product_id,product_name,product_type,sale_price,purchase_pricefrom productwhere sale_price > purchase_price*1.5UNIONSELECT product_id,product_name,product_type,sale_price,purchase_pricefrom productwhere sale_price <800;
--相当于取了并集,但是去掉了重复值

1.1.1. UNION与OR谓词

效力在同表联结时相同,但联结不同表时必须用UNION。

练习题 :

分别使用 UNION 或者 OR 谓词,找出毛利率不足 30%或毛利率未知的商品

  SELECT product_id,product_name,product_type,sale_price,purchase_priceFROM productWHERE sale_price<purchase_price*1.3UNIONSELECT product_id,product_name,product_type,sale_price,purchase_priceFROM productWHERE sale_price/purchase_price is NULL;
--SELECT product_id,product_name,product_type,sale_price,purchase_priceFROM productWHERE sale_price<purchase_price*1.3 OR sale_price/purchase_price is null;
--结果有区别,OR中没有去掉NULL项

1.1.2 包含重复行的集合运算 UNION ALL

在 UNION 的结果中保留重复行的语法,只需要在 UNION 后面添加 ALL 关键字。

UNION ALL

例如, 想要知道 product 和 product2 中所包含的商品种类及每种商品的数量, 第一步,就需要将两个表的商品种类字段选出来, 然后使用 UNION ALL 进行不去重地合并. 接下来再对两个表的结果按 product_type 字段分组计数.

-- 保留重复行
SELECT product_id, product_nameFROM productUNION ALL
SELECT product_id, product_nameFROM product2;

练习题:

商店决定对product表中利润低于50%和售价低于1000的商品提价, 请使用UNION ALL 语句将分别满足上述两个条件的结果取并集. 查询结果类似下表:

SELECT  *
FROM product
WHERE sale_price/purchase_price < 1.5
UNION ALL
SELECT *
FROM product
WHERE sale_price<=1000;

1.1.3 bag 模型与 set 模型

Bag 是和 set 类似的一种数学结构, 不一样的地方在于: bag 里面允许存在重复元素, 如果同一个元素被加入多次, 则袋子里就有多个该元素.

1.1.4 隐式类型转换

隐式类型转换:在MySQL中,当操作符与不同类型的对象一起使用时,会发生类型转换以使各个操作对象兼容,则会发生转换隐式。

--1与sale_price相连接
SELECT product_id, product_name, '1'FROM productUNION
SELECT product_id, product_name,sale_priceFROM product2;

练习题:

使用 SYSDATE()函数可以返回当前日期时间, 是一个日期时间类型的数据, 试测试该数据类型和数值,字符串等类型的兼容性.

例如, 以下代码可以正确执行, 说明时间日期类型和字符串,数值以及缺失值均能兼容.

SELECT SYSDATE(), SYSDATE(), SYSDATE()UNIONSELECT 'chars', 123,  null

1.1.5 bag 的交运算

对于两个 bag, 他们的交运算会按照: 1.该元素是否同时属于两个 bag, 2.该元素在两个 bag 中的最小出现次数这两个方面来进行计算. 因此对于 A = {1,1,1,2,3,5,7}, B = {1,1,2,2,4,6,8} 两个 bag, 它们的交运算结果就等于 {1,1,2}.

1.2 差集,补集与表的减法

MySQL 不支持 表的减法运算符 EXCEPT.但可使用NOT IN 谓词实现表的减法。

练习题**:**

找出只存在于product表但不存在于product2表的商品.

SELECT *
FROM product
WHERE product_id NOT IN(SELECT product_id FROM product2);

1.2.1 EXCEPT 与 NOT 谓词

练习题:

使用NOT谓词进行集合的减法运算, 求出product表中, 售价高于2000,但利润低于30%的商品

SELECT *
FROM product
WHERE  sale_price >2000
AND  product_id NOT IN(SELECT product_id  FROM productWHERE sale_price < purchase_price*1.3 );

1.2.2 EXCEPT ALL 与bag 的差

EXCEPT ALL按照出现次数做减法。

对于两个 bag, 他们的差运算会按照:

1.该元素是否属于作为被减数的 bag,

2.该元素在两个 bag 中的出现次数

这两个方面来进行计算. 只有属于被减数的bag的元素才参与EXCEP ALL运算, 并且差bag中的次数,等于该元素在两个bag的出现次数之差(差为零或负数则不出现). 因此对于 A = {1,1,1,2,3,5,7}, B = {1,1,2,2,4,6,8} 两个 bag, 它们的差就等于 {1,3,5,7}.

1.2.3 INTERSECT 与 AND 谓词

对于同一个表的两个查询结果而言, 他们的交INTERSECT实际上可以等价地将两个查询的检索条件用AND谓词连接来实现.

练习题:

****使用AND谓词查找product表中利润率高于50%,并且售价低于1500的商品,查询结果如下所示

SELECT *
FROM product
WHERE sale_price>1.5*purchase_price
AND sale_price <1500;

1.3 对称差

两个集合A,B的对称差是指那些仅属于A或仅属于B的元素构成的集合. 对称差也是个非常基础的运算, 例如, 两个集合的交就可以看作是两个集合的并去掉两个集合的对称差.上述方法在其他数据库里也可以用来简单地实现表或查询结果的对称差运算: 首先使用UNION求两个表的并集, 然后使用INTERSECT求两个表的交集, 然后用并集减去交集, 就得到了对称差.

练习题:

使用product表和product2表的对称差来查询哪些商品只在其中一张表,提示: 使用 NOT IN 实现两个表的差集.

SELECT *
FROM product
WHERE product_id NOT IN (SELECT product_id FROM product2)
UNION
SELECT *
FROM product2
WHERE product_id NOT IN (SELECT product_id FROM product);

2. 连结

连结(JOIN)就是使用某种关联条件(一般是使用相等判断谓词"="), 将其他表中的列添加过来, 进行“添加列”的集合运算. 可以说,连结是 SQL 查询的核心操作, 掌握了连结, 能够从两张甚至多张表中获取列, 能够将过去使用关联子查询等过于复杂的查询简化为更加易读的形式, 以及进行一些更加复杂的查询.

2.1  内连结(INNER JOIN)

-- 内连结语法格式
FROM <tb_1> INNER JOIN <tb_2> ON <condition(s)>

2.1.1 使用内连结从两个表获取信息

SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,
P.product_type,P.sale_price,SP.quantity
FROM shopproduct AS SP
INNER JOIN product AS P
on SP.product_id=P.product_id;

注意:要点一: 进行连结时需要在 FROM 子句中使用多张表.

          要点二:必须使用 ON 子句来指定连结条件.

          要点三: SELECT 子句中的列最好按照 表.列名 的格式来使用.

2.1.2  结合 WHERE 子句使用内连结

如果需要在使用内连结的时候同时使用 WHERE 子句对检索结果进行筛选, 则需要把 WHERE 子句写在 ON 子句的后边.

第一种增加 WEHRE 子句的方式, 就是把上述查询作为子查询, 用括号封装起来, 然后在外层查询增加筛选条件.

SELECT *FROM (-- 第一步查询的结果SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.product_type,P.sale_price,SP.quantityFROM shopproduct AS SPINNER JOIN product AS PON SP.product_id = P.product_id) AS STEP1WHERE shop_name = '东京'AND product_type = '衣服' SELECT  SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.product_type,P.sale_price,SP.quantityFROM shopproduct AS SPINNER JOIN product AS PON SP.product_id = P.product_idWHERE SP.shop_name = '东京'AND P.product_type = '衣服' ;SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.product_type,P.sale_price,SP.quantityFROM (-- 子查询 1:从shopproduct 表筛选出东京商店的信息SELECT *FROMshopproductWHERE shop_name = '东京' ) AS SPINNER JOIN -- 子查询 2:从 product 表筛选出衣服类商品的信息(SELECT *FROMproductWHERE product_type = '衣服') AS PON SP.product_id = P.product_id

练习题:

找出每个商店里的衣服类商品的名称及价格等信息.

SELECT *
FROM(SELECT SP.shop_id,SP.shop_name,SP.product_id,
P.product_name,P.product_type,P.sale_price,SP.quantity
FROM shopproduct AS SP
INNER JOIN product AS p
ON SP.product_id=P.product_id) AS step
WHERE product_type='衣服';

练习题:

分别使用连结两个子查询和不使用子查询的方式, 找出东京商店里, 售价低于 2000 的商品信息

SELECT *
FROM(SELECT SP.shop_id,SP.shop_name,SP.product_id,
P.product_name,P.product_type,P.sale_price,SP.quantity
FROM shopproduct AS SP
INNER JOIN product AS p
ON  SP.product_id=P.product_id) AS step
WHERE shop_name='东京' AND sale_price <=2000;SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,
P.product_type,P.sale_price,SP.quantity
FROM shopproduct AS SP
INNER JOIN product AS P
ON SP.product_id=P.product_id
WHERE shop_name='东京' AND sale_price <=2000;

2.1.3 结合 GROUP BY 子句使用内连结

结合 GROUP BY 子句使用内连结, 需要根据分组列位于哪个表区别对待.

最简单的情形, 是在内连结之前就使用 GROUP BY 子句.

但是如果分组列和被聚合的列不在同一张表, 且二者都未被用于连结两张表, 则只能先连结, 再聚合.

练习题:

每个商店中, 售价最高的商品的售价分别是多少?(GROUP BY shop_id)

SELECT SP.shop_id,SP.shop_name,MAX(sale_price) AS max_price
from shopproduct AS SP
INNER JOIN product AS P
on SP.product_id=P.product_id
GROUP BY SP.shop_id,SP.shop_name;

2.2 自连结(SELF JOIN)

自连结可以是外连结也可以是内连结, 它是不同于内连结外连结的另一个连结的分类方法.

2.2.3 内连结与关联子查询

--连接两表,查询每类商品中售价高于该类商品平均售价的单品。
SELECT P1.product_id ,P1.product_name,P1.product_type,P1.sale_price,P2.avg_salepriceFROM product AS p1INNER JOIN (SELECT product_type, AVG(sale_price)AS avg_salepriceFROM productGROUP BY product_type)AS P2ON P1.product_type=P2.product_typeWHERE P1.sale_price > P2.avg_saleprice;

2.3 自然连结(NATURAL JOIN)

自然连结并不是区别于内连结和外连结的第三种连结, 它其实是内连结的一种特例–当两个表进行自然连结时, 会按照两个表中都包含的列名来进行等值内连结, 此时无需使用 ON 来指定连接条件.


SELECT  SP.product_id,SP.shop_id,SP.shop_name,SP.quantity,P.product_name,P.product_type,P.sale_price,P.purchase_price,P.regist_date  FROM shopproduct AS SP INNER JOIN product AS P ON SP.product_id = P.product_id

2.4 使用连结求交集

练习题: 使用内连结求product 表和product2 表的交集.

      SELECT *FROM product AS P1INNER JOIN product2 AS P2ON (P1.product_id  = P2.product_idAND P1.product_name = P2.product_nameAND P1.product_type = P2.product_typeAND P1.sale_price   = P2.sale_priceAND P1.regist_date  = P2.regist_date);

2.5 外连结(OUTER JOIN)

外连结会根据外连结的种类有选择地保留无法匹配到的行,内连结会丢弃匹配不到的行。

按照保留的行位于哪张表,外连结有三种形式: 左连结, 右连结和全外连结.

  1. 左连结会保存左表中无法按照 ON 子句匹配到的行, 此时对应右表的行均为缺失值;
  2. 右连结则会保存右表中无法按照 ON 子句匹配到的行, 此时对应左表的行均为缺失值;
  3. 全外连结则会同时保存两个表中无法按照 ON子句匹配到的行, 相应的另一张表中的行用缺失值填充.
-- 左连结
FROM <tb_1> LEFT  OUTER JOIN <tb_2> ON <condition(s)>
-- 右连结
FROM <tb_1> RIGHT OUTER JOIN <tb_2> ON <condition(s)>
-- 全外连结
FROM <tb_1> FULL  OUTER JOIN <tb_2> ON <condition(s)>

2.5.1 使用左连结从两个表获取信息

练习题: 统计每种商品分别在哪些商店有售, 需要包括那些在每个商店都没货的商品.(shopproduct作为左连结)

SELECT SP.product_id,SP.shop_name,SP.shop_id,P.product_name,P.product_type,P.sale_price,P.purchase_price,p.regist_dateFROM shopproduct AS SPLEFT OUTER JOIN product AS PON SP.product_id=P.product_id;SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_priceFROM product AS PLEFT OUTER JOIN shopproduct AS SPON SP.product_id = P.product_id;

外连结要点 1: 选取出单张表中全部的信息

*外连结要点 2:使用 LEFT、RIGHT 来指定主表.

2.5.2 结合 WHERE 子句使用左连结

练习题:

使用外连结从shopproduct表和product表中找出那些在某个商店库存少于50的商品及对应的商店.

 SELECT P.product_id,P.product_name,P.sale_price,SP.shop_id,SP.shop_name,SP.quantity FROM product AS PLEFT OUTER JOIN-- 先筛选quantity<50的商品(SELECT *FROM shopproductWHERE quantity < 50 ) AS SPON SP.product_id = P.product_id;

2.5.3 在 MySQL 中实现全外连结

全外连结本质上就是对左表和右表的所有行都予以保留, 能用 ON 关联到的就把左表和右表的内容在一行内显示, 不能被关联到的就分别显示, 然后把多余的列用缺失值填充。

3. 多表连结

3.1 多表进行内连结

首先创建一个用于三表连结的表 Inventoryproduct

CREATE TABLE Inventoryproduct
( inventory_id       CHAR(4) NOT NULL,
product_id         CHAR(4) NOT NULL,
inventory_quantity INTEGER NOT NULL,
PRIMARY KEY (inventory_id, product_id));
--- DML:插入数据
START TRANSACTION;
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P001', '0001', 0);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P001', '0002', 120);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P001', '0003', 200);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P001', '0004', 3);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P001', '0005', 0);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P001', '0006', 99);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P001', '0007', 999);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P001', '0008', 200);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P002', '0001', 10);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P002', '0002', 25);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P002', '0003', 34);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P002', '0004', 19);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P002', '0005', 99);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P002', '0006', 0);
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P002', '0007', 0 );
INSERT INTO Inventoryproduct (inventory_id, product_id, inventory_quantity)
VALUES ('P002', '0008', 18);
COMMIT;

根据上表及shopproduct 表和product 表, 使用内连接找出每个商店都有那些商品, 每种商品的库存总量分别是多少.

SELECT SP.shop_name,SP.shop_id,P.product_name,P.product_id,P.product_type,IP.inventory_quantityFROM shopproduct AS SPINNER JOIN product AS PON SP.product_id=P.product_idINNER JOIN inventoryproduct AS IPON SP.product_id=IP.product_id;

3.2 多表进行外连结

SELECT P.product_id,P.product_name,P.sale_price,SP.shop_id,SP.shop_name,IP.inventory_quantityFROM product AS PLEFT OUTER JOIN shopproduct AS SP
ON SP.product_id = P.product_id
LEFT OUTER JOIN Inventoryproduct AS IP
ON SP.product_id = IP.product_id   

4.子句进阶–非等值连结

除了使用相等判断的等值连结, 也可以使用比较运算符来进行连接. 实际上, 包括比较运算符(<,<=,>,>=, BETWEEN)和谓词运算(LIKE, IN, NOT 等等)在内的所有的逻辑运算都可以放在 ON 子句内作为连结条件.

4.1 非等值自左连结(SELF JOIN)

练习题:

希望对 product 表中的商品按照售价赋予排名. 一个从集合论出发,使用自左连结的思路是, 对每一种商品,找出售价不低于它的所有商品, 然后对售价不低于它的商品使用 COUNT 函数计数. 例如, 对于价格最高的商品,

SELECT product_id,product_name,sale_price,count(p2_id) as rank_id
from (SELECT p1.product_id,p1.product_name,p1.sale_price,p2.sale_price AS p2_price,p2.product_id AS p2_id, p2.product_name as p2_namefrom product as p1left outer join product as p2on p1.sale_price <= p2.sale_price)as x GROUP BY product_id,product_name,sale_priceORDER BY rank_id;SELECT  product_id,product_name,sale_price,COUNT(p2_id) AS rank_id

4.2 交叉连结—— CROSS JOIN(笛卡尔积)

在连结去掉 ON 子句, 就是所谓的交叉连结(CROSS JOIN), 交叉连结又叫笛卡尔积, 后者是一个数学术语. 两个集合做笛卡尔积, 就是使用集合 A 中的每一个元素与集合 B 中的每一个元素组成一个有序的组合.

-- 1.使用关键字 CROSS JOIN 显式地进行交叉连结
SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_priceFROMshopproduct AS SPCROSS JOINproduct AS P;
--2.使用逗号分隔两个表,并省略 ON 子句
SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_priceFROMshopproduct AS SP ,product AS P;

4.2.1 连结与笛卡儿积的关系

SELECT SP.*, P.*FROM shopproduct AS SP CROSS JOIN product AS P;SELECT SP.*, P.*FROM shopproduct AS SP CROSS JOIN product AS PWHERE SP.product_id = P.product_id;

练习题

找出 product 和 product2 中售价高于 500 的商品的基本信息。

 select * from productwhere sale_price >500unionselect *from product2where sale_price>500;

借助对称差的实现方式, 求product和product2的交集。

 SELECT * FROM productWHERE product_id IN (SELECT product_id FROM product2)
UNION
SELECT * FROM product2WHERE product_id  IN (SELECT product_id FROM product)

每类商品中售价最高的商品都在哪些商店有售 ?

select sp.shop_name,sp.shop_id,
p.product_id,p.product_name,max(p.sale_price) as max_price,p.product_type
from  shopproduct as sp
inner join product as p
on sp.product_id=p.product_id
GROUP BY sp.shop_id,sp.shop_name;

分别使用内连结和关联子查询每一类商品中售价最高的商品。

--内连结
select p1.*,max(p1.sale_price)as max_price
from product as p1
inner join product as p2
on p1.product_id=p2.product_id
group by p1.product_type;
--关联子查询
SELECT p1.*,max(p1.sale_price)as max_priceFROM product AS p1WHERE sale_price = (SELECT max(sale_price)as maxp2FROM product AS p2WHERE p1.product_type = p2.product_type)GROUP BY p1.product_type;

用关联子查询实现:在product表中,取出 product_id, produc_name, slae_price, 并按照商品的售价从低到高进行排序、对售价进行累计求和。

  select p1.product_id, p1.product_name, p1.sale_price,p1.product_type,(select sum(sale_price) from product as p2where p1.sale_price>=p2.sale_price)as sum_pricefrom product as p1order by sale_price;

MYSQL学习记录(8)相关推荐

  1. MySQL学习记录 (五) ----- 存储函数、存储过程和触发器

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  2. MySQL学习记录 (三) ----- SQL数据定义语句(DDL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  3. MySQL学习记录 (四) ----- SQL数据管理语句(DML)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  4. MySQL学习记录 (二) ----- SQL数据查询语句(DQL)

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  5. MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令

    相关文章: <MySQL学习记录 (一) ----- 有关数据库的基本概念和MySQL常用命令> <MySQL学习记录 (二) ----- SQL数据查询语句(DQL)> &l ...

  6. MySQL学习记录04where条件子句、联表查询、子查询

    文章目录 MySQL学习记录04where条件子句.联表查询.子查询 4.1DQL 4.2指定查询字段 4.3where条件子句 4.4联表查询 4.5分页和排序 4.6子查询 MySQL学习记录04 ...

  7. Mysql学习记录(6)

    Mysql学习记录(1) Mysql学习记录(2) Mysql学习记录(3) Mysql学习记录(4) Mysql学习记录(5) Day06 12.变量 12.1系统变量 12.1.1全局变量 12. ...

  8. MySQL学习记录===待续

    MySQL学习笔记 索引操作: 单列索引,唯一索引,组合索引 常用的两种MySQL引擎 Innodb和MyIASM引擎 三个范式 1.第一范式(确保每列保持原子性) 2.第二范式 (确保表中每列都和主 ...

  9. mySQL学习记录(局域网连接/基础查询/条件查询/常见函数/窗口函数/表连接/子查询/插修删建表)

    一些基础概念 DB 数据库 存储数据的容器 DBMS 数据库管理系统 又称数据库软件.产品如mysql/oracle/db2/sqlserver SQL 结构化查询语言 是所有的DBMS都使用的一种D ...

  10. MySQL学习记录(导入Excel表到数据库,并筛选条件输出)

    附上:重置mysql账号密码方法 ubuntu系统下mysql重置密码和修改密码操作 - skh2015java的博客 - CSDN博客(改完重启,登录mysql要root/sudo权限) Cento ...

最新文章

  1. 二、 创建3D场景的一般步骤
  2. error: the following arguments are required: cfg_file
  3. JavaWeb之Servlet学习-----实现文件动态下载功能 手写servlet 手动构建web程序
  4. python3 线程隔离_Python并发编程之线程中的信息隔离(五)
  5. 三角形最小路径和—leetcode120
  6. ubuntu 启动 重启 停止 apache
  7. [python、flask] - POST请求
  8. hdu 2197 本原串
  9. 修改计算机属性中的内存大小_Python 类属性的动态特点
  10. PHP笔记-文件上传例子
  11. c++ std::async的注意事项
  12. cathome 猫家 开发日记-底部导航
  13. android getid,Process.myTid()和Thread.currentThread().getId()区别
  14. LINUX 第七章 Squid配置
  15. Hadoop2.4.1(QJM HA)+HBASE0.98 双MASTER问题分析
  16. 微信公众号推送模板跳转小程序
  17. eNSP实验二:VLAN划分与配置
  18. 天马行空的刷脸支付方式将是未来
  19. OpenCV:详解阈值分割的处理
  20. Docker 如何安全地进入到容器内部

热门文章

  1. Windows 10 PowerShell Activation Office Professional Plus 2016 Visio Professional 2016
  2. Webpack项目中引入Bootstrap4.x
  3. 软件工程技术--第六章 软件实现
  4. OPT液态镜头上市,视觉检测实现瞬时对焦
  5. 【AIOT】语音学习
  6. SSL2668 2017年8月7日提高组T1 根(dfs)
  7. anaconda环境迁移
  8. 计算机启动时 需换电池bells,关于笔记本电脑开机提示请考虑更换电池问题的解决步骤...
  9. word文档被覆盖了怎么恢复原状
  10. 《互联网周刊》封面报道:P2P——新媒体革命