Mysql 在其他表中检索与其外键相关的行的SQL

Mysql 在其他表中检索与其外键相关的行的SQL,mysql,sql,Mysql,Sql,问题是,我不确定他们是否有一个技术或标准化的方法来实现我的目标 我提供了一种基本的方法,可以“产生”预期的结果,但我想知道外键是否可以在SQL中用于返回相对行 CREATE TABLE sessions( SessionID INT(80) NOT NULL AUTO_INCREMENT, Key VARCHAR(120) NOT NULL, Username VARCHAR(25) NOT NULL, Online VARCHAR(7) NOT NULL, Status VARCHAR(10)

问题是,我不确定他们是否有一个技术或标准化的方法来实现我的目标

我提供了一种基本的方法,可以“产生”预期的结果,但我想知道外键是否可以在SQL中用于返回相对行

CREATE TABLE sessions(
SessionID INT(80) NOT NULL AUTO_INCREMENT,
Key VARCHAR(120) NOT NULL,
Username VARCHAR(25) NOT NULL,
Online VARCHAR(7) NOT NULL,
Status VARCHAR(10) NOT NULL,
IP VARCHAR(15) NOT NULL,
SocketID VARCHAR(20) NOT NULL,
Latest VARCHAR(20) NOT NULL,
Since VARCHAR(20) NOT NULL,
PRIMARY KEY (SessionID),
FORIEGN KEY (Username) REFERENCES users(Username)
)

CREATE TABLE Users(
UserID INT(80) NOT NULL AUTO_INCREMENT,
Username VARCHAR(25) NOT NULL,
Email VARCHAR(200) NOT NULL,
Password VARCHAR(255) NOT NULL,
FirstName VARCHAR(50),
LastName VARCHAR(50),
BirthDate VARCHAR(50),
RegistrationDate TIMESTAMP(20) NOT NULL DEFAULT CURRENT_TIMESTAMP
PRIMARY KEY (SessionID),
FORIEGN KEY (Username) REFERENCES friends(Sender, Reciever)
)

CREATE TABLE Friends(
FriendID INT(80) NOT NULL AUTO_INCREMENT,
Sender VARCHAR(25) NOT NULL,
Reciever VARCHAR(25) NOT NULL,
Status VARCHAR(10) NOT NULL,
Sent_Timestamp VARCHAR(16) NOT NULL,
Response_Timestamp VARCHAR(16),
PRIMARY KEY (FriendID),
FORIEGN KEY (Sender, Reciever) REFERENCES Users(Username)
)

"SELECT * FROM Sessions, Users, Friends WHERE Sessions.Username = Users.username AND Sessions.Username = Friends.Sender OR Session.Username = Friends.Reciever";
现在,为了返回sessions表中一行的所有相对行,我可以执行什么样的SQL。注意用户名上的ForiegnKey。它是定义SQL内部关系的SELECT语句的组合吗

例如:
SELECT*FROM Sessions,Users,Friends WHERE Sessions.Username=Users.Username和Sessions.Username=Friends.Sender或Session.Username=Friends.receiver”


或者SQL是否有一个函数可以解释外键之间的关系,并通过更复杂的SQL查询返回所有相关的结果?或者我以前的SQL语句是正确的方法吗?

如果这不是一个正确的问题,我道歉,因为它是在询问有关某个情况的建议/知识,而不是n一个问题的难解/解决方法。我正确的方法是使用explicit连接,implicit“逗号”“几十年来,加入一直不受欢迎。外键只强制引用完整性;SQL无法自动检索所有相关数据。您的查询无法指定应返回
用户
中的哪些行,因此您将得到整个
用户
表的叉积。多列外键不能引用另一个表中的单个列。您需要为每个
发送方
接收方
使用单独的外键。您不能拥有双向外键关系,这会导致鸡和蛋的问题。在创建用户之前不能创建朋友,但在创建朋友之前不能创建用户。如果这不是一个正确的问题,我深表歉意,因为这是一个关于某个情况的建议/知识,而不是一个困难的解决方案/问题的解决方案。我正确的方法是使用explicit JOINs,implicit“逗号”几十年来,联姻一直不受欢迎。外键只强制引用完整性;SQL无法自动检索所有相关数据。您的查询无法指定应返回
用户
中的哪些行,因此您将得到整个
用户
表的叉积。多列外键不能引用另一个表中的单个列。您需要为每个
发送方
接收方
使用单独的外键。您不能拥有双向外键关系,这会导致鸡和蛋的问题。在创建用户之前不能创建朋友,但在创建朋友之前不能创建用户。