对我来说,很难总结我想要进行的查询,所以也许举个例子会更清楚.
假设我有两个主表:
员工:
| employee_id | employee_name |
| ----------- | ------------- |
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
编程语言(_L):
| language_id | language_name |
| ----------- | ------------- |
| 1 | Python |
| 2 | C++ |
| 3 | JavaScript |
第三个表包含前两个表中的外键,表示哪些员工知道哪些编程语言:
员工已知语言:
| employee_id | language_id |
| ----------- | ----------- |
| 1 | 1 |
| 2 | 1 |
| 2 | 2 |
| 2 | 3 |
| 3 | 3 |
因此,在本例中,Alice了解Python,Bob了解Python C++和JavaScript,而Carol了解JavaScript.
如果我想要编写一个查询来获取所有懂C++的员工,我知道我想要做什么:
SELECT employee_name from
employees INNER JOIN programming_languages INNER JOIN employee_known_languages
WHERE language_name = C++
如果我想让所有了解C++and Python的员工参与进来,那该怎么办?或者,更广泛地说,是language_name
值的某个任意子集?
理想情况下,我能够以这样一种方式编写这段代码:我可以编写一个接受一组参数并执行查询的Python函数,但我认为能够弄清楚SQL本身会有所帮助.