Indice
1. Introducción
2. Estructura básica
3. Predicados y conectores
4. Tuplas duplicadas
5. Pruebas para relaciones vacías
6. Ordenación de la presentación de tuplas
7. Modificación de la base de datos
8. Valores nulos
9. Definición de datos
SQL (Standar Query Lenguaje) es un lenguaje estandarizado de base de datos, el cual nos permite realizar tablas y obtener datos de ella de manera muy sencilla. Para exponer mas claramente los conceptos se realizaran ejemplo sobre relaciones que se crearan aquí para entender mejor como funciona SQL.
Cuando aquí nos refiramos a relación estamos hablando mas concretamente a la tabla de datos en si, y sus atributos serán los campos de la tabla. Como ejemplo la siguiente relación ( tabla ) la llamaremos persona y sus atributos ( campos ) son nombre, apellido Y DNI
|
PERSONA |
NOMBRE |
APELLIDO |
DNI |
|
1 |
MARTIN |
MARQUESI |
26125988 |
|
2 |
PABLO |
MARQUESI |
25485699 |
|
3 |
ROBERTO |
SANCHEZ |
20566401 |
|
4 |
ESTEFANIA |
GUISSINI |
27128064 |
|
5 |
RUBEN |
ALEGRATO |
24238975 |
|
6 |
SANDRA |
BRITTE |
25483669 |
|
7 |
MELISA |
ARDUL |
27456224 |
|
8 |
SOLEDAD |
MICHELLI |
29889656 |
|
9 |
BETANIA |
MUSACHEGUI |
27128765 |
|
10 |
JUAN |
SERRAT |
28978845 |
SQL es un lenguaje que consta de varias partes
2. Estructura básica
La estructura básica de una expresión para consulta SQL consta de tres cláusulas:
La cláusula SELECT se usa para listar los atributos que se desean en el resultado de una consulta.
La cláusula FROM lista las relaciones que se van a examinar en la evaluación de la expresión
La cláusula WHERE costa de un predicado que implica atributos de las relaciones que aparecen en la cláusula FROM.
Una consulta básica en SQL tiene la forma:
SELECT A1,A2,...,An
FROM r1,r2,...,rn
WHERE P
Donde Ai = atributo ( Campo de la tabla )
ri = relación ( Tabla )
P = predicado ( condición )
Ejemplo 2.1 : Seleccionar todos los nombres de las personas que tengan el apellido MARQUESI de la tabla persona
SELECT nombre
FROM persona
WHERE apellido = " MARQUESI"
|
ANSWER |
NOMBRE |
|
1 |
MARTIN |
|
2 |
PABLO |
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 <P.nombre>, 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.
Los conectores lógicos en SQL son:
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:
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:
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.
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 |
| s
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 <v1,v2,...,vn> para representar una tupla de elementos de n que contiene los valores v1,v2,...,vn.
Comparación de conjuntos
En conjuntos la frase << mayor que algún >> se representa en SQL por ( >SOME ), también podría entenderse esto como << mayor que el menor de >>, su sintaxis es igual que la del conector IN. SQL también permite las comparaciones ( >SOME ),( =SOME ) ( >=SOME ), ( <=SOME ) y ( <>SOME ).
También existe la construcción ( >ALL ), que corresponde a la frase << mayor que todos >>. Al igual que el operador SOME, puede escribirse ( >ALL ),( =ALL ) ( >=ALL ), ( <=ALL ) y ( <>ALL ).
En ocasiones podríamos querer comparar conjuntos para determinar si un conjunto contiene los miembros de algún otro
conjunto. Tales comparaciones se hacen usando las construcciones CONTAINS y NOT CONTAINS
Trabajos relacionados
Ver mas trabajos de Programacion |
|
Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.