Manual de SQL Server 2016
Manual de SQL Server 2016
Manual de SQL
Server 2016
TABLA CONTENIDO
MODULO 1: INTRODUCCIN A SQL SERVER
Que es SQL Server
Historia
Transact SQL
Caractersticas de SQL
Definicin del lenguaje (DDL DML)
Donde descargar SQL Server (2012,2014)
MODULO 7: SUBCONSULTAS
Definicin de Subconsulta
Tipos de Subconsultas
o Subconsultas de una sola fila
o Subconsultas de mltiples filas
o ROLLBACK y SAVE
El objetivo que se persigue es mejorar el rendimiento y permitir la gestin de todos los datos de la
empresa con los que los usuarios trabajan habitualmente, as como tambin ampliar el conocimiento
bsico de aquellos usuarios que han logrado instruirse de manera sutil en el mundo de las bases de datos.
HISTORIA SQL
Empieza con la primera versin, que fue desarrollada en los laboratorios de IBM por Andrew Richardson,
Donald C. Messerly y Raymond F. Boyce, a comienzos de los aos 70, viendo la luz en 1974. Se basaron en
el modelo relacional de datos para grandes bancos de datos compartidos de Edgar Frank Cood.
A esta versin le llamaron SEQUEL, Structured English QUEry Language, y fue diseada para acceder y
manejar los datos de la base de datos System R de IBM. Las experimentaciones con este prototipo
condujeron, entre 1976 y 1977, a una revisin del lenguaje (SEQUEL/2), que a partir de ese momento
cambi de nombre por motivos legales, convirtindose en SQL.
El prototipo (System R), basado en este lenguaje, se utiliz internamente en IBM y lo adoptaron algunos
de sus clientes elegidos. Gracias al xito de este sistema, que no estaba todava comercializado, tambin
otras compaas empezaron a desarrollar sus productos relacionales basados en SQL.
Fue en 1986, cuando el ANSI (American National Estndar Institute) adopt SQL como estndar para los
lenguajes relacionales, que en 1987 se transform en estndar ISO.
Una base de datos est constituida por un conjunto de informacin relevante para una empresa o
entidad incluyendo los procedimientos para almacenar, controlar, gestionar y administrar esa
informacin. Adems, la informacin contenida en una base de datos cumple una serie de
requisitos o caractersticas:
Un Sistema de Gestin de Bases de Datos (SGBD) es una aplicacin comercial que permite construir
y gestionar bases de datos, proporcionando al usuario de la Base de Datos las herramientas
necesarias para realizar, al menos, las siguientes tareas:
En este manual se dar a conocer el uso del lenguaje DML (Sentencias de manipulacin de datos),
las cuales se utilizan para:
Recuperar informacin. (SELECT)
Actualizar la informacin:
Aadir filas (INSERT)
Eliminar filas (DELETE)
Modificar filas (UPDATE)
As como tambin se mostrara las sentencias DDL (Sentencias de definicin de datos, las cuales se
utilizan para:
El carcter formal del modelo relacional hace relativamente sencilla su representacin y gestin
por medio de herramientas informticas. No es casual, pues, que haya sido elegido como
referencia para la construccin de la gran mayora de los Sistemas de Gestin de Bases de Datos
comerciales disponibles en el mercado.
El hecho de que los SGBDR (Sistemas gestores de base de datos) respeten el modelo relacional
permite trabajar con una estructura lgica de la organizacin de los datos (tablas, vistas,
ndices), independiente de la estructura fsica (archivos, etc.). Cada SGBDR debe proporcionar
una vista lgica al usuario, que garantice un almacenamiento fsico de la informacin.
Esta restriccin es, al mismo tiempo, la fortaleza de los SGBDR, ya que la gestin de los datos
desde un punto de vista lgico, simplifica mucho su uso. De esta manera, los usuarios poco o
nada acostumbrados a desarrollar aplicaciones se pueden iniciar sin problemas en SQL.
COMPONENTES.
Como dijimos anteriormente, el modelo relacional de base de datos organiza y representa los
datos mediante entidades. A continuacin se muestra una tabla que compara la terminologa
utilizada en las bases de datos relacionales y sus alternativas, que permiten entender fcilmente
sus componentes.
Tablas: Las tablas, tambin llamada relaciones, son los pilares esenciales de cualquier base de datos, ya que
almacenan los datos. Una base de datos debera tener una tabla distinta para cada asunto principal, como
registros de empleados, pedidos de clientes, mtodos de entrega, proveedores, etc.
No deben duplicarse los datos en varias tablas. Esto es un error comn fcil de evitar si se estructuran bien
las tablas.
Todas las tablas estn organizadas en Filas, y columnas, tal como se muestra en la siguiente imagen, en la
cual se crea una tabla vaca, que permite guardar los datos de un paciente.
Registros (tuplas): Una tupla o registro es un conjunto de hechos acerca de una persona, de un evento o de
cualquier otro elemento de inters. Por ejemplo el Cliente Daniel Berrios y su direccin y fecha de
nacimiento. Cada tupla o registro contiene los valores que toma cada uno de los campos de un elemento
de la tabla. En una base de datos bien estructurada, cada tupla o registro debe ser nico. Es decir, no deben
existir dos o ms registros que contengan exactamente la misma informacin.
En la siguiente imagen, se muestra enmarcado el registro de un paciente.
Campos (atributos): Los campos de la base de datos tienen valores que determinan el tipo de datos que
pueden almacenar, cmo se muestran los datos y qu se puede hacer con ellos. Un valor importante para
los campos es el tipo de datos, que puede ser nmero, texto, moneda (dinero), fecha, hora, etc. El tipo de
datos limita y describe la clase de informacin del campo. Tambin determina las acciones que se pueden
realizar en el campo y la cantidad de memoria que utilizan los datos.
CREAR TABLAS.
En el men del costado, se encuentran las carpetas que permiten que el sistema de base de dato funcione.
En la carpeta databases (Base de datos), se encuentran aquellas creadas por defecto y las que
procederemos a generar.
Como veremos, se han creado todas las carpetas necesarias para el buen funcionamiento de la BD, las
cuales van a ser vistas, a medida que sean requeridas para este manual.
Para comenzar a realizar las tablas, se debe ir a la carpeta tables (tablas) ubicada en la lista del costado, y
daremos click derecho y seleccionaremos new, y luego table.
Al abrir la tabla se nos desplegar una ventana que permite el ingreso de las columnas de una tabla.
Siguiendo el ejemplo de la creacin de la base de datos para una clnica, procederemos a crear una tabla
para el registro de pacientes, en la cual lo dejaremos de la siguiente manera:
*Para este caso, es posible utilizar el rut como PK, sin embargo, por un tema de orden en la creacin de
tablas, dejaremos la PK como id_nombreDeTabla.
TIPOS DE CLAVES
Se puede considerar de una clave:
1-. Es un atributo o conjunto de atributos cuyos valores distinguen a un registro en una tabla.
2.- Una clave es el conjunto mnimo de atributos cuyos valores le dan una identificacin nica a la tupla en
la relacin.
3.- Una clave es una referencia que se utiliza para identificar los registros de forma nica y est formada
por uno o ms campos de los registros.
Clave primaria o principal.- Es un identificador nico para cada registro. No puede contener
entradas nulas. Para cada registro de una relacin se utiliza un identificador nico, denominado
clave primaria o clave principal. Para elegir un campo de una tabla como clave primaria debe
cumplir con las siguientes caractersticas:
o Deber seleccionarse la que ocupe un menor espacio de almacenamiento.
o Tener una codificacin sencilla.
o El contenido de sus valores deben ser conocido y no variar.
o No debe tener valores nulos.
o Podr utilizarse en otras tablas para construir interrelaciones.
o Deben ser fcilmente recordables por el usuario. Por ejemplo, si se tiene una tabla con
2500 procedimientos de una clnica, podramos poner un id_procedimiento como clave
principal. Esto significa que si proporcionamos la clave principal la base de datos puede
encontrar al registro que contenga la clave proporcionada. Cada procedimiento tiene un
Clave externa: Define una columna o combinacin de columnas cuyos valores coinciden con la clave
principal de la misma u otra tabla. Permite la declaracin de la llave fornea.
TIPOS DE DATOS
En SQL Server, cada columna, variable local, expresin y parmetro tiene un tipo de datos relacionado. Un
tipo de datos es un atributo que especifica el tipo de datos que el objeto puede contener: datos de
enteros, datos de caracteres, datos de moneda, datos de fecha y hora, cadenas binarias, etc.
Los tipos de datos en SQL Server estn organizados en las siguientes categoras:
Cadenas de caracteres
Tipo de datos
Datos de caracteres de longitud fija hasta un mximo
Char(n) de 8,000 caracteres. Longitud definida de 1 byte
Nchar(n) Datos de caracteres Unicode de longitud fija. Longitud definida 2 bytes
Dato de caracteres de longitud variable hasta un
VarChar(n) mximo de 8,000 caracteres. 1 byte por caracter
Datos de caracteres de longitud variable hasta un
VarChar(max) mximo de 2gb 1 byte por caracter
Datos de caracteres Unicode de longitud variable
nVarChar(n) hasta un mximo de 8,000 caracteres 2 byte por caracter
Datos de caracteres Unicode de longitud variable
nVarChar(max) hasta un mximo de 2GB. 2 byte por caracter
Text Datos de caracteres de longitud variable 1 byte por caracter
nText Datos de caracteres Unicode de longitud variable 2 byte por caracter
Tipo de dato usado para nombre de tablas o
Sysname columnas equivale a nvarchar(128) 2 byte por caracter
Tipo de datos
Bit Datos enteros con valor 1 0 1 bit
Tinyint Enteros desde 0 a 255 1 byte
Smallint Enteros desde -32,768 a 32,767 2 byte
Int Enteros desde -2,147,483,648 a 2,147,483,647 4 byte
Bigint Enteros desde -2 63 a 2 63-1 8 byte
Varia acorde con el
Decimal or Numeric Nmeros de precisin exacta hasta -10 38 + 1 tamao
Money Nmeros desde -2 63 a 2 63, 8 byte
SmallMoney Nmeros desde -214,748.3648 a +214,748.3647 4 byte
Nmeros con precisin de coma flotante desde -1.79E + 308 a
Float 1.79E + 308, dependiendo del bit de precisin . 4 o 8 bytes
Real Flotante con 24-bit de precisin 4 byte
Ajuste
Tamao de
de
Tipo de datos Formato Intervalo almacenamiento
zona
(bytes)
horaria
De 00:00:00.0000000 a
Time hh:mm:ss[.nnnnnnn] 23:59:59.9999999 De 3 a 5 No
Date AAAA-MM-DD De 0001-01-01 a 9999-12-31 3 No
Smalldatetime AAAA-MM-DD hh:mm:ss De 1900-01-01 a 2079-06-06 4 No
AAAA-MM-DD
Datetime hh:mm:ss[. nnn] De 1753-01-01 a 9999-12-31 8 No
AAAA-MM-DD De 0001-01-01 00:00:00.0000000 a
datetime2 hh:mm:ss[.nnnnnnn] 9999-12-31 23:59:59.9999999 De 6 a 8 No
AAAA-MM-DD
hh:mm:ss[.nnnnnnn] [+|- De 0001-01-01 00:00:00.0000000 a
Datetimeoffset ]hh:mm 9999-12-31 23:59:59.9999999 (en UTC) De 8 a 10 Si
Los tipos de datos son definidos al momento de crear la tabla y agregar las columnas, tal como se muestra
en la imagen.
Tipo de datos
EJERCICIOS MODULO 2
Para la base de datos creada en los ejemplos, genere los siguientes ejercicios que permitirn
almacenar ms informacin importante para la clnica. Se muestran imgenes para que usted sepa
cmo debera quedar su BD.
1) Genere tablas que permitan guardar los datos de ficha_clinica, personal, tipos de personal
(considerando que un paciente puede ser atendido por mdicos, enfermeras, tec, en
enfermera, auxiliares, etc.).
2) Verifique su clave primaria para cada tabla, as como tambin las secundarias. Cada
columna debe contar con el tipo de datos correspondiente, y as permitir el correcto
ingreso de los datos.
3) Inserte datos para cada tabla (al menos 5 filas) por tabla.
Tambin es posible abrirlo desde las carpetas del costado, dando click derecho sobre la BD creada y
seleccionando new query (nueva consulta).
Otros botones:
SELECT
Las consultas de seleccin se utilizan para indicar al motor de datos que devuelva informacin de las bases
de datos. Esta informacin es devuelta en forma de conjunto de registros que se pueden almacenar en una
nueva tabla.
La sintaxis ms sencilla de una consulta de seleccin es la siguiente:
Si lo que se requiere es mostrar todas las columnas existentes en una tabla, entonces, reemplazaremos el
nombre de las columnas por el smbolo asterisco, como se muestra en la sintaxis:
ORDER BY
Adicionalmente se puede especificar el orden en que se desean recuperar los registros de las tablas
mediante la clusula ORDER BY. Su sintaxis sera:
ORDER BY
lista_de_columnas
El predicado TOP no elige entre valores iguales. En el ejemplo anterior, si la edad de Gabriela y Pedro son
iguales, la consulta devolver 26 registros en lugar de 25. (Ntese que para la BD dato ejemplo slo de
cuentan con 5 registros, por lo tanto esa es la cantidad mxima de registros a mostrar).
DISTINCT
Omite los registros que contienen datos duplicados en los campos seleccionados. Por ejemplo, varios
pacientes listados en la tabla paciente pueden tener la misma edad. Si dos registros contienen 23 en el
campo edad, la siguiente instruccin SQL devuelve un nico registro:
SELECT DISTINCT edad FROM paciente;
AS
En determinadas circunstancias es necesario asignar un nombre nuevo a alguna columna determinada de
un conjunto de registros devuelto por una consulta. Para ello, usaremos la palabra reservada AS, que se
encarga de asignar el nombre que deseamos a la columna deseada.
En este ejemplo, asignamos el nombre edad_paciente a la columna de edad con AS.
EJERCICIOS MODULO 3
where edad> 18
CRITERIOS DE SELECCIN
Los mtodos empleados hasta el momento para de recuperar un conjunto de registros de una tabla
devuelven todos los registros de la tabla. A continuacin, se estudiarn las posibilidades de filtrar los
registros con el fin de recuperar solamente aquellos que cumplan ciertas condiciones preestablecidas.
Antes de comenzar debemos tener presente que:
Cada vez que se desee establecer una condicin referida a un campo de texto la condicin de bsqueda
debe ir encerrada entre comillas simples.
Las fechas se deben escribir siempre encerrada entre almohadillas comilla simple. Por ejemplo, si deseamos
referirnos al da 3 de septiembre de 1995 debemos escribir: 03/09/1995 1995/09/03. A continuacin,
un ejemplo con la fecha para ambas escrituras de fecha.
FILTRAR DATOS
Algunos operadores lgicos soportados por SQL son: AND, OR y NOT. Los dos primeros poseen la sintaxis:
En donde expresin1 y expresin2 son las condiciones que evaluar, el resultado de la operacin vara en
funcin del operador lgico. Si a cualquiera de las anteriores condiciones le anteponemos el operador NOT
el resultado de la operacin ser el contrario al devuelto sin el operador NOT.
SELECT * FROM paciente WHERE Edad > 25 AND Edad < 50;
SELECT * FROM paciente WHERE (Edad > 25 AND Edad < 50) OR nombre = Gabriela Pealoza
El operador BETWEEN se utiliza para indicar que deseamos recuperar los registros segn el intervalo de
valores de un campo. Su sintaxis es:
En este caso la consulta devolvera los registros que contengan en "campo" un valor incluido en el intervalo
valor1, valor2 (ambos inclusive). Si anteponemos la condicin Not devolver aquellos valores no incluidos
en el intervalo.
Por ejemplo:
LIKE
El operador like Se utiliza para comparar una expresin de cadena con un modelo en una expresin SQL. Su
sintaxis es:
Ejemplo:
IN
EL operador in devuelve los registros cuyo campo indicado coincide con alguno de los dados en una lista.
Su sintaxis es:
Por ejemplo:
Transact SQL pone a nuestra disposicin mltiples funciones agregadas, las ms comunes que usaremos
son:
COUNT
Calcula el nmero de registros devueltos por una consulta. Su sintaxis es la siguiente:
COUNT(campos)
En donde campos contiene el nombre del campo que desea contar. Los operandos de campos pueden
incluir el nombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrnseca o
definida por el usuario pero no otras de las funciones agregadas de SQL). Puede contar cualquier tipo de
datos incluso texto. Count simplemente cuenta el nmero de registros sin tener en cuenta qu valores se
almacenan en los registros. La funcin Count no cuenta los registros que tienen campos null a menos que
el campo sea el carcter comodn asterisco (*).
Ejemplo:
MAX Y MIN
Min(expresin) Max(expresin)
En donde expresin es el campo sobre el que se desea realizar el clculo. expresin pueden incluir el
nombre de un campo de una tabla, una constante o una funcin (la cual puede ser intrinseca o definida por
el usuario pero no otras de las funciones agregadas de SQL).
Ejemplo:
SUM
Devuelve la suma del conjunto de valores contenido en un campo especifico de una consulta.
Su sintaxis es:
SUM(expresion)
En donde expresin representa el nombre del campo que contiene los datos que desean sumarse o una
expresin que realiza un clculo utilizando los datos de dichos campos.
Ejemplo:
AVG
Calcula el promedio de un conjunto de valores contenidos en un campo especificado de una consulta. Su
sintaxis es:
Avg(expresin)
En donde expresin representa el campo que contiene los datos numricos para los que se desea calcular
el promedio. La funci6n Avg no incluye ningn campo Null en el cIculo.
Ejemplo:
SELECT AVG(edad) FROM paciente
Esta consulta obtiene como resultado el promedio de todas las edades de la tabla paciente.
INNER JOIN
Se puede utilizar una operacin INNER JOIN en cualquier clusula FROM. Esto crea una combinacin por
equivalencia, conocida tambin como unin interna. Las combinaciones equivalentes son las ms comunes;
stas combinan los registros de dos tablas siempre que haya concordancia de valores en un campo comn
a ambas tablas.
Su sintaxis es:
SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 comp tabla2.campo2
Tabla1 y tabla2 son los nombres de las tablas desde las que se combinan los registros. Campo1 y campo2
Son los nombres de los campos que se combinan. Si no son numricos, los campos deben ser del mismo
tipo de datos y contener el mismo tipo de datos, pero no es necesario que posean el mismo nombre. Comp
es cualquier operador de comparacin relacional: =, <,<>, <=, =>, >.
En nuestra base de datos de clnica, supongamos que necesitamos unir las tablas de paciente y atencin.
Para ello realizaremos la siguiente consulta:
OUTER JOIN
una operacin outer join arroja todas las filas coincidentes y alguna o todas las filas no coincidentes,
dependiendo del tipo de outer join que se cree. SQL soporta tres tipos de outer joins:
Left Arroja todas las filas coincidentes y todas las filas no coincidentes de la tabla de la izquierda (la
tabla a la izquierda de la palabra clave JOIN).
Right Arroja todas las filas coincidentes y todas las filas no coincidentes de la tabla de la derecha (la
tabla a la derecha de la palabra clave JOIN).
Full Arroja todas las filas coincidentes y todas las filas no coincidentes de ambas tablas.
CROSS JOIN
UNION.
La clusula UNION permite unir dos o ms conjuntos de resultados en uno detrs del otro como si se tratase
de una nica tabla. De este modo podemos obtener los registros de ms de una tabla "unidos".
Las consultas por unir deben tener el mismo nmero campos, y adems los campos deben ser del
mismo tipo.
Slo puede haber una nica clausula ORDER BY al final de la sentencia SELECT.
PARTE 7: SUBCONSULTAS
L as subconsultas, al igual que las operaciones join, proporcionan una forma de acceder a datos en mltiples
tablas con una sola consulta. Una subconsulta puede agregarse a una instruccin SELECT, INSERT, UPDATE
o DELETE para permitir a esa instruccin utilizar los resultados de la consulta arrojados por la subconsulta.
La subconsulta es esencialmente una instruccin SELECT incrustada que acta como una puerta de entrada
a los datos en una segunda tabla. Los datos arrojados por la subconsulta se utilizan como la instruccin
primaria para cumplir cualquier condicin que haya sido definida en la instruccin. En este captulo se
discutir cmo se utilizan las subconsultas en diferentes instrucciones, particularmente en instrucciones
SELECT, y se proporcionarn ejemplos que demuestren cmo crear subconsultas y qu tipo de resultados
de consulta esperar.
Se pueden dividir las subconsultas de una clusula WHERE en dos categoras generales: aquellas que
pueden arrojar mltiples filas y aquellas que pueden arrojar solamente un valor. En esta seccin se analizar
la primera de estas categoras. En la siguiente seccin, Crear subconsultas que arrojan un solo valor, se
analizar la segunda categora. Mientras se expande cada tema, sin duda usted reconocer los formatos de
instruccin desde la discusin de los predicados. A pesar de que esta informacin pudiera parecer un poco
repetitiva (es por eso que se tocar de manera breve), se presenta aqu no solamente para proporcionar
un repaso cohesivo de las subconsultas, sino tambin para proporcionar una perspectiva diferente. En otras
palabras, en lugar de mirar las subconsultas a travs de la perspectiva del predicado, miraremos
directamente a la subconsulta en s.
UTILIZANDO IN
El predicado IN compara valores de una columna en la tabla primaria con valores arrojados por la
subconsulta. Si el valor de la columna se encuentra en los resultados de la subconsulta, esa fila (de la tabla
primaria) se arroja en los resultados de la consulta de la instruccin SELECT. Como ejemplo:
EXISTS
En algunas circunstancias se puede requerir que la subconsulta arroje solamente un valor de verdadero o
falso. El contenido de los datos en s mismo no es importante, en trminos de cumplir con la condicin de
un predicado. En este caso, se puede utilizar un predicado EXISTS para definir la subconsulta. El predicado
EXISTS se evala como verdadero si una o ms filas son arrojadas por la subconsulta; de otra manera, se
evala como falso. Para que un predicado EXISTS sea de utilidad, la subconsulta asociada deber incluir una
condicin de bsqueda que haga coincidir los valores en las dos tablas que estn siendo vinculadas a travs
de la subconsulta.
En la instruccin, cada fila arrojada por la instruccin SELECT principal se evala con la subconsulta. Si la
condicin especificada en el predicado EXISTS es verdadera, la fila se incluye en los resultados de la
consulta; de otra manera, la fila es omitida. Cuando la condicin especificada es verdadera, eso significa
que al menos una fila ha sido arrojada por la subconsulta.
(12/05/2016',( SELECT id_paciente FROM paciente WHERE nombre = 'Gabriela Pealoza' ),2 );
En la sentencia anterior, se utiliz una subconsulta para extraer el identificador de un nombre de paciente
en especfico y de esa manera, poder insertarlo en la tabla Atencin.
En la sintaxis, slo son obligatorias la primera y la ltima lnea. La segunda lnea es opcional. Tanto la
primera como la segunda lnea son parte de la clusula INSERT INTO. En esta clusula se debe identificar el
nombre de la tabla (o vista) en la cual se agregarn los datos. El nombre de la tabla sigue a las palabras
clave INSERT INTO. Entonces el usuario tiene la opcin de identificar los nombres de la columna en la tabla
que recibirn los datos. ste es el propsito de la segunda lnea en la sintaxis. Es posible especificar una o
ms columnas, y todas ellas debern estar dentro de parntesis. Si se especifican ms columnas, stas
debern estar separadas por comas.
En la tercera lnea de la sintaxis, que se refiere a la clusula VALUES, se deben especificar uno o ms
valores que sern ingresados en la tabla. La lista de valores deber estar encerrada en parntesis
y, si se especifica ms de uno, debern estar separados utilizando comas. Asimismo, los valores
deben cumplir los siguientes requisitos:
Si los nombres de columna no se especifican en la clusula INSERT INTO, entonces deber haber un
valor por cada columna en la tabla y los valores debern estar en el mismo orden en el que estn
definidos en la tabla.
Si los nombres de columna se especifican en la clusula INSERT INTO, entonces deber haber
exactamente un valor por cada columna especificada y esos valores debern estar en el mismo
orden en el que estn definidos en la clusula INSERT INTO.
Sin embargo, los nombres y valores de columna no tienen que estar en el mismo orden que las columnas
en la definicin de la tabla. Se debe proporcionar un valor por cada columna en la tabla excepto para las
columnas que permiten valores nulos o que tienen un valor definido por defecto. Cada valor con un carcter
del tipo de datos de cadena debe estar encerrado en comillas sencillas. Se puede utilizar la palabra clave
NULL (o null) como el valor de los datos en la clusula VALUES para asignar un valor nulo a cualquier
columna que permita valores nulos.
Si se intenta ejecutar una instruccin INSERT omitiendo una columna que no permita valores nulos y que
no tenga un valor por defecto definido, se arrojar como resultado un error. Cuando se inserta una nueva
fila, el RDBMS debe obtener un valor para cada columna desde algn lado, por lo que si no se permiten los
valores nulos, entonces el valor debe venir ya sea de un valor por defecto (si est definido) o de la clusula
VALUES de la instruccin INSERT.
UPDATE
Como su nombre lo indica, la instruccin UPDATE permite actualizar los datos en una base de datos SQL.
Con la instruccin UPDATE se pueden modificar datos en una o ms filas para una o ms columnas. La
sintaxis para la instruccin UPDATE se puede mostrar de la manera siguiente:
Como se puede ver, la clusula UPDATE y la clusula SET son obligatorias, mientras que la clusula WHERE
es opcional. En la clusula UPDATE se debe especificar el nombre de la tabla (o vista) que se est
actualizando. En la clusula SET se debe especificar una o ms expresiones de clusula.
Se debe especificar una condicin o conjunto de condiciones que acta como un filtro para las filas que se
estn actualizando. Solamente las filas que cumplen con estas condiciones son actualizadas. En otras
palabras, solamente las filas cuyo resultado es verdadero son actualizadas.
Ejemplo:
DELETE
Contiene solamente dos clusulas, y una sola de ellas es obligatoria. La siguiente sintaxis muestra qu tan
bsica es la instruccin DELETE:
Como se puede ver, la clusula DELETE FROM requiere que se especifique el nombre de la tabla (o vista) de
la cual se quieren eliminar filas. La clusula WHERE, la cual es similar a la clusula WHERE en una instruccin
SELECT y en una instruccin UPDATE, requiere que se especifique una condicin de bsqueda. Si no se
incluye una clusula WHERE en la instruccin DELETE, todas las filas sern eliminadas de la tabla
especificada. Es importante comprender que la instruccin DELETE no elimina la tabla en s, sino solamente
filas en la table.
Ejemplo:
TRUNCATE
Para realizar un borrado completo de tabla debemos considerar la posibilidad de utilizar la sentencia
TRUNCATE, mucho ms rpida que DELETE. Es decir, todos los registros que se encuentren en la tabla sern
eliminados.
La forma ms sencilla de distinguir entre los procedimientos y funciones invocados por SQL es considerar
un procedimiento como un conjunto de una o ms instrucciones SQL almacenadas, similar a cmo una vista
almacena una instruccin SELECT, y considerar una funcin como un tipo de operacin que arroja un valor,
similar a las funciones SET como SUM o AVG.
CREATE PROCEDURE
La primera sintaxis que veremos es aquella que sirve para crear un procedimiento. En su nivel ms bsico,
la instruccin CREATE PROCEDURE luce de la siguiente manera:
Como se puede ver, debe proporcionarse un nombre para el procedimiento (en la clusula CREATE
PROCEDURE) seguido por cero o ms declaraciones de parmetro, que van encerradas en parntesis. Se
deben proporcionar los parntesis incluso si no se define ninguna declaracin. Despus de las declaraciones
de parmetro se tiene la opcin de definir una o ms caractersticas de la rutina. Por ejemplo, se puede
especificar si una rutina es SQL o una escrita en otro lenguaje, por ejemplo, C o Java.
CREATE FUNCTION
Ahora demos un vistazo a la instruccin utilizada para crear una funcin invocada por SQL. Como se puede
ver en la siguiente sintaxis, una funcin contiene unos cuantos elementos ms que un procedimiento:
VARIABLES LOCALES
Adems de permitir pasar los parmetros a un procedimiento, SQL tambin proporciona una forma para
crear variables locales en la definicin del procedimiento que puedan ser utilizadas dentro del cuerpo del
procedimiento. Una variable local puede ser considerada como un tipo de marcador de posicin que
mantiene un valor en la memoria durante la ejecucin de las instrucciones en el cuerpo de la rutina. Una
vez que las instrucciones han sido ejecutadas, la variable deja de existir.
Sintaxis:
Siguiendo este mismo ejemplo, vamos a crear la variable resultado para una posterior operacin.
Una vez que se ha declarado la variable, debe asignrsele un valor antes de que pueda ser referenciada.
(Sin embargo, algunas implementaciones asignan automticamente un valor nulo a las variables en el
momento de ser definidas.) Se puede utilizar la instruccin SET para asignar un valor a una variable
utilizando la siguiente sintaxis:
) y ambos son CD de New Age. En una definicin de procedimiento no se est limitado solamente a una
variable. Se puede crear una instruccin DECLARE para cada variable que se quiera incluir. Tambin es
posible incluir mltiples variables en una instruccin, si esas variables estn asignadas al mismo tipo de
datos.
INSTRUCCIONES CONDICIONALES.
IF
La instruccin utiliza las palabras clave IF, THEN y ELSE para establecer las condiciones y definir las acciones
a tomar: si (if ) se cumple la condicin, entonces (then) se ejecuta la instruccin SQL, o se toma alguna otra
(else) accin.
WHILE
la clusula WHILE finaliza la repeticin automticamente cuando la condicin se evala como falsa.
Ntese que muchas implementaciones, incluyendo Oracle y SQL Server, utilizan un bloque BEGIN en lugar
de la palabra clave DO para encerrar las instrucciones que se van a repetir por el bucle de repeticin WHILE.
Un punto ms en el que hay que poner atencin es dnde se evala la condicin en la lgica de repeticin.
Algunas implementaciones evalan la condicin al principio de la repeticin. Otras la evalan al final de la
repeticin, lo que significa que las instrucciones en la repeticin siempre se ejecutarn por lo menos una
vez, incluso si la condicin se evala como falsa la primera vez que se inicia la repeticin.
EXECUTE
Una vez que se ha preparado la instruccin, puede entonces utilizarse la funcin Execute( ) para ejecutar la
instruccin. La funcin Execute( ) solamente ocupa un argumento (el indicador de instruccin que contiene
la instruccin preparada.
EXECUTE mayora_edad
CASE
Una expresin de valor CASE permite determinar una serie de condiciones que modifican valores
especficos arrojados por la instruccin SQL. Se puede cambiar la forma en que un valor est representado
o se calcula un nuevo valor. Cada valor es modificado de acuerdo con la condicin especificada dentro de
la expresin CASE. Una expresin de valor incluye la palabra clave CASE y una lista de condiciones. La ltima
condicin proporciona una condicin por defecto si ninguna de las condiciones anteriores ha sido cumplida.
Entonces la expresin de valor se cierra utilizando la palabra clave END.
MANEJO DE ERRORES
Cuando se incrusten instrucciones SQL en el lenguaje host, se deber proporcionar una forma de tomar
acciones especficas si se recibe un mensaje de error o de advertencia cuando se intenta acceder a los datos.
SQL proporciona un mtodo relativamente sencillo que puede utilizarse para monitorear los errores y
advertencias y tomar acciones dependiendo de los resultados de ese monitoreo.
ROLLBACK
A pesar de que el objetivo de cualquier transaccin es completar los cambios hechos por las instrucciones
en esa transaccin, no hay duda de que existirn ocasiones cuando se quiera reinvertir esos cambios. Para
poder controlar estas reinversiones, se debe utilizar una instruccin ROLLBACK para deshacer los cambios
y eliminar la transaccin, o para regresar los cambios a un punto de recuperacin especfico. La siguiente
sintaxis muestra los diferentes elementos que pueden ser incluidos en una instruccin ROLLBACK:
Existe un nmero de similitudes entre SGDB (por ejemplo, el uso de la instruccin CREATE TRIGGER para
crear un activador), y las implementaciones de activadores en varios productos comparten algunas
caractersticas bsicas, particularmente aquellas que hacen posible dispararlo automticamente para
realizar una accin secundaria relacionada con la accin primaria que invoc el activador.
Un Triggers es creado para generar una instruccin que se gatilla, cuando es invocada una accin
primaria.
Por ejemplo, supongamos que no se permite la eliminacin de algn usuario previa autorizacin,
entonces se genera un trigger que desencadenar un mensaje de advertencia indicando que no pueden
ser borrados los datos en la tabla en especfico y evitar dicha accin.
Si sintaxis sera:
Tabla | vista es el nombre de la tabla o vista en la que se ejecuta el desencadenador. Slo se puede hacer
referencia a una vista mediante un desencadenador INSTEAD OF. No es posible definir desencadenadores
DML en tablas temporales locales o globales.
DELETE INSERT UPDATE Especifica las instrucciones de modificacin de datos que activan el
desencadenador cuando se intenta ejecutarlas en esta tabla o vista. Se debe especificar al menos una
opcin. En la definicin del desencadenador se permite cualquier combinacin de estas opciones, en
cualquier orden.
A pesar de que el estndar SQL no soporta ninguna clase de instruccin que permite alterar un activador,
s soporta una forma de eliminar un activador, que se logra utilizando la instruccin DROP TRIGGER. Como
se puede ver en la siguiente sintaxis, esta instruccin es muy bsica:
AFTER indica que el desencadenador slo se activa cuando todas las operaciones especificadas en la
instruccin SQL desencadenadora se han ejecutado correctamente. Adems, todas las acciones
referenciales en cascada y las comprobaciones de restricciones deben ser correctas para que este
desencadenador se ejecute. BEFORE indica que las sentencias sern ejecutadas despus.
INSTEAD OF indica que se ejecuta el desencadenador en vez de la instruccin SQL desencadenadora, por lo
que se suplantan las acciones de las instrucciones desencadenadoras.
Como mximo, se puede definir un desencadenador INSTEAD OF por cada instruccin INSERT, UPDATE o
DELETE en cada tabla o vista. No obstante, en las vistas es posible definir otras vistas que tengan su propio
desencadenador INSTEAD OF.
Cuando se trabaja con los datos SQL de forma interactiva, tener los datos arrojados en conjuntos raramente
representa un problema debido a que normalmente es posible desplazarse a travs de los resultados de la
consulta para encontrar la informacin que se necesita. Si el tamao de los resultados es demasiado
extenso para desplazarse fcilmente, es posible hacer ms preciso el enfoque de la expresin de bsqueda
para arrojar un conjunto de resultados ms manejable. Sin embargo, la mayora de los accesos de datos se
hace a travs de medios diferentes a la invocacin directa (a pesar del hecho de que accedemos a los datos
de forma interactiva a travs de todo el libro). Uno de los mtodos ms comunes, el SQL incrustado, accede
a los datos a travs de instrucciones SQL incrustadas en un programa de aplicacin. Los elementos de datos
arrojados por las instrucciones SQL son utilizados por un lenguaje de programacin externo (el lenguaje
host) para soportar procesos de aplicacin especficos.
La mayora de los lenguajes de programacin de aplicacin soportan el uso de cursores para recuperar
datos de una base de datos SQL. El lenguaje del cursor est incrustado en el cdigo de programacin de
una forma muy parecida a la que se incrustara cualquier instruccin SQL. Cuando se utiliza un cursor en un
lenguaje de programacin, primero se debe declarar el cursor (similar a como se declarara una variable) y
luego utilizar el nombre de la instruccin (el nombre que se le asign al cursor) en otras instrucciones SQL
incrustadas para abrir el cursor, recuperar filas individuales a travs del cursor y cerrar el cursor.
Para poder trabajar con Cursores debemos realizar los siguientes pasos:
/* :*/ ahora declaramos las variables con las que vamos a recorrer el cursor
/* Se mueve al siguiente registro dentro del cursor y los asignamos a las variables antes
declaradas*/
/* , 0 Retorna el estatus del ltimo registro recorrido en el cursor cuando es igual a encontr
begin
print' : ' El Nombre de la persona es + @ + nombres ' : ' y sus apellidos + apellidos
end
/* , Cuando concluimos con el recorrido del cursor este debe ser cerrado y luego destrudo
Los cursores son muy eficientes para utilizarlos en Job de las bases de datos que realiza alguna operacin
donde necesitamos modificar alguna informacin dentro de un bucle. Los cursores demandan mucho del
servidor de base datos por lo tanto no es recomendable abusar del mismo ya que necesitan bastantes
recursos para su ejecucin.
Convierten una expresin de un tipo de datos en otro de forma explcita. CAST y CONVERT proporcionan
funciones similares. Su sintaxis para ambas consultas se muestra a continuacin:
expresin Es cualquier expresin vlida. tipo_dato Es el tipo de datos de destino proporcionado por el
sistema. Incluye xml, bigint y sql_variant. No se pueden utilizar tipos de datos de alias.
Longitud es un parmetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary o varbinary.
Para CONVERT, si no se ha especificado el parmetro longitud, el valor predeterminado es 30 caracteres.
Es el estilo del formato de fecha usado para convertir datos de tipo datetime o smalldatetime en datos de
caracteres (con tipo de datos nchar, nvarchar, char, varchar, nchar o nvarchar), o para convertir datos de
caracteres de formatos de fecha y hora conocidos en datos de tipo datetime o smalldatetime; o bien, el
formato de cadena usado para convertir datos de tipo float, real, money o smallmoney en datos de
caracteres (con tipo de datos nchar, nvarchar, char, varchar, nchar o nvarchar). Cuando estilo es NULL, el
resultado devuelto tambin es NULL.
0 (predeterminado) Sin separadores de millar cada tres dgitos a la izquierda del separador decimal y
dos dgitos a la derecha del separador decimal; por ejemplo, 4235,98.
1 Separadores de millar cada tres dgitos a la izquierda del separador decimal y dos dgitos a la derecha
del separador decimal; por ejemplo, 3.510,92.
2 Sin separadores de millar cada tres dgitos a la izquierda del separador decimal y cuatro dgitos a la
derecha del separador decimal; por ejemplo, 4235,9819.
Ejemplo:
PARSE Y TRY_PARSE
La funcin PARSE permite convertir una cadena de texto a un valor numrico o de fecha/hora, y produce
un error en caso de no poder realizar la conversin. Es importante tener en cuenta, que la funcin PARSE
utiliza el motor (CLR) del NET Framework, ya que por ejemplo, mientras que la cadena 20130101 se puede
convertir a fecha con CAST y CONVERT, esta misma cadena no podr ser convertida a fecha con PARSE.
Adems, la funcin PARSE tambin permite realizar la conversin teniendo en cuenta la informacin de un
idioma especificado como parmetro.
Para complementar a la funcin PARSE, desde SQL Server 2012 tambin tenemos disponible a la funcin
TRY_PARSE, que es equivalente a PARSE, excepto que devuelve NULL (en lugar de generar una excepcin)
cuando no puede realizar la conversin.
FORMAT
La funcin Format aplica desde SQL Server 2012 en adelante. Devuelve un valor con el formato previamente
indicado. Se puede utilizar para definir el formato de una fecha y hora o para retornar un numero como
varchar en un formato especfico.
Su sintaxis es:
El parmetro valor es el valor que quieres formatear, debe ser un dato compatible con la funcin. El
formato es precisamente como queremos nuestro resultado (ej. C, D, g, dd/MM/yyyy).
A continuacin, se muestra un ejemplo extrayendo los datos de fecha de atencin de la tabla atencin. Se
puede apreciar que la fecha se encuentra en formato ao-mes-da.
Veremos cmo podramos cambiar el formato, dejando la fecha da, mes, ao.
En variable fecha, estamos guardando la fecha de atencin para id_atencion 1. Se utiliza esta variable para
utilizarla en la sentencia format.
MANEJO DE FECHAS
Las funciones de valor de fecha y hora proporcionan informacin acerca de la fecha y la hora actuales.
Cada funcin arroja un valor basado en la fecha u hora (o ambos) tal como estn configurados en el
sistema operativo.
select getdate();
datepart(): retorna la parte especfica de una fecha, el ao, trimestre, da, hora, etc. Los valores para
"partedefecha" pueden ser: year (ao), quarter (cuarto), month (mes), day (dia), week (semana), hour
(hora), minute (minuto), second (segundo) y millisecond (milisegundo).
Su sintaxis es:
Select datepart(partedefecha,fecha)
Ejemplos:
Datename: Retorna el nombre de una parte especfica de una fecha. Los valores para "partedefecha"
pueden ser los mismos que se explicaron anteriormente. Ejemplos:
select datename(month,getdate());
dateadd: Agrega un intervalo a la fecha especificada, es decir, retorna una fecha adicionando a la fecha
enviada como tercer argumento, el intervalo de tiempo indicado por el primer parmetro, tantas veces
como lo indica el segundo parmetro. Los valores para el primer argumento pueden ser: year (ao), quarter
(cuarto), month (mes), day (dia), week (semana), hour (hora), minute (minuto), second (segundo) y
millisecond (milisegundo).
Su sintaxis es:
Select dateadd(partedelafecha,numero,fecha)
Datediff: Calcula el intervalo de tiempo (segn el primer argumento) entre las 2 fechas. El resultado es un
valor entero que corresponde a fecha2-fecha1. Los valores de "partedelafecha) pueden ser los mismos que
se especificaron anteriormente.
Ejemplos:
TEXTOS UTILIZADOS