SQL consultes I

De Cacauet Wiki
La revisió el 17:16, 25 gen 2010 per Enric (discussió | contribucions) (Es crea la pàgina amb «Primers passos amb consultes en SQL (utilitzant MySQL). == Connectant-nos a MySQL == Per connectar-nos a la base de dades MySQL utiltizarem el programa de client des de ...».)
(dif) ← Versió més antiga | Versió actual (dif) | Versió més nova → (dif)
Salta a la navegació Salta a la cerca

Primers passos amb consultes en SQL (utilitzant MySQL).

Connectant-nos a MySQL

Per connectar-nos a la base de dades MySQL utiltizarem el programa de client des de línia de comandes de Linux. Se li ha d'especificar l'usuari amb el paràmetre -u i indiquem que volem introduïr password amb -p

$> mysql -u <usuari> -p

Un cop dintre de MySQL podem veure les bases de dades disponibles amb show databases.

mysql> show databases;

i podem seleccionar la base de dades amb la comanda use.

mysql> use <database>;

Nosaltres utilitzarem la base de dades de països "mundo":

mysql> use mundo;

Per mostrar les taules de la base de dades seleccionada fem show tables.

mysql> show tables;

I per saber el nom de les columnes utilitzem la comanda desc (de descripció).

mysql> desc Paises;

Fixeu-vos que el nom de les taules sol estar amb la primera lletra en majúscules. Així serà fàcil veure en una comanda SQL on hi ha una taula i on hi ha paraules reservades del llenguatge. També és convenient no utiltizar accents ni caràcters especials en els noms de taules i columnes per facilitar l'elaboració de sentències SQL i evitar errors.


Consultes bàsiques

Ens caldrà, de tant en tant, consultar la sintaxi de la sentència SELECT. Ho podem fer a la web de MySQL: [1]

Per començar, visualitzem tot (*) de la taula Paises amb un SELECT:

mysql> SELECT * FROM Paises;

I com podem veure, tenim massa resultats i no ens hi caben a la pantalla. Podem limitar el nombre de resultats afegint "LIMIT" a la consulta (és una mica cutre fer-ho però pot ser pràctic):

mysql> SELECT * FROM Paises LIMIT 10;

I la nostra segona consulta, podem llistar tots els països (ara jo no posem "*") del continent anomenat "Asia". Com que volem triar, haurem d'utilitzar la condició WHERE:

mysql> SELECT Pais FROM Paises WHERE Continente="Asia";

Ara voldrem fer una consulta per comptar el nombre de països. Per això ens caldrà una funció, en aquest cas, count

mysql> SELECT count(*) FROM Paises WHERE Continente="Asia";

I per fer un llistat del nom dels països que comencen per "A" haurem d'utilitzar el comodí "%", que equival a "qualsevol cadena de caràcters". I per utilitzar els comodins no podem utiltizar el signe "=" sinó que ens caldrà l' operador LIKE:

mysql> SELECT Pais FROM Paises WHERE Pais LIKE "A%";

Per obtenir una llista dels continents podriem fer:

mysql> SELECT Continente FROM Paises;

però veurem que es van repetint els noms dels continents per cada registre de país de la taula. Si volem una llista sense repeticions ho podem fer utilitzant "DISTINCT":

mysql> SELECT DISTINCT Continente FROM Paises;

Finalment, per ordenar una llista podem utiltizar ORDER BY <columna> i afegir ASC (per defecte) o DESC a darrere.

mysql> SELECT DISTINCT Continente FROM Paises ORDER BY Continente;
mysql> SELECT DISTINCT Continente FROM Paises ORDER BY Continente DESC;


Comodins

Ara podem fer una llista de països del continent Oceanía. El problema és que per la línia de comandes els accents no funcionen del tot bé. Per evitar aquest problema podem utilitzar els comodins % o _. En aquest cas, el comodí "_" substitueix a "qualsevol caràcter", però només un, no qualsevol nombre de caràcters com ho fa "%".

mysql> SELECT Pais FROM Paises WHERE Continente="Ocean%";
(...o bé...)
mysql> SELECT Pais FROM Paises WHERE Continente="Ocean_a";


Agrupacions

Si volem fer un llistat dels contintents amb el nombre de països dels que consta cadscun d'ells, necessitarem utiltizar de nou la funció count i també el GROUP BY per poder agrupar el compte.

mysql> SELECT Continente,count(*) FROM Paises GROUP BY Continente;

Tingueu en compte que això no funciona sense el GROUP BY. El següent és incorrecte:

mysql> SELECT Continente,count(*) FROM Paises;

(proveu-ho igualment i esbrineu perquè dóna això)


Views

Una view és una consulta emmagatzemada i que es pot utiltizar com si fos una taula. Per crear-les podem utiltizar la comanda CREATE VIEW. És a dir, CREATE VIEW <nom_view> AS <sentencia_select>;

mysql> CREATE VIEW test AS SELECT...etc.etc...;


TODO

order by

(caràcter de ESCAPE: \)