添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

一般来说,我们为了得到更完整的结果,我们需要从两个或更多的表中获取结果,我一般都是用select xxx,xxx from 表1,表2 where 表1.xxx=表2.xxx,我们一般都是进行的是这般的操作,其实mysql中还有一种操作,那就是join的操作,例如底下有两个表:

请看 "Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

接下来请看 "Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

以上的这两个表,然后我们把它们进行连接查询
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P 
 
LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678

如果使用关键词JOIN来从两个表中获取数据

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
则inner join 与上面的普通查询没有区别

不同的 SQL JOIN

  • JOIN: 如果表中有至少一个匹配,则返回行
  • LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
  • RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行 

LEFT JOIN 关键字语法

"Persons" 表:

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

"Orders" 表:

Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
 
LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
BushGeorge 

SQL RIGHT JOIN 关键字

"Persons" 表:

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

"Orders" 表:

Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
 
LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
  34764

SQL FULL JOIN 关键字

"Persons" 表:

Id_PLastNameFirstNameAddressCity
1AdamsJohnOxford StreetLondon
2BushGeorgeFifth AvenueNew York
3CarterThomasChangan StreetBeijing

"Orders" 表:

Id_OOrderNoId_P
1778953
2446783
3224561
4245621
53476465

全连接(FULL JOIN)实例

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
 
LastNameFirstNameOrderNo
AdamsJohn22456
AdamsJohn24562
CarterThomas77895
CarterThomas44678
BushGeorge 
  34764
一般来说,我们为了得到更完整的结果,我们需要从两个或更多的表中获取结果,我一般都是用select xxx,xxx from 表1,表2 where 表1.xxx=表2.xxx,我们一般都是进行的是这般的操作,其实mysql中还有一种操作,那就是join的操作,例如底下有两个表:请看 "Persons" 表:Id_PLastNameFirstNameAdd
主要想实现的功能是想当2个表对应的id相同时,赋予主表一个参数并定义值,并且根据这个值去按顺序排序,最开始我使用的方法是各查出2个表然后比较id相同赋值,后来排序的时候才发现在分页的条件下只能对当前页进行排序,这与自己的功能不符,于是采用了子查询,先对另一个表进行条件查询,然后再关联主表,然后排序就可以了,以下是代码: $subOrderSql = Inv::where('add_time','between',[strtotime(date("Y-m-01", $task->add_...
join语法将两张表的数据连接起来显示,join的连接点以on语句中规定的连接方式,where语句中规定筛选规则 1. left join select * from left_table as a left join right_table as b on a.id=b.id where a.age>30 left_table 中符合查询条件的数据会全部列出,right_table
低版本:row_number() over partition by 分组聚合函数不能用 如果版本高可以直接用: select * ,row_number() over (partition by c_id order by s_score) from score; 现在来说说SQL该怎么写: SELECT SELECT wh.id, wh.ywid, wh.ywlx, wh.jmxm, wh.jmsfzh, wh.xxzt, select s.* from (select LoginUser.UserID,LoginUser.UserName,LoginUser.UserPwd, StationInfo.StationID,StationInfo.StationName, row_number() over (partition by StationInfo.station...
为什么需要多张数据库表进行查询呢?因为如果设计成一张表会造成数据冗余,造成数据库间浪费,然而有时我们需要将多张表的数据整合并且查询出来,这时就需要通过表之间的主外键关联在一起进行查询。 查看获取表结构信息,根据表结构信进行连表查询 mysql>useschool; mysql>showtables; +------------------+ |Tables_in_school| +------------------+ |course| while True: now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") sched_Timer = datetime.datetime(2022, 3, 16, 15, 5, 10) if now == str(sched_Timer): print("定时器") sleep(0.5) 如何用Python写一个每天的定时程序 最后loopflag=0的作用是啥