Не совсем ..
Псевдокласс класса
blockquote>:nth-child
соответствует элементу с + b -1 братья и сестры перед ним в дереве документов, для данного положительного или нулевого значения для n и имеет родительский элемент.Он является селектором и не сочетается с классами , В вашем правиле он просто должен удовлетворять обоим селекторам одновременно, поэтому он отображает строки таблицы
:nth-child(even)
, если они также имеют класс.row
.
Есть ли подвох? Да, есть - левые соединения являются формой внешнего соединения, в то время как внутренние соединения являются формой, ну, в общем, внутреннего соединения.
Вот примеры, которые показывают разницу. Начнем с базовых данных:
mysql> select * from j1;
+----+------------+
| id | thing |
+----+------------+
| 1 | hi |
| 2 | hello |
| 3 | guten tag |
| 4 | ciao |
| 5 | buongiorno |
+----+------------+
mysql> select * from j2;
+----+-----------+
| id | thing |
+----+-----------+
| 1 | bye |
| 3 | tschau |
| 4 | au revoir |
| 6 | so long |
| 7 | tschuessi |
+----+-----------+
И здесь мы увидим разницу между внутренним соединением и левым соединением:
mysql> select * from j1 inner join j2 on j1.id = j2.id;
+----+-----------+----+-----------+
| id | thing | id | thing |
+----+-----------+----+-----------+
| 1 | hi | 1 | bye |
| 3 | guten tag | 3 | tschau |
| 4 | ciao | 4 | au revoir |
+----+-----------+----+-----------+
Хмм, 3 строки. 117]
mysql> select * from j1 left join j2 on j1.id = j2.id;
+----+------------+------+-----------+
| id | thing | id | thing |
+----+------------+------+-----------+
| 1 | hi | 1 | bye |
| 2 | hello | NULL | NULL |
| 3 | guten tag | 3 | tschau |
| 4 | ciao | 4 | au revoir |
| 5 | buongiorno | NULL | NULL |
+----+------------+------+-----------+
Ух ты, 5 рядов! Что произошло?
Внешние объединения, такие как left join
, сохраняют строки, которые не совпадают, поэтому строки с идентификаторами 2 и 5 сохраняются в запросе левого соединения. Остальные столбцы заполнены NULL.
Другими словами, левые и внутренние соединения не являются взаимозаменяемыми.
Вот грубый ответ, вот как я думаю об объединениях. Надеясь, что это будет более полезным, чем очень точный ответ из-за вышеупомянутых математических вопросов ...; -)
Внутренние объединения сужают набор возвращаемых строк. Внешние объединения (левые или правые) не изменяют количество возвращаемых строк, а просто «подбирают» дополнительные столбцы, если это возможно.
В вашем первом примере результатом будут строки из AECounts
, которые соответствуют условиям, указанным в таблице 1_low_level_term
. Затем для этих строк он пытается соединиться с 1_pref_term
и 1_soc_term
. Но если совпадений нет, строки остаются, а объединенные столбцы равны нулю.
Используйте внутреннее объединение, если вы хотите, чтобы результаты, отображаемые в обеих таблицах, соответствовали условию объединения.
Используйте левое соединение, когда вам нужны все результаты из таблицы A, но если в таблице B есть данные, относящиеся к некоторым записям таблицы A, то вы также хотите использовать эти данные в том же запросе.
Используйте полное объединение, когда хотите получить все результаты из обеих таблиц.
Для новичков, потому что это помогло мне, когда я был один: INNER JOIN всегда является подмножеством LEFT или RIGHT JOIN, и все они всегда являются подмножествами FULL JOIN. Это помогло мне понять основную идею.
INNER JOIN вернет только те строки, в которых есть совпадающие значения в обеих таблицах, тогда как LEFT JOIN вернет ВСЕ строки из таблицы LEFT, даже если в таблице RIGHT нет подходящей строки
Быстрый пример
TableA
ID Value
1 TableA.Value1
2 TableA.Value2
3 TableA.Value3
TableB
ID Value
2 TableB.ValueB
3 TableB.ValueC
ВНУТРЕННЕЕ СОЕДИНЕНИЕ производит:
SELECT a.ID,a.Value,b.ID,b.Value
FROM TableA a INNER JOIN TableB b ON b.ID = a.ID
a.ID a.Value b.ID b.Value
2 TableA.Value2 2 TableB.ValueB
3 TableA.Value3 3 TableB.ValueC
СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ производит:
SELECT a.ID,a.Value,b.ID,b.Value
FROM TableA a LEFT JOIN TableB b ON b.ID = a.ID
a.ID a.Value b.ID b.Value
1 TableA.Value1 NULL NULL
2 TableA.Value2 2 TableB.ValueB
3 TableA.Value3 3 TableB.ValueC
Как вы можете видеть, СЛЕДУЮЩЕЕ СОЕДИНЕНИЕ включает строка из TableA, где ID = 1, даже если в TableB нет совпадающей строки, где ID = 1, тогда как INNER JOIN исключает эту строку именно потому, что в TableB нет соответствующей строки
HTH