MySQL-关联查询和子查询

news2024/11/18 9:47:08

目录

一、笛卡尔积

二、表连接

1、内部连接

1.1 等值连接

1.2 非等值连接

2、外部链接

2.1 左外连接-LEFT JOIN

2.2 右外连接-RIGHT JOIN

2.3 全关联-FULL JOIN/UNION

三、子查询

1、嵌套子查询

2、相关子查询

3、insert和select语句添加数据

4、update和select语句(子查询)结合

四、数据库备份与还原


一、笛卡尔积

SELECT * FROM student,class;  

    观察笛卡尔积的特点:将两张表的数据组合在了一张二维表中,笛卡尔积中有些记录没有意义。

二、表连接

        在实际查询应用中,用户所需要的数据并不全在一个表中,可能存在多个表中,这时就需使用多表查询。

        在数据库应用中,经常需要从多个相关的表中查询数据,这就需要进行表连接。

1、内部连接

内部连接有以下两种语法形式:

 SELECT select_list FROM 表名1,表名2 WHERE 表1.列=表2.列;

或者

 SELECT 别名.list FROM 表1 别名1 [INNER] JOIN 表2 别名2 ON 别名1.列=别名2.列;

inner join on 内连接

一般用inner join 或 join 关键字来指定内连接。又可分为等值连接,非等值连接。

1.1 等值连接

        是在连接条件中使用比较运算符等于号(=)来比较连接列的列值,其查询结果中列出被连接表中的所有列。

SELECT S.学号,S.姓名,S.性别,S.籍贯,C.班级名称,C.年级

FROM 学生信息 S INNER JOIN 班级信息 C

ON S.班级编号=C.班级编号;
1.2 非等值连接

是在连接条件中使用了除等号外的其它比较运算符,来比较连接列的列值。

案例:查询成绩大于40的学生个人情况,并按照成绩降序排列。

SELECT 学生信息 .学号,学生信息 .姓名,学生信息 .性别,学生信息 .班级编号,成绩表.成绩

FROM 学生信息 INNER JOIN 成绩表

ON 学生信息 .学号=成绩表.学号

WHERE 成绩表.成绩>=40

ORDER BY 成绩表.成绩 DESC;

2、外部链接

• 外部连接会返回FROM子句中提到的至少一个表或视图中的所有行。

• 外部连接分为左外部连接、右外部连接

        左外部连接对连接条件中左边的表不加限制;

        右外部连接对连接条件中右边的表不加限制。

2.1 左外连接-LEFT JOIN

        使用关键字LEFT OUTER JOIN 关键字对两个表进行连接,左外连接的查询结果中包含指定左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有找到匹配的行,则结果集中的右表的相对应的位置为NULL。

SELECT * FROM student s LEFT JOIN sc ON s.sno=sc.sno;

2.2 右外连接-RIGHT JOIN

        使用RIGHT OUTER JOIN 关键字对两个表进行连接,右外连接是左外连接的反向连接,只不过在查询结果集中包括的是指定右表的所有行。如果右边的某行在左表中没有找到匹配的行,则结果集中的左表的相对应位置为NULL。

SELECT * FROM course c RIGHT JOIN teacher t ON c.tno=t.tno;

2.3 全关联-FULL JOIN/UNION

mysql不支持FULL JOIN ,但是可以用左连接UNION右连接关键字实现全关联.

三、子查询

子查询在其他查询结果的基础上提供了一种有效的方式来表示where子句的条件。

子查询是可以嵌套在 SELECT、INSERT、UPDATE、DELETE 语句中。

子查询的 SELECT 查询总是使用圆括号括起来。

1、嵌套子查询

        在MySQL中子查询是可以嵌套使用的,并且可以在一个查询中嵌套任意多个子查询,即一个子查询中还可以包含另一个子查询,这种查询方式称为嵌套子查询。

例: 查询计算机系学生选修了哪些课程

SELECT * FROM sc WHERE sno IN

 (SELECT sno FROM Student

 WHERE Sdept = ‘计算机系’);

例: 查询修了‘c02’课程且成绩高于此课程的平均成绩的学生的学号和成绩。

SELECT Sno , Grade FROM SC

 WHERE Cno = 'c02‘and Grade > (

 SELECT AVG(Grade) from SC

 WHERE Cno = 'c02');

2、相关子查询

相关子查询(单值子查询)

这样的子查询只返回一个值,然后将一列值与查询返回的值进行比较。

例:查询和'静静'在同一个班的学生的信息。

SELECT 学生信息 .学号,学生信息 .姓名,学生信息 .性别,班级信息.班级编号,班级信息 .班级名称,班级信息 .年级

FROM 学生信息 INNER JOIN 班级信息

ON 学生信息 .班级编号=班级信息.班级编号

WHERE 学生信息 .班级编号=

(SELECT 班级编号 FROM 学生信息 WHERE 姓名='ff');

3、insert和select语句添加数据

在INSERT语句中使用SELECT子句可以将一个或多个表或视图中的值添加到另一个表中。使用SELECT子句还可以同时插入多行。

INSERT语句中使用SELECT子句的语法形式为:

INSERT [INTO] table_name[(column_list)]

SELECT select_list FROM table_name;

通过SELECT语句生成的结果集,再结合INSERT语句,可以把结果集插入到指定的表中,这种方法用于插入的数据不确定(通常多于一条),并且都具有一些特性时。

--拷贝表结构

CREATE TABLE table_bak LIKE table;

--拷贝表数据

CREATE TABLE table_bak_1 AS SELECT * FROM table;

4、update和select语句(子查询)结合

• 例:将计算机系全体学生的成绩加5分。

UPDATE SC SET Grade = Grade + 5

WHERE Sno IN

(SELECT Sno FROM Student

WHERE Sdept = '计算机系' );

四、数据库备份与还原

数据库热备份工具:mysqldump.exe(数据库在工作中备份)

备份:

mysqldump -h IP地址 -u 用户名 -p 密码 要备份的数据库名>本地电脑路径/数据文件名.sql

还原:

mysql -h IP地址 -u 用户名 -p 密码 数据库名<本地电脑路径/数据文件名.sql

use 数据库名;

source 本地电脑路径/数据文件名.sql;

数据库冷备份工具:(数据库停止工作进行备份)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算虚拟化-kvm创建虚拟机

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 虚拟化&#xff0c;简单来说就是把一台服务器/PC电脑&#xff0c;虚拟成多台独立的虚拟机&#xff0c;每台虚拟机之间相互隔…

计算机编程中的设计模式及其在简化复杂系统设计中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的…

编程考古-计算机发展(中)

晶体管计算机时代 尽管真空管技术标志着计算机步入了现代化的门槛&#xff0c;但其固有的局限性——庞大的体积、高昂的能耗、频繁的故障以及不菲的成本——极大地阻碍了其普及与实际应用。 晶体管的早期 Point-contact transistor 点接触晶体管 1947年&#xff0c;贝尔实验…

vue2+3 —— Day5/6

自定义指令 自定义指令 需求&#xff1a;当页面加载时&#xff0c;让元素获取焦点&#xff08;一进页面&#xff0c;输入框就获取焦点&#xff09; 常规操作&#xff1a;操作dom “dom元素.focus()” 获取dom元素还要用ref 和 $refs <input ref"inp" type&quo…

报错 No available slot found for the embedding model

报错内容 Server error: 503 - [address0.0.0.0:12781, pid304366] No available slot found for the embedding model. We recommend to launch the embedding model first, and then launch the LLM models. 目前GPU占用情况如下 解决办法: 关闭大模型, 先把 embedding mode…

Maven 构建项目

Maven 是一个项目管理和构建工具&#xff0c;主要用于 Java 项目。它简化了项目的构建、依赖管理、报告生成、发布等一系列工作。 构建自动化&#xff1a;Maven 提供了一套标准化的构建生命周期&#xff0c;包括编译、测试、打包、部署等步骤&#xff0c;通过简单的命令就可以执…

【C++笔记】C++三大特性之多态

【C笔记】C三大特性之多态 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;C笔记 文章目录 【C笔记】C三大特性之多态前言一.多态1.1 多态的概念1.2 虚函数1.3 虚函数的重写/覆盖1.4 多态的定义及实现 二.虚函数重写的⼀些其他问题2.1 协变(…

【项目实战】基于 LLaMA-Factory 通过 LoRA 微调 Qwen2

【项目实战】基于 LLaMAFactory 通过 LoRA 微调 Qwen2 一、项目介绍二、环境准备1、环境准备2、安装LLaMa-Factory3、准备模型数据集3.1 模型准备3.2 数据集准备 三、微调1、启动webui2、选择参数3、训练 四、测试五、总结 一、项目介绍 LLaMA-Factory是一个由北京航空航天大学…

内容占位符:Kinetic Loader HTML+CSS 使用CSS制作三角形原理

内容占位符 前言 随着我们对HTML和CSS3的学习逐渐深入&#xff0c;相信大家都已经掌握了网页制作的基础知识&#xff0c;包括如何使用HTML标记构建网页结构&#xff0c;以及如何运用CSS样式美化页面。为了进一步巩固和熟练这些技能&#xff0c;今天我们一起来完成一个有趣且实…

SpringSecurity 鉴权认证入门讲解

​ Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;它提供了更丰富的功能&#xff0c;社区资源也比Shiro丰富。 ​ 一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多&#xff0c;因为相比与Sp…

【插件】多断言 插件pytest-assume

背景 assert 断言一旦失败&#xff0c;后续的断言不能被执行 有个插件&#xff0c;pytest-assume的插件&#xff0c;可以提供多断言的方式 安装 pip3 install pytest-assume用法 pytest.assume(表达式,f’提示message’) pytest.assume(表达式,f‘提示message’) pytest.ass…

虾皮:LLM注意力机制的下沉现象分析

&#x1f4d6;标题&#xff1a;When Attention Sink Emerges in Language Models: An Empirical View &#x1f310;来源&#xff1a;arXiv, 2410.10781 &#x1f31f;摘要 &#x1f538;语言模型&#xff08;LM&#xff09;将大量注意力分配给第一个标记&#xff0c;即使它在…

MyBatis的select标签的resultType属性

在MyBatis框架中&#xff0c;映射文件中select标签的resultType属性&#xff0c;用于指定从数据库查询返回结果集需要映射的Java类型&#xff0c;即Mapper接口中方法返回值类型(或集合中的泛型类型)&#xff0c;可以是基本数据类型、基本数据类型的包装类型、自定义的PO类型、集…

ubuntu20.04如何升级python3.8到python3.10

主要参考了这两个链接&#xff1a; 如何在Ubuntu 20.04安装Python 3.10 | myfreaxhttps://www.myfreax.com/how-to-install-python-3-10-on-ubuntu-20-04/#:~:text%E5%9C%A8%E8%B0%83%E8%AF%95%E5%92%8C%E5%85%B6%E4%BB%96%E5%B7%A5%E5%85%B7%E4%B8%AD%E4%BD%BF%E7%94%A8%E7%B…

AWTK-WIDGET-WEB-VIEW 发布

awtk-widget-web-view 是通过 webview 提供的接口&#xff0c;实现的 AWTK 自定义控件&#xff0c;使得 AWTK 可以方便的显示 web 页面。 项目网址&#xff1a; https://gitee.com/zlgopen/awtk-widget-web-view webview 提供了一个跨平台的 webview 接口&#xff0c;是一个非…

丹摩征文活动|FLUX.1+ComfyUI部署与使用

丹摩征文活动&#xff5c;FLUX.1ComfyUI部署与使用 1.引言 在人工智能飞速发展的今天&#xff0c;丹摩智算平台&#xff08;DAMODEL&#xff09;以其卓越的AI算力服务脱颖而出&#xff0c;为开发者提供了一个简化AI开发流程的强大工具。通过租赁GPU资源&#xff0c;丹摩智算平…

性能高于Transformer模型1.7-2倍,彩云科技发布基于DCFormer架构通用大模型云锦天章

2017年&#xff0c;谷歌发布《Attention Is All You Need》论文&#xff0c;首次提出Transformer架构&#xff0c;掀开了人工智能自然语言处理&#xff08;NLP&#xff09;领域发展的全新篇章。Transformer架构作为神经网络学习中最重要的架构&#xff0c;成为后来席卷全球的一…

【异常解决】Linux shell报错:-bash: [: ==: 期待一元表达式 解决方法

博主介绍&#xff1a;✌全网粉丝21W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…

Linux解决普通用户无法使用sudo指令的问题

问题描述&#xff1a; Linux解决普通用户无法使用sudo指令的问题 sudo 指令是允许 普通用户 临时 以 超级用户 root 的权限运行。 普通用户如果没有配置而直接使用 sudo 指令&#xff1a;系统会提示没有权限&#xff08;如下图&#xff09; 使用sudo时系统提示&#xff08;当前…

9.1 使用haarcascade_frontalface_default.xml分类器对静态图像进行人脸检测。

1&#xff09;程序代码&#xff1a; # 1. 使用haarcascade_frontalface_default.xml分类器对静态图像进行人脸检测。 import cv2 import numpy as np # 构造级联分类器对象face_cascade cv2.CascadeClassifier(./data/haarcascades/haarcascade_frontalface_default.xml# ./…