Sentencias Básicas en SQL
Para los “tiquismiquis” ¿qué es un compendio?
Compendio (del latín compendĭum) es el nombre que recibe una breve pero detallada y precisa compilación de un área determinada deĺ conocimiento humano. En la mayoría de los casos el área de conocimiento se referirá a un cierto campo delimitado de interés (en este caso SQL). A veces puede ser un resumen de una obra mayor. Dentro de la brevedad de la exposición, el compendio puede contener materia complicada y extensa.
Conectarse a mysql
-
mysql -h localhost -u root -p pruebas
albertjh@portatil:~$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.0.51a-3ubuntu5 (Ubuntu)
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Crear una base de datos
-
CREATE DATABASE pruebas;
Usar una base de datos
-
USE pruebas;
mysql> use prueba;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Ver estructura de una tabla de datos
-
DESCRIBE Alumnos ;
mysql> describe alumnos;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| Id | int(11) | YES | | 0 | |
| nombre | varchar(10) | YES | | NULL | |
| apellidos | varchar(30) | YES | | NULL | |
| tlfn | int(10) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
mysql>
Ver tablas de datos
-
SHOW TABLES;
mysql> show tables;
+------------------+
| Tables_in_prueba |
+------------------+
| Notas |
| alumnos |
| mascotas |
+------------------+
3 rows in set (0.00 sec)
Borrar tabla de datos
-
DROP Notas;
Crear una tabla de datos
-
CREATE TABLE Alumnos(
-
id INT NOT NULL,
-
nombre VARCHAR (10) NOT NULL,
-
apellido VARCHAR (10) NOT NULL,
-
telefono LONG,
-
CONSTRAINT alumnosPk1 PRIMARY KEY (id)
-
);
-
CREATE TABLE Notas(
-
id INT NOT NULL,
-
modulo VARCHAR (10) NOT NULL,
-
parcial INT NOT NULL,
-
nota INT NOT NULL CHECK (VALUE BETWEEN 1 AND 10),
-
CONSTRAINT notasPk1 PRIMARY KEY (id, modulo),
-
CONSTRAINT notasfk1 FOREIGN KEY (id) REFERENCES Alumnos(id)
-
);
Insertar datos en una tabla de datos
-
INSERT INTO Alumnos VALUES(’1′,‘juan’,‘garcia’,’949494949′);
-
INSERT INTO Alumnos VALUES(’2′,‘maria’,‘alvarez’,”);
-
INSERT INTO Alumnos VALUES(’3′,‘carlos’,‘perez’,’6458544′);
-
INSERT INTO Alumnos VALUES(’4′,‘alberto’,‘jimenez’,”);
-
INSERT INTO Alumnos VALUES(’5′,‘vanesa’,‘galera’,’912552522′);
-
INSERT INTO Alumnos VALUES(’6′,‘sergio’,‘molina’,’5464465656′);
-
INSERT INTO Alumnos VALUES(’1′,‘juan’,‘garcia’,’94949′);
-
INSERT INTO Alumnos VALUES(’2′,‘maria’,‘alvarez’,’0′);
-
INSERT INTO Alumnos VALUES(’3′,‘carlos’,‘perez’,’6454′);
-
INSERT INTO Alumnos VALUES(’4′,‘alberto’,‘jimenez’,’0′);
-
INSERT INTO Alumnos VALUES(’5′,‘vanesa’,‘galera’,’9125′);
-
INSERT INTO Alumnos VALUES(’6′,‘sergio’,‘molina’,’5464′);
Visualizar datos en una tabla de datos
-
SELECT * FROM Alumnos;
Visualizar datos seleccionados en una tabla de datos
Usamos la sentencia WHERE:
-
SELECT * FROM Alumnos
-
WHERE (id> 5 AND (nombre=‘alberto’);
mysql> SELECT * FROM alumnos WHERE id < 5 AND nombre="Alberto";
+------+---------+-------------------+-----------+
| Id | nombre | apellidos | tlfn |
+------+---------+-------------------+-----------+
| 1 | Alberto | Jimenez********** | 67922**** |
+------+---------+-------------------+-----------+
1 row in set (0.00 sec)
Visualizar datos seleccionados en una tabla de datos, por orden
Usamos la sentencia ORDER BY, si no indicamos parámetros es ascendente, el contrario es DESC
-
SELECT apellido, nombre
-
FROM Alumnos
-
ORDER BY apellido, nombre
-
;
Visualizar datos seleccionados en una tabla de datos:
AND Y OR
Ejemplo con AND y OR:
-
SELECT Alumnos.id, nombre, apellido, telefono, modulo, parcial, nota
-
FROM Alumnos,Notas
-
WHERE ((Alumnos.id = Notas.id) AND (modulo LIKE ‘sistemas’)) OR ((modulo LIKE “analisis”) AND (nota> 5))
-
ORDER BY Alumnos.id,modulo;
Visualizar datos seleccionados en una tabla de datos sin repetirse
Usamos la sentencia DISTINCT:
-
SELECT DISTINCT modulo
-
FROM Notas
-
WHERE nota> 5;
Visualizar datos seleccionados en una tabla de datos contándolos
Usamos la sentencia COUNT:
-
SELECT COUNT(nota)
-
FROM Notas;
mysql> select count(nota) FROM Notas;
+-------------+
| count(nota) |
+-------------+
| 8 |
+-------------+
1 row in set (0.03 sec)
Renombrar nombre de tablas “alias”
Usamos la sentencia AS:
-
SELECT modulo,avg(nota) AS media
-
FROM Notas AS n
-
WHERE n.id=3 OR n.id=1 OR n.id=2
-
GROUP BY modulo
-
ORDER BY media DESC;
+--------+--------+
| modulo | media |
+--------+--------+
| ASI | 9.0000 |
| DAI | 7.7143 |
+--------+--------+
2 rows in set (0.05 sec)
Visualizar datos seleccionados en una tabla de datos, su máximo, mínimo, media y suma
Usamos las sentencias MAX, MIN ,AVG y SUM:
-
SELECT MAX(nota)
-
FROM Notas
-
WHERE id=1;
-
SELECT AVG(nota)
-
FROM Notas
-
WHERE id=1;
-
SELECT MIN(nota)
-
FROM Notas;
-
SELECT AVG(nota) AS media
-
FROM Notas
-
WHERE modulo = “analisis”;
-
SELECT SUM(nota) AS Suma
-
FROM Notas;
Borrar datos de una tabla
-
DELETE * FROM Notas WHERE condicion;
-
DELETE * FROM Notas WHERE condicion;
-
SELECT a.id, a.nombre, n.modulo, n.nota
-
FROM Alumnos a ,Notas n
-
WHERE a.id = n.id ;
Sentencia LIKE
En entornos no unix los operandos especiales son: * y ?
* Una o varias apariciones
? Una o ninguna apariciones
En entornos unix: % y _
% Una o varias apariciones
_ Una o ninguna apariciones
-
SELECT *
-
FROM Alumnos,Notas
-
WHERE Alumnos.id = Notas.id AND modulo LIKE “%sistemas” OR modulo LIKE “00_%Diurno”
-
ORDER BY apellido;
mysql> select nombre from Personas where nombre like "%, J%";
+---------------------+
| nombre |
+---------------------+
| HERRERO, JOSE |
| DE LA ROSA, JULIAN |
| FERNANDEZ, JUAN |
| MOTOS, JUAN |
| ARNAZ, JOSE ANTONIO |
+---------------------+
5 rows in set (0.02 sec)
Operando básicos
< Menor que
> Mayor que
>= Mayor o igual
<= Menor o igual
!= Distinto de
Sentencia SubStr e InStr
SubStr se usa para seleccionar una determinada cadena de texto, por el contrario InStr devuelve un número entero donde encuentra el caracter buscado dentro de una cadena de texto.
-
SELECT SUBSTR(nombre, INSTR(nombre, ‘,’)+2) Nombre
-
FROM Personas;
mysql> SELECT SUBSTR(nombre, INSTR(nombre, ',')+2) Nombre
-> FROM Personas;
+--------------+
| Nombre |
+--------------+
| CARLOS |
| ALVARO |
| GUILLERMO |
| SANTIAGO |
...
| JOSE ANTONIO |
| PABLO |
+--------------+
47 rows in set (0.40 sec)
Sentencia Between
Para evitar hacer repeticiones tales como:
… AND ((nota >= 5) AND (nota <= 8));
Se usa between:
-
SELECT nombre, apellido, modulo, nota
-
FROM Alumnos, Notas
-
WHERE (Notas.id = Alumnos.id) AND (nota BETWEEN 5 AND 8);
Sentencia Round
Sirve para redondear, le podemos indicar cuantos decimales incluiremos.
-
SELECT ROUND(AVG(importe), 2)
-
FROM Multas;
mysql> select ROUND(AVG(importe),2) REDONDEO from Multas;
+----------+
| REDONDEO |
+----------+
| 199.09 |
+----------+
1 row in set (0.00 sec)
Sentencia Count
Sirve para contar. Podemos usar el * para que el motor nos escoja la opción o ponerlos nosotros mismos.
-
SELECT count(*) “NUMERO DE MULTAS”
-
FROM Multas;
mysql> select count(ref) "NUMERO DE MULTAS" from Multas;
+------------------+
| NUMERO DE MULTAS |
+------------------+
| 35 |
+------------------+
1 row in set (0.00 sec)
Subselects con IN o NOT IN
Podemos hacer subselects en una misma línea pudiendo restringir mucho más los datos a seleccionar:
-
SELECT DISTINCT nombre, apellido
-
FROM Alumnos
-
WHERE id IN ( SELECT DISTINCT id
-
FROM Notas
-
WHERE nota>=5 ) ;
-
SELECT nombre,apellido
-
FROM Alumnos AS A, Notas AS N
-
WHERE (A.id = N.id) AND (N.nota> ( SELECT AVG(nota) FROM Notas ) ) ;
Si necesitamos hacer muchas selecciones como IN solo devuelve un campo tenemos que hacer GROUP BY:
-
SELECT MAX(resultado.Suma) AS Maximo
-
FROM (SELECT modulo, SUM(nota) AS Suma
-
FROM Notas
-
GROUP BY modulo) resultado ;

Excelente !!!