JOIN SQL — по 20 универсальных «живых» примеров для каждого типа JOIN

🟢 JOIN SQL. Введение

JOIN — механизм объединения строк из разных таблиц по условию соответствия.
Эта статья по запросу join-sql содержит по 20 «живых» примеров для каждого типа соединения:
INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, CROSS JOIN и самосоединения (SELF JOIN).

Код форматирован по best‑practice: ключевые слова SELECT, FROM, ON, WHERE, GROUP BY, ORDER BY — с новой строки,
отступы выровнены, примеры универсальны.

Синтаксис

SELECT t1.колонки, t2.колонки
FROM   таблица1 AS t1
    JOIN таблица2 AS t2
    ON t1.key = t2.key;

Типовая конструкция

SELECT
    c.customer_id,
    c.full_name,
    o.order_id,
    o.total_amount
FROM
    customers AS c
    INNER JOIN orders AS o
        ON o.customer_id = c.customer_id
WHERE
    o.total_amount > 100
ORDER BY
    o.total_amount DESC;

INNER JOIN — точные совпадения (20)

1. Клиенты с оформленными заказами:

SELECT
    c.customer_id,
    c.full_name,
    o.order_id,
    o.total_amount
FROM
    customers AS c
    INNER JOIN orders AS o
        ON o.customer_id = c.customer_id
ORDER BY
    o.order_id;

2. Заказы и связанные платежи:

SELECT
    o.order_id,
    o.total_amount,
    p.payment_id,
    p.amount
FROM
    orders AS o
    INNER JOIN payments AS p
        ON p.order_id = o.order_id
WHERE
    p.amount > 0;

3. Покупатели и их адреса доставки:

SELECT
    c.customer_id,
    c.full_name,
    a.city,
    a.country
FROM
    customers AS c
    INNER JOIN addresses AS a
        ON a.customer_id = c.customer_id;

4. Студенты и сданные экзамены:

SELECT
    s.student_id,
    s.name,
    e.exam_code,
    r.score
FROM
    students AS s
    INNER JOIN results AS r
        ON r.student_id = s.student_id
    INNER JOIN exams AS e
        ON e.exam_id = r.exam_id
WHERE
    r.score >= 60;

5. Фильмы и участвующие актёры:

SELECT
    f.film_id,
    f.title,
    a.actor_name
FROM
    films AS f
    INNER JOIN film_cast AS fc
        ON fc.film_id = f.film_id
    INNER JOIN actors AS a
        ON a.actor_id = fc.actor_id;

6. Сотрудники и названия отделов:

SELECT
    e.emp_id,
    e.full_name,
    d.dept_name
FROM
    employees AS e
    INNER JOIN departments AS d
        ON d.dept_id = e.dept_id;

7. Товары и их категории:

SELECT
    p.product_id,
    p.title,
    c.category_name
FROM
    products AS p
    INNER JOIN categories AS c
        ON c.category_id = p.category_id;

8. Пациенты и даты визитов:

SELECT
    pt.patient_id,
    pt.full_name,
    v.visit_date
FROM
    patients AS pt
    INNER JOIN visits AS v
        ON v.patient_id = pt.patient_id
ORDER BY
    v.visit_date DESC;

9. Поставщики и их товары:

SELECT
    s.supplier_id,
    s.name,
    p.product_id
FROM
    suppliers AS s
    INNER JOIN products AS p
        ON p.supplier_id = s.supplier_id;

10. Посты и оставленные комментарии:

SELECT
    p.post_id,
    p.title,
    c.comment_id,
    c.author
FROM
    posts AS p
    INNER JOIN comments AS c
        ON c.post_id = p.post_id;

11. Клиенты и открытые счета:

SELECT
    c.customer_id,
    c.full_name,
    a.account_no
FROM
    customers AS c
    INNER JOIN accounts AS a
        ON a.customer_id = c.customer_id
WHERE
    a.status = 'OPEN';

12. Устройства и последние телеметрии:

SELECT
    d.device_id,
    d.model,
    t.value,
    t.collected_at
FROM
    devices AS d
    INNER JOIN telemetry AS t
        ON t.device_id = d.device_id;

13. Курсы и закреплённые преподаватели:

SELECT
    c.course_id,
    c.title,
    t.teacher_name
FROM
    courses AS c
    INNER JOIN course_teachers AS ct
        ON ct.course_id = c.course_id
    INNER JOIN teachers AS t
        ON t.teacher_id = ct.teacher_id;

14. Магазины и активные акции:

SELECT
    s.store_id,
    s.city,
    pr.promo_code
FROM
    stores AS s
    INNER JOIN promos AS pr
        ON pr.store_id = s.store_id
WHERE
    pr.active = 1;

15. Рейсы и назначенные самолёты:

SELECT
    f.flight_no,
    a.aircraft_code
FROM
    flights AS f
    INNER JOIN aircrafts AS a
        ON a.aircraft_id = f.aircraft_id;

16. Сделки и ответственные менеджеры:

SELECT
    d.deal_id,
    u.full_name AS owner_name
FROM
    deals AS d
    INNER JOIN users AS u
        ON u.user_id = d.owner_id;

17. Складские остатки и товары:

SELECT
    st.product_id,
    st.qty_on_hand,
    p.title
FROM
    stock AS st
    INNER JOIN products AS p
        ON p.product_id = st.product_id;

18. Города и страны:

SELECT
    c.city_name,
    co.name AS country_name
FROM
    cities AS c
    INNER JOIN countries AS co
        ON co.iso2 = c.iso2;

19. Билеты и соответствующие заказы:

SELECT
    t.ticket_no,
    o.order_id
FROM
    tickets AS t
    INNER JOIN orders AS o
        ON o.order_id = t.order_id;

20. Кредитные карты клиентов:

SELECT
    c.customer_id,
    cc.card_last4
FROM
    customers AS c
    INNER JOIN credit_cards AS cc
        ON cc.customer_id = c.customer_id;

LEFT JOIN — всё слева, совпадения справа (20)

21. Все клиенты, в том числе без заказов:

SELECT
    c.customer_id,
    c.full_name,
    o.order_id
FROM
    customers AS c
    LEFT JOIN orders AS o
        ON o.customer_id = c.customer_id
ORDER BY
    c.customer_id;

22. Все товары и возможные скидки:

SELECT
    p.product_id,
    p.title,
    d.discount_pct
FROM
    products AS p
    LEFT JOIN discounts AS d
        ON d.product_id = p.product_id;

23. Сотрудники и проекты (даже без проектов):

SELECT
    e.emp_id,
    e.full_name,
    pr.project_name
FROM
    employees AS e
    LEFT JOIN project_members AS pm
        ON pm.emp_id = e.emp_id
    LEFT JOIN projects AS pr
        ON pr.project_id = pm.project_id;

24. Студенты и результаты экзаменов (включая пропуски):

SELECT
    s.student_id,
    s.name,
    r.score
FROM
    students AS s
    LEFT JOIN results AS r
        ON r.student_id = s.student_id;

25. Фильмы и отзывы (пустые тоже):

SELECT
    f.film_id,
    f.title,
    r.rating
FROM
    films AS f
    LEFT JOIN reviews AS r
        ON r.film_id = f.film_id;

26. Посты и комментарии (без комментариев тоже):

SELECT
    p.post_id,
    p.title,
    c.comment_id
FROM
    posts AS p
    LEFT JOIN comments AS c
        ON c.post_id = p.post_id;

27. Пациенты и визиты (включая без визитов):

SELECT
    pt.patient_id,
    pt.full_name,
    v.visit_id
FROM
    patients AS pt
    LEFT JOIN visits AS v
        ON v.patient_id = pt.patient_id;

28. Склады и остатки (даже если ноль записей):

SELECT
    w.warehouse_id,
    w.city,
    s.qty_on_hand
FROM
    warehouses AS w
    LEFT JOIN stock AS s
        ON s.warehouse_id = w.warehouse_id;

29. Поставщики и заказы на поставку (если были):

SELECT
    s.supplier_id,
    s.name,
    po.po_id
FROM
    suppliers AS s
    LEFT JOIN purchase_orders AS po
        ON po.supplier_id = s.supplier_id;

30. Клиенты и транзакции (с нулевой активностью):

SELECT
    c.customer_id,
    c.full_name,
    t.tx_id
FROM
    customers AS c
    LEFT JOIN transactions AS t
        ON t.customer_id = c.customer_id;

31. Учителя и курсы (учителя без курсов):

SELECT
    t.teacher_id,
    t.teacher_name,
    c.course_id
FROM
    teachers AS t
    LEFT JOIN course_teachers AS ct
        ON ct.teacher_id = t.teacher_id
    LEFT JOIN courses AS c
        ON c.course_id = ct.course_id;

32. Устройства и последняя телеметрия (может отсутствовать):

SELECT
    d.device_id,
    d.model,
    t.value
FROM
    devices AS d
    LEFT JOIN telemetry AS t
        ON t.device_id = d.device_id
ORDER BY
    d.device_id;

33. Города и статистика населения:

SELECT
    c.city_name,
    s.population
FROM
    cities AS c
    LEFT JOIN stats_city AS s
        ON s.city_id = c.city_id;

34. Счета и привязанные карты (счета без карт):

SELECT
    a.account_no,
    cc.card_last4
FROM
    accounts AS a
    LEFT JOIN credit_cards AS cc
        ON cc.account_no = a.account_no;

35. Рейсы и доступные ворота посадки:

SELECT
    f.flight_no,
    g.gate_no
FROM
    flights AS f
    LEFT JOIN gates AS g
        ON g.flight_no = f.flight_no;

36. Сделки и активности (без активностей тоже):

SELECT
    d.deal_id,
    a.activity_id
FROM
    deals AS d
    LEFT JOIN activities AS a
        ON a.deal_id = d.deal_id;

37. Магазины и текущие акции (могут отсутствовать):

SELECT
    s.store_id,
    pr.promo_code
FROM
    stores AS s
    LEFT JOIN promos AS pr
        ON pr.store_id = s.store_id AND pr.active = 1;

38. Курсы и аудитории (даже без назначений):

SELECT
    c.course_id,
    r.room_no
FROM
    courses AS c
    LEFT JOIN rooms AS r
        ON r.course_id = c.course_id;

39. Пользователи и роли (пользователи без ролей):

SELECT
    u.user_id,
    ur.role
FROM
    users AS u
    LEFT JOIN user_roles AS ur
        ON ur.user_id = u.user_id;

40. Посты и метки (даже без меток):

SELECT
    p.post_id,
    t.tag
FROM
    posts AS p
    LEFT JOIN post_tags AS t
        ON t.post_id = p.post_id;

RIGHT JOIN — всё справа, совпадения слева (20)

41. Заказы и соответствующие клиенты:

SELECT
    o.order_id,
    c.customer_id,
    c.full_name
FROM
    customers AS c
    RIGHT JOIN orders AS o
        ON o.customer_id = c.customer_id;

42. Платежи и их заказы:

SELECT
    p.payment_id,
    o.order_id,
    o.total_amount
FROM
    orders AS o
    RIGHT JOIN payments AS p
        ON p.order_id = o.order_id;

43. Адреса и владельцы адресов:

SELECT
    a.address_id,
    c.customer_id,
    c.full_name
FROM
    customers AS c
    RIGHT JOIN addresses AS a
        ON a.customer_id = c.customer_id;

44. Экзамены и сдававшие студенты:

SELECT
    e.exam_id,
    s.student_id,
    s.name
FROM
    students AS s
    RIGHT JOIN results AS r
        ON r.student_id = s.student_id
    RIGHT JOIN exams AS e
        ON e.exam_id = r.exam_id;

45. Актёры и связанные фильмы:

SELECT
    a.actor_id,
    f.film_id,
    f.title
FROM
    films AS f
    RIGHT JOIN film_cast AS fc
        ON fc.film_id = f.film_id
    RIGHT JOIN actors AS a
        ON a.actor_id = fc.actor_id;

46. Проекты и их участники:

SELECT
    pr.project_id,
    e.emp_id
FROM
    employees AS e
    RIGHT JOIN project_members AS pm
        ON pm.emp_id = e.emp_id
    RIGHT JOIN projects AS pr
        ON pr.project_id = pm.project_id;

47. Категории и принадлежащие товары:

SELECT
    c.category_id,
    p.product_id
FROM
    products AS p
    RIGHT JOIN categories AS c
        ON c.category_id = p.category_id;

48. Визиты и соответствующие пациенты:

SELECT
    v.visit_id,
    pt.patient_id
FROM
    patients AS pt
    RIGHT JOIN visits AS v
        ON v.patient_id = pt.patient_id;

49. Товары и поставщики:

SELECT
    p.product_id,
    s.supplier_id
FROM
    suppliers AS s
    RIGHT JOIN products AS p
        ON p.supplier_id = s.supplier_id;

50. Комментарии и их посты:

SELECT
    c.comment_id,
    p.post_id
FROM
    posts AS p
    RIGHT JOIN comments AS c
        ON c.post_id = p.post_id;

51. Счета и владельцы:

SELECT
    a.account_no,
    c.customer_id
FROM
    customers AS c
    RIGHT JOIN accounts AS a
        ON a.customer_id = c.customer_id;

52. Телеметрии и устройства:

SELECT
    t.telemetry_id,
    d.device_id
FROM
    devices AS d
    RIGHT JOIN telemetry AS t
        ON t.device_id = d.device_id;

53. Преподаватели и курсы:

SELECT
    t.teacher_id,
    c.course_id
FROM
    courses AS c
    RIGHT JOIN course_teachers AS ct
        ON ct.course_id = c.course_id
    RIGHT JOIN teachers AS t
        ON t.teacher_id = ct.teacher_id;

54. Акции и магазины:

SELECT
    pr.promo_id,
    s.store_id
FROM
    stores AS s
    RIGHT JOIN promos AS pr
        ON pr.store_id = s.store_id;

55. Рейсы и самолёты:

SELECT
    f.flight_no,
    a.aircraft_id
FROM
    aircrafts AS a
    RIGHT JOIN flights AS f
        ON f.aircraft_id = a.aircraft_id;

56. Сделки и владельцы:

SELECT
    d.deal_id,
    u.user_id
FROM
    users AS u
    RIGHT JOIN deals AS d
        ON d.owner_id = u.user_id;

57. Склады и остатки:

SELECT
    s.stock_id,
    w.warehouse_id
FROM
    warehouses AS w
    RIGHT JOIN stock AS s
        ON s.warehouse_id = w.warehouse_id;

58. Города и страны:

SELECT
    c.city_id,
    co.iso2
FROM
    countries AS co
    RIGHT JOIN cities AS c
        ON c.iso2 = co.iso2;

59. Билеты и заказы:

SELECT
    t.ticket_no,
    o.order_id
FROM
    orders AS o
    RIGHT JOIN tickets AS t
        ON t.order_id = o.order_id;

60. Карты и счета:

SELECT
    cc.card_id,
    a.account_no
FROM
    accounts AS a
    RIGHT JOIN credit_cards AS cc
        ON cc.account_no = a.account_no;

FULL OUTER JOIN — объединить всё (20)

61. Клиенты и заказы — полный охват:

SELECT
    c.customer_id,
    o.order_id
FROM
    customers AS c
    FULL JOIN orders AS o
        ON o.customer_id = c.customer_id;

62. Транзакции и счета — полное соединение:

SELECT
    t.tx_id,
    a.account_no
FROM
    transactions AS t
    FULL JOIN accounts AS a
        ON a.account_no = t.account_no;

63. Студенты и экзамены — показать всех:

SELECT
    s.student_id,
    e.exam_id
FROM
    students AS s
    FULL JOIN exams AS e
        ON e.major = s.major;

64. Фильмы и актёры — полный список связей:

SELECT
    f.film_id,
    a.actor_id
FROM
    films AS f
    FULL JOIN film_cast AS fc
        ON fc.film_id = f.film_id
    FULL JOIN actors AS a
        ON a.actor_id = fc.actor_id;

65. Сотрудники и проекты — всё и сразу:

SELECT
    e.emp_id,
    p.project_id
FROM
    employees AS e
    FULL JOIN project_members AS pm
        ON pm.emp_id = e.emp_id
    FULL JOIN projects AS p
        ON p.project_id = pm.project_id;

66. Товары и категории — полный охват:

SELECT
    p.product_id,
    c.category_id
FROM
    products AS p
    FULL JOIN categories AS c
        ON c.category_id = p.category_id;

67. Пациенты и визиты — все варианты:

SELECT
    pt.patient_id,
    v.visit_id
FROM
    patients AS pt
    FULL JOIN visits AS v
        ON v.patient_id = pt.patient_id;

68. Посты и комментарии — любые сочетания:

SELECT
    p.post_id,
    c.comment_id
FROM
    posts AS p
    FULL JOIN comments AS c
        ON c.post_id = p.post_id;

69. Склады и товары — любые записи:

SELECT
    w.warehouse_id,
    s.product_id
FROM
    warehouses AS w
    FULL JOIN stock AS s
        ON s.warehouse_id = w.warehouse_id;

70. Курсы и преподаватели — показать всех:

SELECT
    c.course_id,
    t.teacher_id
FROM
    courses AS c
    FULL JOIN course_teachers AS ct
        ON ct.course_id = c.course_id
    FULL JOIN teachers AS t
        ON t.teacher_id = ct.teacher_id;

71. Магазины и акции — полное объединение:

SELECT
    s.store_id,
    p.promo_id
FROM
    stores AS s
    FULL JOIN promos AS p
        ON p.store_id = s.store_id;

72. Рейсы и самолёты — все сочетания:

SELECT
    f.flight_no,
    a.aircraft_id
FROM
    flights AS f
    FULL JOIN aircrafts AS a
        ON a.aircraft_id = f.aircraft_id;

73. Сделки и ответственные — полный охват:

SELECT
    d.deal_id,
    u.user_id
FROM
    deals AS d
    FULL JOIN users AS u
        ON u.user_id = d.owner_id;

74. Склады и остатки — включить пустые:

SELECT
    s.stock_id,
    w.warehouse_id
FROM
    stock AS s
    FULL JOIN warehouses AS w
        ON s.warehouse_id = w.warehouse_id;

75. Города и страны — полный охват:

SELECT
    c.city_id,
    co.iso2
FROM
    cities AS c
    FULL JOIN countries AS co
        ON co.iso2 = c.iso2;

76. Билеты и заказы — любые пары:

SELECT
    t.ticket_no,
    o.order_id
FROM
    tickets AS t
    FULL JOIN orders AS o
        ON o.order_id = t.order_id;

77. Карты и счета — включить одиночные:

SELECT
    cc.card_id,
    a.account_no
FROM
    credit_cards AS cc
    FULL JOIN accounts AS a
        ON a.account_no = cc.account_no;

78. Учителя и курсы — показать всех:

SELECT
    t.teacher_id,
    c.course_id
FROM
    teachers AS t
    FULL JOIN course_teachers AS ct
        ON ct.teacher_id = t.teacher_id
    FULL JOIN courses AS c
        ON c.course_id = ct.course_id;

79. Телеметрия и устройства — полный охват:

SELECT
    t.telemetry_id,
    d.device_id
FROM
    telemetry AS t
    FULL JOIN devices AS d
        ON d.device_id = t.device_id;

80. Пользователи и роли — полный набор:

SELECT
    u.user_id,
    r.role
FROM
    users AS u
    FULL JOIN user_roles AS r
        ON r.user_id = u.user_id;

CROSS JOIN — декартово произведение (20)

81. Комбинация всех клиентов и акций:

SELECT
    c.customer_id,
    p.promo_code
FROM
    customers AS c
    CROSS JOIN promos AS p;

82. Все товары в каждом регионе:

SELECT
    pr.product_id,
    rg.region_code
FROM
    products AS pr
    CROSS JOIN regions AS rg;

83. Курсы, умноженные на семестры:

SELECT
    c.course_id,
    s.semester
FROM
    courses AS c
    CROSS JOIN semesters AS s;

84. Сотрудники и навыки — все пары:

SELECT
    e.emp_id,
    sk.skill
FROM
    employees AS e
    CROSS JOIN skills AS sk;

85. Студенты и учебные группы:

SELECT
    s.student_id,
    g.group_code
FROM
    students AS s
    CROSS JOIN groups AS g;

86. Фильмы и жанры:

SELECT
    f.film_id,
    g.genre
FROM
    films AS f
    CROSS JOIN genres AS g;

87. Пользователи и роли — все сочетания:

SELECT
    u.user_id,
    r.role
FROM
    users AS u
    CROSS JOIN roles AS r;

88. Визиты и услуги клиники:

SELECT
    v.visit_id,
    svc.service_code
FROM
    visits AS v
    CROSS JOIN services AS svc;

89. Проекты и задачи — планирование:

SELECT
    p.project_id,
    t.task_type
FROM
    projects AS p
    CROSS JOIN task_types AS t;

90. Поставщики и регионы присутствия:

SELECT
    s.supplier_id,
    r.region
FROM
    suppliers AS s
    CROSS JOIN regions AS r;

91. Устройства и метрики IoT:

SELECT
    d.device_id,
    m.metric
FROM
    devices AS d
    CROSS JOIN metrics AS m;

92. Клиники и страховые планы:

SELECT
    cl.clinic_id,
    pl.plan_code
FROM
    clinics AS cl
    CROSS JOIN insurance_plans AS pl;

93. Банковские продукты и валюты:

SELECT
    bp.product_code,
    cur.code AS currency
FROM
    bank_products AS bp
    CROSS JOIN currencies AS cur;

94. Игры и уровни сложности:

SELECT
    g.game_id,
    l.level_name
FROM
    games AS g
    CROSS JOIN levels AS l;

95. Магазины и сезоны распродаж:

SELECT
    s.store_id,
    season.season_name
FROM
    stores AS s
    CROSS JOIN sale_seasons AS season;

96. Курсы и аудитории:

SELECT
    c.course_id,
    r.room_no
FROM
    courses AS c
    CROSS JOIN rooms AS r;

97. Отделы и рабочие смены:

SELECT
    d.dept_id,
    s.shift_name
FROM
    departments AS d
    CROSS JOIN shifts AS s;

98. Товар и размерная сетка:

SELECT
    p.product_id,
    sz.size_code
FROM
    products AS p
    CROSS JOIN sizes AS sz;

99. Клиенты и способы доставки:

SELECT
    c.customer_id,
    sp.ship_method
FROM
    customers AS c
    CROSS JOIN ship_methods AS sp;

100. Рекламные каналы и регионы:

SELECT
    ch.channel,
    rg.region
FROM
    channels AS ch
    CROSS JOIN regions AS rg;

SELF JOIN — соединение таблицы с самой собой (20)

101. Сотрудник и его менеджер:

SELECT
    e.emp_id,
    e.full_name AS employee,
    m.full_name AS manager
FROM
    employees AS e
    INNER JOIN employees AS m
        ON m.emp_id = e.manager_id;

102. Клиент и приглашённый им друг:

SELECT
    c.customer_id,
    c.full_name AS inviter,
    r.full_name AS invited
FROM
    customers AS c
    INNER JOIN customers AS r
        ON r.invited_by = c.customer_id;

103. Товар и его аксессуар:

SELECT
    p.product_id,
    p.title AS product,
    a.title AS accessory
FROM
    products AS p
    INNER JOIN products AS a
        ON a.parent_product_id = p.product_id;

104. Фильм и его продолжение:

SELECT
    f1.film_id,
    f1.title AS original,
    f2.title AS sequel
FROM
    films AS f1
    INNER JOIN films AS f2
        ON f2.prequel_id = f1.film_id;

105. Студент и назначенный наставник:

SELECT
    s.student_id,
    s.name AS student,
    t.name AS mentor
FROM
    students AS s
    INNER JOIN students AS t
        ON t.mentor_of = s.student_id;

106. Проект и вложенный подпроект:

SELECT
    p.project_id,
    p.title AS parent,
    c.title AS child
FROM
    projects AS p
    INNER JOIN projects AS c
        ON c.parent_id = p.project_id;

107. Комментарий и ответ на него:

SELECT
    c1.comment_id,
    c1.body AS original,
    c2.body AS reply
FROM
    comments AS c1
    INNER JOIN comments AS c2
        ON c2.reply_to = c1.comment_id;

108. Пользователь и его дубликат-аккаунт:

SELECT
    u1.user_id,
    u1.email AS primary_email,
    u2.email AS duplicate_email
FROM
    users AS u1
    INNER JOIN users AS u2
        ON u2.primary_user = u1.user_id;

109. Курс и его последующая версия:

SELECT
    c1.course_id,
    c1.title AS v1,
    c2.title AS v2
FROM
    courses AS c1
    INNER JOIN courses AS c2
        ON c2.prev_course = c1.course_id;

110. Пациент и указанный родственник:

SELECT
    p1.patient_id,
    p1.full_name AS patient,
    p2.full_name AS relative
FROM
    patients AS p1
    INNER JOIN patients AS p2
        ON p2.related_to = p1.patient_id;

111. Город и его город-побратим:

SELECT
    c1.city_id,
    c1.city_name AS city,
    c2.city_name AS twin_city
FROM
    cities AS c1
    INNER JOIN cities AS c2
        ON c2.twin_of = c1.city_id;

112. Счёт и дочерний субсчёт:

SELECT
    a1.account_no AS parent_acc,
    a2.account_no AS child_acc
FROM
    accounts AS a1
    INNER JOIN accounts AS a2
        ON a2.parent_acc = a1.account_no;

113. Устройство и запасная единица:

SELECT
    d1.device_id AS primary_dev,
    d2.device_id AS spare_dev
FROM
    devices AS d1
    INNER JOIN devices AS d2
        ON d2.replaces = d1.device_id;

114. Сделка и предшествующая сделка клиента:

SELECT
    d1.deal_id AS current_deal,
    d2.deal_id AS prev_deal
FROM
    deals AS d1
    INNER JOIN deals AS d2
        ON d2.next_deal = d1.deal_id;

115. Магазин и франчайзи:

SELECT
    s1.store_id AS hq,
    s2.store_id AS franchise
FROM
    stores AS s1
    INNER JOIN stores AS s2
        ON s2.parent_store = s1.store_id;

116. Рейс и предыдущий сегмент:

SELECT
    f1.flight_no AS current_seg,
    f2.flight_no AS prev_seg
FROM
    flights AS f1
    INNER JOIN flights As f2
        ON f2.next_flight = f1.flight_no;

117. Категория и подкатегория:

SELECT
    c1.category_id AS parent_cat,
    c2.category_id AS child_cat
FROM
    categories AS c1
    INNER JOIN categories AS c2
        ON c2.parent_id = c1.category_id;

118. Группа и подгруппа:

SELECT
    g1.group_id AS parent_group,
    g2.group_id AS child_group
FROM
    groups AS g1
    INNER JOIN groups AS g2
        ON g2.parent_id = g1.group_id;

119. Пост и переопубликованный пост:

SELECT
    p1.post_id AS original_post,
    p2.post_id AS repost
FROM
    posts AS p1
    INNER JOIN posts AS p2
        ON p2.repost_of = p1.post_id;

120. Сотрудник и преемник:

SELECT
    e1.emp_id AS current_holder,
    e2.emp_id AS successor
FROM
    employees AS e1
    INNER JOIN employees AS e2
        ON e2.succeeds = e1.emp_id;

Заключение

join sql даёт полный набор инструментов для объединения данных: INNER, LEFT, RIGHT, FULL, CROSS и SELF JOIN. Выбирайте тип соединения по задаче, индексируйте ключи соединений, проверяйте условия ON и используйте фильтрацию в WHERE и упорядочивание через ORDER BY.


 

Понравилась статья? Поделиться с друзьями: