Ćwiczenie szybkiego pisania: Programowanie w języku SQL

zamknij i zacznij pisać

Pisanie bezwzrokowe jest istotne w programowaniu. Jesteś bardziej efektywny, używając technik szybkiego pisania do pisania kodu w języku programowania SQL.

Dowiedzmy się więcej o języku SQL i pisaniu bezwzrokowym podczas programowania w języku SQL.

Programowanie w SQL i pisanie bezwzrokowe

Nauka SQL i ćwiczenie pisania na klawiaturze dobrze się uzupełniają. Zapytania SQL są pełne nawiasów, przecinków, operatorów i cudzysłowów. Małe błędy, takie jak wpisanie złego znaku cudzysłowu albo pominięcie średnika, mogą spowodować, że całe zapytanie przestanie działać. Pisząc w SQL, warto wiedzieć, które elementy składni są wspólne dla różnych baz danych, a które są specyficzne dla danego systemu. W tym artykule koncentrujemy się głównie na PostgreSQL, ale wspomnimy również o MySQL, SQLite i SQL Server tam, gdzie składnia się różni.

Co jest charakterystyczne dla składni SQL?

SQL (Structured Query Language) to język deklaratywny. Zamiast opisywać krok po kroku, jak pobrać dane, określasz, jakie dane chcesz otrzymać. Prawie każde polecenie zaczyna się od słowa kluczowego, takiego jak SELECT, INSERT czy UPDATE. Kolejność klauzul jest ustalona: SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY .... PostgreSQL i MySQL stosują tę samą kolejność, więc jeśli nauczysz się jej w jednym systemie, łatwo przeniesiesz tę umiejętność do innego.

SELECT id, name
FROM customers
WHERE active = true
ORDER BY created_at DESC;

Znaki specjalne, które często wpisujesz

SQL obfituje w znaki interpunkcyjne. Nawiasy okrągłe () otaczają funkcje i warunki. Przecinki , oddzielają kolumny. Kropka . jest używana w nazwach schematów i tabel, np. public.users. Pojedyncze cudzysłowy '...' oznaczają literały tekstowe. PostgreSQL używa podwójnych cudzysłowów "..." dla identyfikatorów, natomiast MySQL stosuje odwrotne apostrofy `...`. W SQL Server można spotkać także nawiasy kwadratowe [...]. Ćwiczenie tych symboli pozwala pisać zapytania bez ryzyka przypadkowego ich uszkodzenia.

-- Literał tekstowy
SELECT * FROM books WHERE title = 'War and Peace';

-- Identyfikatory ze spacjami (PostgreSQL)
SELECT "Order ID", "Customer Name" FROM orders;

Wielkie i małe litery

Zgodnie z konwencją słowa kluczowe SQL zapisuje się wielkimi literami: SELECT, FROM, WHERE. Ułatwia to ich wyróżnienie w zapytaniach, ale nie jest wymagane. W PostgreSQL niecytowane identyfikatory są automatycznie zamieniane na małe litery, więc MyTable i mytable są traktowane tak samo. W MySQL zachowanie zależy od systemu operacyjnego. Do ćwiczeń pisania warto używać wielkich liter dla słów kluczowych, ponieważ podkreśla to strukturę zapytania.

Średniki i zakończenia poleceń

W PostgreSQL każde polecenie powinno kończyć się średnikiem ;. Brak tego znaku może uniemożliwić wykonanie zapytania w narzędziach takich jak psql. MySQL i SQLite są bardziej tolerancyjne w trybie interaktywnym, ale używanie średnika to nadal dobra praktyka. Ten mały znak bardzo często decyduje o tym, czy zapytanie zadziała, czy nie.

Zapytania SELECT i złączenia

Pisanie zapytań to często pisanie złączeń. PostgreSQL korzysta z INNER JOIN, LEFT JOIN oraz RIGHT JOIN. Każde złączenie wymaga słowa kluczowego ON oraz warunku. Brak spacji albo błąd w warunku sprawi, że zapytanie nie zadziała. Ćwiczenie złączeń to dobry sposób, aby przyzwyczaić się do dokładnego wpisywania symboli takich jak = czy ..

SELECT c.id, c.name, o.amount
FROM customers c
INNER JOIN orders o ON o.customer_id = c.id
WHERE o.amount > 100;

Funkcje i wyrażenia

PostgreSQL ma wiele wbudowanych funkcji, takich jak COUNT(), SUM() czy AVG(). Zawsze wymagają one nawiasów. Funkcje daty i czasu, np. NOW() czy DATE_TRUNC(), są charakterystyczne dla PostgreSQL. MySQL ma podobne funkcje, np. CURDATE() czy DATE_FORMAT(). Poprawne ich wpisywanie wymaga uwagi przy znakach podkreślenia, przecinkach i nawiasach.

SELECT DATE_TRUNC('month', created_at) AS month,
 COUNT(*) AS orders
FROM orders
GROUP BY month
ORDER BY month;

INSERT, UPDATE, DELETE

Polecenia modyfikujące dane zawierają dużo znaków interpunkcyjnych. INSERT korzysta z nawiasów i przecinków do wyliczenia kolumn i wartości. UPDATE używa operatorów = oddzielonych przecinkami. DELETE łączy słowa kluczowe z warunkami. Te konstrukcje są prawie identyczne w PostgreSQL, MySQL, SQLite i SQL Server, choć zasady cytowania mogą się różnić.

INSERT INTO users (id, name, email)
VALUES (1, 'Alice', 'a@example.com');

UPDATE users
SET name = 'Bob', email = 'bob@example.com'
WHERE id = 1;

DELETE FROM users WHERE id = 2;

Wyrażenia wspólne (CTE)

PostgreSQL często używa wyrażeń wspólnych (CTE - Common Table Expressions), wprowadzanych słowem kluczowym WITH. CTE wymagają wielu nawiasów i przecinków, dlatego dobrze nadają się do ćwiczeń pisania. MySQL i SQLite wspierają je w nowszych wersjach. SQL Server również pozwala na WITH. Najczęstszy problem to poprawne rozmieszczenie nawiasów.

WITH recent_orders AS (
 SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT customer_id, COUNT(*) AS order_count
FROM recent_orders
GROUP BY customer_id;

Funkcje okienkowe

PostgreSQL jest znany z rozbudowanych funkcji okienkowych. Typowa składnia OVER (PARTITION BY ... ORDER BY ...) wymaga precyzyjnego wpisywania nawiasów i słów kluczowych. MySQL i SQL Server również obsługują funkcje okienkowe, ale PostgreSQL często uznaje się za punkt odniesienia.

SELECT customer_id,
 SUM(amount) OVER (PARTITION BY customer_id ORDER BY created_at) AS running_total
FROM payments;

Parametry i symbole zastępcze

W zapytaniach wykonywanych z aplikacji różne bazy danych używają różnych symboli zastępczych. PostgreSQL stosuje $1, $2, MySQL i SQLite używają ?, a SQL Server @p1. To drobne znaki, ale ich błędne wpisanie oznacza, że zapytanie nie zadziała.

-- PostgreSQL
SELECT * FROM users WHERE id = $1;

-- MySQL
SELECT * FROM users WHERE id = ?;

Podsumowanie

Zgodnie z konwencją słowa kluczowe SQL najczęściej wpisuje się wielkimi literami, a identyfikatory pozostają małymi literami, chyba że są cytowane. PostgreSQL dodaje podwójne cudzysłowy dla identyfikatorów, symbole $n, CTE i funkcje okienkowe. MySQL używa odwrotnych apostrofów i symbolu zapytania ?. SQL Server wprowadza nawiasy kwadratowe i parametry @. SQLite zachowuje prostotę, ale nadal wymaga precyzji. Ćwiczenie zapytań SQL rozwija dokładność w pisaniu znaków interpunkcyjnych, słów kluczowych i symboli. Skupienie się na PostgreSQL daje praktykę z jedną z najczęściej używanych współcześnie baz danych.