Ответ
INNER JOIN
(или просто JOIN
) — это операция в SQL, которая возвращает записи, имеющие совпадающие значения в обеих таблицах. Если для строки из одной таблицы не найдено совпадения в другой, эта строка не включается в результирующий набор.
Представьте две таблицы: users
(пользователи) и orders
(заказы).
SELECT users.name, orders.product
FROM users
INNER JOIN orders ON users.id = orders.user_id;
Этот запрос вернет список имен пользователей вместе с продуктами, которые они заказали. Пользователи, не сделавшие ни одного заказа, в результат не попадут.
Пример использования в Go с database/sql
:
package main
import (
"database/sql"
"fmt"
_ "github.com/lib/pq" // Пример с драйвером PostgreSQL
)
func main() {
// db - это ваш экземпляр *sql.DB
rows, err := db.Query(`
SELECT u.name, o.product
FROM users AS u
INNER JOIN orders AS o ON u.id = o.user_id`)
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var name, product string
if err := rows.Scan(&name, &product); err != nil {
log.Println(err)
continue
}
fmt.Printf("Пользователь: %s, Продукт: %sn", name, product)
}
if err := rows.Err(); err != nil {
log.Fatal(err)
}
}
Ключевые особенности:
- Только совпадения: Возвращает только пересекающиеся данные из обеих таблиц.
- Симметричность:
A INNER JOIN B
эквивалентноB INNER JOIN A
(хотя порядок столбцов в результате может отличаться). - Производительность: Эффективность запроса сильно зависит от наличия индексов на соединяемых полях (
users.id
иorders.user_id
). - Стандарт: Является наиболее часто используемым типом соединения.