0% encontró este documento útil (0 votos)
44 vistas9 páginas

Introduccion SQL Structured Query Langua

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
44 vistas9 páginas

Introduccion SQL Structured Query Langua

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 9

Introducción

SQL (Structured Query Language) es un potente lenguaje informático que cumple las
funciones de DDL y DML en los SGBD relacionales. Su origen está en el lenguaje SEQUEL
(Structured English QUEry Language) desarrollado en IBM en los años 1974-75. Oracle fue el
primer fabricante de sistemas de bases de datos en comercializar una implementación de
SQL en 1979. IBM lanzó el producto SQL/DS en 1981 y dos años más tarde el conocido DB2.

Se trata de un lenguaje fuertemente basado en el inglés, que puede ser utilizado en modo
conversacional mediante un intérprete o bien formando parte de un programa desarrollado
en un lenguaje de programación anfitrión como C, Cobol, etc. (SQL embebido). La
característica relacional más importante de SQL es que permite acceder a los datos sin
necesidad de especificar cómo se ha de realizar dicho acceso permitiendo así la "navegación
automática" por los datos.

El lenguaje ha sido normalizado por varios organismos, si bien los muchos aspectos que
tradicionalmente han quedado indefinidos en tales normalizaciones y qu e por lo tanto en la
práctica quedan como responsabilidad de los fabricantes han ocasionado variaciones de
diversa importancia entre las diferentes implementaciones comerciales. La versión actual
más común del lenguaje es la denominado SQL2 que respecto al estándar anterior presenta
las ventajas de un mayor incremento de la capacidad expresiva, nuevos operadores añadidos
y mejor tratamiento de errores, entre otras. SQL3 incorpora al lenguaje características
propias del paradigma de orientación a objeto.

DDL y DML
Lenguaje de definición de datos (DDL: Data Definition Language):Sencillo lenguaje
artificial para definir y describir los objetos de la base de datos, su estructura, relaciones y
restricciones. En la práctica puede consistir en un subconjunto de instrucciones de otro
lenguaje informático. Aparte suele poseer dos subconjuntos de instrucciones:

 Lenguaje de definición del almacenamiento de los datos (DSDL: Data


Storage Definition Language): permite especificar características físicas de la
base de datos (volúmenes y archivos donde van a ser almacenados los datos, etc).

 Lenguaje de control de datos (DCL: Data Control Language): encargado del


control y seguridad de los datos (privilegios y modos de acceso, etc).

Lenguaje de manipulación de datos (DML: Data Manipulation Language): Lenguaje


artificial de cierta complejidad que permite el manejo y procesamiento del contenido de la
base de datos. En la práctica puede consistir en un subconjunto de instrucciones de otro
lenguaje informático. Las aplicaciones que trabajan sobre la base de datos se programan en
un lenguaje de programación (C, Cobol, ...) insertando en el código fuente sentencias del
DML. Al utilizar un DML se deben especificar los datos que serán afectados por las sentencias
del lenguaje. Un DML puede tener o no procedimientos, según sea necesario especificar
ademáns cónmo deben obtenerse esos datos. Los DML con procedimientos tienen sentencias
de control de flujo como bucles o condicionales. Los DML sin procedimientos son conocidos
también como declarativos.
Comandos del DDL y del DML
Comandos DLL

Comando Descripción

Utilizado para crear nuevas tablas, stored procedures e


CREATE
índices

Empleado para eliminar tablas, stored procedures e


DROP
índices

Utilizado para modificar las tablas agregando campos o


ALTER
cambiando la definición de los campos

Comandos DML

Comando Descripción

Utilizado para consultar registros de la base de datos que


SELECT
satisfagan un criterio determinado.

Utilizado para cargar lotes de datos en la base de datos


INSERT
en una única operación.

Utilizado para modificar los valores de los campos y


DELETE
registros especificados.

Utilizado para eliminar registros de una tabla de una base


UPDATE
de datos.

Consultas de Selección
Las consultas de selección se utilizan para indicar al motor de datos que devuelva
información de las bases de datos, esta información es devuelta en forma de conjunto de
registros que se pueden almacenar en un objeto recordset. Este conjunto de registros es
modificable.

Consultas básicas

La sintaxis básica de una consulta de selección es la siguiente:

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, Teléfono


FROM Clientes

Esta consulta devuelve un recordset con el campo nombre y teléfono de la tabla clientes.
Ordenar los registros

Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las
tablas mediante la claúsula 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 claúsula


(ASC -se toma este valor por defecto) ó descendente (DESC)

SELECT CodigoPostal, Nombre, Telefono


FROM Clientes
ORDER BY CodigoPostal DESC, Nombre ASC

El predicado DISTINCT

Se Incluye entre la claúsula y el primer nombre del campo a recuperar.

El predicado 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


FROM Empleados

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.
Selección Condicional, Operadores de Comparación y
Lógicos
Selección Condicional

La cláusula WHERE se utiliza para determinar qué registros de las tablas enumeradas en
la cláusula FROM aparecerán en los resultados de la instrucción SELECT. Depués de escribir
esta cláusula se deben especificar las condiciones expuestas a continuación. 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.

Operadores de Comparación

Hay nueve operadores de comparación en SQL:

= Igual
<> Distinto
< Menor
> Mayor
<= Menor Igual
<= Mayor Igual
between Utilizado para especificar un intervalo de valores.
like Utilizado en la comparación de un campo contra un patrón
Utilizado para verificar la existencia de un valor dentro de un
in
conjunto de valores

El operador Between

Para indicar que deseamos recuperar los registros según el intervalo de valores de un
campo emplearemos el operador Between cuya sintaxis es:

campo [Not] Between valor1 And valor2

En este caso la consulta devolvería los registros que contengan en "campo" un valor
incluido en el intervalo valor1, valor2 (ambos inclusive). Si anteponemos la condición Not
devolverá aquellos valores no incluidos en el intervalo.

SELECT *
FROM Pedidos
WHERE CodPostal
BETWEEN 28000 and 28999

El Operador Like

Se utiliza para comparar una expresión de cadena con un modelo en una expresión SQL. Su
sintaxis es:

expresión Like modelo

En donde expresión es un patrón contra el que se compara expresión. Se puede utilizar el


operador like para encontrar valores en los campos que coincidan con el modelo
especificado. Por modelo puede especificar un valor completo ("Ana María"), o se pueden
utilizar caracteres comodín para encontrar un rango de valores (Like "An%").

El operador like se puede utilizar en una expresión para comparar un valor de un campo
con una expresión de cadena. Por ejemplo, si introduce Like "C%" en una consulta SQL, la
consulta devuelve todos los valores de campo que comiencen por la letra C. En una consulta
con parámetros, puede hacer que el usuario escriba el modelo que se va a utilizar.

El Operador in

Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los
valores que se encuentran una lista explicitada. Su sintaxis es:

expresión [Not] In(valor1, valor2, . . .)


SELECT *
FROM Pedidos
WHERE Provincia
("Santa Fe", "Cordoba", "Buenos
IN
Aires")

Operadores Lógicos

Hay tres operadores lógicos en SQL:

Es el "y" lógico. Evalua dos condiciones y devuelve un valor de


AND
verdad sólo si ambas son ciertas.
Es el "o" lógico. Evalúa dos condiciones y devuelve un valor de
OR
verdar si alguna de las dos es cierta.
NOT Negación lógica. Devuelve el valor contrario de la expresión.

Agrupamiento de Registros
GROUP BY

Combina los registros con valores idénticos, en la lista de campos especificados, en un


único registro. Para cada registro se crea un valor sumario si se incluye una función SQL
agregada, como por ejemploSUM o COUNT, en la instrucción SELECT. Su sintaxis es:

SELECT campos FROM tabla WHERE criterio GROUP BY campos del grupo

GROUP BY es opcional. Los valores de resumen se omiten si no existe una función SQL
agregada en la instrucción SELECT. Los valores Null en los campos GROUP BY se agrupan y
no se omiten. No obstante, los valores Null no se evalúan en ninguna de las funciones SQL
agregadas.

Se utiliza la cláusula WHERE para excluir aquellas filas que no desea agrupar, y la
cláusula HAVING para filtrar los registros una vez agrupados.

Todos los campos de la lista de campos de SELECT deben o bien incluirse en la cláusula
GROUP BY o como argumentos de una función SQL agregada.

SELECT Id_Familia, Sum(Stock) FROM Productos GROUP BY Id_Familia


Una vez que GROUP BY ha combinado los registros, HAVING muestra cualquier registro
agrupado por la cláusula GROUP BY que satisfaga las condiciones de la cláusula HAVING.

HAVING es similar a WHERE, determina qué registros se seleccionan. Una vez que los
registros se han agrupado utilizando GROUP BY, HAVING determina cuales de ellos se van a
mostrar.

SELECT Carrera, Count(*)


FROM Alumnos
GROUP BY Carrera
HAVING Count(*)>100
Esta consulta lista las carreras que tengan más de 100 alumnos

Función de Agregación: AVG

Calcula la media aritmética de un conjunto de valores contenidos en un campo especificado


de una consulta. Su sintaxis es la siguiente

Avg(expr)

En donde expr representa el campo que contiene los datos numéricos para los que se desea
calcular la media o una expresión que realiza un cálculo utilizando los datos de dicho campo.
La media calculada porAvg es la media aritmética (la suma de los valores dividido por el
número de valores). La función Avg no incluye ningún campo Null en el cálculo.

SELECT Avg(Gastos) as Promedio


FROM Pedidos
WHERE Gastos > 100
Esta consulta lista el promedio de gastos calculado sobre los pedidos en los que se gastó
más de 100.

Función de Agregación: COUNT

Calcula el número de registros devueltos por una consulta. Su sintaxis es la siguiente:

Count(expr)

En donde expr contiene el nombre del campo que desea contar. Los operandos de expr
pueden incluir el nombre de un campo de una tabla, una constante.

Aunque expr puede realizar un cálculo sobre un campo, Count simplemente cuenta el
número de registros sin tener en cuenta qué valores se almacenan en los registros. La
función Count no cuenta los registros que tienen campos null. Si utiliza un asterisco, Count
calcula el número total de registros, incluyendo aquellos que contienen campos null.
Count(*) es considerablemente más rápida que Count(Campo).

SELECT Cont(*) as Total


FROM Pedidos
Esta consulta lista la cantidad de Pedidos.

Funciones de Agregación: MAX y MIN


Devuelven el mínimo o el máximo de un conjunto de valores contenidos en un campo
especifico de una consulta. Su sintaxis es:

Min(expr)
Max(expr)

En donde expr es el campo sobre el que se desea realizar el cálculo. Expr pueden incluir el
nombre de un campo de una tabla, una constante.

SELECT Min(Gastos) as ElMinimo


FROM Pedidos
WHERE Pais = "España"

SELECT Max(Gastos) as ElMaximo


FROM Pedidos
WHERE Pais = "España"

Función de Agregación: SUM

Devuelve la suma del conjunto de valores contenido en un campo especifico de una


consulta. Su sintaxis es:

Sum(expr)

En donde expr respresenta el nombre del campo que contiene los datos que desean
sumarse o una expresión que realiza un cálculo utilizando los datos de dichos campos.

SELECT Sum(PrecioUnidad * Cantidad) as


Total
FROM DetallePedido

Operadores Lógicos IN y EXISTS


IN

Determina si un valor dado coincide con algún valor de una subconsulta o lista. Su sintaxix
es:

WHERE {Campo | Expresión} [ NOT ] IN ( Sub-Consulta | Constantes [,


Constantes, ... n] )

El resultado del operador lógico IN es un valor booleano, es decir Verdadero o Falso, para
cada valor de Campo que se encuentre ( o no ) en la sub-consulta.

EXISTS

Especifica una subconsulta para probar la existencia de filas. Su sintaxis es la siguiente:


WHERE [NOT] EXISTS ( Sub - Consulta )

La subconsulta en realidad no produce ningún dato, al igual que IN devuelve el


valor Verdadero o Falso.

El ejemplo siguiente compara dos consultas que son semánticamente equivalentes. La


primera consulta utiliza EXISTS y la segunda consulta utiliza IN. Ambas consultas devuelven
la misma información.

SELECT
Nombre_Editor
DISTINCT
FROM Editores E
WHERE
(
EXISTS
SELECT *
FROM Titulos T
T.IdEditor =
WHERE
E.IdEditor
AND T.Tipo="Negocios"
)

SELECT DISTINCT Nombre_Editor


FROM Editores
WHERE IdEditor
(
IN
SELEC
IdEditor
T
FROM Titulos

WHERE T.Tipo="Negocio
s"
)

Una forma de implementar ol Operador de División


A continuación, se explicará cómo realizar la operación división. Esta operación incluye,
en términos del cálculo de predicados, un cuantificador universal del que SOL no dispone, lo
que complica bastante su representación. Por otra parte SOL sí dispone, como se vio, de una
construcción equivalente al cuantificador existencia: el predicado EXISTS. Recordemos que
exists verifica si el subselect que le sigue es vacío o tiene alguna fila como resultado. En el
primer caso, como se vió, el predicado resulta falso y en el segundo verdadero.

Ejemplo

Supongamos que tenemos tres tablas, correspondientes a los esquemas Estudiante (Nro,
Nombre, ... ), Materia (Código, Nombre, Año, ... ) y Cursa (Nro, Código) y deseamos saber
los nombres de los alumnos que cursan todas las materias de 4º año.
En Álgebra Relacional, la respuesta se obtendría evaluando la expresión: Nombre(Nombre
(Estudiante |X| (Cursa / (σAño="4º"M(Materia)))
Veamos cómo se expresa ahora en SOL:

select nombre
from Estudiante e
where not exists (
select *
from Materia m
where m.Año = "4º" and not exists (
select *
from Cursa c
where c.Nro = e.Nro and c.Codigo = m.Codigo
)
)

Ejercicios Resueltos
select * from proveedores p where
not exists(
select * from proveedores p1 where
exists(
select * from provisto_por p2 where
not exists(
select * from compuesto_por p3 where p3.cod_art=p2.cod_art
and p1.cod_prov=p2.Cod_prov
and p.cod_prov=p1.cod_prov)))

También podría gustarte