【问题标题】:SQL "chained" queries?SQL“链式”查询?
【发布时间】:2015-01-07 12:19:09
【问题描述】:

我有两张桌子。

我是 SQL 的新手。目前使用mysql。 我对与学校相关的数据库进行了以下设置:

表 A 包含学生记录。 学生名、密码、姓名、姓氏等。

表 B 包含上课记录。 每条记录都是这样的:日期、学生证、年级

我需要收集在特定日期范围内上课的学生的所有学生信息。

现在,愚蠢的方法是

  1. 首先我SELECT all classes from Table B with DATE IN BETWEEN the range

  2. 然后对于每个班级,我得到学生 ID 和 SELECT * FROM students WHERE id = student id

我无法理解的是聪明的方法。 如何仅在一个查询中执行此操作。 我无法理解 JOIN、UNION 等的概念......

到目前为止我最好的猜测是

SELECT students.id, students.name, students.lastname 
FROM students, classes
WHERE classes.date BETWEEN 20140101 AND 20150101 
AND 
classes.studentid = students.id

但这是否适合这种情况?

【问题讨论】:

  • 你有解决办法吗?亚当_b
  • 见link。另外,WHERE classes.date BETWEEN <date 1> AND <date 2>(没有IN)
  • 上述语法错误除外。查询有什么问题?通过加入 2 个表,您只需查询一次。
  • 教务长,查询有效,我只是认为有更好的方法涉及加入或联合......我目前还不明白

标签: mysql sql join union


【解决方案1】:

不要在 where 子句中添加 join 语句。这样做:

SELECT s.id, s.name, s.lastname,c.date,c.grade 
FROM classes c
inner join students s
on c.studentid=s.id
WHERE c.date BETWEEN '01/01/2014' AND '01/01/2015'

【讨论】:

  • 谢谢,我想这就是我一直在寻找的,因为它改进了我的查询,同时隐含地解释了 JOIN 的工作原理
【解决方案2】:

这听起来像是一项作业,所以我将尝试描述问题并给出解决方案的提示。

联合的一个例子是;

SELECT students.name, students.lastname
FROM students
WHERE students.lastname IS NOT NULL

UNION

SELECT students.name, 'N/A'
FROM students
WHERE students.lastname IS NULL;

+--------------+--------------+
| name         | lastname     |
+--------------+--------------+
| John         | Doe          |   <- First two rows came from first query
| Jill         | Smith        |
| Bill         | N/A          |   <- This came from the second query
+--------------+--------------+

联合的通常用例是显示相同的列,但以不同的方式处理数据 - 否则您通常可以通过 WHERE 子句获得类似的结果。

连接的一个例子是:

SELECT authors.id, authors.name, books.title
FROM authors LEFT JOIN books ON authors.id = books.authors_id

+--------------+--------------+------------------+
| id           | name         | title            |
+--------------+--------------+------------------+   
| 1            | Mark Twain   | Huckleberry Fin. |
| 2            | Terry Prat.. | Good Omens       |
+--------------+--------------+------------------+   
    ^ First two columns from     ^ Third column appended
      from authors table           from books table linked
                                   by "author id"

将联接视为将列附加到结果中,联合是附加具有相同列的行。

在您的情况下,我们可以排除联合,因为您不想附加更多学生行,您希望班级和学生信息并排。

【讨论】:

  • 加入,而不是左加入:)
  • 我希望这是一项任务。我今年 73 岁 :) 感谢您的提示
  • @adam_b; OK :) 我认为 TheProvost 已经给出了最终答案,希望我的解释有所帮助。
猜你喜欢
  • 1970-01-01
  • 2014-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多