Sei sulla pagina 1di 9

BasedeDatosen MySQL Ing.

HenryJurez Vargas
Pgina | 1

CONSULTA SELECT
La consulta SELECT es quiz la sentencia SQL ms importante. Esta es la sentencia que nosotros usamos
para seleccionas las filas de una o ms tablas de la base de datos.
El comando SELECT recupera los registros de una tabla. Por ejemplo si quisiramos recuperar los registros de la tabla
alumnos pero solo nos interesa recuperar los campos apellidos y nombres, escribiramos la siguiente consulta SQL.
SELECT apellidos, nombres FROM alumnos;
Luego del comando SELECT se indican los nombres de los campos que se quiere recuperar, y luego del FROM el
nombre de la tabla de donde se sacarn los registros.
SINTAXIS:
SELECT columns FROM tables
[WHERE conditions]
[GROUP BY group
[HAVING group_conditions]]
[ORDER BY sort_columns]
[LIMIT limits];
Seleccionando todos los campos
Un ejemplo simple.
SELECT * FROM alumnos;
Si despus del SELECT escribimos un asterisco (
* ) la consulta nos recuperar todos los campos de
la tabla, como se muestra en la figura de la
derecha.
Seleccionando algunos campos
En ocasiones no nos interesar recuperar todos los campos, si fuese ese
el caso entonces debemos de escribir los nombres de los campos de la
tabla luego de la instruccin SELECT.
SELECT apellidos FROM alumnos;
La consulta mostrar solo los apellidos, ya que luego del SELECT se est
especificando dicho campo a recuperarse de la tabla alumnos.
Especificando Tablas Absolutas
Existe una notacin especial que es posible escribir en una consulta SQL, esta notacin especifica el campo
indicndole de que tabla esperamos recuperar los datos.
SELECT alumnos.nombres FROM alumnos;
BasedeDatosen MySQL Ing. HenryJurez Vargas
Pgina | 2

Dicha consulta indica que el campo nombres pertenece a la tabla alumnos, este tipo de notacin es
importante conocer para que al trabajar con ms de una tabla no tengamos problemas con ambigedades en
los nombres de los campos de ms de una tabla.
Alias
SQL tiene la habilidad de renombrar las columnas o las expresiones en una sentencia SELECT, y el nuevo
nombre ser el que es mostrado en el resultado de la consulta.
SELECT apellidos AS Aps FROM alumnos;
Lo que hace dicha consulta es cambiar el nombre de apellidos por el
de Aps, este nuevo nombre solo se mostrar en el resultado, tal como
se muestra en la figura de la izquierda.
Los alias se pueden crear utilizando la palabra clave AS, aunque este
es opcional, por lo que si se omite obtenemos el mismo resultado.
La siguiente consulta sin el AS nos da el mismo resultado anterior.
SELECT apellidos Aps FROM alumnos;
Los alias tambin son tiles para cambiarle el nombre de la tabla, esto ser muy til al realizar consultas con
ms de una tabla.
Por ejemplo si quisiramos renombrar la tabla alumnos por el nombre a, y utilizar la forma absoluta para
mostrar el campo apellidos, escribiramos:
SELECT a.apellidos FROM alumnos AS a;
sino
SELECT a.apellidos FROM alumnos a;
La clausula WHERE
La clausula Where permite recuperar determinados registros de acuerdo a un criterio de bsqueda. El uso es
muy similar al visto en las sentencias UPDATE y DELETE.
SELECT id, pellidos, nombres FROM alumnos WHERE id = 34;
La consulta nos recupera solo al alumno que
tiene el id igual a 34.

Si deseamos recuperar los alumnos que tienen los apellidos iniciando en MA, es posible utilizar el operador
LIKE.
SELECT apellidos, nombres FROM alumnos WHERE apellidos LIKE 'MA%';
BasedeDatosen MySQL Ing. HenryJurez Vargas
Pgina | 3





Observe que se utiliza el comodn % (porcentaje) con lo que se indica que los apellidos empiecen con MA y
luego puede tener cualquier caracter.
Si deseamos recuperar los estudiantes con cdigos comprendidos entre el 10
y el 13, podemos utilizar el operador BETWEEN.
SELECT id, nombres FROM alumnos WHERE id
BETWEEN 10 AND 13;
Con el operador "IN" averiguamos si el valor del campo est incluido en una lista, con "NOT" antecediendo la condicin,
invertimos el resultado.
select * from libros where autor in ('Borges','Paenza');
Lo que realize la consulta anterior, es devolver los libros donde el autor sea Borges o Paenza.
La Clausula ORDER BY
Esta clausula permite ORDENAR el resultado de un SELECT, la ordenacin
puede ser ascendente ASC o descendente DESC.
SELECT apellidos FROM alumnos ORDER BY apellidos
ASC;
La consulta anterior mostrar los apellidos de la tabla alumnos ordenados por
sus apellidos en forma ascendente (ASC), tal como se muestra en la imagen de
la derecha.
Ojo que la consulta anterior solo ordena por apellidos, si hubiese hermanos
deberamos ordenar no solo por los apellidos sino tambin por los nombres,
esto se logra as:
SELECT * FROM alumnos ORDER BY apellidos, nombres ASC;
Hasta este punto, fjese que la consulta SELECT es muy verstil, es posible mezclar diferentes clausulas
pero siempre siguiendo el orden mostrada en la sintaxis.
Una consulta que muestra parte de lo aprendido hasta el momento sera la siguiente.
SELECT a.id AS Codigo, a.apellidos Apellidos, a.nombres Nombres
FROM alumnos a WHERE a.id IN (3,5,7,34) ORDER BY apellidos DESC,
nombres DESC;
BasedeDatosen MySQL Ing. HenryJurez Vargas
Pgina | 4


SELECT CONMULTIPLESTABLAS
Las consultas vistas hasta este momento solo recuperan los datos de una sola tabla. Pero en la vida real las
base de datos se componen de tablas relacionadas, normalizadas en las cuales los datos son guardados en
multiples tablas para evitar la repeticin de datos y ocupar menos espacio en el disco. Cuando la informacin
es seleccionada desde multiples tablas, estas relaciones son llamadas JOINs
Tablas Relacionadas
Para trabajar con consultas entre dos o ms tablas debemos de
conocer bien las tablas, saber en que campos se encuentran
relacionados ya que dicha forma se nos har ms sencillo el
trabajo.
El diseo de la izquierda muestra dos tablas relacionadas de uno a
muchos ( 1 a N ), la tabla ocupacion tiene los siguientes datos:

Mientras que la tabla personas esta conformado por los siguientes
registros:

Observe que el campo por el cual ambas tablas se relacionan es el de idocupacion, en la tabla personas se
tiene almacenado idocupacion de acuerdo a los datos almacenados en la tabla ocupacin, de tal modo que la
persona de nombre Gerardo se puede deducir que es un Docente ya que en su idocupacion tiene el valor
1. Y la persona Edgar se puede observar que es un Estudiante ya que su idocupacion tiene el valor de 2, y
en la tabla ocupacin estn las ocupaciones de acuerdo a los IDs utilizados en la otra tabla, es notoria la
relacin entre ambas tablas.
Obteniendo Datos Relacionados de Dos Tablas
Para realizar una consulta que muestre datos relacionados de dos tablas debemos utilizar la palabra INNER
JOIN en la consulta SELECT.

BasedeDatosen MySQL Ing. HenryJurezVargas
Ejemplo:
SELECT * FROM ocupacion INNER JOIN personas ON
ocupacion.idocupacion = personas.idocupacion;
Observe luego del FROM se escribe el nombre de una de las tablas luego se escribe el INNER JOIN ms el
nombre de la segunda tabla que est relacionada a la primera tabla.
Enseguida debemos escribir la palabra ON seguido de los dos campos (de cada tabla) que se encuentran
relacionados utilizando el operador igual (=).
En ocasiones para no estar escribiendo el nombre de la tabla a la que pertenecen los campos es aconsejable
utilizar los alias, quedando por ejemplo as:
SELECT * FROM ocupacion o INNER JOIN personas p ON o.idocupacion =
p.idocupacion;
Dicha consulta nos recuperar la asociacin de las dos tablas, observe que ahora se puede saber si Edgar
es un Alumno y si Elber es un Docente, ya que los datos que estaban relacionados aparecen correctamente
al costado de los registros.




Alternativa al INNER JOIN
Existe una forma mucho ms cmoda de realizar consultas con ms de una tabla, y es de la siguiente
manera:
SELECT * FROM ocupacion, personas WHERE ocupacion.idocupacion =
personas.idocupacion;
Observe que despus del FROM es posible agregar ms de una tabla separados por comas (,) y es
necesario indicar en el WHERE los campos que estn relacionados entre ambas tablas, siempre utilizando el
operador igual (=), esto indica que por ejemplo en la tabla ocupacin en su campo idocupacion
(ocupacin.idocupacion) esta relacionado o sea son los mismos valores (por eso se pone el operador
igual.) que los almacenados en la tabla personas en su campo idocupacion (personas.idocupacion).
El resultado de dicha consulta es el mismo al realizado utilizando el INNER JOIN:
Datos recuperados de la tabla
ocupacion
Datos recuperados de la tabla personas. Observe que los
registros se asocian entre ambas tablas.
BasedeDatosen MySQL Ing. HenryJurez Vargas
Pgina | 6


Recuperando Algunos Campos
Al igual que se vio anteriormente, para seleccionar ciertos campos es necesario indicarlo despus del
SELECT, pero es aconsejable utilizar la forma absoluta de campo y mejor si se utiliza alias de tablas, por
ejemplo:
SELECT p.nombres AS Nombres, p.apellidos AS Apellidos, o.nombre AS
Ocupacion FROM ocupacion o, personas p WHERE o.idocupacion =
p.idocupacion;

Es posible realizar consultas utilizando todo lo aprendido hasta el momento en forma conjunta, ya que todas
estas consultas corresponden a la instruccin SELECT.
Por ejemplo:
SELECT c.nombre, a.nombre, a.semestre, a.horas FROM asignaturas a,
carreras c WHERE a.idcarrera = c.idcarrera AND c.nombre LIKE 'C%'
AND a.horas IN (4, 8) ORDER BY a.nombre ASC, a.horas ASC;
La consulta recupera el nombre de la carrera profesional, el nombre de la asignaturas, el semestre y la
cantidad de horas, de las tablas asignaturas y carreras, pero solo de las carreras que empiecen sus nombre
con la letra C y que las horas de las asignaturas sean de 4 o 8 horas, y los ordenas en forma ascendente de
acuerdo al nombre de la asignaturas y la cantidad de horas.

Seleccin sin Repeticiones
Con la clusula "DISTINCT" especifica que los registros con ciertos datos duplicados sean obviadas en el
resultado.

BasedeDatosen MySQL Ing. HenryJurez Vargas
Pgina | 7

Por ejemplo si escribimos la consulta:
SELECT nombre FROM asignaturas;
Nos mostrar los nombres de las asignaturas de dicha tabla, observe que se repite la asignatura
Informtica.

Si no queremos dicho resultado, y nuestro propsito es obtener los nombres pero sin duplicados solo es
necesario poner la clausula DISTINCT despus del SELECT.
SELECT DISTINCT nombre FROM asignaturas;
El resultado ser sin duplicados:

EJERCICIOS:
Escriba la consulta para mostrar el campo nombre de la asignatura y la carrera profesional en la que se
dicta la asignatura.









BasedeDatosen MySQL Ing. HenryJurez Vargas
Pgina | 8

Escriba una consulta para mostrar las asignaturas impartidas por el docente Elber Fedver.

Escriba una consulta para mostrar la relacin de estudiantes del VI semestre de la carrera de
computacin e informtica.

SUBCONSULTAS
Una subconsulta es una consulta dentro de una consulta esto es, una consulta en la cual nosotros
reutilizamos el resultado en otra consulta. Las subconsultas facilitan el trabajo, haciendo ms gil la seleccin
de registros.
Ejemplo 1:
SELECT producto, cantidad, pre_unitario FROM detalle_factura WHERE
cantidad = (select min(cantidad) from detalle_factura );
En el ejemplo se observa que una consulta va dentro de otra, la subconsulta lo que obtiene es la cantidad
minima y la consulta principal evalua en el where para mostrar los productos que tienen la minima cantidad
comprada.

BasedeDatosen MySQL Ing. HenryJurez Vargas
Pgina | 9

Ejemplo 2:
Realizar una consulta que muestre los nombres y apellidos de los docentes que imparten asignaturas en el 6
semestre.
SELECT nombres, apellidos FROM personas WHERE idpersona IN (SELECT
iddocente FROM asignaturas WHERE semestre = 6);


Insercin con Subconsultas
Gracias a las subconsultas es posible insertar registros en una tabla con la salida devuelta por una subconsulta; para
ello escribimos la consulta y le anteponemos "insert into", el nombre de la tabla en la cual ingresaremos los registros y
los campos que se cargarn.
Si los campos presentados entre parntesis son menos (o ms) que las columnas devueltas por la consulta, aparece un
mensaje de error y la sentencia no se ejecuta.
Ejemplo:
Si queremos guardar solo los nombres de los productos de la tabla detalle_factura a una nueva tabla de nombre bienes.
Creamos la Tabla bienes
CREATE TABLE bienes (
id INT(10) NOT NULL AUTO_INCREMENT,
nombre VARCHAR(50) NULL DEFAULT '0',
PRIMARY KEY (id)
);
Enseguida para almacenar los nombres de productos de la tabla detalle_factura a la tabla bienes, sin duplicados
escribimos la consulta:
INSERT INTO bienes (nombre) SELECT DISTINCT producto FROM
detalle_factura;
La consulta llenar la nueva tabla con los nombres de los productos, pero sin duplicados:

Potrebbero piacerti anche