Lectura 6 - SQL

miércoles, 21 de enero de 2009

INTRODUCCIÓN

A continuación, observaremos para que nos sirve el lenguaje SQL, pues se mencionaran algunas de las estructuras que se deben manejar para la utilización de este lenguaje.
En esta lectura podremos encontrar las diversas sintaxis que se deben manejar para un buen manejo en la creación de las bases de datos, tablas e incluso en las consultas, modificaciones o eliminación de las mismas.
Uno de los beneficios más notorios que veremos en SQL es la manera en que nos ayuda a realizar consultas rápidas en cada una de las bases de datos, tablas, filas, columnas, etc.
Analizaremos algunas de las instrucciones que manejan tanto el DDL como el DML. Nos enfocaremos a las instrucciones más solicitadas por los administradores de la base de datos como son: SELECT, INSERT, DELETE, DROP, CREATE, etc.
Estas son solo algunas de las sentencias que veremos en esta lectura.

¿PARA QUÉ SIRVE SQL?

El lenguaje SQL es un lenguaje con el que se escriben todas las acciones u operaciones que se realizan sobre los motores de bases de datos relacionales. Es un lenguaje que se utiliza para consultas y programación de la base de datos. Existe un estándar para el SQL es el ANSI (American National Standards Institute) en castellano es: Instituto de Normalización Americano.
En esta ocasión utilizaremos Microsoft SQL Server 2000 donde manejaremos el lenguaje SQL. Este se llama Transact SQL ó T-SQL; para esto es necesario decir que se divide en dos partes: DDL Y DML.
· CP es la clave primaria.
· CE es la clave foránea.
Un ejemplo de modelo relacional en:

· DDL.

Se utiliza para definir y administrar objetos de la base de datos, tales como bases de datos, tablas, vistas. Normalmente las instrucciones incluidas en este lenguaje son CREATE, ALTER, DROP aplicadas sobre los diferentes objetos como tablas o vistas.
· CREATE

Para crear una base de datos se utiliza la instrucción CREATE DATABASE con un conjunto de parámetros, esta instrucción puede llevar más parámetros de los que se presentan.
Un ejemplo que utilizaremos será crear una base de datos de nombre SUELDOS dentro del motor SQL Server de 10 Mbyte de tamaño con un tamaño máximo de 50 Mbyte para el archivo de datos (sueldos.mdf) y un tamaño de 5 Mbyte para el archivo registro de transacciones o log y con un tamaño máximo de 25 Mbyte para el archivo de log (sueldos.ldf), en ambos casos con un incremento de 5 Mbyte.


USE master
GO
CREATE DATABASE SUELDOS
ON
(NAME = SUELDOS_dat,
FILENAME = ‘c:\program files\microsoft sql server\mssql\data\sueldosdat.mdf’,
SIZE =10,
MAXSIZE= 50,
FILEGROWTH =5)
LOG ON
(NAME = ‘SUELDOS _log’,
FILENAME = ‘c:\program files\microsoft sql server\mssql\data\sueldoslog.ldf’,
SIZE = 5MB,
MAXSIZE= 25MB,
FILEGROWTH= 5MB)
GO

Esta instrucción indica al motor de la base de datos cual tomar como la base de datos activa, donde se van a ejecutar las instrucciones T-SQL. En este ejemplo se muestra como se da la indicación para usar la base de datos master.
Estamos creando la base de datos SUELDOS en la ruta donde SQL Server guarda sus bases de datos propias para su gestión. Se recomienda guardar las bases de datos en el mismo lugar donde SQL Server lo hace.

Crear una base de datos desde el Enterprise Manager
Enseguida se muestra como crear una base de datos con las instrucciones DDL desde el Enterprise Manager.

Para ello nos posicionamos en el servidor, en nuestro caso NOTEBOOK parados en la carpeta de base de datos, presionamos el botón derecho del mouse y elegimos la opción crear nueva base de datos, como se muestra en la figura.

Luego elegimos su nombre, en nuestro ejemplo, pusimos el nombre SUELDOS_V1 pues la base de datos sueldos ya la habíamos creado con las instrucciones DDL, y presionamos el botón Aceptar y la base de datos será creada.
Si nos movemos a las solapas de Archivos de datos y Archivos de log podemos configurarlos de una manera más sencilla de cómo lo hicimos con las instrucciones de T-SQL.
Ahora veremos cómo utilizar la instrucción CREATE para crear las distintas tablas de nuestra base de datos SUELDOS. Empezaremos por la tabla CATEGORÍAS.

USE SUELDOS
CREATE TABLE CATEGORIAS {
Cod_categoria char (2) NOT NULL,
Desc_Categoria varchar (50) NOT NULL,
CONSTRAINT PK_CATEGORIAS PRIMARY KEY CLUSTERED
{
Cod_Categoria
} ON [PRIMARY]
} ON [PRIMARY]

Como vemos la instrucción CREATE TABLE CATEGORIAS es la instrucción que le indica a T-SQL que debe crear una tabla de nombre CATEGORIAS con los campos Cod_Categoria de tipo entero y que no acepte valores nulos y Desc_Categoria de tipo cadena de caracteres variable de 50 posiciones que tampoco debe aceptar valores nulos. Luego la instrucción CONSTRAINT define una restricción de integridad, en este caso la clave primaria de la tabla CATEGORIAS a la cual le asigna el nombre PK_CATEGORIAS sobre el campo Cod_Categoria y dice que tendrá ella un índice interno de tipo CLUSTERED.

Ahora crearemos la tabla EMPLEADOS

USE SUELDOS
CREATE TABLE EMPLEADOS {
Legajo int NOT NULL,
Apellido varchar (20) NOT NULL,
Dirección varchar (50) NOT NULL,
Tarea varchar (50) NOT NULL,
Cod_Categoria char (2) NOT NULL,
Fecha_Ingreso datetime NOT NULL,
Foto varchar (50) NULL,
Email varchar (50) NULL,
HomePage varchar (50) NULL,
Sueldo_Basico money NOT NULL,
CONSTRAINT PK_EMPLEADOS PRIMARY KEY CLUSTERED
{
Legajo
} ON [PRIMARY] ,
CONSTRAINT PK_EMPLEADOS_CATEGORIAS FOREIGN KEY
{
Cod_Categoria
} REFERENCES CATEGORIA {
Cod_Categoria
}
} ON [PRIMARY]

En esta tabla aparece una nueva instrucción T-SQL de integridad, como que la tabla EMPLEADOS posee una clave foránea con la tabla CATEGORIAS por medio del Cod_Categoria.

Crear una tabla utilizando el Enterprise Manager
En esta ocasión no utilizaremos la instrucción DDL, sino que crearemos una tabla de modo gráficamente. Para ello, nos posicionamos en la base de datos SUELDOS_V1, se presiona botón derecho sobre la carpeta Tablas y elegimos la opción Crear nueva tabla.

Luego aparece la siguiente pantalla en la cual definimos todos los campos con sus respectivos tipos de datos, si se aceptan o no los valores nulos y cuál de ellos será el campo clave, como lo muestra la siguiente figura.

Después de definir los campos con sus respectivos tipos elegiremos guardar, donde se nos pedirá el nombre de la tabla a la cual llamaremos CATEGORIA, daremos aceptar y habremos guardado nuestra tabla.
Para eliminar las tablas de la base de datos, primero se eliminaran las tablas que poseen claves foráneas y luego las tablas de las cuales dependían. En el ejemplo que venimos manejando se debería borrar primero la tabla EMPLEADOS_CONCEPTOS, luego la tabla EMPLEADOS, para por último eliminar la tabla CATEGORIAS. El orden de eliminación es inverso al orden de creado.

· ALTER
Esta instrucción se utiliza para modificar, agregar o quitar propiedades, restricciones o atributos de las bases de datos, tablas vistas, procedimientos almacenados, desencadenadores, funciones entre otros.
Para entender bien esta instrucción daremos un ejemplo de cómo agregarle un atributo o campo a la tabla CATEGORIAS de nombre usuario para registrar el usuario que agregó una categoría a la tabla y luego sacaremos dicho atributo con la misma instrucción como si nada hubiera sucedido.
Para agregar el campo usuario utilizamos la siguiente instrucción T-SQL
USE SUELDOS
ALTER TABLE CATEGORIAS
ADD Usuario varchar (30)


USE SUELDOS
ALTER TABLE CATEGORIAS
DROP COLUMN UsuarioCon esta instrucción la tabla CATEGORIAS ahora si ya posee el campo usuario. Para quitar este campo que recién agregamos utilizaremos el siguiente código:

· DROP
Esta instrucción se utiliza para borrar o eliminar base de datos, tablas, vistas, procedimientos almacenados, funciones, índices, desencadenadores, reglas, atributos, propiedades, restricciones, etc.

La instrucción T-SQL para eliminarla sería:
USE SUELDOS
DROP TABLE CATEGORIAS

· DML
Este lenguaje se utiliza para manipular los datos que se encuentran en los diferentes objetos de la base de datos; es decir consultar los datos (SELECT), insertar nuevos datos (INSERT), modificarlos (UPDATE), o eliminarlos (DELETE) de nuestra base de datos. Cabe mencionar que la manipulación de los datos se hace a nivel de tuplas (filas).

· INSERT
La instrucción INSERT se utiliza para insertar una o más filas en una tabla o en una vista. Un ejemplo sería si deseamos insertar una fila a la tabla CATEGORIAS el código sería el siguiente:
USE SUELDOS
INSERT INTO CATEGORIAS (Cod_Categoria, Desc_Categoria)
VALUES (‘CA’, ‘CADETE’)

En este ejemplo estamos insertando en la tabla CATEGORIAS la fila que posee código de categoría CA cuya descripción para la categoría es CADETE.
Después de INSERT colocamos la palabra INTO (indica donde deseamos realizar la inserción de datos) y después el nombre de la tabla donde queremos agregar la fila de valores, en nuestro caso CATEGORIAS. Luego colocamos el nombre de los campos en su respectivo nombre entre paréntesis y después la palabra VALUE que le indica al motor de base de datos que a partir de ahí todo lo que parezca entre los paréntesis será el conjunto de valores a insertar. Además, los valores CA y CADETE están encerrados entre apóstrofos pues son cadenas de caracteres y esa es la forma de indicárselo al motor de SQL.
Algo que se debe tomar en cuenta a la hora de insertar filas en las tablas de la base de datos, se deberán insertar primero las filas de las tablas que no poseen claves foráneas para luego insertar las filas en las tablas que poseen claves foráneas.

· SELECT
Esta instrucción permite consultar los datos de una o más tablas. Dicha instrucción además se puede utilizar para filtrar los datos mostrados tanto a nivel de atributos (campos) como a nivel de tuplas (filas).
USE SUELDOS
SELECT *
FROM CATEGORIASUn ejemplo para que se muestren todos los datos de la tabla CATEGORIAS.

USE SUELDOS
SELECT Desc_Categoria
FROM CATEGORIAS
WHERE Cod_Categoria =’CA’Ahora si uno quisiera nada más ver la descripción de la categoría cuando esta es el código CA el código sería:


· UPDATE

Se utiliza para modificar (actualizar o cambiar) el valor o valores de una fila o filas de una tabla. Supongamos que deseamos cambiar la descripción de la categoría del código categoría CA de cadete a capataz.
USE SUELDOS
UPDATE CATEGORIAS
SET Desc_Categoria = ‘Capataz’
Where Cod_categoria = ’CA’
· DELETE

Permite eliminar una o más filas de una tabla. Un ejemplo es eliminar todas las filas de la tabla CATEGORIAS.
USE SUELDOS
DELETE FROM CATEGORIAS

O en su defecto
USE SUELDOS
DELETE CATEGORIAS

Ahora bien si se desea eliminar las filas de la tabla categoría, cuyo código de categoría es CA, el código será:
USE SUELDOS
DELETE FROM CATEGORIAS
WHERE Cod_categoria = ‘CA’

CONSULTAS EN SQL SERVER
La sentencia SELECT describe una consulta a la base de datos relacional permitiendo la recuperación de filas y columnas de una o varias tablas. La ejecución de este tipo de consultas no modifica dato alguno. Los resultados de las consultas siempre serán tuplas, es decir conjuntos de resultados ordenados visualmente como la intersección de filas por columnas.
Como ya mencionamos, la instrucción SELECT es la encargada de describir una consulta en la base de datos relacional.

A continuación algunos de los parámetros que se pueden llegar a utilizar junto con SELECT:
· ALL: indica que se admite la aparición de filas duplicadas, y es el valor por omisión.
· DISTINCT: indica la unicidad de las filas de resultados. Los valores nulos son considerados iguales para esta cláusula.
· TOP expresión [PERCENT]: indica la cantidad de filas por recuperar, ya sea por cardinal o porcentaje. La expresión TOP [WITH TIES] limita los resultados a las primeras filas que cumplan con la limitación indicada.
· : representa la lista de columnas (separadas por comas) que contendrá el conjunto de resultados. *indica que se devolverán todas las columnas de la tabla. Nombre_tablanombre_vistaalias_tabla*limita el alcance de* cuando se consultan varias tablas. Es decir que, si hay más de una tabla o vista en cláusula FROM, se deberá usar un alias antecediendo al operador* para indicar a que tabla corresponde aplicar el operador.nombre_columna indica el nombre de la columna para recuperar. Si se desea recuperar el mismo nombre del campo para dos tablas, deberá utilizarse el alias o nombre de objeto (tabla o vista) como predecesor del nombre del campo. Expresión representan un nombre dado a una columna como alias, a una constante, a una función o a una subconsulta.
· $IDENTITY: devuelve la columna que tiene fijada la propiedad identidad. Si más de una tabla involucrada en la consulta tiene definida esta propiedad, deberá anteponerse el alias del objeto o su nombre.
· $ROWGUID: devuelve la columna que tiene fijado el tipo de dato global Unique identifier. Si más de una tabla involucrada en la consulta tiene definido este tipo, deberá anteponerse el alias del objeto o su nombre.
· CLR. Indica un método, o una propiedad o campo de un tipo del CLR. Usar “.” Para una instancia y “::” para el método, propiedad pública del CLR.
Funciones agregadas en la sentencia SELECT.
Existen funciones agregadas generales que nos permiten resumir resultados en una instrucción SELECT. Estas funciones son.
o AVG (exp) devuelve la medida de la expresión. Solo se puede utilizar con valores numéricos e ignora os valores nulos.
o COUNT (expresión) devuelve el número de valores no nulos de la expresión. Si se especifica la cláusula DISTINTC, devuelve la cantidad de valores no nulos exclusivos. Se puede aplicar a expresiones numéricas y no numéricas.
o COUNT (*): tiene como finalidad devolver la cuenta del número de filas de una tabla. Cuenta la totalidad de filas, incluyendo aquellas que poseen valores nulos.
o MAX (expresión) devuelve el valor máximo de la expresión.
o MIN (Expresión) devuelve el valor mínimo de la expresión.
o Estas funcione pueden usarse en columnas numéricas pero no en las de tipo bit.
o SUM (Expresión) devuelve la suma de todos los valores, o de los exclusivos si se utiliza en conjunto con DISTINCT. La función ignora los valores nulos.
Consideraciones particulares de la sentencia SELECT.
Las sentencias SELECT están permitidas en funciones definidas por el usuario, siempre y cuando se utilicen con el objeto de asignar valores a variables locales. Los alias de columna se pueden usar en cláusulas ORDER BY, aunque no pueden utilizarse con WHERE, GROUP BY o

HAVING.
La conjunción y disyunción de cláusulas WHERE mediante las palabras reservadas AND y OR permite restringir más el conjunto de resultados.
FROM y JOIN
La forma correcta de obtener los resultados de la unión de dos tablas es indicar la clave de la relación en la cláusula FROM mediante los órdenes de
JOIN.
La cláusula FROM establece las tablas, vistas, tablas derivadas y uniones mediante JOINS que se utilizan en instrucciones SELECT, INSERT, UPDATE y DELETE. Además, el argumento FROM se requiere siempre, a menos que la lista de SELECT sólo obtenga el resultado de expresiones matemáticas, funciones, constrantes, etc.
Principales parámetros que componen la sentencia FROM:
indica la tabla con la que se vinculará la primera tabla de la lista FROM el tipo de unión y las condiciones en las que se hará la misma.
JOIN: indica las tablas a unir.
CROSS JOIN: india el producto cruzado entre las tablas incluidas en la expresión.
Función_agregación: representa una función de agregación del sistema creada por el usuario. Las funciones utilizadas deben ser invariables ante nulos, es decir, no deben considerarlos en su cálculo, por ejemplo COUNT(*)

SELECT UNION
Permite combinar el resultado de dos o más consultas, combinando columnas de dos tablas en un mismo conjunto de resultados. Las reglas básicas para realizar uniones son:
I. El número y orden de las columnas debe ser el mismo en todas las consultas.
II. Los tipos de datos deben ser compatibles.

WHERE
La cláusula WHERE permite restringir las filas devueltas por una consulta mediante el uso de predicados separados por las cláusulas AND y OR.

PREDICADOS
Los operadores AND, OR y NOT se utilizan para conectar predicados de condiciones de búsqueda en cláusulas WHERE.
El operador AND devuelve verdadero si ambas condiciones son verdaderas.
El operador NOT reversa el resultado de una condición de búsqueda.
El operador OR conecta dos condiciones de búsqueda y basta con que una de ellas sea verdadera para que devuelva verdadero.
Los predicados devuelven tres resultados: TRUE, FALSE o UNKNOW.
A continuación, explicamos los predicados que se pueden utilizar en cláusulas WHERE.

CONTAINS
Es un predicado utilizado para buscar columnas basadas en tipos de datos de caracteres en forma más o menos precisa contra un patrón. Los hitos (aciertos) se pueden buscar por palabras simples frases, por proximidad de palabras o inflexiones.
En resumen se utiliza para buscar:
· Palabras o frases.
· El prefijo de palabras o frases
· Una palabra cerca de otra.
· La inflexión de una palabra a partir de otra.
· Palabras sinónimas

EXISTS
Permite testear el resultado de una subconsulta.

IN
Permite evaluar si una expresión se encuentra en una lista o subconsulta.

IS NULL
Este predicado tiene como funcionalidad evaluar si una determinada expresión es nula o no.

LIKE
Determina cuando o no un determinado carácter conforma un patrón que puede incluir caracteres regulares o caracteres comodines.

FREETEXT
Este predicado provee una forma simple, utilizado el lenguaje natural, de consultar columnas basadas en tipos de caracteres buscando valores de coincidencia por significado más que por palabras o frases.

{SOME/ANY}
Se les utiliza como operadores de comparación en subconsultas. Devuelve TRUE para su predicado si cualquier valor de la subconsulta satisface la comparación.

GROUP BY
La cláusula GROUP BY permite especificar los grupos, dentro de los cuales las filas de resultados serán incorporadas, devolviendo, además, la sumarización de resultados se si ha utilizado una función de agregación en la sentencia SELECT.
Para utilizar esta sentencia, es necesario que cada columna no incluida en una función de agregación sea incluida en la lista GROUP BY en el mismo orden que en la sentencia SELECT.

CURE
Genera un conjunto de resultados multidimensional basado en las columnas que el usuario desea analizar. La lista del SELECT contiene las columnas y funciones de agregación. La cláusula GROUP BY incorpora WITH CUBE para obtener todas las combinaciones posibles de los valores.

ROLLUP
Es útil para generar reportes con totales y subtotales similar a CUBE. Pero a diferencia entre ambos consiste en que CUBE genera agregaciones para todas las combinaciones de valores en las columnas seleccionadas y ROLLUP muestra subtotales por jerarquía de valores en dichas columnas.

FOR XML
Podemos escribir consultas que devuelven resultados con formato XML en lugar de la estructura usual de resultados. Estas consultas se pueden ejecutar dentro de sentencias SELECT en funciones y procedimientos almacenados, adicionando la clausura FOR XML en sus modalidades RAW, AUTO, EXPLICIT o PATH.
RAW: Se encarga de generar un elemento por fila de datos recuperada sin anidación.
AUTO: genera elementos XML anidados basándose en heurísticas sobre conformación de la lista SELECT.
EXPLICIT y PATH: permiten obtener un mayor control sobre los elementos generados requiriendo la asignación de formato, `puesto que se pueden direccionar los resultados a esquemas XML.

ORDER BY
Esta cláusula ordena los resultados por una o más columnas de hasta 8060 bytes. El tipo de ordenamiento lo fijan las claves ASC y DESC. El resultado exacto de la ordenación depende del conjunto de caracteres para los campos de tipo varchar, char, nchar, y nvarchar, pudiéndose especificar uno en particular para el ordenamiento.
Esta cláusula no puede aplicarse a campos de tipo text, ntext, image o xml.

OPERACIONES DE MODIFICACIÓN DE DATOS
SQL Server admite tres operaciones para la manipulación de datos a través de las sentencias:
INSERT
Esta sentencia es utilizada para insertar una o más filas de datos en una tabla.

UPDATE
Esta sentencia es utilizada para modificar una o más filas en una tabla basándose en una condición de búsqueda y restricción de resultados. Si no se especifica la cláusula WHERE, la sentencia afectará a todas las filas de la tabla.

DELETE
Esta sentencia es utilizada para eliminar una o más filas de datos de una tabla basándose en una condición de búsqueda y restricción de resultados. Si no se especifica la cláusula WHERE, la sentencia afectará a todas las filas de la tabla. La opción de DELETE no tiene forma de deshacerse a menos que sea incluida en una transacción, entre las sentencias BEGIN TRAN/COMMIT TRAN.

CONCLUSIÓN
Finalmente como pudimos observar en la estructura de estas instrucciones, hay muchas reglas que deben de cumplir desde el modo en que se crean las bases de datos, como el orden que deben llevar la creación y la eliminación de las tablas.
Cabe aclarar que esto es solo una parte de lo que se puede llegar a hacer con las sintaxis de SQL, pues en la opción de help de SQL se puede apreciar con más detalle cada una de las estructuras y sus funciones, pues en este apartado se encuentran mejor definidas.
Después de esta breve introducción por el lenguaje SQL, ahora si estamos listos para hacer un buen manejo de las bases de datos, aunque ya se mencionó que falta más por conocer de este lenguaje, estas son las instrucciones más esenciales con las que se pueden manejar las bases de datos sin ningún problema.
Para concluir podemos decir que las sintaxis de cada una de las instrucciones son la parte fundamental de SQL, pues con ellas son con las que se manejan todo tipo de consultas, modificaciones, actualizaciones, etc. Pues este tipo de funciones son las que nos ayudarán a destacar cada uno de los procesos que realizará nuestra base de datos.

BIBLIOGRAFÍA:
Rosa (2005). Cap. 7 Consultas
Rozic (2004). Cap. 5 El Lenguaje SQL

0 Comments: