内连接和外连接
内连接和外连接都是表的连接方式(将两张表连接起来)
内连接inner join
外连接:左连接 left join,右连接 right join
1.笛卡尔积
表一和表二做笛卡尔积,就是将表一的每一行和表二的每一行进行拼接
所有的这些连接都是先将这两张表做笛卡尔积,然后留下其中某些列,删除其他列
2.内连接 inner join(也就是join)
select * from tableA inner join tableB on TableA.name = TableB.name
另外:用join on和join where效果是一样的
用join on叫做连接查询
用join where叫做等值查询
3.外连接(左连接,右连接)
(1)Outer是可以省略的
Left Join=Left Outer Join 即左连接就是左外连接
Right Join=Right Outer Join 即右连接就是右外连接
(2)谁是主表?(进行外连接的两张表是有主次关系的)
除了匹配到的行外,还要有主表中没有匹配到的行
a Right Join b,Join关键字右边的表b表是主表
a Left Join b,Join关键字左边的表a表是主表
举个例子:下面两张表
Persons表和Orders表进行笛卡尔积得到:
运行Mysql语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
就是在上面的笛卡尔积中,只保存Persons.Id_P=Orders.Id_P的行(也就是红色四行)
最后由于是Persons Left Join Orders,所以Persons表是主表,因此Persons表是主表,主表Person表中有些行在Orders表中匹配不到,但是也要添加到最后的结果里面,最后结果为:
如果是右连接:(也就是主表不再是Persons表了,而是Orders表)
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
此时要保存的就是主表Orders中没有匹配到的行了(而不是Persons表中没有匹配到的行)
leetcode上例题:
显然2,4号员工是从不订购的客户
将Customers表和Orders表进行外连接,比如:Customers Left Join Orders 得到:
Select Customers.Name as Customers /* 给最后选出来的列起个别名,否则就叫Name*/
From Customers Left Join Orders
on Customers.Id=Orders.CustomerId
得到的是:
+Customers表中没有匹配到的行,也就是:
所以还要添加一个条件:where Orders.CustomerId Is Null;
Select Customers.Name as Customers /* 给最后选出来的列起个别名,否则就叫Name*/
From Customers Left Join Orders
on Customers.Id=Orders.CustomerId
where Orders.CustomerId Is Null;/*这里where Orders.Id Is Null也是可以的*/
其他的连接方式:
(1)full outer join 求并集
SELECT * FROM TableA FULL OUTER JOIN TableB ON TableA.name = TableB.name
(2)
(3)左外连接
同理还有右外连接
(4)自连接就是将一张表拆成两张一样的表(了解即可)
z__c__x_: 卷积核大小为1的时候,参数量会增加。只要卷积核大小>1,参数量肯定会下降
Schwarze Melodie: 您好 使用深度可分离卷积时需要使用激活函数吗?像“relu”等 ?
wqwll111666: 这段代码在resnet网络中怎么用啊,非常感谢
m0_57943112: for update 这个,不是读写锁 是写锁,读不阻塞 mysql 事务隔离级别 可重复读 for update后, 新起个事务是 可以selct *from tt的
2301_82285961: 简单清晰不啰嗦