Professional Documents
Culture Documents
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
DML:
Lenguaje
de
manipulacin
de
datos
;data
manipulation language.
Las sentencias DML permiten generar consultas para ordenar, filtrar, insertar, actualizar,
agrupar y extraer datos de la base de datos.
Consulta de datos.
El proceso ms importante que podemos llevar a cabo en una base de datos es la
consulta de los datos. De nada servira una base de datos si no
pudiramos consultarla. Es adems la operacin que efectuaremos con mayor
frecuencia.
Anlisis y Desarrollo de
Sistemas de Informacin
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
Veamos por partes que quiere decir cada una de las partes que conforman la
sentencia.
SENTENCIA
SELECT
ALL
DISTINCT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
SIGNIFICADO
Palabra clave que indica que la sentencia de SQL que
queremos ejecutar es de seleccin.
Indica que queremos seleccionar todos los valores.
Es el valor por defecto y no suele especificarse casi
nunca.
Indica que queremos seleccionar slo los valores
distintos.
Indica la tabla (o tablas) desde la que queremos
recuperar los datos. En el caso de que exista ms de
una tabla se denomina a la consulta "consulta
combinada" o "join". En las consultas combinadas es
necesario aplicar una condicin de combinacin a
travs de una clusula WHERE.
Especifica una condicin que debe cumplirse para que
los datos sean devueltos por la consulta. Admite los
operadores lgicos AND y OR.
Especifica la agrupacin que se da a los datos. Se usa
siempre en combinacin con funciones agregadas.
Especifica una condicin que debe cumplirse para los
datos Especfica una condicin que debe cumplirse
para que los datos sean devueltos por la consulta. Su
funcionamiento es similar al de WHERE pero
aplicado al conjunto de resultados devueltos por la
consulta. Debe aplicarse siempre junto a GROUP BY
y la condicin debe estar referida a los campos
contenidos en ella.
Presenta el resultado ordenado por las columnas
indicadas. El orden puede expresarse con ASC (orden
ascendente) y DESC (orden descendente). El valor
predeterminado es ASC.
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
Centro Colombo-Alemn
ADS- I36
Fecha: 17 de febrero de 2016
Consultas bsicas
SELECT
Campos
FROM
Tabla
En donde campos es la lista de campos que se deseen recuperar y tabla es el origen de los
mismos, por ejemplo:
SELECT
Nombre, Telfono
FROM
Clientes
Devolver Literales
En determinadas ocasiones nos puede interesar incluir una columna con un texto fijo en una
consulta de seleccin, por ejemplo, supongamos que tenemos una tabla de empleados y
deseamos recuperar las tarifas semanales de los electricistas, podramos realizar la siguiente
consulta:
SELECT
Empleados.Nombre, 'Tarifa semanal: ', Empleados.TarifaHora * 40
FROM
Empleados
WHERE
Empleados.Cargo = 'Electricista'
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
Centro Colombo-Alemn
ADS- I36
Fecha: 17 de febrero de 2016
Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las
tablas mediante la clusula ORDER BY Lista de Campos. En donde Lista de campos
representa los campos a ordenar. Ejemplo:
SELECT
CodigoPostal, Nombre, Telefono
FROM
Clientes
ORDER BY
Nombre
Esta consulta devuelve los campos CodigoPostal, Nombre, Telefono de la tabla Clientes
ordenados por el campo Nombre.
Se pueden ordenar los registros por mas de un campo, como por ejemplo:
SELECT
CodigoPostal, Nombre, Telefono
FROM
Clientes
ORDER BY
CodigoPostal, Nombre
Incluso se puede especificar el orden de los registros: ascendente mediante la clusula (ASC
- se toma este valor por defecto) descendente (DESC)
SELECT
CodigoPostal, Nombre, Telefono
FROM
Clientes
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
Centro Colombo-Alemn
ADS- I36
Fecha: 17 de febrero de 2016
ORDER BY
CodigoPostal DESC , Nombre ASC
Si deseamos que la sentencia SQL utilice un ndice para mostrar los resultados se puede
utilizar la palabra reservada INDEX de la siguiente forma:
Normalmente los motores de las bases de datos deciden que ndice se debe utilizar para la
consulta, para ello utilizan criterios de rendimiento y sobre todo los campos de bsqueda
especificados en la clusula WHERE. Si se desea forzar a no utilizar ningn ndice
utilizaremos la siguiente sintaxis:
El predicado se incluye entre la clusula y el primer nombre del campo a recuperar, los
posibles predicados son:
Predicado
ALL
Descripcin
Devuelve todos los campos de la tabla
Devuelve un determinado nmero de registros de la
TOP
tabla
Omite los registros cuyos campos seleccionados
DISTINCT
coincidan totalmente
Omite los registros duplicados basndose en la totalidad
DISTINCTOW
del registro y no slo en los campos seleccionados.
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 instruccin SQL y devuelve
todos y cada uno de sus campos. No es conveniente abusar de este predicado ya que
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
Centro Colombo-Alemn
ADS- I36
Fecha: 17 de febrero de 2016
obligamos al motor de la base de datos a analizar la estructura de la tabla para averiguar los
campos que contiene, es mucho ms rpido indicar el listado de campos deseados.
SELECT ALL
FROM
Empleados
SELECT *
FROM
Empleados
TOP
Devuelve un cierto nmero de registros que entran entre al principio o al final de un rango
especificado por una clusula ORDER BY. Supongamos que queremos recuperar los nombres
de los 25 primeros estudiantes del curso 1994:
SELECT TOP 25
Nombre, Apellido
FROM
Estudiantes
ORDER BY
Nota DESC
El valor que va a continuacin de TOP debe ser un entero sin signo. TOP no afecta a la
posible actualizacin de la consulta.
DISTINCT
Omite los registros que contienen datos duplicados en los campos seleccionados. Para que
los valores de cada campo listado en la instruccin 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 Lpez en el campo Apellido, la siguiente
instruccin SQL devuelve un nico registro:
SELECT DISTINCT
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
Centro Colombo-Alemn
ADS- I36
Fecha: 17 de febrero de 2016
Apellido
FROM
Empleados
Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos campos
indicados en la clusula 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.
DISTINCTROW
Este predicado no es compatible con ANSI. Que yo sepa a da de hoy slo funciona con
ACCESS.
Devuelve los registros diferentes de una tabla; a diferencia del predicado anterior que slo se
fijaba en el contenido de los campos seleccionados, ste lo hace en el contenido del registro
completo independientemente de los campos indicados en la clusula SELECT.
SELECT DISTINCTROW
Apellido
FROM Empleados
Si la tabla empleados contiene dos registros: Antonio Lpez y Marta Lpez el ejemplo del
predicado DISTINCT devuelve un nico registro con el valor Lpez en el campo Apellido ya
que busca no duplicados en dicho campo. Este ltimo ejemplo devuelve dos registros con el
valor Lpez en el apellido ya que se buscan no duplicados en el registro completo.
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 procederamos de la siguiente forma:
SELECT DISTINCTROW
Apellido AS Empleado
FROM Empleados
AS no es una palabra reservada de ANSI, existen diferentes sistemas de asignar los alias en
funcin 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"
FROM Empleados
Tambin podemos asignar alias a las tablas dentro de la consulta de seleccin, en esta caso
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
Centro Colombo-Alemn
ADS- I36
Fecha: 17 de febrero de 2016
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 tcnica ser de gran utilidad ms adelante
cuando se estudien las vinculaciones entre tablas. Por ejemplo:
SELECT
Apellido AS Empleado
FROM
Empleados AS Trabajadores
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 clusula FROM).
SELECT
Trabajadores.Apellido (1) AS Empleado
FROM
Empleados Trabajadores
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
San Diego
DISTINCT
Estructura:
SELECT DISTINCT "nombre_columna"
FROM "nombre_tabla"
250 07-Jan-1999
SELECT
Estructura:
700 08-Jan-1999
Ingresamos,
SELECT *
FROM Store_Information
WHERE store_name IN ('Los Angeles',
'San Diego')
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "condicin"
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "condicin simple"
{[AND|OR] "condicin simple"
Resultado:
store_name Sales
Date
IN
Estructura:
SELECT nombre_columna
FROM nombre_tabla
WHERE nombre_columna IN
(valor1, valor2, )
San Diego
250 07-Jan-1999
BETWEEN
Estructura:
SELECT nombre_columna
FROM nombre_tabla
WHERE nombre_columna BETWEEN
valor1 AND valor2
Ejemplo:
Ejemplo:
Tabla Store_Information
store_name
Sales
Date
Los Angeles
1500 05-Jan-1999
Tabla Store_Information
store_name
Sales
Date
Los Angeles
1500 05-Jan-1999
San Diego
250 07-Jan-1999
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
700 08-Jan-1999
Ingresamos,
SELECT *
FROM Store_Information
WHERE Date BETWEEN '06-Jan-1999'
AND '10-Jan-1999'
Tenga en cuenta que la fecha puede
almacenarse en diferentes formatos
segn las diferentes bases de datos.
Esta gua de referencia simplemente
elige uno de los formatos.
Resultado:
store_name
Sales Date
San Diego
250 07-Jan-1999
700 08-Jan-1999
LIKE
Estructura:
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" LIKE
{patrn}
{patrn} generalmente consiste en
comodines. Aqu hay algunos
ejemplos:
Ejemplo:
Digamos que tenemos la siguiente
tabla:
Tabla Store_Information
store_name
Sales
Date
LOS ANGELES
1500 05-Jan-1999
SAN DIEGO
250 07-Jan-1999
700 08-Jan-1999
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
SELECT *
FROM Store_Information
WHERE store_name LIKE '%AN%'
Resultado:
Tabla Store_Information
store_name
Sales
Date
store_name
Sales
LOS ANGELES
1500 05-Jan-1999
Los Angeles
1500 05-Jan-1999
SAN DIEGO
250 07-Jan-1999
San Diego
250 07-Jan-1999
Date
700 08-Jan-1999
ORDER BY
Estructura:
Ingresamos,
SELECT "nombre_columna"
FROM "nombre_tabla"
[WHERE "condicin"]
ORDER BY "nombre_columna" [ASC, DESC]
Resultado:
store_name
Sales
Date
Los Angeles
1500 05-Jan-1999
Boston
700 08-Jan-1999
250 07-Jan-1999
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
2750
Otra funcin aritmtica es COUNT. Esto nos
permite COUNT el nmero de filas en una tabla
determinada. La sintaxis es,
SELECT COUNT("nombre_columna")
FROM "nombre_columna"
Por ejemplo, si deseamos encontrar el nmero
de entradas de negocios en nuestra tabla,
Tabla Store_Information
store_name Sales
Date
250 07-Jan-1999
San Diego
Date
250 07-Jan-1999
700 08-Jan-1999
ingresamos,
SELECT COUNT(store_name)
FROM Store_Information
Resultado:
700 08-Jan-1999
4
ingresaramos
SELECT SUM(Sales) FROM Store_Information
Resultado:
SUM(Sales)
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
Count(DISTINCT store_name)
3
SELECT "nombre1_columna",
SUM("nombre2_columna")
FROM "nombre_tabla"
GROUP BY "nombre1-columna"
SELECT "alias_tabla"."nombre1_columna"
"alias_columna"
FROM "nombre_tabla" "alias_tabla"
Brevemente, ambos tipos de alias se colocan
directamente despus del elemento por el cual
generan el alias, separados por un espacio en
blanco. Nuevamente utilizamos nuestra tabla,
Store_Information,
Date
Date
Los Angeles 1500 05-Jan-1999
250 07-Jan-1999
250 07-Jan-1999
Los Angeles 300 08-Jan-1999
700 08-Jan-1999
700 08-Jan-1999
store_name SUM(Sales)
Store
Total Sales
250
Boston>
700
San Diego
250
Boston
700
ALIAS
Estructura:
CREAR TABLA
Estructura:
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
store_name
char(50)
Sales
float
Date
datetime
Date
250 07-Jan-1999
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
Boston
700 08-Jan-1999
Date
San Diego
Tabla Store_Information
store_name Sales
Boston
Date
250 07-Jan-1999
700 08-Jan-1999
250 07-Jan-1999
700 08-Jan-1999
250 07-Jan-1999
Boston
700 08-Jan-1999
BORRAR O ELIMINAR
UNION, INTERSECT,MINUS
A veces podemos desear deshacernos de los
registros de una tabla. Para ello, utilizamos el
comando DELETE FROM. La sintaxis para esto
es,
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
store_name Sales
Date
250 07-Jan-1999
11-Jan-1999
12-Jan-1999
INTERSECT
Digamos que tenemos las siguientes dos tablas:
Tabla Store_Information
Boston
700 08-Jan-1999
store_name Sales
Date
Tabla Internet_Sales
Los Angeles 1500 05-Jan-1999
Date
Sales
San Diego
250 07-Jan-1999
07-Jan-1999 250
Los Angeles 300 08-Jan-1999
10-Jan-1999 535
Boston
700 08-Jan-1999
11-Jan-1999 320
Tabla Internet_Sales
12-Jan-1999 750
Date
y deseamos saber de todas las fechas donde
hay una operacin de venta. Para hacerlo,
utilizamos la siguiente instruccin SQL:
SELECT Date FROM Store_Information
UNION
SELECT Date FROM Internet_Sales
Sales
07-Jan-1999 250
10-Jan-1999 535
11-Jan-1999 320
Resultado:
12-Jan-1999 750
Date
05-Jan-1999
07-Jan-1999
08-Jan-1999
10-Jan-1999
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
Date
12-Jan-1999 750
07-Jan-1999
La sintaxis es la siguiente:
Date
[Instruccin SQL 1]
MINUS
[Instruccin SQL 2]
05-Jan-1999
08-Jan-1999
Date
250 07-Jan-1999
700 08-Jan-1999
Tabla Internet_Sales
Date
Sales
07-Jan-1999 250
10-Jan-1999 535
11-Jan-1999 320
Where
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "condition"
And/Or
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "condicin simple"
{[AND|OR] "condicin simple"}+
Anlisis y Desarrollo de
Sistemas de Informacin
SQL
ADS- I36
Fecha: 17 de febrero de 2016
Centro Colombo-Alemn
In
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" IN ('valor1',
'valor2', ...)
Between
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" BETWEEN 'valor1'
AND 'valor2'
Like
SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" LIKE {patrn}
Order By
SELECT "nombre_columna"
FROM "nombre_tabla"
[WHERE "condicin"]
ORDER BY "nombre_columna" [ASC, DESC]
Count
SELECT COUNT("nombre_columna")
FROM "nombre_tabla"
Group By
SELECT "nombre_columna 1",
SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1"
Having
SELECT "nombre_columna 1",
SUM("nombre_columna 2")
FROM "nombre_tabla"
GROUP BY "nombre_columna 1"
HAVING (condicin de funcin aritmtica)
Create Table
CREATE TABLE "nombre_tabla"
("columna 1"
"tipo_de_datos_para_columna_1",
"columna 2"
"tipo_de_datos_para_columna_2",
... )
Drop Table
DROP TABLE "nombre_tabla"
Truncate Table
TRUNCATE TABLE "nombre_tabla"
Insert Into
INSERT INTO "nombre_tabla" ("colonne 1",
"colonne 2", ...)
valorS ("valor 1", "valor 2", ...)
Update
UPDATE "nombre_tabla"
SET "colonne 1" = [nuevo valor]
WHERE {condition}
Delete From
DELETE FROM "nombre_tabla"
WHERE {condicin}