Интерактивные SQL-примеры на JavaScript

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

Вот рабочий пример, попробуйте его:

select * from employees
limit 5;

А вот четыре шага, которые помогут настроить интерактивные примеры в ваших статьях или документации:

1. Подключите зависимости

Вам понадобится три JavaScript-файла:

  • sqlite3.js — SQLite, скомпилированная для браузера.
  • sqlime-db.js — веб-компонент базы данных.
  • sqlime-examples.js — веб-компонент интерактивных примеров.

Подключите их через CDN или (предпочтительно) скачайте и разместите локально:

<script src="https://unpkg.com/@antonz/sqlite@3.40.0/dist/sqlite3.js"></script>
<script src="https://unpkg.com/sqlime@0.1.2/dist/sqlime-db.js"></script>
<script src="https://unpkg.com/sqlime@0.1.2/dist/sqlime-examples.js"></script>

Если выбрали локальный вариант, придется еще скачать WebAssembly-файл SQLite:

https://unpkg.com/@antonz/sqlite@3.40.0/dist/sqlite3.wasm

sqlite3.wasm неявно используется скриптом sqlite3.js, так что разместите их в одном каталоге.

Я советую держать SQLite локально, потому что она весит ≈1Мб, а CDN часто подвисают на таких больших файлах.

Все файлы можно установить через npm:

npm install @antonz/sqlite
npm install sqlime

Примечание. @antonz/sqlite — это копия официальной сборки SQLite Wasm. Я завернул ее в npm-пакет для удобства, но если хотите — используйте оригинальную сборку с сайта SQLite.

2. Напишите статью, как делаете это обычно

Допустим, вы пишете небольшую заметку о ранжировании данных в SQL:

<p>Для ранжирования данных в SQL
используют оконную функцию <code>rank()<code>:</p>

<pre class="example">select
  rank() over w as "rank",
  name, department, salary
from employees
window w as (order by salary desc)
order by "rank", id;</pre>

<p>статья продолжается...</p>

Отображается как обычный HTML:

Для ранжирования данных в SQL используют оконную функцию rank():

select
  rank() over w as "rank",
  name, department, salary
from employees
window w as (order by salary desc)
order by "rank", id;

статья продолжается...

3. Загрузите базу данных

Вы можете создать базу из бинарного файла БД SQLite или SQL-скрипта. Я выбрал второй вариант и использую employees.sql, который создает таблицу employees и заполняет ее данными.

Загрузите базу с помощью компонента sqlime-db:

<sqlime-db name="employees" path="./employees.sql"></sqlime-db>
  • name — название базы, по которому будем обращаться к ней в дальнейшем.
  • path — URL, по которому доступен SQL-скрипт (или бинарный файл) базы.

4. Активируйте примеры

Осталось только превратить SQL-запросы из обычных элементов pre в интерактивные примеры. За это отвечает компонент sqlime-examples:

<sqlime-examples db="employees" selector="pre.example" editable></sqlime-examples>
  • db — название базы, которую мы загрузили раньше.
  • selector — CSS-селектор для элементов, которые содержат SQL.
  • editable — разрешает редактировать код примеров (если убрать, можно будет только запускать).

Готово!

Для ранжирования данных в SQL используют оконную функцию rank():

select
  rank() over w as "rank",
  name, department, salary
from employees
window w as (order by salary desc)
order by "rank", id;

статья продолжается...

sqlime-examples преобразует все элементы с указанным селектором, так что достаточно добавить его на страницу только один раз (кроме случаев, когда у вас несколько групп примеров, которые работают с разными базами данных).

Итого

Интерактивные SQL-примеры отлично подходят для любой документации:

  • более информативные, чем статические запросы;
  • лучше вовлекают читателя и поощряют эксперименты;
  • легко настраиваются и не требуют сервера.

Попробуйте добавить интерактива своим статьям, или задайте вопрос на гитхабе, если что-то непонятно.

──

P.S. Хотите освоить современный SQL? Обратите внимание на Оконные функции

Подписывайтесь на канал, чтобы не пропустить новые заметки 🚀