Descargar

Programación con SQL (página 2)

Enviado por daniedvargas


Partes: 1, 2, 3

El resultado de una consulta es por supuesto otra relación. Si se omite la cláusula WHERE, el predicado P es verdadero. La lista A1, A2,…, An puede sustituirse por un asterisco (*) para seleccionar todos los atributos de todas las relaciones que aparecen en la cláusula FROM, aunque no es conveniente elegir esta ultima opción salvo que sea necesario pues desperdiciamos mucho tiempo en obtenerlo

Alias

Es posible renombrar los atributos y las relaciones, a veces por conveniencia y otras veces por ser necesario, para esto usamos la clausula AS como en el siguiente ejemplo.

Ejemplo 2.2

SELECT P.nombre AS [PRIMER NOMBRE]

FROM persona P

WHERE apellido = "MARQUESI"

ANSWER

PRIMER NOMBRE

1

MARTIN

2

PABLO

En este ejemplo cabe destacar un par de cosas. Cuando nos referimos a un atributo como es el caso de nombre, podemos referirnos a este usando la relación ( o el alias en este ejemplo ) a la que pertenece el atributo seguido de un punto seguido del atributo , a veces esta notación será necesaria para eliminar ambigüedades. Los corchetes los usamos cuando usamos espacios en blancos o el caratér (–) en el nombre de atributo o alias.

Usar alias en los atributos nos permite cambiar el nombre de los atributos de la respuesta a la consulta.

Cuando asociamos un alias con una relación decimos que creamos una variable de tupla. Estas variables de tuplas se definen en la cláusula FROM después del nombre de la relación.

En las consultas que contienen subconsultas, se aplica una regla de ámbito a las variables de tupla. En una subconsulta esta permitido usar solo variables de tupla definidas en la misma subconsulta o en cualquier consulta que tenga la subconsulta.

3. Predicados y conectores

Los conectores lógicos en SQL son:

  • AND

  • OR

  • NOT

La lógica de estos conectores es igual que en cualquier lenguaje de programación y sirven para unir predicados.

Las operaciones aritméticas en SQL son:

  • + ( Suma )

  • – ( Resta )

  • * ( Multiplicación )

  • / ( División )

También incluye el operador de comparación BETWEEN, que se utiliza para valores comprendidos

Ejemplo 3.1 : Encontrar todos los nombres y dni de las personas cuyos dni sea mayor que 26 millones y menor a 28 millones

SELECT nombre, dni

FROM persona

WHERE dni BETWEEN 26000000 and 28000000

ANSWER

NOMBRE

DNI

1

MARTIN

26125988

2

ESTEFANIA

27128064

3

MELISA

27456224

4

BETANIA

27128765

Análogamente podemos usar el operador de comparación NOT BETWEEN.

SQL también incluye un operador de selección para comparaciones de cadena de caracteres. Los modelos se describen usando los caracteres especiales:

  • El carácter ( % ) es igual a cualquier subcadena

  • El operador ( _ ) es igual a cualquier carácter

Estos modelos se expresan usando el operador de comparación LIKE. Un error muy frecuente es tratar de utilizar los modelos mediante el operador de igualdad ( = ) lo cual es un error de sintaxis.

Ejemplo 3.2 : encontrar los nombres que comiencen con la letra p o el nombre tenga exactamente 6 caracteres de la relación persona

SELECT nombre

FROM persona

WHERE (nombre LIKE "P%") OR (nombre LIKE "_ _ _ _ _ _")

ANSWER

NOMBRE

1

MARTIN

2

PABLO

3

MELISA

4

SANDRA

Análogamente podemos buscar desigualdades usando el operador de comparación NOT LIKE.

4. Tuplas duplicadas

Los lenguajes de consulta formales se basan en la noción matemática de relación como un conjunto. Por ello nunca aparecen tuplas duplicadas en las relaciones. En la practica la eliminación de duplicados lleva bastante tiempo. Por lo tanto SQL permite duplicados en las relaciones. Así pues en las consultas se listaran todas las tuplas inclusive las repetidas.

En aquellos casos en los que queremos forzar la eliminación de duplicados insertamos la palabra clave DISTINCT después de la cláusula SELECT

Ejemplo 4.1: Listar todos los apellidos no repetidos de la relación persona

SELECT DISTINCT apellido

FROM persona

ASWER

APELLIDO

1

MARQUESI

2

SANCHEZ

3

GUISSINI

4

ALEGRATO

5

BRITTE

6

ARDUL

7

MICHELLI

8

MUSACHEGUI

9

SERRAT

Si observamos la tabla original de la relación persona veremos que el apellido marquesi aparecía dos veces, pero debido al uso de DISTINCT en la consulta la relación respuesta solo lista un solo marquesi.

Operaciones de conjunto.

SQL incluye las operaciones de conjuntos UNION, INTERSECT, MINUS, que operan sobre relaciones y corresponden a las operaciones del álgebra unión, intersección y resta de conjuntos respectivamente. Para realizar esta operación de conjuntos debemos tener sumo cuidado que las relaciones tengan las mismas estructuras.

Incorporemos ahora una nueva relación, llamada jugadores que representa las personas que juegan al fútbol, sus atributos serán DNI, puesto y nro_camiseta. Supongamos que esta nueva tabla esta conformada de la siguiente manera

JUGADORES

DNI

PUESTO

NRO_CAMISETA

1

26125988

DELANTERO

9

2

25485699

MEDIO

5

3

28978845

ARQUERO

1

4

29789854

DEFENSOR

3

Ejemplo 4.2 : Obtener todos los nombres de la relación persona cuyos apellidos sean Marquesi o Serrat

SELECT nombre

FROM PERSONA

WHERE apellido = "MARQUESI"

UNION

SELECT nombre

FROM PERSONA

WHERE apellido = "SERRAT"

ANSWER

PRIMER NOMBRE

1

MARTIN

2

PABLO

3

JUAN

Ejemplo 4.3 : Obtener todos los DNI de los que juegan al fútbol y, además, están en la lista de la relación persona

SELECT dni

FROM persona

INTERSECT

SELECT dni

FROM jugadores

ANSWER

DNI

1

26125988

2

25485699

3

28978845

Por omisión, la operación de union elimina las tuplas duplicadas. Para retener duplicados se debe escribir UNION ALL en lugar de UNION.

Pertenencia a un conjunto

El conector IN prueba si se es miembro de un conjunto, donde el conjunto es una colección de valores producidos en lo general por una cláusula SELECT. Análogamente el conector NOT IN prueba la no pertenencia al conjunto

Ejemplo 4.4 : Encontrar los nombres de las personas que juegan al fútbol y, además, se encuentran en la relación persona

SELECT nombre, apellido

FROM persona

WHERE dni IN

(SELECT dni

FROM jugadores)

ANSWER

NOMBRE

APELLIDO

1

MARTIN

MARQUESI

2

PABLO

MARQUESI

3

JUAN

SERRAT

Es posible probar la pertenencia de una relación arbitraria SQL usa la notación de elementos para representar una tupla de elementos de n que contiene los valores v1,v2,…,vn.

Comparación de conjuntos

En conjuntos la frase > se representa en SQL por ( >SOME ), también podría entenderse esto como >, su sintaxis es igual que la del conector IN. SQL también permite las comparaciones ( >SOME ),( =SOME ) ( >=SOME ), ( ALL ), que corresponde a la frase >. Al igual que el operador SOME, puede escribirse ( >ALL ),( =ALL ) ( >=ALL ), ( 10000

ANSWER

CLUB

JUG_MAS_CARO

1

LANUS

12000

Si en la misma consulta aparece una cláusula WHERE y una cláusula HAVING, primero se aplica el predicado de la cláusula WHERE, las tupla que satisfacen el predicado WHERE son colocadas en grupos por la cláusula GROUP BY. Después se aplica la cláusula HAVING a cada grupo.

7. Modificación de la base de datos

Eliminación

Una solicitud de eliminación se expresa casi de igual forma que una consulta. Podemos suprimir solamente tuplas completas, no podemos suprimir valores solo de atributos.

DELETE FROM r

WHERE P

Donde P presenta un predicado y r representa una relación. Las tuplas t en r para las cuales P(t) es verdadero, son eliminadas de r.

Si omitimos la cláusula WHERE se eliminan todas las tuplas de la relación r ( un buen sistema debería buscar confirmación del usuario antes de ejecutar una acción tan devastadora )

Ejemplo 7.1 : Eliminar todas las tuplas de la relación persona en donde apellido sea igual a "BRITTE"

DELETE FROM persona

WHERE apellido = "BRITTE"

deleted

NOMBRE

APELLIDO

DNI

1

SANDRA

BRITTE

25483669

Inserción

Para insertar datos en una relación, especificamos una tupla que se va a insertar o escribimos una consulta cuyo resultado es un conjunto de tuplas que se van a insertar. La inserción de tuplas la realizamos mediante las sentencias

INSERT INTO r1

VALUES (v1,v2,…,v)

Ejemplo 7.2 : Insertar una tupla con los mismos valores de la tupla eliminada en el ejemplo anterior en la relación persona.

INSERT INTO persona

VALUES ("SANDRA","BRITTE",25483669)

inserted

NOMBRE

APELLIDO

DNI

1

SANDRA

BRITTE

25483669

En este ejemplo, los valores se especifican en el orden en que se listan los atributos correspondientes en el esquema de relación. Para poder ingresar los datos en un orden diferente podríamos haber escrito

INSERT INTO persona(DNI, NOMBRE, APELLIDO)

VALUES (25483669,"SANDRA","BRITTE")

Actualizaciones

En ciertas ocasiones podemos desear cambiar los valores de una tupla sin cambiar todos los valores en dicha tupla. Para este propósito usamos la sentencia

UPDATE r1

SET A1 = V1, A2 = V2,…,An = Vn

WHERE P

Donde r1 es la relación Ai el atributo a modificar Vi el valor que se le asignara a Ai y P es el predicado.

Ejemplo 7.3 : En la relación jugadores actualizar la posición de los jugadores que posean la camiseta numero 5 y asignarles la camiseta numero 7.

UPDATE jugadores

SET nro_camiseta = 7

WHERE nro_camiseta = 5

updated

DNI

PUESTO

NRO_CAMISETA

1

25485699

MEDIO

5

8. Valores nulos

Es posible que para las tuplas insertadas se den valores únicamente a algunos atributos del esquema. El resto de los atributos son asignados a valores nulos representados por NULL. Para esto colocamos la palabra reservada NULL como valor del atributo.

Ejemplo 7.4 : Insertar en la relación jugadores un jugador con dni = 26356312, puesto = defensor, y al cual aun no le han asignado un nro_camiseta.

INSERT INTO jugadores

VALUES(26356312,"DEFENSOR", NULL)

inserted

DNI

PUESTO

NRO_CAMISETA

1

26356312

DEFENSOR

9. Definición de datos

Creación

Una relación en SQL se define usando la orden

CREATE TABLE r(A1 D1, A2 D3,…,An Dn)

Donde r es el nombre de la relación, cada Ai es el nombre de un atributo del esquema de la relación r y Di es el tipo de dato de Ai. Una relación recién creada esta vacía. La orden INSERT puede usarse para cargar la relación

Ejemplo 9.1 : crear la relación lesionado con los atributos nombre, apellido ambos de tipo char y tiempo_inhabilit de tipo entero

CREATE TABLE "lesionado.db" (

NOMBRE CHAR(20),

APELLIDO CHAR(20),

TIEMPO_INHABILT INTEGER)

lesionado

NOMBRE

APELLIDO

TIEMPO_INHABILT

Eliminación

Para eliminar una relación usamos la orden DROP TABLE r, esta orden elimina toda la información sobre la relación sacada de la base de datos, esta orden es mas fuerte que DELET FROM r ya que esta ultima elimina todas las tuplas pero no destruye la relación, mientras que la primera si.

Ejemplo 9.2 : eliminar la relación persona

DROP TABLE persona

Actualizacion

La orden ALTER TABLE se usa para añadir atributos a una relación existente. A todas las tuplas en la relación se les asigna NULL como valor de atributo. La sintaxis de ALTER TABLE es la siguiente:

ALTER TABLE r1 ADD A1 D1

Ejemplo 9.3 : agregar los atributos de tipo char nombre y apellido a la relación jugadores

ALTER TABLE jugadores ADD NOMBRE CHAR(20)

ALTER TABLE jugadores ADD APELLIDO CHAR(20)

Autor:

Vargas Daniel Eduardo

Partes: 1, 2, 3
 Página anterior Volver al principio del trabajoPágina siguiente