🐘 Руководство ΠΏΠΎ SQL для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 1: созданиС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ установка связСй ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ

Пошаговая инструкция ΠΏΠΎ установкС, настройкС ΠΈ наполнСнию Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pgAdmin ΠΈ SQL-запросов.
🐘 Руководство ΠΏΠΎ SQL для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 1: созданиС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ установка связСй ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ

Установка

Когда Π²Ρ‹ ΠΈΠ·ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π½ΠΎΠ²Ρ‹ΠΉ язык, самым Π²Π°ΠΆΠ½Ρ‹ΠΌ аспСктом являСтся ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°. Одно Π΄Π΅Π»ΠΎ – ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΈ совсСм Π΄Ρ€ΡƒΠ³ΠΎΠ΅ – ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с установки Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг – ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ SQL

ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ PostgreSQL (Postgres) – достаточно распространСнный SQL Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚. Для этого ΠΎΡ‚ΠΊΡ€ΠΎΠ΅ΠΌ страницу Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π²Ρ‹Π±Π΅Ρ€Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму (Π² ΠΌΠΎΠ΅ΠΌ случаС Windows), ΠΈ запустим установку. Если Π²Ρ‹ установитС ΠΏΠ°Ρ€ΠΎΠ»ΡŒ для вашСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΡ‚Π°Ρ€Π°ΠΉΡ‚Π΅ΡΡŒ сразу Π½Π΅ Π·Π°Π±Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ, ΠΎΠ½ Π½Π°ΠΌ дальшС понадобится. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ наша Π±Π°Π·Π° Π±ΡƒΠ΄Π΅Ρ‚ локальной, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ простой ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: admin.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг – установка pgAdmin

pgAdmin – это графичСский интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (GUI – graphical user interface), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ взаимодСйствиС с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° страницу Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²Π°ΡˆΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму ΠΈ слСдуйтС указаниям (Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Postgres 14 ΠΈ pgAdmin 4 v6.3.).

ПослС установки ΠΎΠ±ΠΎΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ pgAdmin ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Add new server. На этом шагС установится соСдинСниС с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ сСрвСром, ΠΈΠΌΠ΅Π½Π½ΠΎ поэтому Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Postgres. Π― Π½Π°Π·Π²Π°Π» свой сСрвСр home ΠΈ использовал ΠΏΠ°Ρ€ΠΎΠ»ΡŒ, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈ установкС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ всё Π³ΠΎΡ‚ΠΎΠ²ΠΎ ΠΊ созданию Ρ‚Π°Π±Π»ΠΈΡ†. Π”Π°Π²Π°ΠΉΡ‚Π΅ создадим Π½Π°Π±ΠΎΡ€ Ρ‚Π°Π±Π»ΠΈΡ†, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΡŽΡ‚ ΡˆΠΊΠΎΠ»Ρƒ. Нам Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹: ΡƒΡ‡Π΅Π½ΠΈΠΊΠΈ, классы, ΠΎΡ†Π΅Π½ΠΊΠΈ. ΠŸΡ€ΠΈ создании ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΌ классС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², Π° Ρƒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ†Π΅Π½ΠΎΠΊ (Ρ‚Π°ΠΊΠΎΠ΅ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ называСтся Β«ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ»).

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² pgAdmin, Π½ΠΎ вмСсто этого ΠΌΡ‹ напишСм ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² дальнСйшСм, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для пСрСсоздания Ρ‚Π°Π±Π»ΠΈΡ†. Для создания запроса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаст наши Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° postgres (ΠΏΡƒΠ½ΠΊΡ‚ располоТСн Π² мСню слСва home β†’ Databases (1) β†’ postgres ΠΈ Π΄Π°Π»Π΅Π΅ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Query Tool.

🐘 Руководство ΠΏΠΎ SQL для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. Π§Π°ΡΡ‚ΡŒ 1: созданиС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ установка связСй ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ

НачнСм с создания Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ классов (classrooms). Π’Π°Π±Π»ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ простой: ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ id ΠΈ имя учитСля – teacher. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄ Π² ΠΎΠΊΠ½Π΅ запроса (query tool) ΠΈ запуститС (run ΠΈΠ»ΠΈ F5).

        DROP TABLE IF EXISTS classrooms CASCADE;

CREATE TABLE classrooms (
    id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    teacher VARCHAR(100)
);
    

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ DROP TABLE IF EXISTS classrooms ΡƒΠ΄Π°Π»ΠΈΡ‚ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ classrooms, Ссли ΠΎΠ½Π° ΡƒΠΆΠ΅ сущСствуСт. Π’Π°ΠΆΠ½ΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Postgres, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Ссли ΠΎΠ½Π° ΠΈΠΌΠ΅Π΅Ρ‚ связи с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ, поэтому, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ (constraint) Π² ΠΊΠΎΠ½Ρ†Π΅ строки Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ CASCADE. CASCADE – автоматичСски ΡƒΠ΄Π°Π»ΠΈΡ‚ ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ строки ΠΈΠ· зависимой Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΡ€ΠΈ внСсСнии ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π³Π»Π°Π²Π½ΡƒΡŽ. Π’ нашСм случаС Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΡΡ‚Ρ€Π°ΡˆΠ½ΠΎΠ³ΠΎ Π² ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ, Ссли ΠΌΡ‹ Π½Π° это пошли, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ всё с нуля, ΠΈ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚ΠΎΠΆΠ΅ удалятся.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ DROP TABLE IF EXISTS ΠΏΠ΅Ρ€Π΅Π΄ CREATE TABLE ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ ΡΠΈΡΡ‚Π΅ΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ схСму нашСй Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ скрипты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹, Ссли ΠΌΡ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΠΌ внСсти измСнСния – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… поля ΠΈ Ρ‚. Π΄. Для этого Π½Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ внСсти измСнСния Π² ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ скрипт ΠΈ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΅Π³ΠΎ.

НичСго Π½Π°ΠΌ Π½Π΅ ΠΌΠ΅ΡˆΠ°Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ наш ΠΊΠΎΠ΄ Π² систСму контроля вСрсий. Π’Π΅ΡΡŒ ΠΊΠΎΠ΄ для создания Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎ ссылкС.

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΡƒΡŽ строчку. Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° id являСтся ΠΏΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ (primary key), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ это ΠΏΠΎΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΎ ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ постоянно Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π² Π³ΠΎΠ»ΠΎΠ²Π΅, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ id ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ использовано, Π° ΠΊΠ°ΠΊΠΎΠ΅ – Π½Π΅Ρ‚, ΠΌΡ‹ написали GENERATED ALWAYS AS IDENTITY, этот ΠΏΡ€ΠΈΡ‘ΠΌ являСтся Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²ΠΎΠΉ синтаксису ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (CREATE SEQUENCE). Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ записСй Π² эту Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ просто Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ имя учитСля.

И Π² пятой строкС ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ teacher ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… VARCHAR (строка) с максимальной Π΄Π»ΠΈΠ½ΠΎΠΉ 100 символов. Если Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ Π½Π°ΠΌ понадобится Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ учитСля с Π±ΠΎΠ»Π΅Π΅ Π΄Π»ΠΈΠ½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½Π°ΠΌ придСтся Π»ΠΈΠ±ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»Ρ‹, Π»ΠΈΠ±ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ (alter table).

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ создадим Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² (students). Новая Ρ‚Π°Π±Π»ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ: ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ (id), имя ΡƒΡ‡Π΅Π½ΠΈΠΊΠ° (name), ΠΈ внСшний ΠΊΠ»ΡŽΡ‡ (foreign key), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ (references) Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ классов.

        DROP TABLE IF EXISTS students CASCADE;

CREATE TABLE students (
    id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    name VARCHAR(100),
    classroom_id INT,
    CONSTRAINT fk_classrooms
        FOREIGN KEY(classroom_id)
        REFERENCES classrooms(id)
);
    

И снова ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄ созданиСм Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ удаляСм ΡΡ‚Π°Ρ€ΡƒΡŽ, Ссли ΠΎΠ½Π° сущСствуСт, добавляСм ΠΏΠΎΠ»Π΅ id, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ автоматичСски ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ своё Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ имя с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… VARCHAR (строка) ΠΈ максимальной Π΄Π»ΠΈΠ½ΠΎΠΉ 100 символов. Π’Π°ΠΊΠΆΠ΅ Π² эту Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΌΡ‹ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ с ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ класса (classroom_id), ΠΈ с сСдьмой ΠΏΠΎ Π΄Π΅Π²ΡΡ‚ΡƒΡŽ строку установили, Ρ‡Ρ‚ΠΎ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ id Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ классов (classrooms).

ΠœΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ classroom_id являСтся внСшним ΠΊΠ»ΡŽΡ‡ΠΎΠΌ. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π·Π°Π΄Π°Π»ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² (students). Π’ΠΎ Π΅ΡΡ‚ΡŒ Postgres Π½Π° Π΄Π°Π½Π½ΠΎΠΌ этапС Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π½Π°ΠΌ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строку с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ² (students), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ класса (classroom_id), Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ classrooms. НапримСр: Ρƒ нас Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ классов 10 записСй (id с 1 Π΄ΠΎ 10), систСма Π½Π΅ даст Π½Π°ΠΌ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠΊΠ°Π·Π°Π½ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ класса 11 ΠΈ большС.

НСвозмоТно Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ классов Π½Π΅Ρ‚ записи с id = 1
        INSERT INTO students
    (name, classroom_id)
VALUES
    ('Matt', 1);

/*
ERROR: insert or update on table "students" violates foreign
    key constraint "fk_classrooms"
DETAIL: Key (classroom_id)=(1) is not present in table
    "classrooms".
SQL state: 23503
*/
    

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ классов (classrooms). Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΠ»Π΅ id Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ автоматичСски, Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΡƒΡ‡ΠΈΡ‚Π΅Π»Π΅ΠΉ.

        INSERT INTO classrooms
    (teacher)
VALUES
    ('Mary'),
    ('Jonah');

SELECT * FROM classrooms;

/*
 id | teacher
 -- | -------
  1 | Mary
  2 | Jonah
*/
    

ΠŸΡ€Π΅ΠΊΡ€Π°ΡΠ½ΠΎ! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас Π΅ΡΡ‚ΡŒ записи Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ классов, ΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΡƒΡ‡Π΅Π½ΠΈΠΊΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹Π΅ связи (с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ классов).

        INSERT INTO students
    (name, classroom_id)
 VALUES
    ('Adam', 1),
    ('Betty', 1),
    ('Caroline', 2);

SELECT * FROM students;

/*
 id | name     | classroom_id
 -- | -------- | ------------
  1 | Adam     |            1
  2 | Betty    |            1
  3 | Caroline |            2
*/
    

Но Ρ‡Ρ‚ΠΎ ΠΆΠ΅ случится, Ссли Ρƒ нас появится Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ‡Π΅Π½ΠΈΠΊ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π΅Ρ‰Ρ‘ Π½Π΅ Π½Π°Π·Π½Π°Ρ‡ΠΈΠ»ΠΈ класс? НСуТСли Π½Π°ΠΌ придСтся ΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° станСт извСстно Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½ классС, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС этого Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ запись Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…?

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, Π½Π΅Ρ‚. ΠœΡ‹ установили внСшний ΠΊΠ»ΡŽΡ‡, ΠΈ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ запись, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ссылка Π½Π° Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ id класса Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, Π½ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° класса (classroom_id) ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ null. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ двумя способами: ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ null ΠΏΡ€ΠΈ записи Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ просто ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠΌΠ΅Π½ΠΈ.

        -- явно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL
INSERT INTO students
    (name, classroom_id)
VALUES
    ('Dina', NULL);

-- нСявно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ NULL
INSERT INTO students
    (name)
VALUES
    ('Evan');

SELECT * FROM students;

/*
 id | name     | classroom_id
 -- | -------- | ------------
  1 | Adam     |            1
  2 | Betty    |            1
  3 | Caroline |            2
  4 | Dina     |       [null]
  5 | Evan     |       [null]
*/
    

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ успСваСмости. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, формируСтся ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… – домашниС задания, участиС Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, ΠΏΠΎΡΠ΅Ρ‰Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ экзамСны. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Π’Π°Π±Π»ΠΈΡ†Π° Π·Π°Π΄Π°Π½ΠΈΠΉ (assignments), ΠΊΠ°ΠΊ понятно ΠΈΠ· названия, Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ самих заданиях, ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΎΡ†Π΅Π½ΠΎΠΊ (grades), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΡƒΡ‡Π΅Π½ΠΈΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠ» эти задания.

        DROP TABLE IF EXISTS assignments CASCADE;
DROP TABLE IF EXISTS grades CASCADE;

CREATE TABLE assignments (
    id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    category VARCHAR(20),
    name VARCHAR(200),
    due_date DATE,
    weight FLOAT
);

CREATE TABLE grades (
    id INT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    assignment_id INT,
    score INT,
    student_id INT,
    CONSTRAINT fk_assignments
        FOREIGN KEY(assignment_id)
        REFERENCES assignments(id),
    CONSTRAINT fk_students
        FOREIGN KEY(student_id)
        REFERENCES students(id)
);
    

ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠΌ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ CSV-Ρ„Π°ΠΉΠ»Π°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΈΠ· этого рСпозитория ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ. Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ pgAdmin доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° доступа ΠΊ ΠΏΠ°ΠΏΠΊΠ΅ (Π² ΠΌΠΎΠ΅ΠΌ случаС – это ΠΏΠ°ΠΏΠΊΠ° db_data).

        COPY assignments(category, name, due_date, weight)
FROM 'C:/Users/mgsosna/Desktop/db_data/assignments.csv'
DELIMITER ','
CSV HEADER;
/*
COPY 5
Query returned successfully in 118 msec.
*/

COPY grades(assignment_id, score, student_id)
FROM 'C:/Users/mgsosna/Desktop/db_data/grades.csv'
DELIMITER ','
CSV HEADER;
/*
COPY 25
Query returned successfully in 64 msec.
*/
    

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ всё сдСлали Π²Π΅Ρ€Π½ΠΎ. НапишСм запрос, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΡΡ€Π΅Π΄Π½ΡŽΡŽ ΠΎΡ†Π΅Π½ΠΊΡƒ, ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Π²ΠΈΠ΄Ρƒ Π·Π°Π΄Π°Π½ΠΈΠΉ с Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΎΠΉ ΠΏΠΎ учитСлям.

        SELECT
    c.teacher,
    a.category,
    ROUND(AVG(g.score), 1) AS avg_score
FROM
    students AS s
INNER JOIN classrooms AS c
    ON c.id = s.classroom_id
INNER JOIN grades AS g
    ON s.id = g.student_id
INNER JOIN assignments AS a
    ON a.id = g.assignment_id
GROUP BY
    1,
    2
ORDER BY
    3 DESC;

/*
 teacher | category  | avg_score
 ------- | --------- | ---------
 Jonah   |  project  |     100.0
 Jonah   |  homework |      94.0
 Jonah   |  exam     |      92.5
 Mary    |  homework |      78.3
 Mary    |  exam     |      76.0
 Mary    |  project  |      69.5
*/
    

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! ΠœΡ‹ установили, настроили ΠΈ Π½Π°ΠΏΠΎΠ»Π½ΠΈΠ»ΠΈ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ….

***

Π˜Ρ‚Π°ΠΊ, Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ:

  • ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…;
  • ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹;
  • Π½Π°ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ;
  • ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ;

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Ρƒ нас всё Π³ΠΎΡ‚ΠΎΠ²ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС возмоТности SQL. ΠœΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с возмоТностСй синтаксиса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, вСроятно, Π²Π°ΠΌ Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΡ‚ΠΊΡ€ΠΎΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ Π½ΠΎΠ²Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π² написании SQL-запросов. Π’Π°ΠΊΠΆΠ΅ ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²ΠΈΠ΄Ρ‹ соСдинСний Ρ‚Π°Π±Π»ΠΈΡ† (JOIN) ΠΈ способы ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ запросов Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ дСсятки ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ сотни строк.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ части ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ:

  • Π²ΠΈΠ΄Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΉ Π² запросах;
  • запросы с условиями Ρ‚ΠΈΠΏΠ° if-else;
  • Π½ΠΎΠ²Ρ‹Π΅ Π²ΠΈΠ΄Ρ‹ соСдинСний Ρ‚Π°Π±Π»ΠΈΡ†;
  • Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с массивами;

ΠœΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста»

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

 
 

Π’ΠΠšΠΠΠ‘Π˜Π˜

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ вакансию
Senior Marketing Analyst
ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ собСсСдования
Go-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ
ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ собСсСдования
Backend developer (PHP / Go)
Москва, ΠΏΠΎ ΠΈΡ‚ΠΎΠ³Π°ΠΌ собСсСдования

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

Подпишись

Π½Π° push-увСдомлСния