深入了解关联查询和子查询

推荐阅读

给软件行业带来了春天——揭秘Spring究竟是何方神圣(一)
给软件行业带来了春天——揭秘Spring究竟是何方神圣(二)


文章目录

    • 推荐阅读
    • 关联查询
    • 子查询


关联查询

image.png

关联查询
从多张表中查询对应记录的信息,关联查询的重点在于这些表中的记录的对应关系,这个对应关系也称为连接条件。

select k.kname,k.sal,h.loc
from k,h
where k.depino=h.depino

image.png

表名也可以写别名.
当两张表名有同名字段时,select 子句中必须要明确指出指定该字段来自哪张表,在关联查询中,表名也可以添加别名们可以简化select 语句的复杂度。

SELECT k.name,h.name
FROM employee_K k,employee_H h
WHERE k.depino=h.depino

关联查询要添加连接条件,否则会产生笛卡尔积
笛卡尔积通常是一个无意义的结果集,它的记录数使所有参与查询的表的记录数乘积的结果。要避免出现,数据量大时极易出现内存溢出等现象。
N张表关联查询要有N-1个连接条件。

连接条件和过滤条件同时成立。

select k.kname,k.sal,h.loc
from k,h
where k.depino=h.depino and h.loc='shanghai'

内连接
**join… on… **内连接返回所有满足连接条件的记录。不满足条件的不会被查询出来。

select k.kname,sal,h.loc
from k  h 
where k.depino=h.depino and sal>2000select k.kname,sal,h.loc
from k join h on k.depino=h.depino
where sal>2000

连接条件和过滤条件分开,层次感更好,条理更清晰。

外连接
外连接除了会将满足连接条件的记录查询出来以外,还会将不满足的连接条件的记录也查询出来。

外连接分
左外连接:以 join 左侧表作为驱动表(所有数据都会被查询出来),那么该表中某条 记录不满足连接条件时,来自右侧表中的字段全部填null。

select k.name,h.name from k left outer join h  
on k.depino=h.depinoselect k.name,h.name from k join h  
on k.depino=h.depino(+)

右外连接

select k.name,h.name from k join h  
on k.depino(+)=h.depino

全外连接

select k.name,h.name from k  full outer join h  
on k.depino=h.depino

自连接
自连接:当前一张表的一条记录可以对应当前表自己的多条记录。
自连接是为了解决同类型数据但是又存在上下级关系的树状结构数据时使用。

select k.kname,kk.kname from k ,k kk where k.id=kk.pid

image.png
自连接连接多个表

select k.kname,kk.kname,h.loc
from k,k kk,h 
where k.pid=kk.id and kk.depino=h.depino and k.kname='bob'select k.kname,kk.kname,h.loc
from k join k kk 
on k.pid=kk.id
join h
on kk.depino=h.depino
where k.kname='bob'

子查询

子查询是一条select 语句,但是他嵌套在其他SQL语句中,为的是给其他SQL语句提供数据以支持其执行操作。

SELECT kname,sal FROM K
WHERE sal>(select sal FROM k WHERE kname='ali')

image.png

在DDL中,根据子查询的结果集快速创建一张表。

创建表时如果字查询中的字段有别名则该表对应的字段就使用该别名作为其字段名,当子查询中一个字段名含有函数表达式,则必须要使用别名。

 CREATE TABLE employeeASSELECT k.kname,k.sal,k.id,h.hname,h.locFROM h,kWHERE k.depino=h.depino

image.png

在DML中使用子查询。

SELECT*FROM K WHERE depino=(SELECT depino FROM K WHERE kname='alcie' )

子查询在查询语句中的运用
image.png

 select depino ,kname,sal from k where sal >(select avg(sal) from K)

image.png

  • 单行单列子查询:常用于过滤条件,可以配合=,<+,<,>,>=使用

  • 多行多列子查询:常用于过滤条件,由于查询出多个值,在判断=时,要用IN,

                                判断>,>=等操作,要用ALL,ANY。
    
  • 多行多列子查询:当成一张表来看。

 select kname,sal from k where sal >all(select sal from k where depino in(10,30))

image.png

exists,not exists 关键字
exists 后面跟一个子查询,当子查询可以查询出至少一条记录,则exists表达式成立并返回TRUE。

select kname,sal from k where exists(select *from k,h where k.depino=h.depino)select kname,sal from k where not exists (select *from h where k.depino=h.depino)

image.png

子查询语句在having子句中的使用。

  select min(sal),depinofrom kGROUP BY depinohaving min(sal)>(select min(sal) from k where depino=30)

image.png

子查询在FROM子句中的运用
当一个子查询是多列子查询,通常将该子查询的结果集当做一张表看待并基于它进行二次查询。

select AVG(sal),depino from k group bu depinoselect kname,k.sal,depino from k,(select AVG(sal) avg_sal,depino from k group by depino) A where k.depino=A.depino and k.sal>A.avg_sal

image.png
子查询在select 子句中的使用。
可以将查询的结果当做外层查询记录中的一个字段值显示。

select kname,k.sal,(select hname from h where k.depino=h.ddepino) from k

image.png

在这里插入图片描述

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

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

相关文章

字节、十六进制、二进制之间的关系

字节、十六进制和二进制是计算机领域中常用的术语&#xff0c;它们之间有着密切的关系。在这篇文章中&#xff0c;我们将探讨字节、十六进制和二进制之间的关系&#xff0c;并提供一些例子来说明它们的应用。 首先&#xff0c;让我们了解一下字节。字节是计算机存储和传输数据…

组合数学基础

隔板法 X 1 X 2 . . . X n m , X i > 0 X_1X_2...X_nm,\quad X_i>0 X1​X2​...Xn​m,Xi​>0 求方程解的个数 求方程解的个数 求方程解的个数 m 个球插入 n − 1 个板将 m 个球分成 n 份 m个球插入n-1个板将m个球分成n份 m个球插入n−1个板将m个球分成n份 方程…

Ubuntu下的磁盘管理,分区管理,挂载和卸载分区

探索Ubuntu下的磁盘管理 在Ubuntu操作系统中&#xff0c;磁盘管理是系统维护中至关重要的一部分。它涉及到分区、格式化、挂载、监视以及维护磁盘等操作。本文将带您深入了解Ubuntu下的磁盘管理&#xff0c;并介绍一些常用的工具和技术。 1. 磁盘基础知识 在开始磁盘管理之前…

Acwing---3302. 表达式求值

表达式求值 1.题目2.基本思想3.代码实现 1.题目 给定一个表达式&#xff0c;其中运算符仅包含 ,-,*,/&#xff08;加 减 乘 整除&#xff09;&#xff0c;可能包含括号&#xff0c;请你求出表达式的最终值。 注意&#xff1a; 数据保证给定的表达式合法。题目保证符号 - 只作…

服务器和云服务器哪个更安全?

随着云计算技术的不断发展&#xff0c;越来越多的企业开始选择使用云服务器来存储和处理数据。然而&#xff0c;对于一些企业来说&#xff0c;他们可能更倾向于使用传统的服务器。在这种情况下&#xff0c;安全性成为了一个重要的考虑因素。那么&#xff0c;服务器和云服务器哪…

mac下载工具:JDownloader 2 for Mac 中文版

JDownloader是一款开源的下载管理工具&#xff0c;主要使用Java编程语言开发&#xff0c;因此它能够在支持Java的操作系统上运行&#xff0c;包括Windows、Linux和Mac OS。这款软件专门为那些需要通过网盘下载文件的用户提供便利&#xff0c;它支持众多流行的网盘服务&#xff…

11、SystemInit函数解读

1、系统时钟初始化函数&#xff1a;SystemInit(); 使用库函数的时候&#xff0c;在系统启动之后会自动调用 2、首先如果使用外部时钟源HSE&#xff0c;要配置外部晶振频率&#xff1a;stm32f4xx.h 3、初始化之前首先通过宏定义定义下面变量来定义系统时钟频率&#xff1a; …

python将Excel文档转成.db数据库文件

python实现Excel转.db数据库 1.程序实现 程序实现以下功能&#xff1a; 1.读取一个Excel文件,文件名通过函数传参数传入 2.将文件读取的内容保存到一个数据库文件中 3.数据库的文件名以传入的Excel文件的文件名命名 4.将excel文件的工作簿的名字作为数据库的表单名 5.将Excel…

idea修改项目git地址

大家好&#xff0c;今天给大家分享的知识是如何在idea中修改项目的git地址。 一、修改地址 首先我们先找到菜单栏中Git选项&#xff0c;然后点击管理远程&#xff08;Manage Remote&#xff09; 之后双击origin之后就可以定义名称或者URL了。

电路设计(10)——超温报警电路的proteus仿真

1.题目背景 在现实生活中&#xff0c;常有一种工程技术&#xff0c;即带有自动温度补偿的设备&#xff0c;能在规定温度内正常工作。但是为了设备安全&#xff0c;需设定工作的上限温度&#xff0c;万一温控补偿失效&#xff0c;设备温度一旦超出上限温度时&#xff0c;便立即切…

前端excel带样式导出 exceljs 插件的使用

案例 <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width, initial-scale1"><title>exceljs 使用</title></head><body><button …

ReactNative实现宽度变化实现的动画效果

效果如上图所示&#xff0c;通过修改设备宽度实现动画效果 import React, {useRef, useEffect, useState} from react; import {Animated, Text, View, Image} from react-native;const FadeInView props > {const fadeAnim useRef(new Animated.Value(0)).current;React…

PyTorch、NCNN、Numpy三者张量的shape

目录 一、PyTorch二、NCNN三、Numpy 一、PyTorch 在 PyTorch 中&#xff0c;张量&#xff08;Tensor&#xff09;的形状通常按照 (N, C, H, W) 的顺序排列&#xff0c;其中&#xff1a; N 是批量大小&#xff08;batch size&#xff09; C 是通道数&#xff08;channel number…

【Node系列】连接数据库

文章目录 一、连接MySql二、连接MongoDB三、相关链接 一、连接MySql 首先&#xff0c;您需要安装mysql模块。在命令行中&#xff0c;导航到您的项目目录并输入以下命令&#xff1a; npm install mysql然后&#xff0c;您可以在Node.js代码中使用mysql模块来连接MySQL数据库、…

在vs code的terminal,debug执行python main.py --train True

GPT4告诉我&#xff1a; 在VS Code中以debug状态执行带有参数&#xff08;如--train&#xff09;的main.py文件&#xff0c;你需要在launch.json配置文件中正确设置参数。以下是详细步骤&#xff1a; 打开你的main.py文件&#xff1a;确保你的main.py文件已经在VS Code中打开…

鸿蒙 状态管理-应用存储

前提&#xff1a;基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。&#xff08;或有偏颇&#xff0c;自行斟酌&#xff09; 1.概念 装饰器&#xff08;State、Prop等&#xff09;是用于组件的状态修饰符&#xff0c;本篇讲的是更上一层级别&#xff…

牛客周赛 Round 31(A~F)

文章目录 ABCDEF A #include <bits/stdc.h> #define int long long #define rep(i,a,b) for(int i (a); i < (b); i) #define fep(i,a,b) for(int i (a); i > (b); --i) #define pii pair<int, int> #define pll pair<long long, long long> #defi…

华为自动驾驶干不过特斯拉?

文 | AUTO芯球 作者 | 李诞 什么&#xff1f; 华为的智能驾驶方案干不过蔚小理&#xff1f; 特斯拉的智能驾驶[FSD]要甩中国车企几条街&#xff1f; 这华为问界阿维塔刚刚推送“全国都能开”的城区“无图 NCA” 就有黑子来喷了 这是跪久了站不起来了吧 作为玩车14年&…

Pytorch: nn.dropout

Dropout 是一种用于深度学习模型的正则化技术&#xff0c;旨在减少模型对特定训练样本的过度拟合。其主要作用包括&#xff1a; 减少过拟合&#xff1a; Dropout 阻止神经网络对某些特定输入值过度依赖&#xff0c;从而提高模型的泛化能力。通过随机地失活神经元&#xff08;将…

flutter开发实战-可扩展popup弹窗template模版样式

flutter开发实战-可扩展popup弹窗template模版样式 最近在看到一个flutter_beautiful_popup&#xff0c;可以美化弹窗窗口样式。该插件通过一个template模版的类BeautifulPopupTemplate作为抽象的base类。 一、基类BeautifulPopupTemplate 在BeautifulPopupTemplate中&…