数据库高级(校招冲刺必备)
数据准备
# 创建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.在权限控制时可以使用
数据库高级(校招冲刺必备)相关推荐
- 高级软件工程师必备的五大技能
具备什么样的素质的人才能成为一名高级软件工程师?作为高级软件工程师,你不仅要具备娴熟的技能,更重要的,还要具备与人合作的能力.只有能够领导和提升他人的软件工程师,才是真正的高级软件工程师.Israel ...
- 笔记②:牛客校招冲刺集训营---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 友元 友 ...
- 计算机二级常备知识,计算机二级《MS Office高级应用》必备知识点
计算机二级<MS Office高级应用>必备知识点 二级MS Office高级应用考试的内容分为两部分,二级公共基础和二级Office应用.以下是百分网小编搜索整理的关于计算机二级< ...
- 前沿分享|阿里云数据库高级技术专家 宋利兵:阿里云企业级自治数据库RDS详解
简介:本篇内容为2021云栖大会-企业级云原生数据库最佳实践论坛中,阿里云数据库高级技术专家 宋利兵关于"阿里云企业级自治数据库RDS详解"的分享. 本文将从2方面为大家介绍企业级 ...
- Mysql数据库(三)——mysql数据库高级操作
Mysql数据库(三)--mysql数据库高级操作 一.指定主键的另一种方式 二.克隆/复制一个表 1.方法一 2.方法二 三.清空表,删除表内数据 1.方法一 2.方法二 3.方法三 4.三个删除方 ...
- SQL数据库高级查询命令(2)
接上篇博文<SQL数据库高级查询命令(1)> use market go select distinct goodsname from orders -----查看orders表中有订单的 ...
- Java从入门到实战总结-4.2、数据库高级
Java从入门到实战总结-4.2.数据库高级 文章目录 Java从入门到实战总结-4.2.数据库高级 第一章 数据完整性 1.1 数据库的完整性 1.2 实体完整性 1.2.1 主键约束(primar ...
- 高级PHP工程师必备的编码技巧及思维(收藏)
好的开发者通常以代码质量来定义.在软件行业,写好的代码意味着在在测试,更新,扩展或者修复漏洞中省钱.本文,我将向你展示一些现实生活中技巧和想法的例子,来帮助你清理你的逻辑代码,重构它,让它变得更健壮和 ...
- 笔记③:牛客校招冲刺集训营---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 ...
最新文章
- 对Oracle中索引叶块分裂而引起延迟情况的测试和分析
- 资源利用率监控与存储卷(pv/pvc)
- python 求系数矩阵,关于numpy:python-如何在数据矩阵中使用nans计算相关矩阵
- 做演员是圆梦 做生意学会面对现实
- json 对象 数组
- javascript字典中添加数组_如何在 JavaScript 中更好地使用数组
- Java中IO流,输入输出流概述与总结
- jsp table 中多出行数据_数据分析 | 如何基于高斯曲线拟合15分钟生活圈距离衰减规律...
- linux使用中的问题 --- (Another app is currently holding the yum lock; waiting for it to exit...)
- 微服务下flask和celery的通信
- Codejock.Xtreme.Toolkit.Pro.v15.3.1 for MFC 15种皮肤切换
- 蓝桥杯:奇妙的数字(C++)
- SVN 配置忽略文件
- 2019PR怎么设置导出比特率?为什么我的PR导出的时候不能控制文件大小?为什么我的PR导出的文件特别大?
- tomcat本地运行web项目图片显示不出来
- DedeCMS 后台地址泄露漏洞
- C语言学习-- 计算机原理及二进制
- 图像处理 理想低通滤波器_如何为您的文章选择理想的图像
- 使用 C++ 开发出 【飞机大战】
- 有哪些分体式降噪耳机推荐?最值得入手的分体式降噪耳机
热门文章
- 使用mav命令将本地jar包导入本都Maven库
- 深圳地铁回应女高管猝死:工作人员不能贸然救助
- C#编译基础知识(三)
- 堡垒机如何传输文件_mac 堡垒机传文件
- Beyond feelings的 introduction和 chapter1读后感
- 单细胞文献学习(part6)--ForestFireClustering for sc sequencing combines iterative label propagation with ...
- 《这是全网最硬核redis总结,谁赞成,谁反对?》六万字大合集
- 试卷模板php,试卷Latex模板
- 关于RoboMaster2019新型能量机关的一些感想(大风车)
- C++ 栈和队列 容器适配器