SQL基础知识:如何在一个查询中从多个表中获取详细信息?

fdm*_*ion 6 sql

我已经使用SQL多年,但从未真正利用它的潜力.

对于这个例子,假设我有两个表:

CREATE TABLE messages (
    MessageID INTEGER NOT NULL PRIMARY KEY,
    UserID INTEGER,
    Timestamp INTEGER,
    Msg TEXT);

CREATE TABLE users (
    UserID INTEGER NOT NULL PRIMARY KEY,
    UserName TEXT,
    Age INTEGER,
    Gender INTEGER,
    WebURL TEXT);
Run Code Online (Sandbox Code Playgroud)

据我所知,PRIMARY KEY基本上对该字段编制索引,以便以后可以将其用作快速搜索 - 基于主键的确切值查询即使在巨大的表中也能非常快速地获得结果.(这也强制说明每个记录中的字段必须是unqiue.)

在我目前的工作流程中,我会做类似的事情

SELECT * FROM messages;
Run Code Online (Sandbox Code Playgroud)

然后在代码中,对于每条消息,执行:

SELECT * FROM users WHERE UserID = results['UserID'];
Run Code Online (Sandbox Code Playgroud)

这显然听起来非常低效,我知道它可以做得更好.

我最终想要的是一个包含所有字段的结果集messages,除了代替UserID字段,它包含users表中与给定UserID匹配的所有字段.

有人可以给我一个关于如何完成这类事情的快速入门书吗?

如果重要的话,我使用SQLite3作为SQL引擎,但我也想在MySQL上做这个.

谢谢!

bum*_*mmi 4

不确定所请求的顺序,但您可以调整它。
只是JOIN桌子上UserID

SELECT MESSAGES.*, 
       USERS.USERNAME, 
       USERS.AGE, 
       USERS.GENDER, 
       USERS.WEBURL 
FROM   MESSAGES 
       JOIN USERS 
         ON USERS.USERID = MESSAGES.USERID 
ORDER  BY MESSAGES.USERID, 
          MESSAGES.TIMESTAMP 
Run Code Online (Sandbox Code Playgroud)