inner ledt right

本文深入探讨了SQL中的左联接、右联接与等连接的区别与应用,通过具体实例展示了如何在查询中使用这些联接方式,并解释了它们各自的特点。

left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
inner join(等值连接) 只返回两个表中联结字段相等的行

举例如下:
--------------------------------------------
表A记录如下:
aID     aNum
1     a20050111
2     a20050112
3     a20050113
4     a20050114
5     a20050115

表B记录如下:
bID     bName
1     2006032401
2     2006032402
3     2006032403
4     2006032404
8     2006032408

--------------------------------------------
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
5     a20050115    NULL     NULL

(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
--------------------------------------------
2.right join
sql语句如下:
select * from A
right join B
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404
NULL     NULL     8     2006032408

(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
--------------------------------------------
3.inner join
sql语句如下:
select * from A
innerjoin B
on A.aID = B.bID

结果如下:
aID     aNum     bID     bName
1     a20050111    1     2006032401
2     a20050112    2     2006032402
3     a20050113    3     2006032403
4     a20050114    4     2006032404

结果说明:
很明显,这里只显示出了 A.aID = B.bID的记录.这说明inner join并不以谁为基础,它只显示符合条件的记录.
--------------------------------------------
注:
LEFT JOIN操作用于在任何的 FROM 子句中,组合来源表的记录。使用 LEFT JOIN 运算来创建一个左边外部联接。左边外部联接将包含了从第一个(左边)开始的两个表中的全部记录,即使在第二个(右边)表中并没有相符值的记录。

语法:FROM table1 LEFT JOIN table2 ON table1.field1 compopr table2.field2

说明:table1, table2参数用于指定要将记录组合的表的名称。
field1, field2参数指定被联接的字段的名称。且这些字段必须有相同的数据类型及包含相同类型的数据,但它们不需要有相同的名称。
compopr参数指定关系比较运算符:"=", "<", ">", "<=", ">=" 或 "<>"。
如果在INNER JOIN操作中要联接包含Memo 数据类型或 OLE Object 数据类型数据的字段,将会发生错误. 


SELECT * FROM A inner join B ON A.F1 = B.F1, 内连接,显示的查询结果,就是查询条件A 的必须等于B的数据;
SELECT * FROM  A left join B ON A.F1 = B.F1 ,左连接,显示的查询结果,就是左边表的全部,和右边表的符合查询条件的数据

from PyQt5.QtGui import QDoubleValidator, QIntValidator, QIcon # QDoubleValidator:浮点数输入验证器 QIntValidator:整数输入验证器 from PyQt5.QtWidgets import * from PyQt5 import uic # uic库 # QTimer定时器库 Qt:这里用来 self.ui.setWindowFlags(Qt.WindowCloseButtonHint) from PyQt5.QtCore import QTimer, Qt, QSize, QThread from PyQt5.QtSerialPort import QSerialPort, QSerialPortInfo # QSerialPort:提供串口操作的各种功能 QSerialPortInfo:获取系统中关于串口的信息 from lib.share import GLO import time # 调用time.sleep() import sys import re class VAS6002GUI(QWidget): def __init__(self, buad_instance): super().__init__() # 调用父类的构造方法,并初始化 self.ui = uic.loadUi('6002.ui') # 动态加载UI界面 self.ui.setWindowIcon(QIcon("Logo.ico")) self.ui.closeEvent = self.on_close # 重定义closeEvent 函数 点击关闭应用的时候触发 # buad窗口 self.baud = buad_instance # 实例化 self.baud.ui.pushButton_certain.clicked.connect(self.certain) self.baud.ui.lineEdit.returnPressed.connect(self.certain) # returnPressed:回车触发 self.baud.ui.pushButton_cancel.clicked.connect(lambda: self.baud.ui.close()) # 点击按钮触发 self.ui.cbox_baud.activated.connect(self.check_index_changed) # activated:点击cbox控件时触发 # 关于串口 self.serial_port = QSerialPort() # 创建串口实例 self.ui.btn_serialport.clicked.connect(self.connect_serial) # 打开串口,关闭串口 self.serial_port.readyRead.connect(self.tim3) # 串口接收到数据触发 self.ui.clear_port.clicked.connect(self.clear_port_text) # 清除串口缓存数据 self.ui.timer3 = QTimer() # 串口串口中断后,启动定时器3,定时器3超时运行receive_data 实现串口发送接收严格时序控制 self.ui.timer3.timeout.connect(self.receive_data) # 有参数的函数必须用lambda 要不然会直接执行 # Python的语法规则决定了,当你在一个表达式中写function(arg)这样的形式时,Python会立即执行这个函数,并用返回值来进行后续操作 self.ui.pbtn_port.clicked.connect(lambda: self.data_transmit_serial(self.ui.ledt_port)) self.ui.ledt_port.returnPressed.connect(lambda: self.data_transmit_serial(self.ui.ledt_port)) self.ui.pbtn_port_2.clicked.connect(lamb
04-03
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化并行计算等改进策略。; 适合人群:具备一定Python编程基础优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值