Онлайн-эмуляторы SQL

Время от времени появляется потребность проверить или улучшить свои знания SQL. В этом могут помочь разнообразные сервисы, в которых предоставляют как задачи, так и эмуляторы SQL для проверки своих запросов. Свою-то базу данных поднимать совсем не хочется.

Эмуляторы можно условно поделить на две части:

  1. С готовыми таблицами и готовым пулом задачек
  2. Просто эмуляторы, которые позволяют создать таблицу и писать к ней запросы.

Из первой категории люди рекомендуют:

  1. http://sql-ex.ru/ (требуется регистрация, можно получить сертификат)
  2. https://sqlzoo.net/ — сборник задач без регистрации и смс

Вторая категория чуть более интересна, если решается задача «извне», найденная на другом ресурсе или еще где-то. Можно создать свою таблицу и с ней потом работать. Я познакомилась с двумя такими сервисами:

https://www.jdoodle.com/execute-sql-online/ — не поддерживает right & outer join. Выглядит так:

https://www.tutorialspoint.com/execute_sql_online.php — аналогично не поддерживает right & outer join. Более приятен по интерфейсу.

В общем, годно к использованию (пока не нужен правый джойн).

-- Пример запроса, где outer join все-таки нужен :)

CREATE TABLE A(id integer);

INSERT INTO A
VALUES 
    (1), (1), (2), (2), (3), (3);
    
CREATE TABLE B(id integer);

INSERT INTO B
VALUES 
    (2), (3), (3), (4), (5), (5);

SELECT 
    COUNT(DISTINCT A.ID), -- количество  в А
    COUNT(DISTINCT B.ID), -- Количество  в В
    COUNT(DISTINCT          -- количество  только в В
        CASE
        WHEN A.ID IS NULL THEN B.ID
        ELSE NULL
        END
    ),
    COUNT(DISTINCT  -- количество  только в А
        CASE
        WHEN B.ID IS NULL THEN A.ID
        ELSE NULL
    END
    ),
    COUNT(DISTINCT      -- количество  в обоих сразу
        CASE
        WHEN B.ID IS NOT NULL AND A.ID IS NOT NULL  THEN A.ID
        ELSE NULL
    END
    ),
    COUNT(DISTINCT      -- количество  в обоих сразу
        CASE
        WHEN B.ID IS NOT NULL AND A.ID IS NULL THEN B.ID
        ELSE A.ID
    END
    )
FROM 
    A OUTER JOIN B
    ON A.ID = B.ID;

Добавить комментарий