SELECT * FROM A, B(, C) 或者
SELECT * FROM A CROSS JOIN B (CROSS JOIN C);
注:没有任何关联条件,结果是 笛卡尔积,结果集 会很大,没有意义,很少使用。
SELECT * FROM A, B WHERE A.id = B.id 或者
SELECT * FROM A INNER JOIN B ON A.id = B.id;
注:多表中同时符合某种条件的数据记录的集合。
内连接分为三类:
① 等值连接:ON A.id = B.id
;
② 不等值连接:ON A.id > B.id
;
③ 自连接:SELECT * FROM A T1 INNER JOIN A T2 ON T1.id = T2.pid
;
外链接又分为左外链接(LEFT JOIN)和右外链接(RIGHT JOIN)
1)左外链接
LEFT OUTER JOIN
,以左表为主,先查询出左表,按照 ON
后的关联条件匹配右表,没有匹配到的用 NULL
填充,可以简写 成 LEFT JOIN
.
2)右外链接
RIGHT OUTER JOIN
,以右表为主,先查询出右表,按照 ON
后的关联条件匹配坐表,没有匹配到的用 NULL
填充,可以简写 成 RIGHT JOIN
.
SELECT * FROM A UNION SELECT * FROM B UNION ......
注:
SELECT * FROM A LEFT JOIN B ON A.id = B.id UNION SELECT * FROM A RIGHT JOIN B ON A.id = B.id;
MySQL本身不支持全连接,如果要使用全连接,可以使用 LEFT JOIN 和 UNION 和 RIGHT JOIN 联合使用。
team:参赛队伍表
字段名 | 类型 | 描述 |
---|---|---|
teamID | int | 主键 |
teamName | varchar(20) | 队伍名称 |
match:赛程表
字段名称 | 类型 | 描述 |
---|---|---|
matchID | int | 主键 |
hostTeamID | int | 主队ID |
guestTeamID | int | 客队ID |
matchResult | varchar(20) | 比赛结果 |
matchTime | date | 比赛日期 |
其中,match赛程表 中的 hostTeamID 与 guestTeamID 都和 team表 中的 teamID关联,查询 2006-6-1 到 2006-7-1 之间举行的所有比赛,并且用以下形式列出:拜仁 2:0 不莱梅 2006-6-21。
解题思路:
方法一:
amName,m.amName,m.matchTime
FROM`match` AS m LEFT JOIN team AS t1 ON m.hostTeamID = t1.teamIDLEFT JOIN team AS t2 ON m.guestTeamID = t2.teamID
WHEREm.matchTime BETWEEN '2006-6-1' AND '2006-7-1';
方法二:
amName,M.amName,M.matchTime
FROMteam T1,team T2,`match` M
amId = M.hostTeamID amId = M.guestTeamID AND M.matchTime >= "2006-06-01“ and M.matchTime <=”2006-07-01";
最后的时间比较也可用 between ... and
本文发布于:2024-02-01 06:21:00,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170673966034512.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |