mysql之视图mysql连接案例索引

文章目录

  • 一、视图
    • 1.1 含义
    • 1.2 操作
      • 1.2.1 创建视图
      • 1.2.2 视图的修改
      • 1.2.3 删除视图
      • 1.2.4 查看视图
  • 二、连接案例
    • 01)查询" 01 "课程比" 02 "课程成绩高的学生的信息及课程分数
    • 02)查询同时存在" 01 "课程和" 02 "课程的情况
    • 03)查询存在" 01 "课程但可能不存在" 02 "课程的情况(不存在时显示为 null )
    • 04)查询不存在" 01 "课程但存在" 02 "课程的情况
    • 05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
    • 06)查询在t_mysql_score表存在成绩的学生信息
    • 07)查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )
  • 三、流程图
  • 四、索引
    • 4.1 什么是索引
    • 4.2 为什么要使用索引
    • 4.3 优点
    • 4.4 缺点
    • 4.5何时不使用索引
    • 4.6 索引何时失效
    • 4.7 索引分类

一、视图

1.1 含义

虚拟表,和普通表一样使用

1.2 操作

1.2.1 创建视图

create view 视图名
as
查询语句;

1.2.2 视图的修改

方法①:create or replace view 视图名 as 查询语句;

方法②:alter view 视图名 as 查询语句;

1.2.3 删除视图

drop view 视图名,视图名,…

1.2.4 查看视图

DESC 视图名;–查看视图相关字段

SHOW CERATE VIEW 视图名;–查看视图相关语句

二、连接案例

01)查询" 01 “课程比” 02 "课程成绩高的学生的信息及课程分数

SELECT
	s.*,
	(CASE WHEN t1.cid = '01' THEN t1.score END ) 语文,
	(CASE WHEN t2.cid = '02' THEN t2.score END ) 数学 
FROM
	t_mysql_student s,
	( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1,
	( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 
WHERE
	s.sid = t1.sid 
	AND t1.sid = t2.sid 
	AND t1.score > t2.score	

02)查询同时存在" 01 “课程和” 02 "课程的情况

SELECT
	s.*,
	(CASE WHEN t1.cid = '01' THEN t1.score END ) 语文,
	(CASE WHEN t2.cid = '02' THEN t2.score END ) 数学 
FROM
	t_mysql_student s,
	( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1,
	( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 
WHERE
	s.sid = t1.sid 
	AND t1.sid=t2.sid

03)查询存在" 01 “课程但可能不存在” 02 "课程的情况(不存在时显示为 null )

SELECT
	s.*,
	( CASE WHEN t1.cid = '01' THEN t1.score END ) 语文,
	( CASE WHEN t2.cid = '02' THEN t2.score END ) 数学 
FROM
	t_mysql_student s
	INNER JOIN 
	( SELECT * FROM t_mysql_score WHERE cid = '01' ) t1 ON s.sid = t1.sid
	LEFT JOIN 
	( SELECT * FROM t_mysql_score WHERE cid = '02' ) t2 ON t1.sid = t2.sid;

04)查询不存在" 01 “课程但存在” 02 "课程的情况

select
    s.*,
    (case when sc.cid='01' then sc.score end) 语文,
    (case when sc.cid='02' then sc.score end) 数学
from
  t_mysql_student s,
  t_mysql_score sc
where
  s.sid=sc.sid
  and
  s.sid not in
  (select sid from t_mysql_score where cid='01')
and sc.cid='02';

05)查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩

select
    s.sid,
    s.sname,
		avg(sc.score) n
from
  t_mysql_student s left join
  t_mysql_score sc on s.sid = sc.sid
GROUP BY s.sid,s.sname
HAVING n>=60

06)查询在t_mysql_score表存在成绩的学生信息

select
    s.*
from
  t_mysql_student s INNER JOIN
  t_mysql_score sc on s.sid = sc.sid
GROUP BY s.sid,s.sname

07)查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩(没成绩的显示为 null )

select
    s.sid,
		s.sname,
		count(sc.score) 选课总数,
		sum(sc.score) 总成绩
from
  t_mysql_student s LEFT JOIN
  t_mysql_score sc on s.sid = sc.sid
GROUP BY s.sid,s.sname

三、流程图

在这里插入图片描述

四、索引

4.1 什么是索引

索引是一种特殊的数据库结构,由数据表中的一列或多列组合而成,可以用来快速查询数据表中有某一特定值的记录

4.2 为什么要使用索引

使用索引可以很大程度上提高数据库的查询速度,还有效的提高了数据库系统的性能。

4.3 优点

  • 通过创建唯一索引可以保证数据库表中每一行数据的唯一性
  • 可以给所有的 MySQL列类型设置索引。
  • 可以大大加快数据的查询速度,这是使用索引最主要的原因
  • 在实现数据的参考完整性方面可以加速表与表之间的连接。
  • 在使用分组和排序子句进行数据查询时也可以显著减少查询中分组和排序的时间

4.4 缺点

  • 创建和维护索引组要耗费时间,并且随着数据量的增加所耗费的时间也会增加。
  • 索引需要占强盘空间,除了数据表占数据空间以外,每一个索引还要占一定的物理空间。如果有大量的索引,索引文件可能比数据文件更快达到最大文件尺寸。
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态维护,这样就降低了数据的维护速度。

4.5何时不使用索引

  • 表记录太少
  • 经常增删改的表
  • 数据重复且分布均匀的表字段,只应该为经常查询和最经常排序的数据列建立索引(如果某个数据类包含太多的重复数据,建立索引没有太大意义)
  • 频繁更新的字段不适合创建索引(会增加10负担)
  • where条件里用不到的字段不创建索引

4.6 索引何时失效

  • like以通配符%开头索引失效
  • 当全表扫描比走索引查询的快的时候,会使用全表扫描,而不走索引
  • 字符串不加单引号索引会失效
  • where中索引列使用了函数 (例如substring字符串截取函数)
  • where中索引列有运算(用了< or> 右边的索引会失效,用<= or>= 索引不会失效)
  • is null可以走索引,is not null无法使用索引 (取决于某一列的具体情况)
  • 复合索引没有用到左列字段(最左前缀法则,如果没用用到最左列索引,或中间跳过了某列有索引的列,索引会部分失效)
  • 条件中有or,前面的列有索引,后面的列没有,索引会失效。想让索引生效,只能将or条件中的每个列都加上索引

4.7 索引分类

CREATE TABLEt ‘Iog’(
‘id’ varchar(32) NOT NULL COMMENT唯一标识
‘ip’ varchar(15) NOT NULL COMMENT ‘IP地址’,
‘userid’ varchar(32) NOT NULL COMMENT ‘用户ID’,
‘moduleid’ varchar(32) NOT NULL COMMENT ‘模块ID’,
‘content’ varchar(500) NOT NULL COMMENT ‘日志内容’,
‘createdate’ timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建日期’,
‘url’ varchar(100) DEFAULT NULL COMMENT ‘请求URL地’,
PRIMARY KEY (‘id’)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
–1)普通索引:是最基本的索引,它没有任何限制;
–0.762s
select * from t_log;
– 建索引前0.12s
select * from t log where moduleid =10040199’;
– 创建索引所花费的时间:1.593s
Create index idx_moduleid on t_log(moduleid);
– 建索引前 0.001s
select from t_log where moduleid =10040199’;
– 可以查看走过的索引
EXPLAIN select * from t_log where moduleid =‘10040199’;
2)唯一索引:与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;
– Duplicate entry ‘/quartz/queryJobLst’ for key ‘idx_ur’ 有重复列段
create UNIQUE index idx_url on t_log(url);
drop index idx_url on t_log;
– 3)主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;
– 主键索引所花费的时间: 0s
select * from t_log where id =‘07489cdafd6d4a3489884cd3c00c7b27’;
EXPLAIN select * from t log where id =07489cdafd6d4a3489884cd3c00c7b27’
– 4)组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时道循量左前缀集合;
– 花费的时间:3.959s
create index idx_userid_moduleid_url on t_log(userid,moduleid,url);
– 走组合索引
EXPLAIN select * from t_log where userid = " and moduleid = " and url = ";
EXPLAIN select * from t_log where userid = " and moduleid = ";
EXPLAIN select * from t_log where userid = ";
EXPLAIN select * from t_log where userid = " and url = ";
– 不走组合索引
EXPLAIN select * from t_log where moduleid = ";
EXPLAIN select * from t log where url = ";
EXPLAIN select * from t_log where moduleid = " and url = ";
4.创建索引
CREATE[UNIQUE]FULLTEXT]INDEX 索引名 ON 表名(字段名[(长度][ASCIDESCJ)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ios 裁剪拼装图片

//1.获取图片UIImage *image [UIImage imageNamed:"123.jpg"];//处理图片//2.获取图片的长度long length image.size.width/4;//3.图片顶点索引long indices[] {length * 2,length,//右 right0,length,//左 leftlength,0,//上 toplength,length * 2,//底 bottomle…

Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行

环境: Rustdesk1.19 问题描述: Rustdesk打开Win10 下客户端下面服务不会自启,显示服务未运行 解决方案: 1.查看源代码 pub async fn start_all() {crate::hbbs_http::sync::start();let mut nat_tested = false;check_zombie()

SwinTransformer

patch embedding (b,3,224,224)->(b,N,96) N:patch数量 为每个stage中的每个Swin Transformer block设置drop_rate&#xff0c;根据设置[2,2,6,2]&#xff0c;每个Swin Transformer block的drop_path为0~0.1等间距采样的12个小数&#xff0c;参数0.1也可以更改。还有个drop参…

网络安全红队常用的攻击方法及路径

一、信息收集 收集的内容包括目标系统的组织架构、IT资产、敏感信息泄露、供应商信息等各个方面&#xff0c;通过对收集的信息进行梳理&#xff0c;定位到安全薄弱点&#xff0c;从而实施下一步的攻击行为。 域名收集 1.备案查询 天眼查爱企查官方ICP备案查询 通过以上三个…

数据矩阵集成可提高印刷电路板识别的准确性

在复杂的印刷电路板 (PCB) 世界中&#xff0c;准确的电路板元件识别对于简化故障排除至关重要。它确保电子设备高效运行。 本文将探讨数据矩阵码在提高 PCB 零件识别效率方面的作用。数据矩阵码提供了一种简单的解决方案来编码和解码与 PCB 组件相关的信息&#xff0c;在简化识…

安卓Android Studioy读写NXP ICODE2 15693标签源码

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma1z10.5-c-s.w4002-21818769070.11.4391789eCLwm3t&id615391857885 <?xml version"1.0" encoding"utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xm…

『C++成长记』日期类的实现

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;C &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、日期类的实现 &#x1f4d2;1.1日期类功能 &#x1f4d2;1.2拷贝日期 &#…

C++面试宝典第13题:计算餐厅账单

题目 假如你是一家餐厅的收银员,需要编写一个程序来计算顾客的账单。程序应该能够接受顾客点的菜品和数量,并根据菜品的单价计算出总价。另外,程序还应该能够处理折扣和优惠券,并输出最终的账单金额。 解析 这道题主要考察应聘者使用面向对象的设计方法来解决实际问题的能力…

基于旗鱼算法优化的Elman神经网络数据预测 - 附代码

基于旗鱼算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于旗鱼算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于旗鱼优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针…

Pandas DataFrame中将True/False映射到1/0

在本文中&#xff0c;我们将看到如何在Pandas DataFrame中将True/False映射到1/0。True/False到1/0的转换在执行计算时至关重要&#xff0c;并且可以轻松分析数据。 1. replace方法 在这个例子中&#xff0c;我们使用Pandas replace()方法将True/False映射到1/0。在这里&…

网络知识-以太网技术的发展及网络设备

目 录 一、背景介绍 &#xff08;一&#xff09;网络技术的时代 &#xff08;二&#xff09;以太网技术脱颖而出 二、以太网的工作原理 &#xff08;一&#xff09;、载波侦听多路访问&#xff08;CSMA/CD&#xff09; 1、数据发送流程 2、发送过程解析 3、…

Mathtype7.4安装与嵌入WPS

文章目录 Mathtype安装教程&#xff08;7.4&#xff09;Mathtype简介Mathtype下载安装软件下载软件安装运行MathType.exe运行注册表 Mathtype嵌入wps Mathtype安装教程&#xff08;7.4&#xff09; Mathtype简介 MathType是一款强大的数学公式编辑器&#xff0c;适用于教育教…

【Sublime Text】| 01——下载安装注册

系列文章目录 【Sublime Text】| 01——下载软件安装并注册 【Sublime Text】| 02——常用插件安装及配置 失败了也挺可爱&#xff0c;成功了就超帅。 文章目录 前言1. 下载2. 安装3. 注册3.1 通过修改应用程序注册3.2 通过替换应用程序注册 感谢 前言 轻量代码编辑器有很多 之…

Python课程设计基于python的人脸识别佩戴口罩系统设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python口罩 获取完整论文报告源码源文件 1 研究背景与意义 新型冠状病毒展现出全球化流行和蔓延的趋势&#xff0c;这提醒我们&#xff1a;传染病防治在今后相当长时间内仍是疾病预测控制工作的重点。戴口罩是预防呼吸道…

Linux|服务器|简单记录备忘VMware虚拟机开启桌面失败报错:VMware: No 3D enabled (0, Success).的解决

一&#xff0c; VMware虚拟机 Linux操作系统&#xff0c;centos7版本&#xff0c;安装完桌面后&#xff0c;执行startx 命令后 &#xff0c;报错&#xff1a;VMware: No 3D enabled (0, Success). 桌面没有启动成功 完整日志输出如下&#xff1a; [rootnode4 ~]# startx x…

超实用的测试万能法则 —— 帕累托分析!

20/80原则来源于意大利经济学家维弗雷多•帕累托&#xff08;Villefredo Pareto&#xff09;提出的财富占比帕累托原则&#xff1a;80%的财富是掌握在20%的人手中的&#xff0c;而余下的80%的人只占那剩余的20%财富&#xff0c;而后这个理论延伸为&#xff1a;至关重要的少数和…

uniapp 创建组件组件

组件&#xff1a;用于将某个功能的 HTML、CSS、JS 封装到一个文件中&#xff0c;提高代码的复用性和可维护性。 创建组件 一、在根目录中创建 components 文件夹&#xff0c;右键点击新建组件。 二、输入组件名称、选择默认模板、点击创建组件。 三、在组件中正常编写内容即可…

数据结构OJ实验6-二叉树的遍历以及应用

A. DS二叉树—二叉树构建与遍历&#xff08;不含框架&#xff09; 题目描述 给定一颗二叉树的逻辑结构如下图&#xff0c;&#xff08;先序遍历的结果&#xff0c;空树用字符‘#’表示&#xff0c;例如AB#C##D##&#xff09;&#xff0c;建立该二叉树的二叉链式存储结构&…

H266/VVC多样化视频编码工具概述

全景视频编码 全景视频&#xff1a; 具有360度全包围视角的球面视频。 全景视频编码&#xff1a; 包括H266在内的视频编码算法都是以平面视频为对象的&#xff0c;为了采用传统的视频编码编码算法&#xff0c;全景视频需要转换为平面视频&#xff0c;其中经纬图等角映射&#…

适用于 Windows 的免费U盘数据恢复方法详解

笔式驱动器&#xff08;Pen Drive&#xff09;是一种方便、小巧、便于携带的数据存储设备&#xff0c;也称为U盘、拇指驱动器、U盘等。“笔式驱动器”的名称来源于其外观&#xff0c;即体积小、体积小、方便携带。与传统笔相似&#xff0c;尽管它实际上并不能书写。 有几个功能…