Gairebé tot el programari que fas servir cada dia desa informació en algun lloc: el teu banc desa moviments, una botiga en línia desa comandes, una aplicació de missatgeria desa converses. Aquest "algun lloc" és, en la immensa majoria dels casos, una base de dades relacional, i el llenguatge amb què s'hi parla es diu SQL. Aquesta primera lliçó encara no t'ensenyarà a escriure consultes complexes: et donarà el mapa mental que necessites perquè tot el que vindrà després hi encaixi. Entendràs quin problema resol SQL, en què es diferencia dels llenguatges de programació que potser ja coneixes, com s'organitza internament el llenguatge i per què, cinquanta anys després de la seva invenció, continua sent una de les habilitats tècniques més valorades del mercat.

Contingut

  1. Què és SQL i quin problema resol
  2. SQL no és el mateix que un SGBD
  3. Breu història: de l'article de Codd a l'estàndard ANSI/ISO
  4. L'estàndard davant dels dialectes
  5. SQL és declaratiu, no imperatiu
  6. Els cinc subllenguatges: DDL, DML, DQL, DCL i TCL
  7. On es fa servir SQL avui i per què continua sent imprescindible
  8. El cas del curs: BotigaVerda
  9. Errors habituals i consells
  10. Exercicis
  11. Conclusió

  1. Què és SQL i quin problema resol

SQL són les sigles de Structured Query Language (llenguatge de consulta estructurat). És un llenguatge especialitzat en una única cosa: descriure quines dades vols d'una base de dades relacional, i què hi vols fer.

Per entendre el problema que resol, imagina't que gestiones les comandes d'una botiga en una carpeta de fitxers de text. Cada vegada que vulguis respondre una pregunta tan simple com "quant vam facturar a França el mes passat?" hauries de:

  • Obrir cada fitxer i llegir-lo sencer.
  • Escriure codi que separi els camps de cada línia.
  • Filtrar manualment per país i per data.
  • Sumar els imports vigilant els decimals.
  • Repetir tot el procés des de zero per a la pregunta següent.

I això sense comptar problemes pitjors: què passa si dues persones escriuen al mateix fitxer alhora? Com garanteixes que una comanda no quedi a mig desar si marxa la llum? Com evites que algú registri una comanda d'un client que no existeix?

Una base de dades relacional resol tot això, i SQL és la interfície que et dona accés a aquesta maquinària. Amb SQL, la pregunta anterior és una sola frase que el sistema tradueix per tu en un pla de lectura eficient:

SELECT SUM(despeses_enviament) FROM comandes WHERE data_comanda >= '2026-01-01';

No et preocupis per la sintaxi encara: fixa't només que estàs descrivint el resultat que vols, no els passos per obtenir-lo.

En resum, SQL et permet:

Necessitat Què et dona SQL
Desar dades de manera estructurada Taules amb columnes de tipus definit
Recuperar exactament el que necessites Consultes amb filtres, ordenació i límits
Combinar informació de diversos llocs Operacions de reunió entre taules (JOIN)
Resumir i analitzar Agregacions (comptar, sumar, fer mitjanes)
Garantir que les dades siguin correctes Restriccions i integritat referencial
Que diverses persones treballin alhora sense corrompre res Transaccions i control de concurrència

  1. SQL no és el mateix que un SGBD

És la confusió número u de qui comença. Convé fixar-la des del principi:

  • SQL és el llenguatge. És una especificació escrita, com ho són l'HTML o el català.
  • Un SGBD (Sistema Gestor de Bases de Dades, en anglès DBMS) és el programa que entén aquest llenguatge, desa les dades al disc, les indexa, gestiona la concurrència i et retorna resultats.

L'analogia útil: SQL és al SGBD el que l'idioma català és a les persones que el parlen. Totes parlen català, però cadascuna amb el seu accent i les seves expressions locals.

Aquests són els SGBD relacionals més habituals:

SGBD Llicència Perfil típic d'ús Notes per a aquest curs
PostgreSQL Open source Aplicacions web, analítica, geodades És el dialecte de referència del curs
MySQL / MariaDB Open source Web clàssica, WordPress, hosting compartit N'assenyalarem les diferències quan importin
SQLite Domini públic Mòbils, escriptori, fitxers locals, tests Alternativa mínima si no pots instal·lar res
SQL Server Comercial (Microsoft) Entorns corporatius amb stack .NET El seu dialecte es diu T-SQL
Oracle Database Comercial Banca, grans ERP, sistemes crítics El seu dialecte es diu PL/SQL

Decisió del curs: tots els exemples estan escrits i provats per a PostgreSQL 16. Quan MySQL o SQLite es comportin de manera diferent en alguna cosa rellevant, hi trobaràs una nota o una taula comparativa. Mai barrejarem dialectes sense avisar-te.

  1. Breu història: de l'article de Codd a l'estàndard ANSI/ISO

Conèixer la història ajuda a entendre per què el llenguatge és com és (incloses les seves raresses).

Any Fita
1970 Edgar F. Codd, d'IBM, publica A Relational Model of Data for Large Shared Data Banks. Proposa organitzar les dades en relacions (taules) amb una base matemàtica sòlida.
1974 Donald Chamberlin i Raymond Boyce, també a IBM, creen SEQUEL (Structured English Query Language) per al prototip System R.
1977 El nom s'escurça a SQL per un conflicte de marca registrada. Per això molta gent continua pronunciant-lo "sicuel".
1979 Relational Software (avui Oracle) llança el primer SGBD SQL comercial, avançant-se a IBM.
1986 ANSI publica el primer estàndard SQL (SQL-86). Un any després l'adopta ISO.
1992 SQL-92, la versió que va fixar el nucli del llenguatge que encara fem servir.
1999-2016 Successives revisions afegeixen disparadors, recursivitat (WITH RECURSIVE), funcions de finestra (SQL:2003), XML i JSON (SQL:2016).
2023 SQL:2023 incorpora, entre altres coses, tipus de graf de propietats.

La lliçó important: SQL no és un llenguatge congelat als anys 70. Moltes de les eines més potents que veuràs al mòdul 10 (funcions de finestra, CTE, JSON) són incorporacions modernes i són al cor de l'anàlisi de dades actual.

  1. L'estàndard davant dels dialectes

L'estàndard ANSI/ISO defineix un llenguatge comú, però cap SGBD no l'implementa al 100 %, i tots hi afegeixen extensions pròpies. Això és el que s'anomena dialecte.

Un exemple concret: demanar "només les 5 primeres files".

SGBD Sintaxi
Estàndard SQL:2008 FETCH FIRST 5 ROWS ONLY
PostgreSQL LIMIT 5 (i també accepta FETCH FIRST)
MySQL / SQLite LIMIT 5
SQL Server SELECT TOP 5 ...
Oracle (clàssic) WHERE ROWNUM <= 5

Un altre exemple: concatenar dos textos.

SGBD Sintaxi
Estàndard / PostgreSQL / Oracle 'Botiga' || 'Verda'
MySQL CONCAT('Botiga', 'Verda')
SQL Server 'Botiga' + 'Verda'

Conseqüència pràctica: el 80 % del que aprenguis aquí funcionarà tal qual en qualsevol SGBD. El 20 % restant requerirà petits ajustos. Aprendre bé un dialecte (PostgreSQL) i saber que hi ha diferències és molt més útil que intentar aprendre un "SQL genèric" que en realitat no parla ningú.

  1. SQL és declaratiu, no imperatiu

Aquesta és la idea que més costa a qui ve de Python, Java o JavaScript, i la que més rendiment et donarà entendre aviat.

  • En un llenguatge imperatiu descrius el procediment: obre això, recorre allò, acumula, comprova, tanca.
  • En un llenguatge declaratiu descrius el resultat desitjat, i el sistema decideix com obtenir-lo.

Compara mentalment les dues maneres de respondre a "dona'm els clients de València".

Enfocament imperatiu (pseudocodi tipus Python):

resultat = []
for client in llegir_fitxer("clients.csv"):
    if client["ciutat"] == "València":
        resultat.append(client)
resultat.sort(key=lambda c: c["cognoms"])

Enfocament declaratiu (SQL):

SELECT * FROM clients WHERE ciutat = 'València' ORDER BY cognoms;

A la versió SQL no hi apareix cap bucle, cap índex de posició, cap variable acumuladora. Tu declares el què; l'optimitzador de consultes del SGBD decideix el com: si llegir la taula sencera, si fer servir un índex, en quin ordre combinar taules, si paral·lelitzar la feina entre diversos processadors.

Aspecte Llenguatge imperatiu SQL (declaratiu)
Què escrius Els passos El resultat
Qui decideix l'estratègia Tu L'optimitzador del SGBD
Control del flux Explícit (bucles, condicionals) No existeix en una consulta
Com es millora el rendiment Reescrivint l'algorisme Amb índexs, estadístiques i reescriptura de la consulta
Unitat de treball L'element individual El conjunt de files

La conseqüència mental més important: en SQL es pensa en conjunts, no en files una a una. Si et sorprens pensant "i ara recorro cada comanda i...", gairebé sempre hi ha una manera en conjunt d'expressar-ho, més curta i moltíssim més ràpida.

Compte: que l'optimitzador decideixi no vol dir que puguis escriure qualsevol cosa. Dues consultes que retornen el mateix resultat poden trigar 3 mil·lisegons o 3 minuts. El mòdul 8 està dedicat precisament a això.

  1. Els cinc subllenguatges: DDL, DML, DQL, DCL i TCL

SQL és prou gran com perquè convingui dividir-lo en famílies de sentències. No és una divisió formal de l'estàndard, però és la classificació que fa servir tothom i t'ajudarà a situar cada mòdul del curs.

Subllenguatge Nom complet Per a què serveix Sentències típiques On es veu al curs
DDL Data Definition Language Definir i modificar l'estructura (taules, columnes, índexs) CREATE, ALTER, DROP, TRUNCATE Mòduls 5, 8 i 10
DML Data Manipulation Language Modificar les dades que hi ha a dins INSERT, UPDATE, DELETE, MERGE Mòdul 5
DQL Data Query Language Consultar dades sense modificar-les SELECT Mòduls 2, 3, 4, 6, 7
DCL Data Control Language Gestionar permisos i rols GRANT, REVOKE Mòdul 11
TCL Transaction Control Language Delimitar transaccions BEGIN, COMMIT, ROLLBACK, SAVEPOINT Mòdul 9

Un exemple d'una línia de cadascun, ja sobre les taules de BotigaVerda que veuràs a la lliçó 01-06:

-- DDL: crear una estructura
CREATE TABLE categories (id INTEGER PRIMARY KEY, nom VARCHAR(60), descripcio TEXT);

-- DML: inserir una dada
INSERT INTO categories (id, nom) VALUES (1, 'Alimentació');

-- DQL: consultar
SELECT nom FROM categories;

-- DCL: donar permís de lectura a un rol
GRANT SELECT ON categories TO analista;

-- TCL: confirmar els canvis d'una transacció
COMMIT;

Nota important sobre SELECT: molta gent classifica SELECT dins de DML, perquè l'estàndard no reconeix "DQL" com a categoria separada. Totes dues versions són acceptables; el que és rellevant és que distingeixis llegir d'escriure, perquè els permisos, el rendiment i els riscos són molt diferents en cada cas.

  1. On es fa servir SQL avui i per què continua sent imprescindible

graph LR
    A[Base de dades<br/>relacional] --> B[Backend<br/>d'aplicacions]
    A --> C[Analítica de<br/>producte i negoci]
    A --> D[Business<br/>Intelligence]
    A --> E[Data<br/>Engineering]
    B --> B1[API REST, e-commerce,<br/>ERP, banca]
    C --> C1[Mètriques, cohorts,<br/>experiments A/B]
    D --> D1[Quadres de comandament:<br/>Power BI, Tableau, Looker]
    E --> E1[ETL/ELT, dbt,<br/>magatzems de dades]
  • Backend d'aplicacions. Tota aplicació amb usuaris, comandes o contingut necessita persistència. Encara que facis servir un ORM (Hibernate, Django ORM, Prisma, SQLAlchemy), l'ORM genera SQL: si no el saps llegir, no sabràs per què la teva pàgina triga vuit segons a carregar-se.
  • Analítica de dades. És l'eina diària de l'analista: segmentar clients, mesurar retenció, calcular ingressos per canal.
  • Business Intelligence. Power BI, Tableau, Metabase, Looker i Superset es recolzen en SQL, i tots permeten (o exigeixen) escriure consultes a mà per al que no és trivial.
  • Data engineering. Els magatzems de dades moderns (BigQuery, Snowflake, Redshift, Databricks SQL) es consulten amb SQL, i eines com dbt consisteixen literalment a organitzar transformacions escrites en SQL.
  • Ciència de dades i IA. El pas previ a qualsevol model és obtenir i netejar el conjunt de dades, i aquest pas gairebé sempre comença amb una consulta SQL.

Per què no l'ha substituït res? Se'n va anunciar la mort amb el moviment NoSQL del 2010, i va passar el contrari: els sistemes NoSQL van acabar afegint capes de consulta semblants a SQL. Les raons de la seva permanència:

  1. Està basat en matemàtiques, no en modes: l'àlgebra relacional continua sent vàlida.
  2. És portable com a habilitat: canvies d'empresa, de SGBD o de dècada, i el teu coneixement es transfereix.
  3. Separa el què del com: els motors milloren el seu rendiment sense obligar-te a reescriure les consultes.
  4. És el llenguatge comú entre desenvolupament, analítica i negoci.

  1. El cas del curs: BotigaVerda

A partir d'aquí i fins al projecte final, tots els exemples i exercicis del curs faran servir la mateixa base de dades: la de BotigaVerda, una botiga en línia fictícia de productes ecològics.

  • Seu: València (Espanya).
  • Catàleg: alimentació ecològica, cosmètica natural, llar sostenible, begudes, higiene personal i complements.
  • Mercats: Espanya, Portugal i França.
  • Operativa: ven per web (comandes sense comercial assignat) i per telèfon (comandes gestionades per un comercial de l'equip). Treballa amb proveïdors de diversos països, gestiona estoc, accepta ressenyes de clients i tramita devolucions.

La seva base de dades té nou taules: categories, proveidors, productes, clients, empleats, comandes, linies_comanda, ressenyes i devolucions. La veuràs en detall, amb el seu diagrama i el seu script de càrrega, a la lliçó 01-06.

Treballar sempre sobre el mateix cas té un avantatge enorme per a l'autoaprenentatge: no gastaràs energia a entendre un context nou a cada lliçó, i podràs comparar com la mateixa pregunta es respon amb eines cada vegada millors.

Aquestes són algunes de les preguntes de negoci que avui no saps respondre i que en acabar el curs resoldràs amb soltesa:

Pregunta de negoci Eina que necessitaràs Mòdul
Quins productes costen menys de 10 € i estan actius? SELECT + WHERE 2
Quins clients no han fet mai una comanda? LEFT JOIN + IS NULL 3 i 4
Quin és el tiquet mitjà per país? GROUP BY + AVG 4
Quines categories facturen més de 500 €? GROUP BY + HAVING 4
Qui és el cap de cada empleat? SELF JOIN 3
Quins productes tenen millor nota mitjana i com a mínim 3 ressenyes? Agregació + HAVING 4
Quins clients gasten més que la mitjana? Subconsulta 7
Per què aquesta consulta triga 4 segons? Índexs + EXPLAIN 8
Com registro una comanda sense arriscar-me a deixar-la a mitges? Transaccions 9
Quin és el rànquing mensual de vendes per categoria? Funcions de finestra 10

Errors habituals i consells

  • Confondre SQL amb "la base de dades". Frases com "fem servir SQL" són ambigües. El correcte és "fem servir PostgreSQL" (el SGBD) "i el consultem amb SQL" (el llenguatge).
  • Creure que hi ha un únic SQL. Copiar una consulta de Stack Overflow escrita per a MySQL i esperar que funcioni a PostgreSQL és una font constant de frustració. Comprova sempre per a quin motor està escrit el que copies.
  • Pensar fila a fila. L'error mental més car. Si el teu primer instint és "recorro cada comanda", atura't: en SQL s'opera sobre conjunts complets.
  • Assumir que SQL és "cosa de bases de dades antigues". És exactament al revés: l'auge de l'analítica i de la data engineering n'ha multiplicat la demanda en l'última dècada.
  • Consell: aprèn un dialecte a fons. Dominar PostgreSQL i conèixer les diferències principals val més que un coneixement superficial de cinc motors.
  • Consell: escriu sempre les consultes a mà al principi. Els assistents i els generadors automàtics són útils després; al principi impedeixen que interioritzis el model mental.

Exercicis

Aquests exercicis són conceptuals: encara no necessites tenir res instal·lat.

Exercici 1

Classifica cadascuna d'aquestes frases indicant a quin subllenguatge pertany (DDL, DML, DQL, DCL o TCL) i justifica breument per què:

  1. Afegir una columna telefon a la taula clients.
  2. Registrar una nova comanda del client 7.
  3. Esbrinar quants productes hi ha a la categoria "Begudes".
  4. Desfer tots els canvis fets des de l'inici de l'operació en curs.
  5. Permetre que l'usuari analista pugui llegir la taula comandes però no modificar-la.
  6. Eliminar per complet la taula devolucions, estructura inclosa.

Exercici 2

Un company et diu: "He escrit la consulta amb SELECT TOP 10 * FROM productes i PostgreSQL em dona un error de sintaxi. És evident que PostgreSQL no compleix l'estàndard SQL."

Explica en tres o quatre frases per què el seu raonament és incorrecte i com hauria de plantejar el problema.

Exercici 3

Tradueix a llenguatge natural, en una sola frase, el que declara aquesta consulta. No intentis descriure els passos que fa el motor, sinó el resultat que es demana:

SELECT nom, preu
FROM productes
WHERE actiu = TRUE AND preu < 10
ORDER BY preu DESC;

Solucions

Solució 1

Frase Subllenguatge Per què
1. Afegir columna telefon DDL Canvia l'estructura de la taula, no les seves dades (ALTER TABLE)
2. Registrar una comanda DML Insereix dades noves (INSERT)
3. Comptar productes de "Begudes" DQL Només llegeix informació (SELECT); no modifica res
4. Desfer els canvis en curs TCL Controla la transacció (ROLLBACK)
5. Donar permís de lectura DCL Gestiona privilegis (GRANT SELECT)
6. Eliminar la taula sencera DDL Elimina un objecte de l'estructura (DROP TABLE)

Fixa't en el matís del punt 6: esborrar les files de devolucions seria DML (DELETE), però esborrar la taula és DDL (DROP). El mateix verb en català, dues famílies diferents.

Solució 2

El raonament falla en dos punts. Primer, SELECT TOP 10 no forma part de l'estàndard ANSI/ISO: és una extensió pròpia de SQL Server, així que PostgreSQL no incompleix res quan la rebutja. Segon, l'estàndard limita files amb FETCH FIRST 10 ROWS ONLY, i PostgreSQL sí que ho admet, a més de la seva forma habitual LIMIT 10. El correcte seria preguntar-se "quina és la sintaxi d'aquest dialecte per limitar files?" en comptes d'assumir que la sintaxi que un coneix és l'estàndard. A la pràctica, cap SGBD implementa l'estàndard complet i tots hi afegeixen extensions.

Solució 3

"Dona'm el nom i el preu dels productes que estan actius i costen menys de 10 euros, començant pel més car."

Observa el que no apareix en aquesta frase: cap bucle, cap recorregut, cap decisió sobre índexs. Això és exactament el que significa que SQL sigui declaratiu. La consulta no diu com trobar aquestes files —això ho decidirà l'optimitzador—, només quines vols i en quin ordre les esperes.

Conclusió

En aquesta lliçó has construït el marc conceptual del curs:

  • SQL és un llenguatge declaratiu i estandarditzat per definir, manipular, consultar i controlar dades en bases relacionals; descriu què vols, no com obtenir-ho.
  • SQL (llenguatge) i SGBD (programa) són coses diferents: PostgreSQL, MySQL, SQLite, SQL Server i Oracle parlen SQL, cadascun amb el seu dialecte.
  • L'estàndard ANSI/ISO defineix un nucli comú des del 1986, però cap motor no l'implementa del tot: per això el curs fixa PostgreSQL 16 com a referència.
  • El llenguatge s'organitza en cinc famílies —DDL, DML, DQL, DCL i TCL— que es corresponen amb els mòduls que recorreràs.
  • SQL és avui imprescindible en backend, analítica, BI i data engineering, i no ha estat substituït per res.
  • BotigaVerda serà el teu camp de proves de principi a fi.

A la lliçó següent, Configurar el teu entorn SQL, passaràs de la teoria a la pràctica: instal·laràs PostgreSQL (amb instruccions per a Linux, macOS i Windows, a més de l'opció recomanada amb Docker), aprendràs a connectar-te amb el client psql, coneixeràs els clients gràfics més habituals i crearàs la base de dades botigaverda que faràs servir durant tot el curs.

Curs de SQL

Mòdul 1: Introducció a SQL

Mòdul 2: Consultes bàsiques de SQL

Mòdul 3: Treballar amb múltiples taules

Mòdul 4: Filtratge avançat de dades

Mòdul 5: Manipulació de dades

Mòdul 6: Funcions avançades de SQL

Mòdul 7: Subconsultes i consultes imbricades

Mòdul 8: Índexs i optimització del rendiment

Mòdul 9: Transaccions i concurrència

Mòdul 10: Temes avançats

Mòdul 11: SQL a la pràctica

Mòdul 12: Projecte final

© Copyright 2026. Tots els drets reservats