Download comandos de sql, operadores, clausulas y consultas

Document related concepts

SQL wikipedia , lookup

Lenguaje de manipulación de datos wikipedia , lookup

Cursor (base de datos) wikipedia , lookup

Trigger (base de datos) wikipedia , lookup

Clave foránea wikipedia , lookup

Transcript

COMANDOS DE SQL, OPERADORES,
CLAUSULAS Y CONSULTAS SIMPLES DE
SELECCIÓN
Tipos de datos
SQL admite una variada gama de tipos de datos para el tratamiento
de la información contenida en las tablas, los tipos de datos pueden
ser numéricos (con o sin decimales), alfanuméricos, de fecha o
booleanos(si o no).Según el gestor de base de datos que estemos
utilizando los tipos de datos varían, pero se reducen básicamente a
los expuestos anteriormente, aunque en la actualidad casi todos los
gestores de bases de datos soportan un nuevo tipo, el BLOB
(Binary Large Object), que es un tipo de datos especial destinado a
almacenar archivos, imágenes.
Dependiendo de cada gestor de bases de datos el nombre que se
da a cada uno de estos tipos puede ariar. Básicamente tenemos
los siguientes tipos de datos.
Más detalladamente tenemos:
Operadores
Los operadores se pueden definir como combinaciones de
caracteres que se utilizan tanto para realizar asignaciones como
comparaciones entre datos.
Los operadores se dividen en aritméticos, relacionales, lógicos, y
concatenación.
Atributos:
Palabras Clave
Las palabras clave son identificadoras con un significado especial
para SQL, por lo que no pueden ser utilizadas para otro propósito
distinto al que han sido pensadas. SQL dispone de muy pocas
órdenes, pero de múltiples palabras lave, lo que le convierten en un
lenguaje sencillo pero tremendamente potente para llevar a cabo su
función.
Funciones Agregadas
Las funciones agregadas proporcionan a SQL utilidades de cálculo
sobre los datos de las tablas.
Estas funciones se incorporan en las consultas SELECT y retornan
un único valor al operar sobre un grupo de registros.
Las funciones agregadas son.
· Predicados
Los predicados son condiciones que se indican en cláusula WHERE
de una consulta SQL.
La siguiente tabla ilustra los predicados de SQL.
· Consulta de datos
El proceso más importante que podemos llevar a cabo en una base
de datos es la consulta de los datos. De nada serviría una base de
datos si no pudiéramos consultarla. Es además la operación que
efectuaremos con mayor frecuencia.
Para consultar la información SQL pone a nuestra disposición la
sentencia SELECT.
· La sentencia SELECT
La sentencia SELECT nos permite consultar los datos almacenados
en una tabla de la base de datos.
El formato de la sentencia select es:
Veamos por partes que quiere decir cada una de las partes que
conforman la sentencia.
Para formular una consulta a la tabla tCoches y recuperar los
campos matricula, marca, modelo, color, numero_kilometros,
num_plazas debemos ejecutar la siguiente consulta. Los datos
serán devueltos ordenados por marca y por modelo en orden
ascendente, de menor a mayor.
La palabra clave FROM indica que los datos serán recuperados de
la tabla tCoches. Podríamos haber especificado más de una tabla,
pero esto se verá en el apartado de consultas combinadas.
También podríamos haber simplicado la consulta a través del uso
del comodín de campos, el asterisco "*".
El uso del asterisco indica que queremos que la consulta devuelva todos los campos que
existen en la tabla.
La cláusula WHERE
La cláusula WHERE es la instrucción que nos permite filtrar el
resultado de una sentencia SELECT. Habitualmente no deseamos
obtener toda la información existente en la tabla, sino que
queremos obtener sólo la información que nos resulte útil es ese
momento. La cláusula WHERE filtra los datos antes de ser
devueltos por la consulta. En nuestro ejemplo, si queremos
consultar un coche en concreto debemos agregar una cláusula
WHERE. Esta cláusula especifica una o
varias condiciones que deben cumplirse para que la sentencia
SELECT devuelva los datos. Por ejemplo, para que la consulta
devuelva sólo los datos del coche con matrícula M-1525-ZA
debemos ejecutar la siguiente sentencia:
Además, podemos utilizar tantas condiciones como queramos,
utilizando los operadores lógicos AND y OR El siguiente ejemplo
muestra una consulta que devolverá los coches cuyas matrículas
sean M-1525-ZA o bien M- 2566-AA.
Además una condición WHERE puede ser negada a través del
operador lógico NOT. La siguiente consulta devolverá todos los
datos de la tabla tCohes menos el que tenga matrícula M-1525-ZA.
Podemos también obtener las diferentes marcas y modelos de
coches ejecutando la consulta.
En el caso anterior la palabra clave DISTINCT indica que sólo queremos los
valores distintos del par formado por los campos marca y modelo.
La cláusula ORDER BY
Como ya hemos visto en los ejemplos anteriores podemos
especificar el orden en el que serán devueltos los datos a través de
la cláusula ORDER BY.
Como podemos ver en el ejemplo podemos especificar
la
ordenación ascendente o descendente a través de las palabras
clave ASC y DESC. La ordenación depende del tipo de datos que
este definido en la columna, de forma que un campo numérico será
ordenado como tal, y un alfanumérico se ordenará de la A, a la Z,
aunque su contenido sea numérico. De esta forma el valor 100 se
devuelve antes que el 11.
También podemos especificar el en la cláusula ORDER BY el índice
numérico del campo dentro del la sentencia SELECT para la
ordenación, el siguiente ejemplo ordenaría los datos por el campo
marca, ya que aparece en segundo lugar dentro de la lista de
campos que componen la SELECT.
Insertar datos.
Hasta ahora hemos visto como se almacenan los datos en una
base de datos y como consultar esos datos almacenados, pero no
hemos visto como almacenar dichos datos.
Para almacenar datos en una base de datos debemos insertar filas
en las tablas. Para ellos SQL pone a nuestra disposición la
sentencia INSERT.
Inserción de filas.
El proceso de inserción de filas consiste en añadir a una tabla una o
más filas y en cada fila todos o parte de sus campos.
Podemos distinguir dos formas de insertar filas:
·
Inserción individual de filas.
·
Inserción múltiple de filas.
La sintaxis de la sentencia INSERT es diferente según cuál sea
nuestro propósito.
Sólo podremos omitir un campo al efectuar una inserción cuando
este acepté valores nulos.
Inserción individual de filas
Para realizar la inserción individual de filas SQL posee la instrucción
INSERT INTO.
La inserción individual de filas es la que más comúnmente
utilizaremos. Su sintaxis es la siguiente:
Como se puede observar la sentencia tiene dos partes claramente
diferenciadas, por un lado la propia INSERT INTO seguida de la
lista de campos en los que queremos insertar los datos, y por otro la
lista de valores que queremos insertar en los campos. La mejor
forma de ver esto es a través de un ejemplo.
Con esta sentencia INSERT creamos un registro en la tabla
tCoches con los valores especificados, es decir, la matricula tendrá
el valor M- 1111-CA, la marca será RENAULT y así sucesivamente.
¿Qué ocurriría si ya existiera un coche con la matrícula M-1111CA? Se producirá un error, porque hemos definido la clave primaria
en el campo matrícula, y como hemos visto la clave primaria debe
ser única.
Si omitimos algún par " campo-valor " en la sentencia INSERT,
pueden ocurrir varias cosas:
·
Que se produzca un error, si el campo no acepta valores
nulos.
·
Que se grave el registro y se deje nulo el campo, cuando el
campo acepte valores nulos.
·
Que se grave el registro y se tome el valor por defecto,
cuando el campo tenga definido un valor por defecto.
Que hacer en cada momento dependerá del programa.
Por ejemplo, la siguiente sentencia creará un registro en la tabla
tCoches con el campo numero_kilometros cero, ya que este es su
valor por defecto.
Inserción múltiple de filas
La sentencia INSERT permite también insertar varios registros en
una tabla. Pare ello se utiliza una combinación de la sentencia
INSERT junto a una sentencia SELECT. El resultado es que se
insertan todos los registros devueltos por la consulta.
Para poder utilizar la inserción múltiple de filas se deben cumplir las
siguientes normas:
·
La lista de campos de las sentencias insert y select deben
coincidir en número y tipo de datos.
·
Ninguna de las filas devueltas por la consulta debe infringir las
reglas de integridad de la tabla en la que vayamos a realizar
la inserción.
Pongamos un ejemplo, vamos a crear una tabla con las diferentes
marcas que tenemos en la base de datos. La sentencia SQL para
crear la tabla es la siguiente:
Una vez que tenemos creada la tabla de marcas vamos a insertar
otro par de registros en la tabla de coches, para ello utilizamos una
sentencia insert into para una única fila.
Ahora tenemos tres marcas diferentes en la tabla tCoches, y
queremos insertarlas en la tabla de marcas, para ello podemos
realizar tres inserciones individuales, pero ¿qué pasaría si no
supiéramos de antemano el número de marcas? ¿Y si fueran unas
cincuenta marcas? Nos podríamos pasar el día entero escribiendo
sentencias insert into.
Afortunadamente podemos realizar una inserción múltiple del
siguiente modo:
Como resultado obtenemos un registro en la tabla tMarcas por cada
marca de la tabla tCoches. El campo código se ha generado
automáticamente ya que está definido como identidad.
Démonos cuenta de que el orden de generación no ha sido el
mismo que el de inserción, sino que se ha aplicado el orden en el
que han sido devueltos los datos por la sentencia SELECT.
Borrado de datos.
La sentencia DELETE.
Para borrar datos de una tabla, debemos utilizar la sentencia
DELETE.
La sintaxis de la sentencia DELETE es la siguiente:
El siguiente ejemplo ilustra el uso de la sentencia DELETE. Es
buena idea especificar en la sentencia WHERE los campos que
forman la clave primaria de la tabla para evitar borrar datos que no
queramos eliminar.
Cuando trabajemos con la sentencia DELETE debemos tener en
cuenta las siguientes consideraciones:
Sólo podemos borrar datos de una única tabla.
Cuando borramos datos de una vista, los estamos borrando
también de la tabla. Las vistas son solo una forma de ver los datos,
no una copia.
Si intentamos borrar un registro de una tabla referenciada por una
FOREING KEY como tabla maestra, si la tabla dependiente tiene
registros relacionados la sentencia DELETE fallará.
La sentencia TRUNCATE
Para realizar un borrado completo de tabla debemos considerar la
posibilidad de utilizar la sentencia TRUNCATE, mucho más rápida
que DELETE.
La sintaxis de la sentencia TRUNCATE es la siguiente:
El siguiente ejemplo muestra el uso de la sentencia TRUNCATE.
Cuando trabajemos con la sentencia TRUNCATE debemos tener en
cuenta las siguientes consideraciones.
La sentencia TRUNCATE no es transaccional. No se puede
deshacer.
La sentencia TRUNCATE no admite cláusula WHERE. Borra toda la
tabla.
No todos los gestores de bases de datos admiten la sentencia
TRUNCATE.
Actualización de datos.
La sentencia UPDATE.
Para la actualización de datos SQL dispone de la sentencia
UPDATE. La sentencia UPDATE permite la actualización de uno o
varios registros de una única tabla. La sintaxis de la sentencia
UPDATE es la siguiente:
Las siguientes sentencias actualizan los datos de la tabla tCoches
con los valores de la tabla tMarca obtenidos anteriormente la
inserción de datos.
Nótese que los valores para el campo marca aparecen
entrecomillados, ya que es un campo de tipo varchar.
Los valores con los que actualicemos los datos deben ser del tipo
del campo.
Un aspecto a tener en cuenta es que los campos que forman la
primary key de una tabla sólo se podrán modificar si los registros no
están referenciados en ninguna otra tabla. En nuestro caso sólo
podremos modificar la matrícula de un coche si no tiene registros
asociados en la tabla tAlquileres.
Esto puede causar problemas, ya que podríamos habernos
equivocado al dar de alta el
coche en la tabla tCoches y detectar el error después de alquilar el
coche. En tal caso tendríamos dar de alta un nuevo coche con la
matrícula correcta, actualizar los registros de la tabla alquileres y
por último borrar el registro erróneo de la tabla tCoches.
Este proceso puede ser bastante complicado en el caso de que
existirán más relaciones con la tabla. Se podría considerar que la
clave primaria de la tabla está mal definida y que la matrícula no
debe ser el elemento que identifique el coche. Una alternativa seria
crear un código auto numérico para la tabla tCoches que realizará
las veces de clave primaria y crear un índice único para la
matrícula, este diseño también tiene sus "pegas", por lo que
debemos decidir que modelo utilizar, y seleccionar las claves
primarias con sumo cuidado.
Uso de sub- consultas con UPDATE.
El uso de sub- consultas es una técnica avanzada de consulta que
veremos con detalle más adelante, pero que tratamos aquí de
forma introductoria. Hasta ahora se han
actualizado los datos con valores que conocemos de antemano,
¿pero qué ocurre cuando esos datos deben tomarse de otra tabla
de la base de datos? Podríamos diseñar un programa que
recorriera toda la tabla y buscará el valor adecuado para cada
registro y lo
actualizase. Sin duda es una solución, y en ocasiones casi la única,
pero es una solución
cara y compleja que además exige que conozcamos algún otro
lenguaje de programación. Para estos casos podemos utilizar
subconsultas con la sentencia UPDATE.
La sintaxis es la siguiente:
Por cada registro de la tabla tCoches se ejecutará la subconsultas,
actualizando el campo marca al valor del código de la marca en la
tabla tMarcas.
El uso de sub-consultas para actualizar datos tiene algunas
limitaciones:
·
La sub-consulta sólo puede devolver un único campo.
·
La sub- consulta sólo puede devolver un solo registro.
·
El tipo de datos devuelto por la subconsultas debe ser del
mismo tipo que el campo al que estamos asignando el valor.
·
No todos los sistemas de bases de datos permiten usar
subconsultas para actualizar datos (Access) aunque si una
buena parte de ellos (ORACLE, SQL Server, Sybase ...).
Pero en nuestro ejemplo el campo código de la tabla tMarcas es
numérico y el campo marca de la tabla tCoches es texto. ¿Por qué
funciona? Muy fácil, el motor de la base de datos es capaz de
convertir el valor numérico a un valor texto de forma automática, si
bien esta es una excepción.
Ahora que ya tenemos modificado el valor de la marca de los
registros, es conveniente modificar su tipo de datos y crear una
foreign key contra la tabla tMarcas. Para ello
ejecutaremos las siguientes sentencias.