数据准备

# 创建db3_2数据库,并指定编码
CREATE DATABASE my_db CHARACTER SET utf8;
# 创建分类表(一方:主表)
CREATE TABLE category (cid VARCHAR(32) PRIMARY KEY,cname VARCHAR(50)
);# 创建商品表(多方:从表)
CREATE TABLE products(pid VARCHAR(32) PRIMARY KEY,pname VARCHAR(50),price INT,flag VARCHAR(2), -- 是否上架标记为:1表示上架、0表示下架category_id VARCHAR(32),FOREIGN KEY (category_id) REFERENCES category (cid) -- 添加外键约束
);
# 添加分类数据
INSERT INTO category (cid,cname) VALUES ('c001','家电');
INSERT INTO category (cid,cname) VALUES ('c002','鞋服');
INSERT INTO category (cid,cname) VALUES ('c003','化妆品');
INSERT INTO category (cid,cname) VALUES ('c004','汽车');# 添加商品数据
INSERT INTO products (pid,pname,price,flag,category_id) VALUES ('p001','小米电视机',5000,'1','c001');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES ('p002','格力空调',3000,'1','c001');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES ('p003','美的冰箱',4500,'1','c001');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES ('p004','篮球鞋',800,'1','c002');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES ('p005','运动裤',200,'1','c002');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES ('p006','T恤',300,'1','c002');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES ('p007','冲锋衣',2000,'1','c002');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES ('p008','神仙水',800,'1','c003');
INSERT INTO products (pid,pname,price,flag,category_id) VALUES ('p009','大宝',200,'1','c003');

视图

1.视图是一张虚表,数据来源于原始的表,建立在table的基础之上的

2.首先需要创建一张表

3.关键,就是一个select查询语句(过滤掉安全隐患的数据),把他查到的数据作为视图。数据进行映射。

4.数据来源还是对应的table表,称为视图的基表。

视图的使用

视图创建

create view 视图名称 {字段名称列表} as select语句(id,user,age);
create view 视图名称 (e_id,e_anme,e_age) as select语句(id,user,age);

create view:表示创建的是视图

as:视图要执行的操作(视图映射的表中的数据来自于哪里)

select语句:即向视图提供的数据内容

字段名称列表可省略:默认原来的表中的名称。

视图案例

所有的商品信息及其分类作为视图进行映射(用到外连接)

创建视图

首先要明确select语句

1.查询所有商品的分类详情

SELECT * FROM
products p LEFT JOIN category c ON p.`category_id`=c.`cid`;

2.表示为视图

#基于select查询语句将查询到的结果作为视图进行映射
CREATE VIEW products_category_view AS SELECT * FROM
products p LEFT JOIN category c ON p.`category_id`=c.`cid`;

查询视图

直接将视图作为一张表的名称进行操作。注意:视图只有查询操作

需求:查询各个分类下商品的平均价格

两种方式

1.基于表进行查询

SELECT cname AS '商品分类名称',
AVG(p.price) AS '商品平均价格'
FROM
products p LEFT JOIN category c ON p.category_id=c.cid
GROUP BY c.`cname`;

2.基于视图进行查询操作

SELECT cname AS '商品分类名称',
AVG(price) AS '商品平均价格'
FROM products_category_view
GROUP BY cname;

视图优点:大大优化了代码量

需求:查询鞋服分类下最贵商品的全部信息

1.基于表进行查询

#鞋服分类下最贵的商品
SELECT MAX(p.`price`) AS '最贵商品' FROM products p LEFT JOIN category c ON p.`category_id`=c.`cid`
WHERE c.`cname`='鞋服';
#将此值对印的行所有的信息获取到
SELECT * FROM products p LEFT JOIN category c ON p.`category_id`=c.`cid`
WHERE c.`cname`='鞋服' AND p.`price`=(SELECT MAX(p.`price`) AS '最贵商品' FROM products p LEFT JOIN category c ON p.`category_id`=c.`cid`
WHERE c.`cname`='鞋服');

在多表情况下,会频繁使用左右外连接,语句会特别复杂,这只是两个表,三表会更加复杂,所以我们选择:视图!

2.基于视图进行查询操作

SELECT * FROM products_category_view AS pcv WHERE pcv.cname='鞋服'AND
pcv.`price`=(SELECT MAX(price) FROM products_category_view WHERE cname='鞋服');

视图与表的区别

1.视图是建立在表的基础之上,表中存储的是数据,而视图只是做一个数据的展示

2.视图不可以做数据的更新操作例如update,delete...如果视图可以修改数据,会把表污染掉,我们可以直接删除视图,不会有任何的影响;表如果直接删除,数据会被永久删除,同时影响基于此表创建的视图

视图的作用

1.多表操作查询极为复杂

2.在权限控制时可以使用

数据库高级(校招冲刺必备)相关推荐

  1. 高级软件工程师必备的五大技能

    具备什么样的素质的人才能成为一名高级软件工程师?作为高级软件工程师,你不仅要具备娴熟的技能,更重要的,还要具备与人合作的能力.只有能够领导和提升他人的软件工程师,才是真正的高级软件工程师.Israel ...

  2. 笔记②:牛客校招冲刺集训营---C++工程师(面向对象(友元、运算符重载、继承、多态) -- 内存管理 -- 名称空间、模板(类模板/函数模板) -- STL)

    0618 C++工程师 第5章 高频考点与真题精讲 5.1 指针 & 5.2 函数 5.3 面向对象(和5.4.5.5共三次直播课) 5.3.1 - 5.3.11 5.3.12-14 友元 友 ...

  3. 计算机二级常备知识,计算机二级《MS Office高级应用》必备知识点

    计算机二级<MS Office高级应用>必备知识点 二级MS Office高级应用考试的内容分为两部分,二级公共基础和二级Office应用.以下是百分网小编搜索整理的关于计算机二级< ...

  4. 前沿分享|阿里云数据库高级技术专家 宋利兵:阿里云企业级自治数据库RDS详解

    简介:本篇内容为2021云栖大会-企业级云原生数据库最佳实践论坛中,阿里云数据库高级技术专家 宋利兵关于"阿里云企业级自治数据库RDS详解"的分享. 本文将从2方面为大家介绍企业级 ...

  5. Mysql数据库(三)——mysql数据库高级操作

    Mysql数据库(三)--mysql数据库高级操作 一.指定主键的另一种方式 二.克隆/复制一个表 1.方法一 2.方法二 三.清空表,删除表内数据 1.方法一 2.方法二 3.方法三 4.三个删除方 ...

  6. SQL数据库高级查询命令(2)

    接上篇博文<SQL数据库高级查询命令(1)> use market go select distinct goodsname from orders -----查看orders表中有订单的 ...

  7. Java从入门到实战总结-4.2、数据库高级

    Java从入门到实战总结-4.2.数据库高级 文章目录 Java从入门到实战总结-4.2.数据库高级 第一章 数据完整性 1.1 数据库的完整性 1.2 实体完整性 1.2.1 主键约束(primar ...

  8. 高级PHP工程师必备的编码技巧及思维(收藏)

    好的开发者通常以代码质量来定义.在软件行业,写好的代码意味着在在测试,更新,扩展或者修复漏洞中省钱.本文,我将向你展示一些现实生活中技巧和想法的例子,来帮助你清理你的逻辑代码,重构它,让它变得更健壮和 ...

  9. 笔记③:牛客校招冲刺集训营---C++工程师(5.9 C++新特性)

    0625 C++工程师 第5章 高频考点与真题精讲 5.1 指针 & 5.2 函数 5.3 面向对象(和5.4.5.5共三次直播课) 5.3.1 - 5.3.11 5.3.12-38 5.6 ...

最新文章

  1. 对Oracle中索引叶块分裂而引起延迟情况的测试和分析
  2. 资源利用率监控与存储卷(pv/pvc)
  3. python 求系数矩阵,关于numpy:python-如何在数据矩阵中使用nans计算相关矩阵
  4. 做演员是圆梦 做生意学会面对现实
  5. json 对象 数组
  6. javascript字典中添加数组_如何在 JavaScript 中更好地使用数组
  7. Java中IO流,输入输出流概述与总结
  8. jsp table 中多出行数据_数据分析 | 如何基于高斯曲线拟合15分钟生活圈距离衰减规律...
  9. linux使用中的问题 --- (Another app is currently holding the yum lock; waiting for it to exit...)
  10. 微服务下flask和celery的通信
  11. Codejock.Xtreme.Toolkit.Pro.v15.3.1 for MFC 15种皮肤切换
  12. 蓝桥杯:奇妙的数字(C++)
  13. SVN 配置忽略文件
  14. 2019PR怎么设置导出比特率?为什么我的PR导出的时候不能控制文件大小?为什么我的PR导出的文件特别大?
  15. tomcat本地运行web项目图片显示不出来
  16. DedeCMS 后台地址泄露漏洞
  17. C语言学习-- 计算机原理及二进制
  18. 图像处理 理想低通滤波器_如何为您的文章选择理想的图像
  19. 使用 C++ 开发出 【飞机大战】
  20. 有哪些分体式降噪耳机推荐?最值得入手的分体式降噪耳机

热门文章

  1. 使用mav命令将本地jar包导入本都Maven库
  2. 深圳地铁回应女高管猝死:工作人员不能贸然救助
  3. C#编译基础知识(三)
  4. 堡垒机如何传输文件_mac 堡垒机传文件
  5. Beyond feelings的 introduction和 chapter1读后感
  6. 单细胞文献学习(part6)--ForestFireClustering for sc sequencing combines iterative label propagation with ...
  7. 《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集
  8. 试卷模板php,试卷Latex模板
  9. 关于RoboMaster2019新型能量机关的一些感想(大风车)
  10. C++ 栈和队列 容器适配器