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

时间:2013-07-29 05:33:05

标签: 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);

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

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

的事情
SELECT * FROM messages;

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

SELECT * FROM users WHERE UserID = results['UserID'];

这显然效率非常低,我知道它可以做得更好。

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

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

如果重要,我使用SQLite3作为SQL引擎,但我也想在MySQL上这样做。

谢谢!

1 个答案:

答案 0 :(得分: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