|
||||||||||||||||||
La sintaxis básica de una consulta de selección es la siguiente: SELECT
Campos En donde campos es la lista de campos que se deseen recuperar y tabla es el origen de los mismos, por ejemplo: SELECT Nombre, Teléfono
Esta sentencia devuelve un conjunto de resultados con el campo nombre y teléfono de la tabla clientes. Devolver Literales En determinadas ocasiones nos puede interesar incluir una columna con un texto fijo en una consulta de selección, por ejemplo, supongamos que tenemos una tabla de empleados y deseamos recuperar las tarifas semanales de los electricistas, podríamos realizar la siguiente consulta: SELECT Ordenar los registros Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas mediante la cláusula ORDER BY Lista de Campos. En donde Lista de campos representa los campos a ordenar. Ejemplo: SELECT CodigoPostal,
Nombre, Telefono Esta consulta devuelve
los campos CodigoPostal, Nombre, Telefono de la tabla Clientes ordenados
por el campo Nombre. SELECT CodigoPostal,
Nombre, Telefono Incluso se puede especificar el orden de los registros: ascendente mediante la cláusula (ASC - se toma este valor por defecto) ó descendente (DESC) SELECT CodigoPostal,
Nombre, Telefono Uso de Indices de las tablas Si deseamos que la sentecia SQL utilice un índice para mostrar los resultados se puede utilizar la palabra reservada INDEX de la siguiente forma: SELECT ... FROM Tabla (INDEX=Indice) ... Normalmente los
motores de las bases de datos deciden que indice se debe utilizar para
la consulta, para ello utilizan criterios de rendimiento y sobre todo
los campos de búsqueda especificados en la cláusula WHERE.
Si se desea forzar a no utilizar ningún índice utilizaremos
la siguiente sintaxis: El predicado se incluye entre la cláusula y el primer nombre del campo a recuperar, los posibles predicados son:
ALL Si no se incluye ninguno de los predicados se asume ALL. El Motor de base de datos selecciona todos los registros que cumplen las condiciones de la instrucción SQL y devuelve todos y cada uno de sus campos. No es conveniente abusar de este predicado ya que obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los campos que contiene, es mucho más rápido indicar el listado de campos deseados. SELECT
ALL SELECT * FROM DISTINCT Omite los registros que contienen datos duplicados en los campos seleccionados. Para que los valores de cada campo listado en la instrucción SELECT se incluyan en la consulta deben ser únicos. Por ejemplo, varios empleados listados en la tabla Empleados pueden tener el mismo apellido. Si dos registros contienen López en el campo Apellido, la siguiente instrucción SQL devuelve un único registro: SELECT
DISTINCT Apellido Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos indicados en la cláusula SELECT posean un contenido diferente. El resultado de una consulta que utiliza DISTINCT no es actualizable y no refleja los cambios subsiguientes realizados por otros usuarios. ALIAS En determinadas circunstancias es necesario asignar un nombre a alguna columna determinada de un conjunto devuelto, otras veces por simple capricho o porque estamos recuperando datos de diferentes tablas y resultan tener un campo con igual nombre. Para resolver todas ellas tenemos la palabra reservada AS que se encarga de asignar el nombre que deseamos a la columna deseada. Tomado como referencia el ejemplo anterior podemos hacer que la columna devuelta por la consulta, en lugar de llamarse apellido (igual que el campo devuelto) se llame Empleado. En este caso procederíamos de la siguiente forma: SELECT
DISTINCT Apellido AS Empleado AS no es una palabra reservada de ANSI, existen diferentes sistemas de asignar los alias en función del motor de bases de datos. En ORACLE para asignar un alias a un campo hay que hacerlo de la siguiente forma: SELECT
Apellido AS "Empleado" También podemos
asignar alias a las tablas dentro de la consulta de selección,
en esta caso hay que tener en cuenta que en todas las referencias que
deseemos hacer a dicha tabla se ha de utilizar el alias en lugar del
nombre. Esta técnica será de gran utilidad más
adelante cuando se estudien las vinculaciones entre tablas. SELECT Apellido
AS Empleado Para asignar alias a las tablas en ORACLE y SQL-SERVER los alias se asignan escribiendo el nombre de la tabla, dejando un espacio en blanco y escribiendo el Alias (se asignan dentro de la cláusula FROM). SELECT Trabajadores.Apellido
(1) AS Empleado (1)Esta nomenclatura [Tabla].[Campo] se debe utilizar cuando se está recuperando un campo cuyo nombre se repite en varias de las tablas que se utilizan en la sentencia. No obstante cuando en la sentencia se emplean varias tablas es aconsejable utilizar esta nomenclatura para evitar el trabajo que supone al motor de datos averiguar en que tabla está cada uno de los campos indicados en la cláusua SELECT.
Los índices son campos elegidos arbitrariamente por el constructor de la base de datos que permiten la búsqueda a partir de dicho campo a una velocidad notablemente superior. Sin embargo, esta ventaja se ve contrarrestada por el hecho de ocupar mucha más memoria (el doble más o menos) y de requerir para su inserción y actualización un tiempo de proceso superior. Evidentemente, no podemos indexar todos los campos de una tabla extensa ya que doblamos el tamaño de la base de datos. Igualmente, tampoco sirve de mucho el indexar todos los campos en una tabla pequeña ya que las selecciones pueden efectuarse rápidamente de todos modos. Un caso en el que los índices pueden resultar muy útiles es cuando realizamos peticiones simultáneas sobre varias tablas. En este caso, el proceso de selección puede acelerarse sensiblemente si indexamos los campos que sirven de nexo entre las dos tablas. Los índices
pueden resultar contraproducentes si los introducimos sobre campos triviales
a partir de los cuales no se realiza ningún tipo de petición
ya que, además del problema de memoria ya mencionado, estamos
ralentizando otras tareas de la base de datos como son la edición,
inserción y borrado. Es por ello que vale la pena pensarselo
dos veces antes de indexar un campo que no sirve de criterio para búsquedas
o que es usado con muy poca frecuencia por razones de mantenimiento.
Creación
de Índices. CREATE [
UNIQUE ] INDEX índice Donde:
CREATE
INDEX CREATE
UNIQUE INDEX Operadores Lógicos Los operadores
lógicos soportados por SQL son: AND, OR y Not. A excepción
de los dos últimos todos poseen la siguiente sintaxis: En donde expresión1 y expresión2 son las condiciones a evaluar, el resultado de la operación varía en función del operador lógico. La tabla adjunta muestra los diferentes posibles resultados: Si a cualquiera
de las anteriores condiciones le anteponemos el operador NOT el resultado
de la operación será el contrario al devuelto sin el operador
NOT. SELECT * FROM Empleados SELECT * FROM Empleados SELECT * FROM Empleados SELECT * FROM Empleados SELECT * FROM SELECT * FROM Pedidos El Operador In Este operador devuelve aquellos
registros cuyo campo indicado coincide con alguno de los en una lista.
Su sintaxis es: SELECT * FROM Pedidos La cláusula WHERE La cláusula WHERE puede usarse para determinar qué registros de las tablas enumeradas en la cláusula FROM aparecerán en los resultados de la instrucción SELECT. Después de escribir esta cláusula se deben especificar las condiciones expuestas en los apartados anteriores. Si no se emplea esta cláusula, la consulta devolverá todas las filas de la tabla. WHERE es opcional, pero cuando aparece debe ir a continuación de FROM. SELECT Apellidos, Salario
SELECT IdProducto, Existencias
SELECT Apellidos, Nombre
SELECT Apellidos, Nombre
SELECT Apellidos,
Salario
AL igual que la cláusula ORDER del comando CREATE INDEX el argumento puede ser ya sea ASC o DESC. ASC es el valor por defecto. También es posible identificar columnas por su número de columna en lugar de su nombre, esto es, por la posición ordinal (de izquierda a derecha) de la columna en cuestión dentro de la tabla resultado. Esta característica hace posible ordenar un resultado en base a una columna que no tiene nombre. Ejemplo: SELECT RUT, NOMBRE |
||||||||||||||||||