SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
LastName | FirstName | OrderNo |
---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
如果使用关键词JOIN来从两个表中获取数据
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
LastName | FirstName | OrderNo |
---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
则inner join 与上面的普通查询没有区别
不同的 SQL JOIN
- JOIN: 如果表中有至少一个匹配,则返回行
- LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
- RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
- FULL JOIN: 只要其中一个表中存在匹配,就返回行
LEFT 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
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
LastName | FirstName | OrderNo |
---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
Bush | George | |
SQL RIGHT 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
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
LastName | FirstName | OrderNo |
---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
| | 34764 |
SQL FULL 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 |
全连接(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
LastName | FirstName | OrderNo |
---|
Adams | John | 22456 |
Adams | John | 24562 |
Carter | Thomas | 77895 |
Carter | Thomas | 44678 |
Bush | George | |
| | 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写一个每天的定时程序