SQL 3

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 68

SQL

Introducción

 El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado,


utilizado por los diferentes motores de bases de datos para realizar determinadas operaciones
sobre los datos o sobre la estructura de los mismos. Pero como sucede con cualquier sistema
de normalización hay excepciones para casi todo; de hecho, cada motor de bases de datos
tiene sus peculiaridades y lo hace diferente de otro motor, por lo tanto, el lenguaje SQL
normalizado (ANSI) no nos servirá para resolver todos los problemas, aunque si se puede
asegurar que cualquier sentencia escrita en ANSI será interpretable por cualquier motor de
datos.
Breve Historia

 La historia de SQL (que se pronuncia deletreando en inglés las letras que lo


componen, es decir "ese-cu-ele" y no "siquel" como se oye a menudo) empieza en
1974 con la definición, por parte de Donald Chamberlin y de otras personas que
trabajaban en los laboratorios de investigación de IBM, de un lenguaje para la
especificación de las características de las bases de datos que adoptaban el
modelo relacional. Este lenguaje se llamaba SEQUEL (Structured English Query
Language) y se implementó en un prototipo llamado SEQUEL-XRM entre 1974
y 1975.
Las experimentaciones con ese prototipo condujeron, entre 1976 y 1977, a una
revisión del lenguaje (SEQUEL/2), que a partir de ese momento cambió de nombre
por motivos legales, convirtiéndose en SQL. El prototipo (System R), basado en este
lenguaje, se adoptó y utilizó internamente en IBM y lo adoptaron algunos de sus
clientes elegidos.
Gracias al éxito de este sistema, que no estaba todavía comercializado, también otras
compañías empezaron a desarrollar sus productos relacionales basados en SQL. A
partir de 1981, IBM comenzó a entregar sus productos relacionales y en 1983
empezó a vender DB2. En el curso de los años ochenta, numerosas compañías (por
ejemplo Oracle y Sybase, sólo por citar algunos) comercializaron productos basados
en SQL, que se convierte en el estándar industrial de hecho por lo que respecta a las
bases de datos relacionales.
 En 1986, el ANSI adoptó SQL (sustancialmente adoptó el dialecto SQL de IBM)
como estándar para los lenguajes relacionales y en 1987 se transfomó en estándar
ISO. Esta versión del estándar va con el nombre de SQL/86. En los años
siguientes, éste ha sufrido diversas revisiones que han conducido primero a la
versión SQL/89 y, posteriormente, a la actual SQL/92.
 El hecho de tener un estándar definido por un lenguaje para bases de datos
relacionales abre potencialmente el camino a la intercomunicabilidad entre todos
los productos que se basan en él. Desde el punto de vista práctico, por desgracia
las cosas fueron de otro modo. Efectivamente, en general cada productor adopta e
implementa en la propia base de datos sólo el corazón del lenguaje SQL (el así
llamado Entry level o al máximo el Intermediate level), extendiéndolo de manera
individual según la propia visión que cada cual tenga del mundo de las bases de
datos.
 Actualmente, está en marcha un proceso de revisión del lenguaje por parte de los
comités ANSI e ISO, que debería terminar en la definición de lo que en este
momento se conoce como SQL3. Las características principales de esta nueva
encarnación de SQL deberían ser su transformación en un lenguaje stand-alone
(mientras ahora se usa como lenguaje hospedado en otros lenguajes) y la
introducción de nuevos tipos de datos más complejos que permitan, por ejemplo,
el tratamiento de datos multimediales.
Diferentes tipos campos empleados en las
bases de datos
 Como sabemos una base de datos esta compuesta de tablas donde almacenamos registros
catalogados en función de distintos campos (características).Un aspecto previo a considerar
es la naturaleza de los valores que introducimos en esos campos. Dado que una base de
datos trabaja con todo tipo de informaciones, es importante especificarle qué tipo de valor
le estamos introduciendo de manera a, por un lado, facilitar la búsqueda posteriormente y
por otro, optimizar los recursos de memoria.
 Cada base de datos introduce tipos de valores de campo que no necesariamente están
presentes en otras. Sin embargo, existe un conjunto de tipos que están representados en la
totalidad de estas bases. Estos tipos comunes son los siguientes:
Tipos de dato en una base de datos MySQL
 Vamos a repasar los diferentes tipos de dato que podemos almacenar en una base de datos
MySQL.
 Antes de comenzar a trabajar y crear bases de datos es necesario saber que tipo de datos y
estructura pueden contener.

Tipos de dato en una base de datos MySQL


Al crear una tabla la elección correcta de un formato de dato para cada columna de la tabla hará
que nuestra BBDD tenga un rendimiento óptimo a medio largo plazo.
 Repasando la documentación oficial podríamos dividir en 3 grandes grupos estos datos:
 Numéricos
 Fecha
 String
Componentes del SQL
El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones de
agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y
manipular las bases de datos.

 Comandos

Existen dos tipos de comandos SQL:


 DLL que permiten crear y definir nuevas bases de datos, campos e índices.
 DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de
datos.
Lenguaje de Manipulación de Datos
(DML, Data Manipulation Language):

Por medio de este lenguaje los usuarios pueden realizar consultas o manipular datos
que se encuentran ya organizados en una forma estructurada.

En la actualidad el DML más utilizado es el SQL (Structured Query Language),


usado para manipular datos de base de datos relacional. Entre otros se encuentran:
IMS/DL1, CODASYL.
Los DML se pueden clasificar en dos grupos:

Lenguajes de consulta procedimentales: El usuario da instrucciones


para que se desarrollen procedimientos u operaciones sobre la base de
datos.

Lenguajes de consulta no procedimentales: El usuario realiza una


descripción de un procedimiento específico.
COMANDOS DML
LENGUAJE DE DEFINICIÓN DE DATOS
(DDL, Data Definition Language):
Permite definir las estructuras que almacenarán los datos y los procedimientos o
funciones para realizar las consultas.

Al principio fue usado el referente a Codasyl, donde se establecía el esquema de


la base de datos usando descripciones de los registros y campos del modelo.
Posteriormente se utilizó como parte del SQL y en la actualidad se hace referencia
a cualquier lenguaje formal usado para describir datos o estructuras.
COMANDOS DDL

DDL
Cláusulas

Las cláusulas son condiciones de modificación utilizadas para definir los


datos que desea seleccionar o manipular.
Operadores de Comparación
Funciones de Agregado
 Las funciones de agregado se usan dentro de una cláusula SELECT en grupos de
registros para devolver un único valor que se aplica a un grupo de registros.
Orden de ejecución de los comandos

 Dada una sentencia SQL de selección que incluye todas las posibles cláusulas, el orden de
ejecución de las mismas es el siguiente:

 1. Cláusula FROM
 2. Cláusula WHERE
 3. Cláusula GROUP BY
 4. Cláusula HAVING
 5. Cláusula SELECT
 6. Cláusula ORDER BY
Crear base de datos
SENTENCIA CREATE TABLE

La sentencia CREATE TABLE es utilizada para crear una tabla en una base de datos.
Las tablas se organizan en filas y columnas; y cada tabla debe tener un nombre.
 SINTAXIS PARA LA SENTENCIA CREATE TABLE
SCRIPT
Comandos basicos

 show databases: Nos mostrará los nombres de las bases de datos


 show tables; Para ver las tablas existentes en una base de datos

 Para ver la estructura de una tabla usamos el comando "describe" junto al nombre de la tabla:

 Ejemplo: describe usuarios;

 Para eliminar una tabla usamos "drop table". Tipeamos:

 Ejemplo: drop table usuarios;


ALTER TABLE: Modificar la estructura de tablas y
columnas en MySQL

ALTER TABLE de MySQL, su meta es la de modificar la estructura de las tablas y sus


columnas de una base de datos.

ALTER TABLE cambia la estructura de una tabla. Por ejemplo, agrega o


elimina columnas, crea o elimina índices, modificar el tipo de columnas existentes o
renombrar columnas o la propia tabla.
Ejemplos prácticos de ALTER TABLE en MySQL
MySQL INSERT: Insertar datos en tablas de una BBDD

 Vamos a repasar la sentencia de MySQL INSERT, su finalidad es la de insertar datos en


las tablas de una base de datos.
MySQL DELETE: Eliminar filas de tablas en una base datos

 Repaso a la sentencia de MySQL DELETE que sirve para eliminar filas o registros de
tablas de una base de datos.
Sentencia SQL UPDATE

 La sentencia UPDATE se utiliza para actualizar registros ya existentes de una tabla.


 Nos permite elegir los campos a actualizar y los datos con que actualizarlos.
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 puede
ser modificable.

 Consultas básicas
La sintaxis básica de una consulta de selección es la siguiente:
SELECT Campos FROM Tabla
Ejemplos de cláusula WHERE MySQL
¿Qué es la Cláusula Group by?

 La cláusula GROUP BY es un comando SQL que se usa para agrupar filas que tienen los
mismos valores .
 La cláusula GROUP BY se utiliza en la instrucción SELECT. Opcionalmente se usa junto
con funciones agregadas para producir informes resumidos de la base de datos.
 Eso es lo que hace, resumiendo los datos de la base de datos.
 Las consultas que contienen la cláusula GROUP BY se denominan consultas agrupadas y
solo devuelven una sola fila para cada elemento agrupado.
GROUP BY Sintaxis

 Ahora que sabemos cuál es la cláusula GROUP By, veamos la sintaxis para un grupo
básico por consulta.
Ejemplo

Queremos saber la cantidad de visitantes de cada ciudad, podemos tipear la siguiente


sentencia:

 select count(*) from visitantes where ciudad='Cordoba';

y repetirla con cada valor de "ciudad":

 select count(*) from visitantes where ciudad='Alta Gracia';


 select count(*) from visitantes where ciudad='Villa Dolores';
Pero hay otra manera, utilizando la cláusula "group by":

select ciudad, count(*) from visitantes group by ciudad;

La instrucción anterior solicita que muestre el nombre de la ciudad y cuente la cantidad


agrupando los registros por el campo "ciudad". Como resultado aparecen los nombres de las
ciudades y la cantidad de registros para cada valor del campo.
Operadores Lógicos (and - or - not)

 Son los siguientes:

- and, significa "y",


- or, significa "y/o",
- xor, significa "o",
- not, significa "no", invierte el resultado
- (), paréntesis

Los operadores lógicos se usan para combinar condiciones.


EJEMPLOS

 Queremos recuperar todos los registros cuyo autor sea igual a "Borges" y cuyo precio no
supere los 20 pesos, para ello necesitamos 2 condiciones:

select * from libros where (autor='Borges') and (precio<=20);

 Los registros recuperados en una sentencia que une 2 condiciones con el operador "and",
cumplen con las 2 condiciones.
 Queremos ver los libros cuyo autor sea "Borges" y/o cuya editorial sea "Planeta":

select * from libros where autor='Borges' or editorial='Planeta';

 En la sentencia anterior usamos el operador "or", indicamos que recupere los libros en los cuales
el valor del campo "autor" sea "Borges" y/o el valor del campo "editorial" sea "Planeta", es decir,
seleccionará los registros que cumplan con la primera condición, con la segunda condición o con
ambas condiciones.

 Los registros recuperados con una sentencia que une 2 condiciones con el operador "or",
cumplen 1 de las condiciones o ambas.
 Queremos ver los libros cuyo autor sea "Borges" o cuya editorial sea "Planeta":

select * from libros where (autor='Borges') xor


(editorial='Planeta');

 En la sentencia anterior usamos el operador "xor", indicamos que recupere los libros en los
cuales el valor del campo "autor" sea "Borges" o el valor del campo "editorial" sea "Planeta",
es decir, seleccionará los registros que cumplan con la primera condición o con la
segunda condición pero no los que cumplan con ambas condiciones. Los registros
recuperados con una sentencia que une 2 condiciones con el operador "xor", cumplen 1 de las
condiciones, no ambas.
 Queremos recuperar los libros que no cumplan la condición dada, por ejemplo, aquellos
cuya editorial NO sea "Planeta":

select * from libros where not (editorial='Planeta');

 El operador "not" invierte el resultado de la condición a la cual antecede.


 Los registros recuperados en una sentencia en la cual aparece el operador "not", no
cumplen con la condición a la cual afecta el "NO".
 Los paréntesis se usan para encerrar condiciones, para que se evalúen como una sola
expresión.
 Cuando explicitamos varias condiciones con diferentes operadores lógicos (combinamos
"and", "or") permite establecer el orden de prioridad de la evaluación; además permite
diferenciar las expresiones más claramente.

Por ejemplo, las siguientes expresiones devuelven un resultado diferente:

select * from libros where (autor='Borges') or (editorial='Paidos'


and precio<20);

select*from libros where (autor='Borges' or editorial='Paidos')


and (precio<20);
 Si bien los paréntesis no son obligatorios en todos los casos, se recomienda utilizarlos para
evitar confusiones.

 El orden de prioridad de los operadores lógicos es el siguiente: "not" se aplica antes que
"and" y "and" antes que "or", si no se especifica un orden de evaluación mediante el uso
de paréntesis.

 El orden en el que se evalúan los operadores con igual nivel de precedencia es indefinido,
por ello se recomienda usar los paréntesis.
Varias tablas (join)

 Hasta ahora hemos trabajado con una sola tabla, pero en general, se trabaja con varias
tablas.
 Para evitar la repetición de datos y ocupar menos espacio, se separa la información en
varias tablas. Cada tabla tendrá parte de la información total que queremos registrar.
 Por ejemplo, los datos de nuestra tabla "libros" podrían separarse en 2 tablas, una "libros"
y otra "editoriales" que guardará la información de las editoriales. En nuestra tabla "libros"
haremos referencia a la editorial colocando un código que la identifique. Veamos:
De este modo, evitamos almacenar tantas veces los nombres de las editoriales y su dirección
en la tabla "libros" y guardamos el nombre y su dirección en la tabla "editoriales"; para indicar
la editorial de cada libro agregamos un campo referente al código de la editorial en la tabla
"libros" y en "editoriales".

Al recuperar los datos de los libros:

 select * from libros;


vemos que en el campo "codigoeditorial" aparece el código, pero no sabemos el nombre de la
editorial. Para obtener los datos de cada libro, incluyendo el nombre de la editorial y su
dirección, necesitamos consultar ambas tablas, traer información de las dos
Cuando obtenemos información de más de una tabla decimos que hacemos un "join" (unión).
Veamos un ejemplo:

 select * from libros join editoriales on libros.codigoeditorial=editoriales.codigo;

Analicemos la consulta anterior.

Indicamos el nombre de la tabla luego del "from" ("libros"), unimos esa tabla con "join" y el
nombre de la otra tabla ("editoriales"), luego especificamos la condición para enlazarlas con "on",
es decir, el campo por el cual se combinarán. "on" hace coincidir registros de las dos tablas
basándose en el valor de algún campo, en este ejemplo, los códigos de las editoriales de ambas
tablas, el campo "codigoeditorial" de "libros" y el campo "codigo" de "editoriales" son los que
enlazarán ambas tablas.
Cuando se combina (join, unión) información de varias tablas, es necesario indicar qué
registro de una tabla se combinará con qué registro de la otra tabla.

Si no especificamos por qué campo relacionamos ambas tablas, por ejemplo:

 select * from libros join editoriales;


el resultado es el producto cartesiano de ambas tablas (cada registro de la primera tabla se
combina con cada registro de la segunda tabla), un "join" sin condición "on" genera un
resultado en el que aparecen todas las combinaciones de los registros de ambas tablas. La
información no sirve en este ejemplo.

Note que en la consulta

 select * from libros join editoriales on libros.codigoeditorial=editoriales.codigo;


al nombrar el campo usamos el nombre de la tabla también. Cuando las tablas referenciadas
tienen campos con igual nombre, esto es necesario para evitar confusiones y ambiguedades al
momento de referenciar un campo. En este ejemplo, si no especificamos "editoriales.codigo" y
solamente tipeamos "codigo", MySQL no sabrá si nos referimos al campo "codigo" de "libros"
o de "editoriales".

Si omitimos la referencia a las tablas al nombrar el campo "codigo" (nombre de campo que
contienen ambas tablas):

 select * from libros join editoriales on codigoeditorial=codigo;


aparece un mensaje de error indicando que "codigo" es ambiguo.
Entonces, si en las tablas, los campos tienen el mismo nombre, debemos especificar a cuál
tabla pertenece el campo al hacer referencia a él, para ello se antepone el nombre de la tabla al
nombre del campo, separado por un punto (.).
Entonces, se nombra la primer tabla, se coloca "join" junto al nombre de la segunda tabla de la
cual obtendremos información y se asocian los registros de ambas tablas usando un "on" que
haga coincidir los valores de un campo en común en ambas tablas, que será el enlace.
Para simplificar la sentencia podemos usar un alias para cada tabla:

 select * from libros as l join editoriales as e on l.codigoeditorial=e.codigo;

Cada tabla tiene un alias y se referencian los campos usando el alias correspondiente. En este
ejemplo, el uso de alias es para fines de simplificación, pero en algunas consultas es
absolutamente necesario.
En la consulta anterior vemos que el código de la editorial aparece 2 veces, desde la tabla
"libros" y "editoriales". Podemos solicitar que nos muestre algunos campos:

 select titulo,autor,nombre from libros as l join editoriales as e on


l.codigoeditorial=e.codigo;
Al presentar los campos, en este caso, no es necesario aclarar a qué tabla pertenecen porque
los campos solicitados no se repiten en ambas tablas, pero si solicitáramos el código del libro,
debemos especificar de qué tabla porque el campo "codigo" se repite en ambas tablas ("libros"
y "editoriales"):

 select l.codigo,titulo,autor,nombre from libros as l join editoriales as e on


l.codigoeditorial=e.codigo;

Si obviamos la referencia a la tabla, la sentencia no se ejecuta y aparece un mensaje indicando


que el campo "codigo" es ambiguo.

También podría gustarte