Está en la página 1de 21

SQL > SQL Básico > Select

Una de las sentencias SQL más importantes es SELECT, ya que permite realizar consultas sobre los
datos almacenados en la base de datos.

Sintaxis SQL SELECT


- SELECT * FROM nombretabla
- SELECT columna1, columna2 FROM nombretabla

Para los ejemplos, tendremos la siguiente tabla de personas denominada “personas”

Estos son los datos almacenados en la tabla “personas”


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ

Si queremos consultar todos los datos de la tabla “personas”


- SELECT * FROM personas

Este será el resultado:


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ

Si queremos consulta todos los nombres y primer apellido de todas las personas
- SELECT nombre, apellido1 FROM personas

Este será el resultado:


nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ
SQL > SQL Básico > DISTINCT

Al realizar una consulta puede ocurrir que existan valores repetidos para algunas columnas. Por
ejemplo

SELECT nombre FROM personas


nombre
ANTONIO
LUIS
ANTONIO

Esto no es un problema, pero a veces queremos que no se repitan, por ejemplo, si queremos saber
los nombres diferentes que hay en la tabla personas", entonces utilizaremos DISTINCT.

SELECT DISTINCT nombre FROM personas


nombre
ANTONIO
LUIS
SQL > SQL Básico > WHERE

La cláusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar solamente
algunas filas de la tabla que cumplan una determinada condición.

El valor de la condición debe ir entre comillas simples ''.

Por ejemplo:

Seleccionar las personas cuyo nombre sea ANTONIO

SELECT * FROM personas WHERE nombre = 'ANTONIO'


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
SQL > SQL Avanzado > AND OR

Los operadores AND y OR se utilizan para filtrar resultados con 2 condiciones.

El operador AND mostrará los resultados cuando se cumplan las 2 condiciones.

Condición1 AND condición2

El operador OR mostrará los resultados cuando se cumpla alguna de las 2 condiciones.

Condicion1 OR condicion2

En la tabla personas
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ

La siguiente sentencia (ejemplo AND) dará el siguiente resultado:

SELECT * FROM personas WHERE nombre = 'ANTONIO' AND apellido1 = 'GARCIA'


nombre apellido1 apellido2
ANTONIO GARCIA BENITO

La siguiente sentencia (ejemplo OR) dará el siguiente resultado:

SELECT * FROM personas WHERE nombre = 'ANTONIO' OR apellido1 = 'GARCIA'


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO

También se pueden combinar AND y OR, como el siguiente ejemplo:

SELECT * FROM personas WHERE nombre = 'ANTONIO' AND (apellido1 = 'GARCIA' OR apellido1 =
LOPEZ)
nombre apellido1 apellido2
ANTONIO GARCIA BENITO
SQL > SQL Básico > ORDER BY

ORDER BY se utiliza para ordenar los resultados de una consulta, según el valor de la columna
especificada.

Por defecto, se ordena de forma ascendente (ASC) según los valores de la columna.

Si se quiere ordenar por orden descendente se utiliza la palabra DES

SELECT nombre_columna(s) FROM nombre_tabla ORDER BY nombre_columna(s) ASC|DESC

Por ejemplo, en la tabla personas :


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO

SELECT nombre, apellido1 FROM personas ORDER BY apellido1 ASC

Esta es la consulta resultante:


nombre apellido1
LUIS LOPEZ
ANTONIO GARCIA
ANTONIO PEREZ

Ejemplo de ordenación descendiente (DES)

SELECT nombre, apellido1 FROM personas ORDER BY apellido1 DESC

Esta es la consulta resultante:


nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ
SQL > SQL Avanzado > IN

El operador IN permite seleccionar múltiples valores en una cláusula WHERE

Sintaxis SQL IN

SELECT columna FROM table WHERE columna IN (valor1, valor2, valor3, .)

Ejemplo SQL IN

Dada la siguiente tabla 'personas'


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

Queremos seleccionar a las personas cuyo apellido1 sea 'PEREZ' o 'RUIZ'

SELECT * FROM personas WHERE apellido1 IN ('PEREZ','RUIZ')


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
PEDRO RUIZ GONZALEZ
SQL > SQL Avanzado > BETWEEN

El operador BETWEEN se utiliza en la cláusula WHERE para seleccionar valores entre un rango de
datos.

Sintaxis de SQL BETWEEN

SELECT columna FROM tabla WHERE columna BETWEEN valor1 AND valor2

Ejemplo de SQL BETWEEN

Dada la siguiente tabla 'personas'


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

Seleccionar personas cuyo apellido1 esté entre 'FERNANDEZ y 'HUERTAS'

SELECT * FROM personas WHERE apellido1 BETWEEN 'FERNANDEZ' AND 'HUERTAS'


nombre apellido1 apellido2
ANTONIO GARCIA RODRIGUEZ

Seleccionar personas cuyo apellido1 no esté entre 'FERNANDEZ y 'HUERTAS'

SELECT * FROM personas WHERE apellido1 NOT BETWEEN 'FERNANDEZ' AND 'HUERTAS'
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
PEDRO RUIZ GONZALEZ
SQL > SQL Avanzado > FOREIGN KEY

La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para señalar cual
es la clave primaria de otra tabla.

La columna o columnas señaladas como FOREIGN KEY, solo podrán tener valores que ya existan en
la clave primaria PRIMARY KEY de la otra tabla.

Ejemplo de FOREIGN KEY

Tabla "departamentos", con la clave primaria "dep"


dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

Tabla personas, con una clave externa FOREIGN KEY 'dep', que hace referencia a la clave primaria
'dep' de la tabla anterior 'departamentos' y por tanto, solo puede tener un valor de los que tiene
en esa tabla
per nombre apellido1 apellido2 dep
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4

Definiciones de FOREIGN KEY en CREATE TABLE para MySQL

CREATE TABLE departamentos { dep int NOT NULL,


departamento varchar(255),
PRIMARY KEY (dep)
}

CREATE TABLE personas


{
per int NOT NULL,
nombre varchar(255),
apellido1 varchar(255),
dep int NOT NULL,
PRIMARY KEY (per),
FOREIGN KEY (dep) REFERENCES departamentos(dep)
}
SQL > SQL Avanzado > ALIAS

Un alias, es otra forma de llamar a una tabla o a una columna, y se utiliza para simplificar las
sentencias SQL cuando los nombres de tablas o columnas son largos o complicados.

Sintaxis SQL ALIAS para una tabla:

SELECT columna FROM nombretabla AS aliastabla

Sintaxis SQL ALIAS para una columna

SELECT nombrecolumna AS aliascolumna FROM tabla

Ejemplos SQL ALIAS

Dada la siguiente tabla 'personas'


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

Utilizamos el alias 'p' para la tabla 'personas', para simplificar la sentencia SELECT

SELECT p.apellido1, p.apellido2 FROM personas AS p WHERE p.nombre = 'ANTONIO'


apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ

Sin utilizar el alias, la sentencia SELECT quedaría un poco más larga:

SELECT personas.apellido1, personas.apellido2 FROM personas WHERE personas.nombre =


ANTONIO'
apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ
SQL > SQL Avanzado > AVG

La función AVG devuelve el valor medio de una columna de tipo numérico.

Sintaxis SQL AVG:

SELECT AVG(columna) FROM tabla

Ejemplo SQL AVG:

Tabla ‘pedidos’
id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60

Si quieres saber el valor medio del campo ‘precio’, usa la siguiente función SQL

SELECT AVG(precio) AS preciomedio FROM pedidos

La tabla resultante sería


preciomedio
240

Si quieres seleccionar los clientes con el precio del pedido superior al precio medio de los pedidos.

SELECT * FROM pedidos WHERE precio > (SELECT AVG(precio) FROM pedidos)
id pedido cliente precio
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
SQL > SQL Avanzado > COUNT

La función COUNT devuelve el número de filas de la consulta, es decir, el número de registros que
cumplen una determinada condición.

Los valores nulos no serán contabilizados.

Sintaxis de SQL COUNT:

SELECT COUNT(columna) FROM tabla

Para obtener el número de filas de una tabla

SELECT COUNT(*) FROM tabla

Para obtener el número de valores distintos de la columna especificada.

SELECT COUNT(DISTINCT columna) FROM tabla.

Ejemplos de SQL COUNT:

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60

SELECT COUNT(*) FROM pedidos

Devolverá el número de filas de la tabla, es decir, 5

SELECT COUNT(*) FROM pedidos WHERE cliente = ‘RUIZ’

Devolverá el número de filas del resultado de la consulta, es decir, 1

SELECT COUNT(*) FROM pedidos WHERE precio > 270

Devolverá el número de filas del resultado de la consulta, es decir, 2


SQL > SQL Avanzado > FIRST

La función SQL FIRST devuelve el primer valor de la columna seleccionada.

Sintaxis SQL FIRST:

SELECT FIRST(columna) FROM table

Ejemplo SQL FIRST:

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60

SELECT FIRST(precio) FROM pedidos

Devolverá el valor 100, que es el valor de la columan ‘precio’ de la primera fila de la tabla.
SQL > SQL Avanzado > LAST

La función SQL LAST sirve para obtener el valor de una columna de la última fila de la selección.

Sintaxis SQL LAST:

SELECT LAST(columna) FROM table

Ejemplo SQL LAST:

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60

SELECT LAST(precio) FROM pedidos

Devolverá el valor 60, que es el valor de la columna ‘precio’ de la última fila de la tabla.
SQL > SQL Avanzado > MAX

La función MAX sirve para obtener el mayor valor para una columna determinada.

Sintaxis SQL MAX:

SELECT MAX(columna) FROM tabla

Ejemplo SQL MAX:

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60

SELECT MAX(precio) FROM pedidos

Devolverá el valor 490, que es máximo valor de la columna ‘precio’ de la consulta.


SQL > SQL Avanzado > MIN

La función MIN sirve para obtener el valor más pequeño para una columna determinada.

Sintaxis SQL MIN:

SELECT MIN(columna) FROM tabla

Ejemplo SQL MIN:

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60

SELECT MIN(precio) FROM pedidos

Devolverá el valor 60, que es valor más pequeño de la columna ‘precio’ de la consulta.
SQL > SQL Avanzado > SUM

La función SUM permite obtener la suma total de los valores de una columna de tipo numérico.

Sintaxis SQL SUM

SELECT SUM(columna) FROM tabla

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60

SELECT SUM(precio) FROM pedidos

Devolverá el valor 1200, que es la suma de todos los valores de la columna ‘precio’ de la consulta
realizada, en este caso, de toda la tabla.
SQL > SQL Avanzado > GROUP BY

La función GROUP BY se utiliza para juntar filas de resultados que coincidan en el valor de alguna
columna seleccionada.

Sintaxis GROUP BY

SELECT columna, funcion(columna) FROM tabla GROUP BY columna

Ejemplo de uso de GROUP BY

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RUIZ 490
5 p5 GOMEZ 60

SELECT cliente, SUM(precio) FROM pedidos GROUP BY cliente

El resultado será el siguiente:


cliente SUM(precio)
RUIZ 590
PEREZ 300
GOMEZ 310

El cliente ‘RUIZ’ se repite 2 veces, se suman sus valores para la columna ‘precio’ 490 + 100 = 590

El cliente ‘PEREZ’ se queda igual, con el valor para ‘precio’ de 300.

El cliente ‘GOMEZ’ se repite 2 veces, y se suman sus valores para la columna ‘precio’ 250 + 60 =
310

Nota: Se puede agrupar también por varias columnas.

GROUP BY columna1, columna2


SQL > SQL Avanzado > HAVING

La función HAVING se utiliza para incluir condiciones con alguna función SQL del tipo SUM, MAX, ..

Como la cláusula WHERE no se puede utilizar con funciones SQL del tipo SUM, MAX, entonces
utilizamos en su lugar, HAVING.

Sintaxis HAVING

SELECT columna1, SUM(columna2) FROM table GROUP BY columna1 HAVING SUM(columna2) <
número

Ejemplo de SQL HAVING

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RUIZ 490
5 p5 GOMEZ 60

SELECT cliente, SUM(precio) FROM pedidos GROUP BY cliente HAVING SUM(precio) > 500

El resultado sera:
cliente SUM(precio)
RUIZ 590

Solamente el cliente ‘RUIZ’ suma en sus valores para ‘precio’ 490 + 100 = 590 un valor superior a
500

El cliente ‘GOMEZ’ suma en sus valores para la columna ‘precio’ 250 + 60 = 310, que también es
menor de 500, y por tanto, no aparece en la tabla resultante.

El cliente ‘PEREZ’ obtiene un valor de 300, y tampoco aparece en la tabla, porque es menor de
500.
SQL > SQL Avanzado > UCASE

La función UCASE sirve para convertir a mayúsculas el valor de una columna.

Sintaxis SQL UCASE

SELECT UCASE(columna) FROM tabla

Ejemplo SQL UCASE:

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 Ruiz 100
2 p2 Perez 300
3 p3 Gomez 250

SELECT UCASE(cliente) FROM pedidos

El resultado sera:
cliente
RUIZ
PEREZ
GOMEZ
SQL > SQL Avanzado > LCASE

La función LCASE sirve para convertir a minúsculas el valor de una columna.

Sintaxis SQL LCASE

SELECT LCASE (columna) FROM tabla

Ejemplo SQL LCASE:

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 Ruiz 100
2 p2 Perez 300
3 p3 Gomez 250

SELECT LCASE (cliente) FROM pedidos

El resultado sera:
cliente
ruiz
perez
gomez
SQL > SQL Avanzado > ROUND

La función ROUND se utiliza para redondear un campo numérico en un número de decimales


especificado.

Sintaxis SQL ROUND

SELECT ROUND(columna, decimales) FROM tabla

Ejemplo SQL ROUND

Dada la siguiente tabla ‘pedidos’


id pedido cliente precio
1 p1 Ruiz 100.25
2 p2 Perez 305.57
3 p3 Rodriguez 250.84

Si queremos los precios de los pedidos sin números decimales, ejecutaremos:

SELECT ROUND(precio,0) AS rprecio FROM pedidos

El resultado sera:
rprecio
100
306
251