[go: up one dir, main page]

0% encontró este documento útil (0 votos)
36 vistas51 páginas

T8 Lenguaje Transact SQL

temario lenguaje sql para sql server 2022

Cargado por

bratt241005
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
36 vistas51 páginas

T8 Lenguaje Transact SQL

temario lenguaje sql para sql server 2022

Cargado por

bratt241005
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 51

DEPARTAMENTO DE INFORMÁTICA

GESTIÓN DE
BASES DE DATOS
UNIDAD DE TRABAJO 8:
LENGUAJE Transact-SQL
Mª VICTORIA BULLÓN ALONSO
CURSO 2023-2024
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

ÍNDICE

1 Introducción a SQL............................................................................................. 3
1.1 HISTORIA DEL SQL .................................................................................................. 3
1.2 TAREAS DE USUARIO Y DE ADMINISTRADOR ................................................................... 4
1.3 PARTES DEL LENGUAJE SQL ....................................................................................... 5
1.4 MODOS DE TRABAJO CON SQL .................................................................................. 5
2 Operadores, funciones y condiciones ................................................................. 6
2.1 OPERADORES ......................................................................................................... 6
2.1.1Operadores aritméticos .......................................................................................................... 6
2.1.2Operador de concatenación ................................................................................................... 6
2.1.3Operadores de comparación .................................................................................................. 6
2.1.4Operador NOT IN .................................................................................................................... 7
2.1.5Operador LIKE ......................................................................................................................... 8
2.1.6Operadores lógicos ................................................................................................................. 8
2.1.7Operadores de conjuntos ........................................................................................................ 9
2.2 FUNCIONES SQL ................................................................................................... 11
2.2.1 Funciones numéricas ............................................................................................................ 11
2.2.2 Funciones de caracteres ....................................................................................................... 12
2.2.3 Funciones de fechas .............................................................................................................. 14
2.2.4 Conversión de datos.............................................................................................................. 16
2.2.5 Funciones agrupadas ............................................................................................................ 17
3 Comandos ....................................................................................................... 20
3.1 COMANDOS DML (DATA MANIPULATION LANGUAGE) ................................................ 20
3.1.1SELECT................................................................................................................................... 20
3.1.2INSERT................................................................................................................................... 25
3.1.3UPDATE ................................................................................................................................. 27
3.1.4DELETE .................................................................................................................................. 28
3.1.5TRUNCATE TABLE .................................................................................................................. 29
3.2 COMANDOS DDL (DATA DEFINITION LANGUAGE) ....................................................... 30
3.2.1 Creación y manipulación de una base de datos .................................................................... 30
3.2.2 Creación y manipulación de tablas ....................................................................................... 35
3.2.3 Creación y manipulación de índices ...................................................................................... 45
3.2.4 Creación y manipulación de vistas ........................................................................................ 47
3.3 COMANDOS DCL (DATA CONTROL LANGUAGE) .......................................................... 49
3.3.1 BEGIN TRANSACTION ............................................................................................................ 49
3.3.2 COMMIT TRANSACTION ....................................................................................................... 49
3.3.3 ROLLBACK TRANSACTION ..................................................................................................... 50

2
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

1 Introducción a SQL
SQL (Structured Query Language, lenguaje estructurado de consulta) es en la actualidad el
lenguaje de uso y programación de bases de datos relacionales más extendido. Se trata de un
lenguaje para realizar operaciones sobre una base de datos.
Destacan las siguientes características de SQL:
➢ Es un lenguaje que permite a los usuarios realizar consultas de modo interactivo, ya
que fue desarrollado como lenguaje de usuario final.
➢ Es un lenguaje que trabaja de modo declarativo. Cuando un usuario quiere realizar
una operación con los datos no debe escribirla paso a paso (no es procedimental).
Basta con que especifique qué resultado quiere obtener y el gestor de la base de
datos se ocupará de realizar las tareas necesarias.
➢ SQL es un lenguaje que permite la definición de datos (DDL) y su gestión (DML),
almacenando todos los elementos creados en la base de datos.
➢ Puede emplearse como lenguaje de programación de bases de datos, incrustado en
otros lenguajes o directamente mediante su empleo como lenguaje de programación
dentro del propio Sistema Gestor de Bases de Datos. PL/SQL en Oracle o Transact-SQL
en SQL Server.
➢ El hecho de poseer gestión de transacciones, de integridad, seguridad y validación de
los datos facilita la protección de los mismos en redes, tanto intranet como extranet.
➢ Es sencillo y robusto.

1.1 Historia del SQL


Desde 1965 hasta 1985 los estándares tecnológicos eran desarrollados por los gigantes del
hardware, con IBM a la cabeza. Hasta mediados de los 80 los productos software relacionados
con la gestión de datos no permitían compartir datos y el coste de conversión de unos
sistemas de bases de datos a otros era prohibitivo, lo que llevaba a un matrimonio de por vida
de las empresas que adquirían software con su proveedor de hardware.
Desde 1970 hasta 1985, IBM desarrolla un gestor de bases de datos, denominado DB2
(nombre que mantiene en la actualidad) basado en el modelo relacional de datos, definido a
principios de los 70 por Codd.
Para facilitar el desarrollo de sus sistemas, IBM publica en diferentes medios de información
los datos necesarios para crear una base de datos relacional. A la vista de este material, en
1984 Oracle Corporation lanza al mercado un producto comercial que cumple las
características del modelo relacional. Poco tiempo después aparecen en el mercado las bases
de datos de Informix, Sybase e IBM. De modo que en poco tiempo existen 6 sistemas de
gestión de bases de datos basados en el modelo relacional.
En esta época no hay ningún estándar ANSI para el lenguaje SQL, de modo que los diferentes
productos tenían órdenes similares, pero, en ocasiones, órdenes que se llamaban igual,
funcionaban de forma diferente.
Esta situación cambia a partir del año 1986 y SQL se convierte en un lenguaje estándar. La
razón hay que buscarla en que era necesario tener una certificación ANSI para poder entrar a
tomar parte en los contratos de adquisición de software de bases de datos por el gobierno de
los EE.UU. Por ello los fabricantes tuvieron que aceptar los estándares SQL para poder
competir.

3
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

El ANSI SQL sufrió varias revisiones y agregados a lo largo del tiempo:

Año Nombre Alias Comentarios

1986 SQL-86 SQL-87 Primera publicación hecha por ANSI. Confirmada por ISO en 1987.

1989 SQL-89 Revisión menor. Incorpora C a los lenguajes que soportan SQL
embebido.

1992 SQL-92 SQL2 Revisión mayor. Es el estándar de facto de la inmensa mayoría de


los SGBD comerciales actualmente.

1999 SQL:1999 SQL3 Se agregaron las consultas recursivas para relaciones jerárquicas,
triggers y algunas características orientadas a objetos.

2003 SQL:2003 Introduce algunas características de XML, cambios en las funciones,


estandarización del objeto sequence y de las columnas
autonuméricas.

Define las maneras en las cuales el SQL se puede utilizar


2006 SQL:2006
conjuntamente con XML.

Permite el uso de la claúsula ORDER BY fuera de los cursores.


2008 SQL:2008
Incluye INSTEAD OF en triggers. Añade TRUNCATE.

Datos temporales (PERIOD FOR). Mejoras en las funciones de


2011 SQL:2011
ventana y de la cláusula FETCH.

Permite búsqueda de patrones, funciones de tabla polimórficas y


2016 SQL:2016
compatibilidad con los ficheros JSON.

A partir del lenguaje ANSI SQL cada Sistema Gestor de Bases de Datos desarrolla su versión
extendida del lenguaje SQL. Así tenemos PL/SQL en Oracle o Transact-SQL en SQL Server. En
este manual nos centraremos en el lenguaje Transact-SQL.

1.2 Tareas de usuario y de administrador


La existencia de una base de datos de tamaño medio requiere un mantenimiento bastante
costoso. Por ello, se ponen en marcha bases de datos cuando hay varias personas interesadas
en su aprovechamiento. Un grupo de personas que intenta utilizar unos datos genera
problemas ya conocidos, como las violaciones de integridad y los posibles errores por acceso
simultáneo.

4
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Para resolver estos y otros conflictos aparece la figura del administrador, DBA (Data Base
Administrator). Esta persona posee todos los privilegios de acceso sobre los datos.
Son tareas específicas del administrador:
- La creación y destrucción de los objetos de la base de datos: tablas, vistas, usuarios,...
- La autorización de acceso a los objetos.
- La gestión del almacenamiento físico y del espacio en disco.
- La política de copias de seguridad y la restauración de la base de datos en caso de
caída.

Las personas o programas que acceden a la base de datos y no son el DBA reciben el nombre
genérico de usuarios. Estos usuarios se pueden clasificar en:
• Programadores: Se trata de personas que no están propiamente interesadas en los
datos, sino en desarrollar un programa que trabaje sobre los datos. Este programa será
utilizado por un usuario final cuando esté acabado.
• Usuarios finales: Son aquellos a los que les interesan los datos almacenados en la base
de datos. Estos usuarios tienen dos opciones para trabajar:
o Utilizar el lenguaje SQL para acceder directamente a los datos en SGBD.
o Utilizar una aplicación realizada a medida por un programador.

Las principales tareas de los usuarios son:


- Efectuar consultas.
- Realizar modificaciones.
- Ejecutar aplicaciones.

1.3 Partes del lenguaje SQL


Existen dos fases en la vida de una base de datos: la etapa de preparación y puesta en marcha
y la etapa de explotación. De este modo podemos dividir las tareas que se realizan sobre una
base de datos en dos grandes grupos y cada uno de estos grupos lleva asociado un sublenguaje
SQL. Se distinguen:
• DDL (Data Definition Language). Es un lenguaje utilizado para la creación y
mantenimiento de la estructura de la base de datos. Con este lenguaje se define el
esquema físico de la base de datos y es el lenguaje que utiliza el administrador para
sus tareas.
• DML (Data Manipulation Language). Incluye las instrucciones para consultar la base de
datos, así como para insertar o eliminar tuplas y modificar valores de los datos. Este
lenguaje es el utilizado para la fase de explotación de la base de datos y es utilizado
por los usuarios finales.
• DCL (Data Control Language). Incluye las instrucciones para la gestión de transacciones
explícitas: inicio de la transacción y finalización de la misma, manteniendo o
descartando los cambios realizados durante el tiempo de la transacción.

1.4 Modos de trabajo con SQL


El lenguaje SQL se utiliza para actuar sobre una base de datos de alguno de estos modos:
a) De modo interactivo. Desde un terminal se establece una conversación entre el
usuario y el SGBD. Cualquier orden SQL puede ejecutarse por este método sin ninguna
restricción.
b) Desde un programa. Un usuario ejecuta sobre el sistema operativo una aplicación.
Ésta puede ser de dos tipos:

5
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

- Un programa escrito íntegramente en lenguaje SQL, con extensiones que


lo dotan de las estructuras de programación habituales (bucles, sentencias
alternativas, ...). Un ejemplo es el lenguaje PL/SQL de Oracle.
- Un programa escrito en un lenguaje convencional de programación (C,
Java, Cobol, ...) parte de cuyo texto está escrito en SQL. Es lo que se conoce
como SQL embebido.
2 Operadores, funciones y condiciones

2.1 Operadores
Un operador manipula los datos individualmente y devuelve un resultado. Los
operadores están representados por caracteres especiales o por teclas.

2.1.1 Operadores aritméticos


Se puede utilizar un operador aritmético en una expresión para negar, añadir, restar,
multiplicar y dividir valores numéricos. El resultado de la operación es también un valor
numérico.

Operador Propósito Ejemplo


+- Denota una cantidad positiva o negativa. SELECT * FROM orders
WHERE qtysold = -1
SELECT * FROM emp
WHERE -sal < 0
*/ Multiplicación / División SELECT sal*1.1 FROM emp
+- Suma / Resta. SELECT sal + comm FROM emp

2.1.2 Operador de concatenación


El operador de concatenación manipula strings.

Operador Propósito Ejemplo


+ Concatena cadenas de caracteres SELECT 'Name is ' + ename
FROM emp
El resultado de la concatenación de dos strings es otro string. El tipo de datos del string
que queda después de la concatenación es del mismo tipo que los strings que se concatenan.

2.1.3 Operadores de comparación


Los operadores de comparación comparan dos expresiones. El resultado de la
comparación puede ser TRUE, FALSE o UNKNOWN.

Operador Propósito Ejemplo


= Igualdad SELECT *
FROM emp
WHERE sal = 1500
!=, <> Desigualdad SELECT *
FROM emp
WHERE sal != 1500
> Mayor que SELECT * FROM emp
WHERE sal > 1500

6
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Operador Propósito Ejemplo


< Menor que
SELECT * FROM emp
WHERE sal < 1500
>= Mayor o igual SELECT * FROM emp
WHERE sal >= 1500
<= Menor o igual
SELECT * FROM emp
WHERE sal <= 1500
IN Igual a alguno de los valores indicados en la SELECT * FROM emp
lista. WHERE job IN
('CLERK','ANALYST')

SELECT * FROM emp


WHERE sal IN
(SELECT sal FROM emp
WHERE deptno = 30)
NOT IN No igual a ninguno de los valores indicados en SELECT * FROM emp
la lista. WHERE sal NOT IN
(SELECT sal FROM emp
WHERE deptno = 30)

SELECT * FROM emp


WHERE job NOT IN
('CLERK', ANALYST');
[NOT] [No] mayor que o igual a x y menor que o igual SELECT * FROM emp
BETWEEN a y. WHERE sal
X AND y BETWEEN 2000 AND 3000
X [NOT] VERDADERO si x cumple (o no) con el patrón y. SELECT * FROM tab1
LIKE En y, el caracter "%" sustituye a cualquier WHERE col1 LIKE
carácter o cadena de caracteres, excepto null. 'A_C%’
El character "_" sustituye cualquier carácter
simple.
IS Comprueba si un valor es o no nulo. Es el único SELECT ename, deptno
[NOT] operador que puede trabajar con valores de FROM emp
NULL tipo nulo. Ver "Nulls". WHERE comm IS NULL

2.1.4 Operador NOT IN


Si cualquier campo de la lista siguiente es nulo, todos los registros serán evaluados a
UNKNOWN (y no retornara ningún registro). Por ejemplo, la siguiente instrucción retornará el
string ‘TRUE’ para cada registro que cumpla la condición:

SELECT 'TRUE'
FROM emp
WHERE deptno NOT IN (5,15);

7
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

2.1.5 Operador LIKE


Es usado en comparaciones con plantilla de cadenas de caracteres. La sintaxis para una
condición utilizando el operador LIKE es la siguiente:

Char1 [NOT] LIKE char2

Donde:

char1 Es el valor a comparar con la plantilla. Este valor tiene que ser de los tipos CHAR or
VARCHAR.
NOT Invierte el resultado de evaluar la condición.
char2 Es la plantilla o modelo con el se compara char1.

Hay diferencias cuando se utiliza el operador = y el operador LIKE. Por ejemplo, la


siguiente consulta muestra los salarios de todos los empleados cuyo nombre comience por
‘SM’:

SELECT sal
FROM emp
WHERE ename LIKE 'SM%'

La siguiente consulta utiliza el operador = y muestra los salarios de los empleados cuyo
nombre sea ‘SM%’:

SELECT sal
FROM emp
WHERE ename = 'SM%'

Los caracteres especiales que se pueden utilizar con el operador LIKE son los
siguientes:

▪ El underscore (_), representa un solo carácter.


▪ El signo de tanto por ciento (%), representa ningún o muchos caracteres.

Para más información sobre el uso de este operador buscar LIKE en la documentación
de Microsoft.

2.1.6 Operadores lógicos


Un operador lógico combina el resultado de dos comparaciones para producir un
resultado simple.

Operador Propósito Ejemplo


NOT Invierte el resultado de evaluar una condición. SELECT *
FROM emp
WHERE NOT (job IS NULL)

SELECT *
FROM emp
WHERE NOT

8
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Operador Propósito Ejemplo


(sal BETWEEN 1000 AND 2000)
AND Operador lógico y. SELECT *
FROM emp
WHERE job = 'CLERK'
AND deptno = 10
OR Operador lógico o. SELECT *
FROM emp
WHERE job = 'CLERK'
OR deptno = 10

2.1.7 Operadores de conjuntos


Los operadores de conjuntos combinan el resultado de dos consultas en un único
resultado.
Para combinar los conjuntos de resultados de dos consultas las reglas básicas son:
• El número y el orden de las columnas debe ser el mismo en todas las consultas.
• Los tipos de datos deben ser compatibles.

Operador Retorna
UNION Devuelve filas distintas seleccionadas por cualquiera de las consultas.
UNION ALL Devuelve todas las filas seleccionadas por cualquiera de las consultas,
incluyendo los duplicados.
EXCEPT Devuelve filas distintas de la consulta de entrada izquierda que no aparecen en
la consulta de entrada derecha.
INTERSECT Devuelve filas distintas que son el resultado de las consultas de entrada
izquierda y derecha.

Ejemplos
Partiendo de las siguientes tablas:

SELECT part
FROM orders_list1

PART
----------
SPARKPLUG
FUEL PUMP
FUEL PUMP
TAILPIPE

SELECT part
FROM orders_list2

PART
----------
CRANKSHAFT
TAILPIPE

9
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

TAILPIPE

UNION
La siguiente instrucción combina los registros que se encuentran en orders_list1 y/o
orders_list2 eliminando duplicados:

SELECT part
FROM orders_list1
UNION
SELECT part
FROM orders_list2

PART
----------
SPARKPLUG
FUEL PUMP
TAILPIPE
CRANKSHAFT

UNION ALL
La siguiente instrucción combina los registros que se encuentran en orders_list1 y/o
orders_list2 manteniendo duplicados:

SELECT part
FROM orders_list1
UNION ALL
SELECT part
FROM orders_list2

PART
SPARKPLUG
FUEL PUMP
FUEL PUMP
TAILPIPE
CRANKSHAFT
TAILPIPE
TAILPIPE

EXCEPT
La siguiente instrucción permite obtener los registros la tabla orders_list1 que no se
encuentran en orders_list2:

SELECT part
FROM orders_list1
EXCEPT
SELECT part
FROM orders_list2

PART
----------

10
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

SPARKPLUG
FUEL PUMP

INTERSECT
La siguiente instrucción permite obtener los registros que se encuentran
simultáneamente en las tablas orders_list1 y orders_list2:

SELECT part
FROM orders_list1
INTERSECT
SELECT part
FROM orders_list2

PART
TAILPIPE

2.2 Funciones SQL


Una función SQL es similar a un operador, en que ambos operan con datos y devuelven
un resultado. Las funciones son diferentes de los operadores en que aparecen con
argumentos.
Si se llama a una función SQL, y se le pasa un tipo de argumento con un tipo de dato
distinto del que tiene definido la función, SQL Server convierte implícitamente el argumento al
tipo de dato que tiene definido la función.
Las funciones SQL pueden ser de los siguientes tipos generales:
▪ Funciones escalares (simples).
▪ Funciones agregadas (de grupo).

Estos dos tipos difieren en el número de registros sobre los que pueden actuar. Una
función escalar retorna un único registro, de todos los registros de la tabla o vista sobre la que
se ha efectuado la consulta; una función agregada retorna un único registro, de un grupo de
registros sobre los que se ha efectuado la consulta.

2.2.1 Funciones numéricas


Las funciones numéricas aceptan argumentos numéricos, y devuelven valores
numéricos.

Supongamos la tabla numeros:

campo1 campo2
-15 15.76

2.2.1.1 ABS
Propósito Retorna el valor absoluto de n.

Ejemplo SELECT ABS(campo1) "Valor absoluto” FROM numeros

Valor absoluto

11
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

15

2.2.1.2 CEILING
Propósito Retorna el entero más pequeño mayor o igual que n.

Ejemplo SELECT CEILING(campo2) "Ceiling" FROM numeros

Ceiling
16

2.2.1.3 FLOOR
Propósito Retorna el entero mayor que sea igual o menor que n.

Ejemplo SELECT FLOOR(campo2) "Floor" FROM numeros

Floor
15

2.2.1.4 ROUND
Sintaxis ROUND(n[,m])
Propósito Retorna n redondeado m lugares a la derecha del punto decimal;

Ejemplo SELECT ROUND(Campo2,1) "Round" FROM numeros

Round
15.80

2.2.1.5 SIGN
Sintaxis SIGN(n)
Propósito Si n<0, la función retorna –1; si n=0, la función retorna 0; si n>0, la función
retorna 1.

Ejemplo SELECT SIGN(campo1) "Signo” FROM numeros

Signo
-1

2.2.2 Funciones de caracteres

2.2.2.1 Funciones de caracteres que retornan valores de tipo carácter


LOWER
Propósito Retorna caracteres con todas las letras en minúscula.

Ejemplo SELECT LOWER('MR. SCOTT MCMILLAN') "Minúsculas"

Minúsculas
mr. scott mcmillan

12
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

LTRIM
Sintaxis LTRIM(char)
Propósito Devuelve una expresión de caracteres después de quitar los espacios en blanco
a la izquierda.

Ejemplo SELECT LTRIM(‘ LAST WORD',) "LTRIM example"

LTRIM example
LAST WORD

RTRIM
Sintaxis RTRIM(char)
Propósito RTRIM trabaja de forma similar a LTRIM, la única diferencia es que RTRIM es
por la derecha y LTRIM es por la izquierda.

Ejemplo SELECT RTRIM('BROWNING ‘) "RTRIM e.g."

RTRIM e.g
BROWNING

SUBSTRING
Sintaxis SUBSTRING(char, m [,n])
Propósito Retorna una porción de una cadena de caracteres, comenzando en el carácter
m con n caracteres de longitud.

Ejemplo 1 SELECT SUBSTRING('ABCDEFG',3,2) "Subs"

Subs
CD

UPPER
Sintaxis UPPER(char)
Propósito Retorna char con todas las letras en mayúsculas.

Ejemplo SELECT UPPER('Large') "Mayúsculas"

Mayúsculas
LARGE

2.2.2.2 Funciones de caracteres que retornan valores de tipo numérico

ASCII
Sintaxis ASCII(char)
Propósito Retorna la representación decimal de la primera letra de la cadena de
caracteres.

Ejemplo SELECT ASCII('Q')

ASCII('Q')

13
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

81

CHAR
Sintaxis CHAR(número)
Propósito Retorna el caracter equivalente al valor del código ASCII introducido.

Ejemplo SELECT CHAR(81)

CHAR(81)
Q

LEN
Sintaxis LEN(char)
Propósito Retorna el tamaño de char en caracteres. Si char es del tipo CHAR, incluye los
espacios en blanco.

Ejemplo SELECT LEN('CANDIDE') "Longitud”

Longitud
7

2.2.3 Funciones de fechas

2.2.3.1 DATEADD
Sintaxis DATEADD(datepart, number, date)
Propósito Incrementa una fecha en la cantidad indicada

Datepart puede tomar los siguientes valores

Datepart Abreviatura Valores


Year yy 1753 - 9999
Quarter qq 1–4
Month mm 1 -12
Day of year dy 1 -366
Day dd 1 – 31
Week wk 0 – 51
Weekday dw 1–7
Hour hh 0 – 23
Minute mi 0 – 59
Second ss 0 – 59
Millisecond ms 0 - 999

Ejemplo SELECT DATEADD(month, 3, ‘01/10/2002’) “Nueva fecha”

Nueva fecha
2003-01-01 00:00:00.000

14
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

2.2.3.2 DATEDIFF
Sintaxis DATEDIFF(datepart, date1, date2)
Propósito Muestra la diferencia entre dos fechas dadas en la unidad de tiempo
especificada en datepart. El resultado es positivo si date2 es mayor que date1.

Ejemplo SELECT DATEDIFF(month, ‘01/05/2002’, ‘05/10/2002’) “Diferencia”

Diferencia
5

2.2.3.3 DATENAME
Sintaxis DATENAME(datepart, date)
Propósito Retorna el valor en formato cadena de la parte de fecha especifica en datepart.

Ejemplo1 SELECT DATENAME(month, ‘01/05/2002’) “Mes”

Mes
Mayo

Ejemplo2 SELECT DATENAME(day, ‘01/05/2002’) “Dia”

Dia
1

2.2.3.4 DATEPART
Sintaxis DATEPART(datepart, date)
Propósito Tiene un funcionamiento similar a DATENAME, pero siempre retorna un valor
entero.

Ejemplo SELECT DATEPART(month, ‘01/Julio/2002’) “Mes”

Mes
7

2.2.3.5 GETDATE
Sintaxis GETDATE()
Propósito Devuelve la fecha y hora actual del sistema.

Ejemplo SELECT GETDATE()

Fecha actual
2002-11-10 11:31:27.513

15
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

2.2.4 Conversión de datos

2.2.4.1 CONVERT
Sintaxis CONVERT(datatype [(length)], expression [, style])
Propósito Permite convertir unos tipos de datos en otros.
, donde:
expression
Es cualquier expresión válida de Microsoft SQL Server.

data_type
Es el tipo de datos de destino proporcionado por el sistema.

length
Es un parámetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary o
varbinary.

style
Es el estilo del formato de fecha que se utiliza para convertir datos datetime o
smalldatetime en datos de cadenas de caracteres.

Sin el siglo Con el siglo


(yy) (yyyy) Estándar Entrada/Salida**
- 0 o 100 (*) Valor predeterminado mon dd yyyy hh:miAM (o
PM)
1 101 USA mm/dd/yy
2 102 ANSI yy.mm.dd
3 103 Británico/Francés dd/mm/yy
4 104 Alemán dd.mm.yy
5 105 Italiano dd-mm-yy
6 106 - dd mes aa
7 107 - Mes dd, aa
8 108 - hh:mm:ss
- 9 o 109 (*) Predeterminado + mon dd yyyy
milisegundos hh:mi:ss:mmmAM (o PM)
10 110 USA mm-dd-yy
11 111 JAPÓN yy/mm/dd
12 112 ISO yymmdd
- 13 o 113 (*) Europeo predeterminado dd mon yyyy
+ milisegundos hh:mm:ss:mmm(24h)
14 114 - hh:mi:ss:mmm(24h)
- 20 o 120 (*) ODBC canónico yyyy-mm-dd hh:mi:ss(24h)
- 21 o 121 (*) ODBC canónico (con yyyy-mm-dd
milisegundos) hh:mi:ss.mmm(24h)

16
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

- 126(***) ISO8601 yyyy-mm-dd


Thh:mm:ss:mmm(sin
espacios)
- 130* Kuwaití dd mon yyyy
hh:mi:ss:mmmAM
- 131* Kuwaití dd/mm/yy
hh:mi:ss:mmmAM

Ejemplo1 SELECT CONVERT(char, getdate(), 103) "Fecha actual"

Fecha actual
10/11/2002

Ejemplo2 SELECT 'El precio del libro ' + title + ' es ' + CONVERT(varchar(10), price)
“Precio” FROM titles

Precio
El precio del libro The Busy Executive's Database Guide es 19.99
El precio del libro Cooking with Computers: Surreptitious Balance Sheets es 11.95

2.2.5 Funciones agrupadas


Las funciones agrupadas retornan resultados basados en un grupo de registros, en
lugar de en un único registro.

Algunas funciones agrupadas aceptan las siguientes opciones:

DISTINCT Esta opción implica que solo se consideren los valores que son distintos.
ALL Esta opción implica que consideren todos los valores, incluidos los duplicados.

Todas las funciones agrupadas con la excepción de COUNT(*) ignoran los nulos.

2.2.5.1 AVG
Sintaxis AVG([DISTINCT|ALL] n)
Propósito Retorna la media del valor de n.

Ejemplo SELECT AVG(sal) "Average"


FROM emp;

Average
2077.21429

2.2.5.2 COUNT
Sintaxis COUNT({* | [DISTINCT|ALL] expr})
Propósito Retorna el número de registros en una consulta.

17
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Si se especifica expr, esta función retorna los registros en los cuales expr es no
nula. También se pueden contar todas las columnas o solamente aquellas que
sean distintas.

Ejemplo 1 SELECT COUNT(*) "Total"


FROM emp;
Total
18

Ejemplo 2 SELECT COUNT(job) "Count"


FROM emp;
Count
14

Ejemplo 3 SELECT COUNT(DISTINCT job) "Jobs"


FROM emp;
Jobs
5

2.2.5.3 MAX
Sintaxis MAX(expr)
Propósito Retorna el valor máximo de expr.

Ejemplo SELECT MAX(sal) "Maximum" FROM emp;

Maximum
5000

2.2.5.4 MIN
Sintaxis MIN(expr)
Propósito Retorna el valor mínimo de expr.

Ejemplo SELECT MIN(hiredate) "Earliest" FROM emp;

Earliest
17-DEC-80

2.2.5.5 STDEV
Sintaxis STDEV([DISTINCT|ALL] x)
Propósito Retorna la desviación estándar de x.

Ejemplo SELECT STDEV(sal) "Deviation"


FROM emp;

Deviation
1182.50322

18
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

2.2.5.6 SUM
Sintaxis SUM([DISTINCT|ALL] n)
Propósito Retorna la suma de los valores de n.

Ejemplo SELECT SUM(sal) "Total"


FROM emp;

Total
29081

2.2.5.7 VARIANCE
Sintaxis VARIANCE([DISTINCT|ALL]x)
Propósito Retorna la varianza de x.

Ejemplo SELECT VARIANCE(sal) "Variance"


FROM emp;

Variance
1389313.87

19
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

3 Comandos

3.1 Comandos DML (Data Manipulation Language)


Los comandos DML realizan consultas y manipulan los datos existentes en los objetos.

3.1.1 SELECT
Se utiliza para recibir datos de una o más tablas, objetos de una tabla, vistas y objetos
de una vista. Para poder ejecutar este comando es necesario que el objeto se encuentre en
nuestro propio esquema o tener el privilegio SELECT sobre el objeto. La sintaxis es la siguiente:

SELECT select_list
[ INTO new_table ]
FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression ]
[ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]

3.1.1.1 Creación de consultas simples


select_list es el nombre de una o más columnas de una tabla o vista. Si en select_list se
pone * la consulta se realiza sobre todos los campos (columnas) de la tabla o vista.

3.1.1.2 CLÁUSULA WHERE


Especifica una condición de búsqueda (search_condition) para restringir las filas que se
van a devolver.

Ejemplo 1

SELECT ename, job, sal, deptno


FROM emp
WHERE NOT (job = ‘SALESMAN’ AND deptno = 30)

Ejemplo 2

SELECT *
FROM emp
WHERE job = ‘SALESMAN’

3.1.1.3 CLÁUSULA INTO


Esta cláusula se utiliza para crear una nueva tabla con el resultado de los datos de la
consulta. Cuando el nombre de la nueva tabla comienza por # significa que dicha tabla es
temporal.

Ejemplo

SELECT title = SUBSTRING (title, 1, 40),


monthly = ytd_sales/12
INTO #phonytable

20
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

FROM titles

3.1.1.4 CLÁUSULA GROUP BY


Esta cláusula se utiliza para agrupar una selección de registros. SQL Server hace la
colección de cada grupo de registros basándose en el valor de la expresión o expresiones
especificadas en la cláusula GROUP BY.
Si una instrucción SELECT contiene la cláusula GROUP BY, la lista de selección solo
puede contener los siguientes tipos de expresiones:

▪ Constantes.
▪ Funciones agrupadas.

Ejemplo

SELECT deptno, MIN (sal), MAX (sal)


FROM emp
WHERE job = ‘CLERK’
GROUP BY deptno;

3.1.1.5 CLÁUSULA HAVING


Se utiliza la cláusula HAVING para restringir los grupos de registros que se especifican
en la cláusula GROUP BY. El procesamiento que efectúa SQL Server con las cláusulas WHERE,
GROUP BY y HAVING es el siguiente:

1. Si la instrucción contiene la cláusula WHERE, SQL Server elimina automáticamente


todos los registros que no la cumplen.
2. SQL Server calcula y forma los grupos tal y como se especifican en la cláusula
GROUP BY.
3. SQL Server elimina todos los grupos que no satisfacen la cláusula HAVING.

Ejemplo

SELECT deptno, MIN (sal), MAX (sal)


FROM emp
WHERE job = ‘CLERK’
GROUP BY deptno
HAVING MIN (sal) < 1000;

3.1.1.6 CLÁUSULA ORDER BY


Se utiliza la cláusula ORDER BY para ordenar los registros seleccionados en una
consulta. La cláusula especifica una expresión, una posición o un alias de una expresión, y SQL
Server retorna los registros basándose en los valores de estas expresiones.
Se pueden especificar múltiples expresiones en la cláusula ORDER BY. Los registros con
el mismo valor para la primera expresión se ordenan por el valor de la segunda expresión, y así
continuamente. Si la ordenación es en modo ascendente, SQL Server coloca los nulos al final, y
si la ordenación es en modo descendente, SQL Server coloca los nulos al principio.
La cláusula ORDER BY tiene las siguientes restricciones:

21
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

▪ Si en una instrucción SELECT aparecen conjuntamente el operador DISTINCT y la


cláusula ORDER BY, la cláusula ORDER BY no se puede referir a columnas que no
aparezcan en la lista de selección.
▪ La cláusula ORDER BY no puede aparecer en subconsultas con otras instrucciones.
Ejemplo 1

SELECT ename, deptno, sal


FROM emp
ORDER BY 2 ASC, 3 DESC;

Ejemplo 2

SELECT ename, deptno, sal


FROM emp
ORDER BY deptno ASC, sal DESC;

3.1.1.7 Joins o combinaciones


Un join es una consulta que combina registros de dos o más tablas o vistas. Si dos o
más de estas tablas tienen columnas con el mismo nombre es necesario especificar las
columnas mediante alias o indicando cada columna de que tabla es, para que no se produzca
ambigüedad.

Condiciones de los joins

Para ejecutar un join, SQL Server combina parejas de registros, cada uno de una tabla,
para los cuales la condición que evalúa el join es verdadera.
Para ejecutar un join de tres o más tablas, SQL Server primero hace el join de dos de
las tablas, y con la tabla resultante realiza el join con la tercera tabla, en caso de haber más
tablas se seguiría haciendo de la misma manera.

INNER JOINS

Un inner join o combinación interna es una combinación que sólo muestra las filas que
tienen un elemento coincidente en las dos tablas combinadas.
Nota Las columnas que contienen NULL no coinciden con ningún valor cuando se crea
una combinación interna y, por tanto, se excluyen del conjunto de resultados. Los valores
nulos no coinciden con otros valores nulos.
Existen dos sintaxis para la realización de un inner join, ambas dentro del estándar
ANSI SQL.

Sintaxis 1

SELECT table_name.column_name, table_name.column_name


[, table_name.column_name …..]
FROM { table_name INNER JOIN table_name ON search_conditions }
[ WHERE search_condition ]

Sintaxis 2

22
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

SELECT table_name.column_name, table_name.column_name


[, table_name.column_name …..]
FROM { table_name, table_name }
WHERE table_name.column_name join_operator table_name.column_name

Ejemplo 1 (Sintaxis 1)

SELECT authors.au_lname, authors.state, publishers.*


FROM authors INNER JOIN publishers
ON authors.city = publishers.city

Ejemplo 2 (Sintaxis 2)

SELECT authors.au_lname, authors.state, publishers.*


FROM authors, publishers
WHERE authors.city =publishers.city

SELF JOINS

Un self join es un join de una tabla consigo misma. Esta tabla aparece dos veces en la
cláusula FROM.

Sintaxis 1

SELECT table_name.column_name, table_name.column_name


[, table_name.column_name …..]
FROM { table_name alias [join_type] JOIN table_name alias ON search_conditions }
[ WHERE search_condition ]

Sintaxis 2

SELECT table_name.column_name, table_name.column_name


[, table_name.column_name …..]
FROM { table_name alias, table_name alias }
WHERE alias.column_name join_operator alias.column_name

Ejemplo 1 (Sintaxis 1)

SELECT e1.ename + ‘ works for ‘+ e2.ename “Employees and their Managers”


FROM emp e1INNER JOIN emp e2
ON e1.mgr = e2.empno;

Ejemplo 2 (Sintaxis 2)

SELECT e1.ename + ‘ works for ‘+ e2.ename “Employees and their Managers”


FROM emp e1, emp e2
WHERE e1.mgr = e2.empno;

OUTER JOINS

23
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Un outer join o combinación externa es una combinación que incluye filas aunque
éstas no tengan filas relacionadas en la tabla combinada.

Combinación externa izquierda


Se incluyen todas las filas de la tabla nombrada en primer lugar (la tabla que aparece a
la izquierda en la cláusula JOIN). Las filas que no coinciden de la tabla derecha no aparecen.

Sintaxis

SELECT table_name.column_name, table_name.column_name


[, table_name.column_name …..]
FROM { table_name LEFT OUTER JOIN table_name ON search_conditions }
[ WHERE search_condition ]

Ejemplo

La siguiente instrucción SQL ilustra una combinación exterior izquierda entre las tablas titles y
publishers para incluir todos los títulos, incluso los que no tienen información de editor:

SELECT titles.title_id,
titles.title,
publishers.pub_name
FROM titles LEFT OUTER JOIN publishers
ON titles.pub_id
= publishers.pub_id

Combinación externa derecha


Se incluyen todas las filas de la tabla nombrada en segundo lugar (la tabla que aparece
a la derecha en la cláusula JOIN). No se incluyen las filas que no coinciden de la tabla de la
izquierda.

Sintaxis

SELECT table_name.column_name, table_name.column_name


[, table_name.column_name …..]
FROM { table_name RIGHT OUTER JOIN table_name ON search_conditions }
[ WHERE search_condition ]

Ejemplo

Una combinación externa derecha entre las tablas titles y publishers incluirá todos los
editores, incluso los que no tengan títulos en la tabla titles.

SELECT titles.title_id,
titles.title,
publishers.pub_name
FROM titles RIGHT OUTER JOIN publishers
ON titles.pub_id
= publishers.pub_id

24
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Combinación externa completa


Se incluyen todas las filas de todas las tablas combinadas, tanto si tienen elementos
coincidentes como si no.

Sintaxis

SELECT table_name.column_name, table_name.column_name


[, table_name.column_name …..]
FROM { table_name FULL OUTER JOIN table_name ON search_conditions }
[ WHERE search_condition ]

Ejemplo

Por ejemplo, una combinación externa completa entre titles y publishers muestra todos los
títulos y todos los editores, incluso los que no coincidan en la otra tabla.

SELECT titles.title_id,
titles.title,
publishers.pub_name
FROM titles FULL OUTER JOIN publishers
ON titles.pub_id
= publishers.pub_id

3.1.2 INSERT
Este comando se utiliza para añadir registros a una tabla o una vista. La sintaxis es la
siguiente:

INSERT [INTO]
{ table_name
| view_name
}

{ [ ( column_list ) ]
{ VALUES
( { DEFAULT | NULL | expression } [ ,...n] )
| derived_table
| execute_statement
}
}

, donde:
[INTO]
Es una palabra clave opcional que se puede utilizar entre INSERT y la tabla de destino.
table_name
Es el nombre de la tabla que va a recibir los datos.
view_name

25
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Se trata del nombre y alias opcional de una vista. La vista a la que hace
referencia view_name debe ser actualizable.

(column_list)

Se trata de una lista de una o más columnas en las que se insertarán los datos;
column_list debe estar entre paréntesis y delimitada con comas.

VALUES
Presenta la lista de valores de datos que se van a insertar. Debe haber un valor de
datos para cada columna definida en column_list (si se especificó) o en la tabla. La lista de
valores debe estar entre paréntesis.
Si los valores de la lista VALUES no están en el mismo orden que las columnas de la
tabla o no tienen un valor para cada columna de la tabla, debe utilizarse column_list para
especificar explícitamente la columna que almacena cada valor de entrada.
DEFAULT
Exige que SQL Server cargue el valor predeterminado definido para una columna. Si no
hay un valor predeterminado para la columna y ésta permite el valor NULL, se inserta NULL.
Para una columna definida con el tipo de datos timestamp, se inserta el siguiente valor
timestamp. DEFAULT no es válido para una columna de identidad.
expression
Es una constante, variable o expresión. La expresión no puede contener una
instrucción SELECT o EXECUTE.
derived_table
Se trata de cualquier instrucción SELECT válida que devuelva filas con los datos que se
van a cargar en la tabla.
execute_statement
Se trata de cualquier instrucción EXECUTE válida que devuelva datos con instrucciones
SELECT o READTEXT.
Si execute_statement se utiliza con INSERT, cada conjunto de resultados debe ser
compatible con las columnas de la tabla o de las especificadas en column_list. Se puede utilizar
execute_statement para ejecutar procedimientos almacenados en el mismo servidor o en un
servidor remoto. Se ejecuta el procedimiento del servidor remoto, se devuelven los conjuntos
de resultados al servidor local y se cargan en la tabla del servidor local.

Ejemplo 1
Una instrucción INSERT sencilla.

INSERT INTO T1 VALUES (1, 'Row #1')

Ejemplo 2
Insertar datos que no están en el mismo orden que las columnas.

INSERT INTO T1 (column_2, column_1) VALUES ('Row #1',1)

26
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Ejemplo 3
Insertar datos con menos valores que columnas.

INSERT INTO T2 (column_1,column_2)


VALUES (-99,'Explicit identity value')

Ejemplo 4
Insertar fechas. Antes de insertar una fecha es necesario indicarle a SQL Server el formato de
fecha que se va a utilizar. Para ello se utiliza la sentencia SET DATEFORMAT, siendo los valores
permitidos: mdy, ymd, dym, dmy, myd e ydm.

SET DATEFORMAT mdy

INSERT INTO T2 (fecha)


VALUES (‘12/31/98’)

3.1.3 UPDATE

Se utiliza para cambiar los valores de los registros de una tabla o una vista. La sintaxis
es la siguiente:

UPDATE
{
table_name
| view_name
}
SET
{ column_name = { expression | DEFAULT | NULL}
}

, donde:

table_name
Es el nombre de la tabla que va a recibir los datos.
view_name
Se trata del nombre y alias opcional de una vista. La vista a la que hace referencia
view_name debe ser actualizable.
SET
Especifica la lista de nombres de columnas o variables que se van a actualizar.
column_name
Es una columna que contiene los datos que se van a cambiar. column_name se debe
encontrar en la tabla o en la vista especificadas en la cláusula UPDATE.
expression

27
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Es una variable, un valor literal, una expresión o una instrucción subSELECT entre
paréntesis que devuelve un solo valor.
DEFAULT
Especifica que el valor predeterminado definido para la columna debe sustituir al valor
existente en la columna. También se puede utilizar para cambiar la columna a NULL si no tiene
valor predeterminado y en su definición se especifica que puede aceptar valores nulos.

Ejemplo 1
Actualiza toda la tabla.

UPDATE publishers
SET city = 'Atlanta', state = 'GA'

Ejemplo 2
Actualiza los registros que cumplan la condición establecida en la clausula WHERE.

UPDATE authors
SET state = 'PC', city = 'Bay City'
WHERE state = 'CA' AND city = 'Oakland'

3.1.4 DELETE

Se utiliza para borrar datos de una tabla o de una vista basada en una tabla. La sintaxis
es la siguiente:

DELETE
[FROM ]
{ table_name
| view_name
}
[ WHERE
< search_condition >
]

,donde:

FROM
Se trata de una palabra clave opcional que se puede utilizar entre la palabra clave
DELETE y el destino table_name o view_name.
table_name
Se trata del nombre de la tabla de la que se van a quitar las filas.
view_name
Es el nombre de una vista. La vista a la que hace referencia view_name debe poderse
actualizar.

28
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Ejemplo 1

DELETE authors

Ejemplo 2

DELETE FROM authors


WHERE au_lname = 'McBadden'

3.1.5 TRUNCATE TABLE

Quita todas las filas de una tabla sin registrar las eliminaciones de cada fila individual.
TRUNCATE TABLE es funcionalmente idéntica a la instrucción DELETE sin una cláusula WHERe,
pero TRUNCATE TABLE es más rápida y utiliza menos recursos de los registros de transacciones
y de sistema que DELETE. Además TRUNCATE TABLE reinicia el contador utilizado por las
identidades.
No se puede utilizar TRUNCATE TABLE en una tabla a la que haga referencia una
restricción FOREIGN KEY. La sintaxis es la siguiente:

TRUNCATE TABLE table_name

,donde:

table_name
Se trata del nombre de la tabla de la que se van a quitar todas las filas.

Ejemplo 1

TRUNCATE TABLE authors

29
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

3.2 Comandos DDL (Data Definition Language)


Los comandos DDL se utilizan para definir y administrar todos los objetos de una base de
datos relacional.

3.2.1 Creación y manipulación de una base de datos

3.2.1.1 CREATE DATABASE


Crea una nueva base de datos y los archivos que se utilizan para almacenar la base de
datos o adjunta una base de datos desde los archivos de una base de datos creada
anteriormente. La sintaxis es la siguiente:

CREATE DATABASE database_name


[ ON
[ < filespec > [ ,...n ] ]
]
[ LOG ON { < filespec > [ ,...n ] } ]

, con:
< filespec > ::=
[ PRIMARY ]
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]

, donde:
database_name
Es el nombre de la nueva base de datos. Los nombres de base de datos deben ser
únicos en un servidor y pueden tener un máximo de 128 caracteres.
ON
Especifica que los archivos de disco utilizados para almacenar la parte de datos de la
base de datos (archivos de datos) se han definido explícitamente. La palabra clave va seguida
de una lista separada por comas de elementos <filespec> que definen los archivos de datos del
grupo de archivos principal.
n
Es un marcador de posición que indica que se pueden especificar múltiples archivos
para la nueva base de datos.
LOG ON
Especifica que los archivos del disco utilizados para almacenar el registro de la base de
datos (archivos de registro) se han definido explícitamente. La palabra clave va seguida de una
lista separada por comas de elementos <filespec> que definen los archivos de registro. Si no se
especifica LOG ON, se crea automáticamente un único archivo de registro con un nombre
generado por el sistema y un tamaño que es el 25 por ciento de la suma de los tamaños de
todos los archivos de datos de la base de datos.

30
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

PRIMARY
Especifica que la lista <filespec> asociada define el archivo principal. El grupo de
archivos principal contiene todas las tablas del sistema de base de datos. La primera entrada
<filespec> del grupo de archivos principal pasa a ser el archivo principal, que es el archivo que
contiene el inicio lógico de la base de datos y las tablas del sistema. Si no se especifica
PRIMARY, el primer archivo enumerado en la instrucción CREATE DATABASE se convierte en el
archivo principal.
NAME
Especifica el nombre lógico del archivo definido por <filespec>.
logical_file_name
Es el nombre utilizado para hacer referencia al archivo en las instrucciones Transact-
SQL que se ejecuten después de que se haya creado la base de datos. logical_file_name debe
ser único en la base de datos y debe seguir las reglas de los identificadores.
FILENAME
Especifica el nombre de archivo del sistema operativo del archivo definido por
<filespec>.
'os_file_name'
Es la ruta de acceso y nombre de archivo que el sistema operativo utiliza cuando crea
el archivo físico definido por <filespec>. La ruta de acceso de os_file_name debe especificar un
directorio en una instancia de SQL Server.
SIZE
Especifica el tamaño del archivo definido en <filespec>. Cuando en <filespec> no se
especifica un parámetro SIZE para el archivo principal, SQL Server utiliza el tamaño del archivo
principal de la base de datos model. Cuando en <filespec> no se especifica un parámetro SIZE
para un archivo secundario o de registro, SQL Server hace el archivo de 1 MB.
size
Es el tamaño inicial del archivo definido en <filespec>. Se pueden utilizar los sufijos
kilobyte (KB), megabyte (MB), gigabyte (GB) o terabyte (TB). El valor predeterminado es MB. El
valor mínimo de size es 512 KB.
MAXSIZE
Especifica el tamaño máximo al que puede aumentar el archivo definido en <filespec>.
max_size
Es el tamaño máximo al que puede aumentar el archivo definido en <filespec>. Se
pueden utilizar los sufijos kilobyte (KB), megabyte (MB), gigabyte (GB) o terabyte (TB). El valor
predeterminado es MB. Si max_size no se especifica, el archivo aumenta hasta que el disco
esté lleno.
UNLIMITED
Especifica que el archivo definido en <filespec> aumenta hasta que el disco esté lleno.
FILEGROWTH
Especifica el incremento de crecimiento del archivo definido en <filespec>. El valor
FILEGROWTH de un archivo no puede exceder del valor MAXSIZE.

31
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

growth_increment
Es la cantidad de espacio que se agrega al archivo cada vez que se necesita más
espacio. Un valor 0 indica que no hay crecimiento. El valor se puede especificar en MB, KB, GB,
TB o bien como un porcentaje (%). Si se especifica un número sin sufijos el valor
predeterminado es MB. Si no se especifica FILEGROWTH, el valor predeterminado es 10 por
ciento, y el valor mínimo es 64 KB.

Ejemplo 1 Crear una base de datos sin especificar los archivos.


Este ejemplo crea una base de datos llamada mytest y crea los archivos principal y de
registro de transacciones correspondientes. Debido a que la instrucción no tiene elementos
<filespec>, el archivo principal de la base de datos tiene el tamaño del archivo principal de la
base de datos model. El registro de transacciones tiene el tamaño del archivo del registro de
transacciones de la base de datos model. Como no se ha especificado MAXSIZE, los archivos
pueden crecer hasta llenar todo el espacio disponible en el disco.

CREATE DATABASE mytest

Ejemplo 2 Crear una base de datos que especifica los archivos de datos.
En este ejemplo se crea una base de datos llamada Products y se especifica un único
archivo. El archivo especificado se convierte en el archivo principal y se crea automáticamente
un archivo de registro de transacciones de 1 MB. Como no se especifican MB ni KB en el
parámetro SIZE del archivo principal, se asigna en megabytes. Ya que no existe <filespec> para
el archivo de registro de transacciones, éste no tiene MAXSIZE y puede crecer hasta llenar todo
el espacio disponible en el disco.

CREATE DATABASE Products


ON
( NAME = prods_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\prods.mdf',
SIZE = 4,
MAXSIZE = 10,
FILEGROWTH = 1 )

Ejemplo 3 Crear una base de datos que especifica los archivos de datos y de registro de
transacciones.
Este ejemplo crea una base de datos llamada Sales. Debido a que no se utiliza la
palabra clave PRIMARY, el primer archivo (Sales_dat) se convierte en el archivo principal.
Como no se especifican MB ni KB en el parámetro SIZE del archivo Sales_dat, de forma
predeterminada utiliza MB y el tamaño se asigna en megabytes. El tamaño del archivo
Sales_log se asigna en megabytes porque se ha indicado explícitamente el sufijo MB en el
parámetro SIZE.

CREATE DATABASE Sales


ON
( NAME = Sales_dat,
FILENAME = 'c:\program files\microsoft sql server\mssql\data\saledat.mdf',
SIZE = 10,
MAXSIZE = 50,

32
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

FILEGROWTH = 5 )
LOG ON
( NAME = 'Sales_log',
FILENAME = 'c:\program files\microsoft sql server\mssql\data\salelog.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB )

3.2.1.2 ALTER DATABASE


Agrega o quita archivos y grupos de archivos de una base de datos. También se puede
usar para modificar los atributos de los archivos y de los grupos de archivos, por ejemplo para
cambiar el nombre o el tamaño de un archivo. ALTER DATABASE permite cambiar el nombre
de base de datos, los nombres de grupos de archivos y los nombres lógicos de los archivos de
datos y archivos de registro. La sintaxis es la siguiente:

ALTER DATABASE database


{ ADD FILE < filespec > [ ,...n ]
| ADD LOG FILE < filespec > [ ,...n ]
| REMOVE FILE logical_file_name
| MODIFY FILE < filespec >
| MODIFY NAME = new_dbname
}

, donde:
database
Es el nombre de la base de datos cambiada.
ADD FILE
Especifica que se está agregando un archivo.
ADD LOG FILE
Especifica que se agrega un archivo de registro a la base de datos indicada.
REMOVE FILE
Quita la descripción del archivo de las tablas del sistema de base de datos y elimina el
archivo físico. El archivo no puede eliminarse a menos que esté vacío.
MODIFY FILE
Especifica el archivo determinado que se debe modificar, incluidas las opciones
FILENAME, SIZE, FILEGROWTH y MAXSIZE. NAME debe especificarse en <filespec> para
identificar el archivo que debe modificarse. Si se especifica SIZE, el nuevo tamaño debe ser
mayor que el tamaño actual del archivo. FILENAME sólo puede especificarse para los archivos
de la base de datos tempdb y el nombre nuevo no surte efecto hasta que se reinicie Microsoft
SQL Server.
Para modificar el nombre lógico de un archivo de datos o de un archivo de registro,
especifique en NAME el nombre lógico de archivo que se va cambiar y en NEWNAME el
nombre lógico de archivo nuevo.
De esta forma:

33
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

MODIFY FILE (NAME = logical_file_name, NEWNAME = new_logical_name...).

MODIFY NAME = new_dbname


Cambia el nombre de la base de datos.

Ejemplo 1 Agregar un archivo a una base de datos.

ALTER DATABASE Test1


ADD FILE
(
NAME = Test1dat2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\t1dat2.ndf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB
)

Ejemplo 2 Agregar dos archivos de registro a una base de datos.

ALTER DATABASE Test1


ADD LOG FILE
( NAME = test1log2,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\test2log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB),
( NAME = test1log3,
FILENAME = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\test3log.ldf',
SIZE = 5MB,
MAXSIZE = 100MB,
FILEGROWTH = 5MB)

Ejemplo 3 Quitar un archivo de una base de datos.

ALTER DATABASE Test1


REMOVE FILE test1dat4

Ejemplo 4 Modificar un archivo.

ALTER DATABASE Test1


MODIFY FILE
(NAME = test1dat3,
SIZE = 20MB)

3.2.1.3 DROP DATABASE


Elimina una o más bases de datos de SQL Server. Al quitar una base de datos se
eliminan la base de datos y los archivos de disco que utiliza. La sintaxis es la siguiente:

34
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

DROP DATABASE database_name [ ,...n ]

Ejemplo Elimina una base de datos.


DROP DATABASE publishing

3.2.2 Creación y manipulación de tablas

3.2.2.1 CREATE TABLE


Crea una nueva tabla. La sintaxis es la siguiente:

CREATE TABLE table_name


( { < column_definition >
| < table_constraint > ::= [ CONSTRAINT constraint_name ] }
| [ { PRIMARY KEY | UNIQUE } [ ,...n ]
)

, con:
< column_definition > ::= { column_name data_type }
[ [ DEFAULT constant_expression ]
| [ IDENTITY [ ( seed , increment )] ]
]
[ ROWGUIDCOL]
[ < column_constraint > ] [ ...n ]

, con:
< column_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
]
| CHECK
( logical_expression )
}

, con:
< table_constraint > ::= [ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ASC | DESC ] [ ,...n ] ) }
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]

35
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

[ ON UPDATE { CASCADE | NO ACTION } ]


| CHECK
( search_conditions )
}

, donde:

table_name
Es el nombre de la nueva tabla. Los nombres de tablas se deben ajustar a las reglas
para los identificadores. table_name puede contener un máximo de 128 caracteres, excepto
para los nombres de tablas temporales locales (nombres precedidos con un signo numérico
simple (#)) que no pueden exceder de 116 caracteres.
column_name
Es el nombre de una columna de la tabla. Los nombres de columna deben cumplir las
reglas de los identificadores y deben ser únicos en la tabla.
data_type
Especifica el tipo de datos de la columna.
DEFAULT
Especifica el valor predeterminado suministrado para la columna.
constant_expression
Es una constante, NULL o una función del sistema utilizados como el valor
predeterminado de una columna.
IDENTITY
Indica que la nueva columna es una columna identidad. Las columnas de identidad se
utilizan normalmente junto con restricciones PRIMARY KEY para que actúen como
identificador exclusivo de fila para la tabla. La propiedad IDENTITY puede asignarse a las
columnas tinyint, smallint, int, bigint, decimal(p,0) o numeric(p,0). Sólo se puede crear una
columna de identidad por tabla. Es necesario especificar la inicialización y el incremento, o no
especificar ninguno de los dos. Si no se especifica ninguno, el valor predeterminado es (1,1).
seed
Es el valor que se utiliza para la primera fila cargada en la tabla.
increment
Es el valor incremental que se agrega al valor de identidad de la anterior fila cargada.
ROWGUIDCOL
Indica que la nueva columna es una columna de identificador exclusivo global de fila.
Únicamente se puede designar una columna uniqueidentifier por cada tabla como la columna
ROWGUIDCOL. La propiedad ROWGUIDCOL se puede asignar únicamente a una columna
uniqueidentifier.
CONSTRAINT

36
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Es una palabra clave opcional que indica el principio de la definición de una restricción
PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY o CHECK. Las restricciones son propiedades
especiales que exigen la integridad de los datos y pueden crear índices para la tabla y sus
columnas.
constraint_name
Es el nombre de una restricción. Los nombres de restricción deben ser únicos en una
base de datos.
NULL | NOT NULL
Son palabras clave que determinan si se permiten o no valores NULL en la columna.
PRIMARY KEY
Es una restricción que exige la integridad de entidad para una o varias columnas dadas
a través de un índice único. Sólo se puede crear una restricción PRIMARY KEY por cada tabla.
UNIQUE
Es una restricción que proporciona la integridad de entidad para una o varias columnas
dadas a través de un índice único. Una tabla puede tener varias restricciones UNIQUE.
CLUSTERED | NONCLUSTERED
Son palabras clave que indican que se ha creado un índice agrupado o no agrupado
para la restricción PRIMARY KEY o UNIQUE. De forma predeterminada, el valor de las
restricciones PRIMARY KEY es CLUSTERED, y el de las restricciones UNIQUE es NONCLUSTERED.
Sólo se puede especificar CLUSTERED para una única restricción de una instrucción
CREATE TABLE
FOREIGN KEY...REFERENCES
Es una restricción que proporciona integridad referencial para los datos de la columna
o columnas. Las restricciones FOREIGN KEY requieren que cada valor de la columna exista en la
columna de referencia correspondiente de la tabla a la que se hace referencia. Las
restricciones FOREIGN KEY pueden hacer referencia sólo a columnas que sean restricciones
PRIMARY KEY o UNIQUE en la tabla de referencia.
ref_table
Es el nombre de la tabla a la que hace referencia la restricción FOREIGN KEY.
(ref_column[,...n])
Es una columna o lista de columnas de la tabla a la que hace referencia la restricción
FOREIGN KEY.
ON DELETE {CASCADE | NO ACTION}
Especifica qué acción tiene lugar en una fila de la tabla creada, si esa fila tiene una
relación referencial y la fila a la que hace referencia se elimina en la tabla primaria. El valor
predeterminado es NO ACTION.
Si se especifica CASCADE y se elimina una fila de la tabla primaria, también se elimina
la fila de la tabla desde donde se hace referencia. Si se especifica NO ACTION, SQL Server
genera un error y se deshace la acción de eliminación de la fila en la tabla primaria.
ON UPDATE {CASCADE | NO ACTION}

37
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Especifica qué acción tiene lugar en una fila de la tabla creada, si esa fila tiene una
relación referencial y la fila a la que hace referencia se actualiza en la tabla primaria. El valor
predeterminado es NO ACTION.
Si se especifica CASCADE, la fila se actualiza en la tabla de referencia si esa fila se
actualiza en la tabla primaria. Si se especifica NO ACTION, SQL Server genera un error y se
deshace la acción de actualización en la fila de la tabla primaria.
CHECK
Es una restricción que exige la integridad del dominio al limitar los valores posibles que
se pueden escribir en una o varias columnas.
logical_expression
Es una expresión lógica que devuelve TRUE o FALSE.
column
Es una columna o lista de columnas, entre paréntesis, que se utiliza en las restricciones
de tabla para indicar las columnas que se están utilizando en la definición de la restricción.
[ASC | DESC]
Especifica cómo se ordenan la columna o las columnas que participan en las
restricciones de la tabla. El valor predeterminado es ASC.
n
Es un marcador de posición que indica que el elemento anterior se puede repetir n
veces.

Ejemplo 1 Ejemplo sencillo

CREATE TABLE jobs


(
job_id smallint,
job_desc varchar(50) NOT NULL,
min_lvl tinyint NOT NULL,
max_lvl tinyint NOT NULL
)

Ejemplo 2 Ejemplo con clave primaria, restricciones check y valor por defecto.

CREATE TABLE jobs


(
job_id smallint
IDENTITY(1,1)
CONSTRAINT PK_jobs PRIMARY KEY,
job_desc varchar(50) NOT NULL
DEFAULT 'New Position - title not formalized yet',
min_lvl tinyint NOT NULL
CHECK (min_lvl >= 10),
max_lvl tinyint NOT NULL
CHECK (max_lvl <= 250)
)

38
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Ejemplo 3 Ejemplo con clave extrajera.

CREATE TABLE employee


(
emp_id smallint
CONSTRAINT PK_employee PRIMARY KEY NONCLUSTERED,
fname varchar(20) NOT NULL,
minit char(1) NULL,
lname varchar(30) NOT NULL,
job_id smallint NOT NULL
DEFAULT 1
CONSTRAINT FK_employee_jobs REFERENCES jobs(job_id),
pub_id char(4) NOT NULL
DEFAULT ('9952')
)

3.2.2.2 ALTER TABLE


Modifica una definición de tabla al alterar, agregar o quitar columnas y restricciones, o
al deshabilitar o habilitar restricciones y desencadenadores. La sintaxis es la siguiente:

ALTER TABLE table


{ [ ALTER COLUMN column_name
{ new_data_type [ ( precision [ , scale ] ) ]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }
]
| ADD
{ [ < column_definition > ]
| column_name AS computed_column_expression
} [ ,...n ]
| [ WITH CHECK | WITH NOCHECK ] ADD
{ < table_constraint > } [ ,...n ]
| DROP
{ [ CONSTRAINT ] constraint_name
| COLUMN column } [ ,...n ]
| { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
}

, con:
< column_definition > ::=
{ column_name data_type }
[ [ DEFAULT constant_expression ] [ WITH VALUES ]
| [ IDENTITY [ ( seed , increment)] ]
]

39
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

[ ROWGUIDCOL ]
[ < column_constraint > ] [ ...n ]

, con:
< column_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ NULL | NOT NULL ]
| [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
]
| [ [ FOREIGN KEY ]
REFERENCES ref_table [ ( ref_column ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
]
| CHECK ( logical_expression )
}

,con:
< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ ( column [ ,...n ] ) }
]
| FOREIGN KEY
[ ( column [ ,...n ] ) ]
REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
| DEFAULT constant_expression
[ FOR column ] [ WITH VALUES ]
| CHECK ( search_conditions )
}

,donde:

table
Es el nombre de la tabla que se va a modificar.
ALTER COLUMN
Especifica que la columna dada va a cambiarse o modificarse.
La columna alterada:
• No puede ser una columna con un tipo de datos text, image, ntext o timestamp.
• No puede ser la columna ROWGUIDCOL de la tabla.
• No puede ser una columna calculada o utilizarse en una columna calculada.

40
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

• No puede utilizarse en un índice, a menos que la columna sea del tipo de datos
varchar, nvarchar, o varbinary, el tipo de datos no se cambie y el nuevo tamaño sea
igual al tamaño anterior o mayor que éste.
• No puede utilizarse en una restricción PRIMARY KEY o [FOREIGN KEY] REFERENCES.
• No puede utilizarse en una restricción CHECK o UNIQUE, excepto si se permite alterar
la longitud de una columna de longitud variable empleada en una restricción CHECK o
UNIQUE.
• No puede estar asociada a un valor predeterminado, excepto que se permita cambiar
la longitud, precisión o escala de una columna si no se cambia el tipo de datos.

column_name
Es el nombre de la columna que se va a alterar, agregar o quitar.
new_data_type
Es el nuevo tipo de datos de la columna alterada.
precision
Es la precisión del tipo de datos especificado.
scale
Es la escala del tipo de datos especificado.
NULL | NOT NULL
Especifica si la columna puede aceptar valores NULL. Las columnas que no permiten
valores NULL sólo se pueden agregar con ALTER TABLE si tienen especificado un valor
predeterminado. Una columna nueva agregada a una tabla debe permitir valores NULL o debe
especificarse con un valor predeterminado.
[ {ADD | DROP} ROWGUIDCOL ]
Especifica que la propiedad ROWGUIDCOL se agrega a la columna indicada o se quita
de ella.
ADD
Especifica que se agregan una o más definiciones de columna, definiciones de
columnas calculadas o restricciones de tabla.
n
Es un marcador de posición que indica que el elemento anterior se puede repetir n
veces.
WITH CHECK | WITH NOCHECK
Especifica si los datos de la tabla se han validado o no contra una restricción FOREIGN
KEY o CHECK recién agregada o habilitada de nuevo. Si no se especifica, se asume WITH CHECK
para las restricciones nuevas y WITH NOCHECK para las restricciones que se han habilitado
otra vez.
Las cláusulas WITH CHECK y WITH NOCHECK no pueden utilizarse en restricciones
PRIMARY KEY o UNIQUE.
Si no desea volver a comprobar las nuevas restricciones CHECK o FOREIGN KEY contra
los datos existentes, utilice WITH NOCHECK. No se recomienda que haga esto, excepto en

41
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

casos muy contados. La nueva restricción se evaluará en todas las actualizaciones futuras. Las
infracciones de restricción que se supriman mediante WITH NOCHECK cuando se agrega la
restricción, pueden hacer que fallen las actualizaciones futuras si actualizan filas con datos que
no cumplan la restricción.
DROP { [CONSTRAINT] constraint_name | COLUMN column_name }
Especifica que constraint_name o column_name se ha quitado de la tabla. Una
columna no puede quitarse si:
• Es una columna duplicada.
• Se utiliza en un índice.
• Se utiliza en una restricción CHECK, FOREIGN KEY, UNIQUE o PRIMARY KEY.
• Está asociada con un valor predeterminado definido con la palabra clave DEFAULT o
enlazada a un objeto predeterminado.
• Está enlazada a una regla.
{ CHECK | NOCHECK} CONSTRAINT
Especifica si constraint_name está habilitado o deshabilitado. Cuando está
deshabilitado, las posteriores inserciones o actualizaciones de la columna no se validan con las
condiciones de la restricción. Esta opción sólo se puede utilizar con las restricciones FOREIGN
KEY y CHECK.
ALL
Especifica que todas las restricciones están deshabilitadas con la opción NOCHECK o
habilitadas con la opción CHECK.
{ENABLE | DISABLE} TRIGGER
Especifica si trigger_name está activado o desactivado. Aunque un desencadenador
esté desactivado, sigue estando definido para la tabla; sin embargo, si se ejecutan las
instrucciones INSERT, UPDATE o DELETE en la tabla, las acciones del desencadenador no se
ejecutan hasta que éste se vuelva a activar.
ALL
Especifica si todos los desencadenadores de la tabla están activados o desactivados.
trigger_name
Especifica el nombre del desencadenador que se va a activar o desactivar.
column_name data_type
Es el tipo de datos de la nueva columna.
DEFAULT
Es una palabra clave que especifica el valor predeterminado de la columna.
IDENTITY
Especifica que la nueva columna es una columna de identidad.
Seed
Es el valor que se utiliza para la primera fila cargada en la tabla.
Increment
Es el valor incremental que se agrega al valor de identidad de la anterior fila cargada.
CONSTRAINT

42
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Especifica el comienzo de una restricción PRIMARY KEY, UNIQUE, FOREIGN KEY o


CHECK, o de una definición DEFAULT.
constraint_name
Es la nueva restricción.
PRIMARY KEY
Es una restricción que exige la integridad de entidad para una o varias columnas dadas
a través de un índice único. Sólo se puede crear una restricción PRIMARY KEY por cada tabla.
UNIQUE
Es una restricción que proporciona la integridad de entidad para una o varias columnas
dadas a través de un índice único.
CLUSTERED | NONCLUSTERED
Especifica que se ha creado un índice agrupado o no agrupado para la restricción
PRIMARY KEY o UNIQUE. El valor predeterminado de las restricciones PRIMARY KEY es
CLUSTERED; el de las restricciones UNIQUE es NONCLUSTERED.
Si en una tabla ya existe una restricción o índice agrupado, no se puede especificar
CLUSTERED en ALTER TABLE. Si en una tabla ya existe una restricción o índice agrupado, el
valor predeterminado de la restricción PRIMARY KEY es NONCLUSTERED.
ON {filegroup | DEFAULT}
Especifica la ubicación de almacenamiento del índice creado para la restricción.
FOREIGN KEY...REFERENCES
Es una restricción que proporciona integridad referencial a los datos de la columna. Las
restricciones FOREIGN KEY requieren que cada valor de la columna exista en la columna
especificada de la tabla a la que se hace referencia.
ref_table
Es la tabla a la que hace referencia la restricción FOREIGN KEY.
ref_column
Es una columna o lista de columnas entre paréntesis a las que hace referencia la nueva
restricción FOREIGN KEY.
ON DELETE {CASCADE | NO ACTION}
Especifica la acción que se produce en una fila de la tabla alterada, si esa fila tiene una
relación de integridad referencial y la fila a la que se hace referencia se elimina de la tabla
principal. El valor predeterminado es NO ACTION.
Si se especifica CASCADE y se elimina una fila de la tabla primaria, también se elimina
la fila de la tabla desde donde se hace referencia. Si se especifica NO ACTION, SQL Server
genera un error y se deshace la acción de eliminación de la fila en la tabla primaria.
ON UPDATE {CASCADE | NO ACTION}
Especifica la acción que se produce en una fila de la tabla alterada, si esa fila tiene una
relación de integridad referencial y la fila a la que se hace referencia se actualiza en la tabla
principal. El valor predeterminado es NO ACTION.

43
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Si se especifica CASCADE, se actualiza una fila en la tabla de referencia si esa fila se


actualiza en la tabla primaria. Si se especifica NO ACTION, SQL Server genera un error y se
deshace la acción de actualización en la fila de la tabla primaria.
[ASC | DESC]
Especifica cómo se ordenan la columna o las columnas que participan en las
restricciones de la tabla. El valor predeterminado es ASC.
WITH VALUES
Especifica que el valor dado en DEFAULT constant_expression se encuentra en una
nueva columna agregada a las filas existentes. WITH VALUES sólo puede especificarse cuando
se especifique DEFAULT en una cláusula de columna ADD. Si la columna agregada permite
valores NULL y se ha especificado WITH VALUES, el valor predeterminado se almacena en la
nueva columna agregada a las filas existentes. Si no se especifica WITH VALUES para las
columnas que permiten valores NULL, el valor NULL se almacena en la nueva columna en las
filas existentes. Si la nueva columna no permite valores NULL, el valor predeterminado se
almacena en las nuevas filas, independientemente de que se especifique o no WITH VALUES.
column[,...n]
Es una columna o lista de columnas entre paréntesis que se utilizan en una nueva
restricción.
constant_expression
Es un valor literal, un valor NULL o una función del sistema que se utiliza como el valor
predeterminado de la columna.
FOR column
Especifica la columna asociada con una definición DEFAULT basada en la tabla.
CHECK
Es una restricción que exige la integridad del dominio al limitar los valores posibles que
se pueden escribir en una o varias columnas.
logical_expression
Es una expresión lógica que se utiliza en una restricción CHECK y devuelve TRUE o
FALSE.

Ejemplo 1 Agregar una columna

ALTER TABLE docExa ADD columnB VARCHAR(20) NULL

Ejemplo 2 Quitar una columna

ALTER TABLE docExb DROP COLUMN columnB

Ejemplo 3 Agregar una restricción no comprobada

ALTER TABLE docExd WITH NOCHECK


ADD CONSTRAINT CK_docExd_columnA CHECK (columnA > 1)

Ejemplo 4 Agregar una columna que acepta NULL con valores predeterminados

44
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

ALTER TABLE MyTable


ADD AddDate smalldatetime NULL
DEFAULT getdate() WITH VALUES

3.2.2.3 DROP TABLE


Quita una definición de tabla y todos los datos, índices, desencadenadores,
restricciones y especificaciones de permisos de la tabla. Las vistas o procedimientos
almacenados que hagan referencia a la tabla quitada se deben quitar explícitamente con la
instrucción DROP VIEW o DROP PROCEDURE. La sintaxis es la siguiente:
DROP TABLE table_name

Ejemplo

DROP TABLE table1

3.2.3 Creación y manipulación de índices

3.2.3.1 CREATE INDEX


Crea un índice de una vista o una tabla dada. La sintaxis es la siguiente:

CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name


ON table ( column [ ASC | DESC ] [ ,...n ] )

, con:
UNIQUE
Crea un índice único (es decir, que no permite que dos filas tengan el mismo valor de
índice) en una tabla o vista.
CLUSTERED
Crea un objeto en el que el orden físico de las filas es el mismo que el orden indexado
de las filas. Una tabla o vista permite un índice agrupado al mismo tiempo.
NONCLUSTERED
Crea un objeto que especifica la ordenación lógica de una tabla. Con un índice no
agrupado, el orden físico de las filas es independiente del orden indexado.
index_name
Es el nombre del índice. Los nombres de índice deben seguir las reglas de los
identificadores.
table
Es la tabla que contiene la columna o columnas que deben indexarse. Especificar los
nombres de la base de datos y del propietario de la tabla es opcional.
column

45
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Es la columna o columnas a las que se aplica el índice. Si se especifican dos o más


nombres de columna se creará un índice compuesto sobre los valores combinados de las
columnas especificadas.
[ASC | DESC]
Determina la dirección ascendente o descendente del orden de la columna de índice
determinada. El valor predeterminado es ASC.
n
Es un marcador de posición que indica que se pueden especificar múltiples columnas
(columnas) para cualquier índice particular.

Ejemplo 1 El ejemplo siguiente crea un índice en la columna au_id de la tabla authors.

CREATE INDEX IX_authors_auID


ON authors (auID)

Ejemplo 2 Este ejemplo crea un índice en la columna employeeID de la tabla emp_pay, que
exige que sea único. Este índice ordena físicamente los datos del disco porque se especifica la
cláusula CLUSTERED.

CREATE UNIQUE CLUSTERED INDEX IX_empPay_employeeID


ON empPay (employeeID)

Ejemplo 3 En este ejemplo se crea un índice compuesto utilizando las columnas orderID y
employeeID de la tabla order_emp.

CREATE INDEX IX_orderEmp_ordered_employeeID


ON orderEmp (ordered, employeeID)

3.2.3.2 DROP INDEX


Quita uno o más índices de la base de datos actual. La sintaxis es la siguiente:
DROP INDEX 'table.index' [ ,...n ]

table
Es la tabla en que está ubicada la columna indexada.
index
Es el nombre del índice que se va a quitar. Los nombres de los índices se deben ajustar
a las reglas de los identificadores.
n
Se trata de un marcador de posición que indica que se pueden especificar varios
índices.

Ejemplo Este ejemplo elimina el índice denominado IX_authors_auID de la tabla authors.

DROP INDEX authors.IX_authors_auID

46
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

3.2.4 Creación y manipulación de vistas

3.2.4.1 CREATE VIEW


Crea una tabla virtual que representa los datos de una o más tablas de una forma
alternativa. La sintaxis es la siguiente:

CREATE VIEW view_name [ ( column [ ,...n ] ) ]


AS
select_statement

, con:
view_name
Es el nombre de la vista. Los nombres de las vistas deben cumplir las reglas de los
identificadores. Especificar el propietario de la vista es opcional.
column
Es el nombre que se va a utilizar para una columna en una vista. Sólo es necesario
asignar un nombre a una columna en CREATE VIEW cuando una columna proviene de una
expresión aritmética, una función o una constante; cuando dos o más columnas puedan tener
el mismo nombre (normalmente, debido a una combinación); o cuando una columna de una
vista recibe un nombre distinto al de la columna de la que proviene. Los nombres de columna
se pueden asignar también en la instrucción SELECT.
Si no se especifica column, las columnas de la vista adquieren los mismos nombres que
las columnas de la instrucción SELECT.
n
Es un marcador de posición que indica que se pueden especificar varias columnas.
AS
Son las acciones que va a llevar a cabo la vista.
select_statement
Es la instrucción SELECT que define la vista. Puede utilizar más de una tabla y otras
vistas.
Una vista no tiene por qué ser un simple subconjunto de filas y de columnas de una
tabla determinada. Una vista se puede crear con más de una tabla o con otras vistas, mediante
una cláusula SELECT de cualquier complejidad.
Se pueden utilizar funciones en select_statement y puede utilizar varias instrucciones
SELECT separadas con UNION o UNION ALL.
WITH CHECK OPTION
Exige que todas las instrucciones de modificación de datos ejecutadas contra la vista se
ajusten a los criterios establecidos en select_statement. Cuando una fila se modifica mediante
una vista, WITH CHECK OPTION garantiza que los datos permanecerán visibles en toda la vista
después de confirmar la modificación.

Ejemplo 1 El ejemplo siguiente crea una vista con una instrucción SELECT sencilla. Una vista
sencilla resulta útil cuando una combinación de columnas se consulta frecuentemente.

47
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

CREATE VIEW titles_view


AS
SELECT title, type, price, pubdate
FROM titles

Ejemplo 2 Este ejemplo muestra una definición de vista que incluye una función integrada.
Cuando se utilizan funciones, la columna que se deriva debe incluir un nombre de columna en
la instrucción CREATE VIEW.

CREATE VIEW categories (category, average_price)


AS
SELECT type, AVG(price)
FROM titles
GROUP BY type

3.2.4.2 DROP VIEW


Quita una o más vistas de la base de datos actual. La sintaxis es la siguiente:
DROP VIEW { view } [ ,...n ]

Ejemplo

DROP VIEW titles_view

48
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

3.3 Comandos DCL (Data Control Language)


Los comandos SQL pertenecientes a Data Control Language son los comandos
encargados de la gestión de las transacciones explícitas.
Las transacciones son grupos de operaciones que se combinan en unidades lógicas de
trabajo. Se usan para controlar y mantener la coherencia y la integridad de una base de datos,
a pesar de los errores que puedan producirse en el sistema. Estas transacciones deben cumplir
4 propiedades fundamentales comúnmente conocidas como ACID: atomicidad, coherencia,
aislamiento y durabilidad.
Una transacción es una unidad única de trabajo. Si una transacción tiene éxito, todas
las modificaciones de los datos realizadas durante la transacción se confirman y se convierten
en una parte permanente de la base de datos. Si una transacción encuentra errores y debe
cancelarse o revertirse, se borran todas las modificaciones de los datos.
Es importante señalar que cuando se produce una interrupción del servicio del motor
de datos SQL Server, el sistema realiza un ROLLBACK de todas las transacciones en curso no
confirmadas.

SQL Server funciona en varios modos de transacción. Nosotros vamos a hablar de dos
de ellos:
• Transacciones de confirmación automática
Cada instrucción individual es una transacción. Este modo de confirmación automática
es el que permite el uso de claves extranjeras, manteniéndose la integridad referencial en las
operaciones INSERT, UPDATE y DELETE.
• Transacciones explícitas
Cada transacción se inicia explícitamente con la instrucción BEGIN TRANSACTION y se
termina explícitamente con una instrucción COMMIT o ROLLBACK.

3.3.1 BEGIN TRANSACTION

Marca el punto de inicio de una transacción local explícita. BEGIN TRANSACTION


representa un punto en el que los datos a los que hace referencia una conexión son lógica y
físicamente coherentes. Si se producen errores, se pueden revertir todas las modificaciones
realizadas en los datos después de BEGIN TRANSACTION para devolver los datos al estado
conocido de coherencia. Cada transacción dura hasta que se completa sin errores y se emite
COMMIT TRANSACTION para hacer que las modificaciones sean una parte permanente de la
base de datos, o hasta que se produzcan errores y se borren todas las modificaciones con la
instrucción ROLLBACK TRANSACTION.

La sintaxis es la siguiente:

BEGIN { TRAN | TRANSACTION }

3.3.2 COMMIT TRANSACTION

49
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

Marca el final de una transacción correcta. COMMIT TRANSACTION hace que todas las
modificaciones de datos desde el inicio de la transacción sean parte permanente de la base de
datos y libera los recursos de la transacción.
Es responsabilidad del programador decidir cuándo debe ejecutarse la operación
COMMIT. No se puede revertir una transacción después de ejecutar una instrucción COMMIT
TRANSACTION, porque las modificaciones sobre los datos ya son parte permanente de la base
de datos.

La sintaxis es la siguiente:

COMMIT { TRAN | TRANSACTION }


Ejemplo En este ejemplo se inicia una transacción, se borra un registro de la tabla
JobCandidate y se confirman los cambios.
Al ejecutar el primer SELECT dentro de la transacción se comprobará que el registro
con JobCandidateID = 13 no está en la tabla JobCandidate. El mismo resultado se obtendrá al
ejecutar el segundo SELECT fuera de la transacción.

BEGIN TRANSACTION

DELETE FROM JobCandidate


WHERE JobCandidateID = 13

SELECT * FROM JobCandidate


WHERE JobCandidateID = 13

COMMIT TRANSACTION

SELECT * FROM JobCandidate


WHERE JobCandidateID = 13

3.3.3 ROLLBACK TRANSACTION

Revierte una transacción. Puede usar ROLLBACK TRANSACTION para borrar todas las
modificaciones de datos realizadas desde el inicio de la transacción. También libera los
recursos que mantiene la transacción.

La sintaxis es la siguiente:

ROLLBACK { TRAN | TRANSACTION }


Ejemplo En este ejemplo se inicia una transacción, se borra un registro de la tabla
JobCandidate, se actualiza el campo name para otro registro de la misma tabla y se revierten
los cambios.
Al ejecutar el primer SELECT dentro de la transacción se comprobará que el registro
con JobCandidateID = 15 no está en la tabla JobCandidate. Del mismo modo se verá modifiado
el nombre de la candidata con JobCandidateID = 17. En cambio, el segundo SELECT sí devolverá
el registro 15 y mostrará el nombre sin modificar para el registro 17, ya que los cambios han
sido descartados.

50
GESTIÓN DE BASES DE DATOS CURSO
Unidad de trabajo 8: Lenguaje Transact-SQL 2023-
2024

BEGIN TRAN

DELETE FROM JobCandidate


WHERE JobCandidateID = 15

UPDATE JobCandidate SET name=’Mary Smith’


WHERE JobCandidateID = 17

SELECT * FROM JobCandidate


WHERE JobCandidateID = 15

ROLLBACK TRAN

SELECT * FROM JobCandidate

51

También podría gustarte