Está en la página 1de 61

Taller de Base de Datos

orientada a Objetos
Unidad 1:
SQL. T-SQL 2008
(Lenguaje de consultas estructurado)
Introducción
• El Lenguaje de Consulta Estructurado
(Structured Query Language).
• Es un lenguaje declarativo de acceso a base de
datos relacionales.
• En 1970 Dr. Edgard F. Codd propone el
modelo relacional.
• IBM definen el lenguaje SEQUEL (Structured
English QUEry Language) que se implementa
en “System R” en 1977.
• Por problema de derecho de autor el nombre
pasó de SEQUEL a SQL.
Introducción
• Oracle lo implementó en 1979 en forma
comercial en Oracle V2 (Versión 2) para los
computadores VAX.
• IBM lo implementa en DB2 en 1983.
• En 1986 se adopta como estándar ANSI/ISO.
Introducción
Año Nombre Alias Comentarios
1986 SQL-86 SQL-87 Primera publicación ANSI ratificado
por ISO en 1987

1989 SQL-89 Revisiones menores


1992 SQL-92 SQL2 Revisiones menores
1999 SQL-99 SQL3 Agrega expresiones regulares,
triggers, tipos no escalares (Array,Ref
Type, BLOB)

2003 SQL-2003 Introducir XML, estandarizar las


secuencias y todo lo auto generado.
Introducción
• En los comandos SQL no se distingue entre
mayúsculas y minúsculas (SELECT es
equivalente a SeLeCt o SelecT).
• Se acostumbra escribir todos los comandos
SQL en mayúsculas.
• En algunas bases de datos se diferencia el
nombre de las tablas y de las columnas si son
en mayúsculas o en minúsculas.
Interpretación de la sintaxis T-SQL
Tipos de Datos
Consideraciones previas para elegir el tipo de dato
asociado a una columna

• Qué tipo de información se va a almacenar. Por ejemplo, no se


• pueden guardar caracteres en un campo cuyo tipo de datos sea
numérico.
• El espacio de almacenamiento necesario (dimensionar el campo).
• Qué tipo de operaciones se van a realizar con los valores del
• campo. Pues, por ejemplo, no se puede calcular la suma de dos
cadenas de texto.
• Si se desea ordenar o indexar por ese campo. Los criterios de
• ordenación difieren en función del tipo de dato, así, los números
• almacenados en un campo texto se ordenan según el valor de su
código ASCII (1,10,11,2,20,...) que no coincide con la ordenación
numérica.
Tipos de Datos
Numéricos
Tipos de Datos
Numéricos aproximados
Tipos de Datos
Fechas/Horas
Tipos de Datos
Texto
Tipos de Datos
Binarios

* FILESTREAM permite a las aplicaciones basadas en SQL Server almacenar


datos no estructurados, como documentos e imágenes, en el sistema de
archivos.
Tipos de Datos
Otros tipos de datos
Tipo de dato auto numérico
IDENTITY [ (semilla , incremento) ]
•semilla: valor de inicio.
•incremento: incremento que se aplica

CREATE TABLE dbo.Productos(


ID INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
Nombre VARCHAR(40) NOT NULL
)
Componentes del SQL
• El lenguaje SQL está compuesto por:
– Comandos.
– Cláusulas.
– Operadores y
– Funciones de agregado.
• Estos elementos se combinan en las
instrucciones para:
– Crear.
– Actualizar y
– Manipular las bases de datos.
Componentes del SQL – Comandos
• Existen dos tipos de comandos SQL:

– DDL (Data Definition Language): permiten crear y


definir nuevas bases de datos, campos e índices.
– DML (Data Manipulation Language): permiten
generar consultas para ordenar, filtrar y extraer
datos de la base de datos.
Componentes del SQL – Comandos

DDL
Comando Descripción
CREATE Utilizado para crear nuevas tablas,
campos e índices

DROP Empleado para eliminar tablas e índices


ALTER Utilizado para modificar las tablas
agregando campos o cambiando la
definición de los campos.
DDL
Principales instrucciones:
•CREATE DATABASE
•CREATE TABLE
•ALTER TABLE
•CREATE INDEX
•CREATE VIEW
•CREATE TRIGGER
•CREATE PROCEDURE / FUNCTION
•CREATE RULE
•CREATE SCHEMA
•DROP “objeto”
Sintaxis: CREATE DATABASE
CREATE DATABASE nombreBD
[ ON
[PRIMARY][ < fichero > [ ,...n ] ]
[ , < grupo_fichero > [ ,...n ] ]
]
[ LOG ON { < fichero > [ ,...n ] } ]
[ COLLATE collation_name ]
[FOR ATTACH |
FOR ATTACH REBUILT_LOG]
< fichero > ::=
( [ NAME = logical_file_name , ]
FILENAME = 'os_file_name'
[ , SIZE = size ]
[ , MAXSIZE = { max_size | UNLIMITED } ]
[ , FILEGROWTH = growth_increment ] ) [ ,...n ]
< grupo_fichero > ::=
FILEGROUP filegroup_name [CONTAINS FILESTREAM] < fichero >
[ ,...n ]
CREATE DATABASE
• nombreBD: nombre de la BD que se va a crear.
• collation_name: mapa de caracteres
• logical_file_name : nombre lógico del fichero.
• os_file_name : nombre físico del fichero.
• size: tamaño del fichero.
• max_size: tamaño máximo del fichero.
• growth_increment : incremento del fichero.
• filegroup_name: nombre grupo de archivos
CREATE DATABASE ejemplo
CREATE DATABASE [compras]
ON (NAME = N'compras',
FILENAME = N'C:\data\compras.mdf' ,
SIZE = 2, MAXSIZE = 3000,FILEGROWTH = 10%)
LOG ON (NAME = N'compras_log',
FILENAME = N'C:\data\compras_log.LDF' ,
SIZE = 1, FILEGROWTH = 10%)
COLLATE Modern_Spanish_CI_AS
Estructuras de las tablas
Conceptos previos:
◦ Llave primaria (PK): en inglés Primary Key, las
columnas que tienen esta característica no podrán
ser nulas y tampoco podrán ser repetidas (como
tupla).
◦ Llave única: en inglés Unique Key, las columnas
que tienen esta característica no podrán ser
repetidas.
◦ Llave foránea (FK): en inglés Foreign Key, las
columnas que tienen esta característica apuntan a
columnas de otras tablas, por lo tanto al insertar
una nueva fila el valor de la columna indicada
como FK debe existir en la tabla referenciada.
CREATE TABLE
CREATE TABLE
[ database_name . [ schema_name ] . | schema_name . ]
table_name
( { <column_definition> | <computed_column_definition> |
<column_set_definition>}
[ <table_constraint> ] [ ,...n ] )
[ ON { partition_scheme_name ( partition_column_name ) |
filegroup | "default" } ]
[ { TEXTIMAGE_ON { filegroup | "default" } ]
[ FILESTREAM_ON { partition_scheme_name | filegroup |
"default" } ]
[ WITH ( <table_option> [ ,...n ] ) ] [ ; ]
CREATE TABLE

<column_definition> ::=
column_name <data_type> [ FILESTREAM ] [ COLLATE
collation_name ]
[ NULL | NOT NULL ]
[ [ CONSTRAINT constraint_name ] DEFAULT
constant_expression ]
| [ IDENTITY [ ( seed ,increment ) ] [ NOT FOR REPLICATION ] ]
[ ROWGUIDCOL ] [ <column_constraint> [ ...n ] ]
[ SPARSE ]
CREATE TABLE

<column_definition> ::=
column_name <data_type> [ FILESTREAM ] [ COLLATE
collation_name ]
[ NULL | NOT NULL ]
[ [ CONSTRAINT constraint_name ] DEFAULT
constant_expression ]
| [ IDENTITY [ ( seed ,increment ) ] [ NOT FOR REPLICATION ] ]
[ ROWGUIDCOL ] [ <column_constraint> [ ...n ] ]
[ SPARSE ]
CREATE TABLE

• TEXTIMAGE_ON: indica en qué grupo de archivos se


almacenan las columnas text, ntext e image.
• FILESTREAN_ON: indica en qué grupo de archivos se
almacenan las columnas varbinary
• SPARSE: columna con muchas filas NULAS
• FILESTREAM: especifica almacenamiento filestream
(fichero SO)
CREATE TABLE
<table options> ::=
{ DATA_COMPRESSION = { NONE | ROW | PAGE }
[ ON PARTITIONS ( { <partition_number_expression> | <range> } [ , ...n ] ) ] }

<computed_column_definition> ::=
column_name AS computed_column_expression
[ PERSISTED [ NOT NULL ] ]
[ [ CONSTRAINT constraint_name ]
{ PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = fillfactor | WITH ( <index_option> [ , ...n ]) ]
| [ FOREIGN KEY ] REFERENCES referenced_table_name [ ( ref_column ) ]
[ ON DELETE { NO ACTION | CASCADE } ]
[ ON UPDATE { NO ACTION } ]
[ NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] ( logical_expression )
[ ON { partition_scheme_name ( partition_column_name ) | filegroup | "default" } ] ]
COLUMN CONSTRAINT
Restricción a nivel de columna

CONSTRAINT nombre
{ [ NULL | NOT NULL ] |
COLUMN CONSTRAINT
[ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR = factor_relleno ]
[ ON {grupo_ficheros | DEFAULT} ] ]
]|
[ [ FOREIGN KEY ]
REFERENCES otra_tabla[ (campo_externo1) ]
[ ON DELETE {NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE {NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ]
]|
CHECK [ NOT FOR REPLICATION ] ( expresión_lógica )
}
COLUMN CONSTRAINT
• nombre: es el nombre de la restricción que se va a crear.
• otra_tabla: es el nombre de la tabla a la que se hace
referencia.
• campo_externo1: son los nombres de los campos de la
otra_tabla a los que se hace referencia.
• factor_relleno: especifica cuánto se debe llenar cada página
de índice utilizada para almacenar los datos de índice.Entre 0
y 100. Por defecto 0.
• grupo_ficheros: indica dónde se almacena la tabla
TABLE CONSTRAINT
Restricción a nivel de tabla
CONSTRAINT nombre
{ [ { PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{ (principal1 [ ASC | DESC ] [ , principal2 [, ...] ] ) }
[ WITH FILLFACTOR = factor_relleno]
[ ON { grupo_ficheros | DEFAULT } ]
]|
FOREIGN KEY
[ (referencia1 [, referencia2 [, ...] ] ) ]
REFERENCES otra_tabla [ (campo_externo1 [ ,... campo_externo2 ] ) ]
[ ON DELETE {NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE {NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ NOT FOR REPLICATION ] |
CHECK [ NOT FOR REPLICATION ] (expresión_lógica )
TABLE CONSTRAINT
• nombre: es el nombre de la restricción que se va a crear.
• principal1, principal2: son los nombres de los campos que
compondrán la clave principal.
• referencia1, referencia2: son los nombres de los campos
que hacen referencia a otros de otra tabla.
• otra_tabla: es el nombre de la tabla a la que se hace
referencia.
• campo_externo1, campo_externo2: son los nombres de los
campos de la otra_tabla a los que se
• hace referencia.
• expresión_lógica: criterio que se ha de cumplir. Devuelve
true o false
CREATE TABLE: ejemplo
CREATE TABLE Det_Orden(
Nro_orden INTEGER NOT NULL,
Num_linea SMALLINT NOT NULL,
Cod_prod INTEGER NOT NULL,
Cantidad INTEGER NOT NULL CHECK (cantidad >0 and
cantidad <=100)),
CONSTRAINT id_orden PRIMARY KEY (nro_orden,
num_linea),
CONSTRAINT f_prod FOREIGN KEY (cod_prod) REFERENCES
Producto(cod_prod),
CONSTRAINT f_ord FOREIGN KEY (nro_orden) REFERENCES
orden_compra(nro_orden))
ALTER TABLE: modificar tabla
ALTER TABLE tabla
{
ALTER COLUMN { campo tipo [(tamaño)] } [COLLATE] [ NULL | NOT
NULL] |
ADD
{<column_definition> | <computed_definition>|<table_constraint>} [,
…n] |
DROP
{COLUMN nombre_campo | CONSTRAINT nombre_restricción} [,…n]
|
{ ENABLE | DISABLE } TRIGGER { ALL | nombre_trigger [ ,...n ] }
|
{ CHECK | NOCHECK } CONSTRAINT { ALL | nombre_restricción[ ,...n ] }}
Componentes del SQL – Comandos

DML
Comando Descripción
SELECT Utilizado para consultar registros de la base de datos
que satisfagan un criterio determinado

INSERT Utilizado para cargar lotes de datos en la base de


datos en una única operación.

UPDATE Utilizado para modificar los valores de los campos y


registros especificados

DELETE Utilizado para eliminar registros de una tabla de una


base de datos
Componentes del SQL – Cláusulas

• Son condiciones de modificación utilizadas para definir los


datos que desea seleccionar o manipular.

Cláusula Descripción
FROM Utilizada para especificar la tabla de la cual se van a
seleccionar los registros.
WHERE Utilizada para especificar las condiciones que deben reunir
los registros que se van a seleccionar.
GROUP BY Utilizada para separar los registros seleccionados en grupos
específicos.
HAVING Utilizada para expresar la condición que debe satisfacer
cada grupo.
ORDER BY Utilizada para ordenar los registros seleccionados de
acuerdo con un orden específico.
Componentes del SQL – Operadores lógicos

Operador USO
AND Es el "y" lógico. Evalúa dos condiciones y
devuelve un valor de verdad sólo si ambas son
ciertas.

OR Es el "o" lógico. Evalúa dos condiciones y


devuelve un valor de verdadero si alguna de
las dos es cierta.

NOT Negación lógica. Devuelve el valor contrario de


la expresión.
Componentes del SQL – Operadores de
comparación

Operador USO
< Menor que
> Mayor que
<> Distinto de
<= Menor o igual que
>= Mayor o igual que
= Igual que
BETWEEN Utilizado para especificar un intervalo de valores.
LIKE Utilizado en la comparación de un modelo.
IN Utilizado para especificar registros de una base de
datos .
Componentes del SQL – Funciones de agregado

Se usan dentro de una cláusula SELECT en


grupos de registros para devolver un único
valor que se aplica a un grupo de registros.

Función Descripción
AVG Calcular el promedio de los valores de un campo determinado .
COUNT Devuelve el número de registros de la selección.
SUM Devuelve la suma de todos los valores de un campo
determinado.
MAX Devuelve el valor más alto de un campo especificado.
MIN Devuelve el valor más bajo de un campo especificado.
Consultas de Inserción
Para insertar un registro se utiliza el
comando INSERT
SINTAXIS
INSERT INTO nombre_tabla
(columna1, columna2,…, columnaN)
VALUES (valor1,valor2,…, valorN)
Consultas de Actualización
Para actualizar uno o varios registros se utiliza el
comando UPDATE.
SINTAXIS
UPDATE nombre_tabla
SET campo1=valor1,campo2=valor2,…,
campoN=valorN
WHERE criterio
Consultas de Actualización
Para actualizar uno o varios registros se utiliza el
comando UPDATE.
SINTAXIS
UPDATE nombre_tabla
SET campo1=valor1,campo2=valor2,…,
campoN=valorN
WHERE criterio
Consultas de Eliminación
Para borrar uno o varios registros de una
tabla se utiliza el comando DELETE.
SINTAXIS
DELETE FROM nombre_tabla
WHERE criterio
Consultas de selección –
Consultas básicas
Consultas de selección – Ordenar los
registros
• Los registro se ordenan utilizando la cláusula ORDER BY.
Consultas de selección – Consultas con
predicado
• Se incluye entre la cláusula y el primer
nombre del campo a recuperar:
– DISTINCT: Omite los registros cuyos campos seleccionados coincidan
totalmente.
– DISTINCTROW: Omite los registros duplicados basándose en la
totalidad del registro y no sólo en los campos seleccionados.*
– LIMIT.*
– TOP.*
– ALL.*

* : No implementado por todas las bases


Consultas de selección – Consultas con predicado
Consultas de selección – Alias
 En determinadas circunstancias es necesario
asignar un nombre a alguna columna en
particular de un conjunto devuelto.
Criterios de selección
 Hasta ahora hemos visto como recuperar
todos los registros de una tabla.
 A continuación veremos como aplicar filtros
para obtener ciertos datos con algún criterio
de búsqueda.
 Dos puntos importantes a considerar:
Para buscar por un valor no numérico debemos
encerrarlo entre comillas simples ‘’.
Para referirse a la fecha lo haremos de esta
manera: ‘yyyy-mm-dd’.
Criterios de selección – Where
• Esta cláusula es usada para determinar qué
registros de las tablas enumeradas en la
cláusula FROM aparecerán en los resultados
de la instrucción SELECT.
• Después de escribir esta cláusula se deben
especificar las condiciones de búsqueda.
Criterios de selección –
Where
Criterios de selección –
Operadores lógicos

Para preguntar si es distinto de


NULL se utiliza IS NOT NULL
Criterios de selección –
Rango de valores
• Se utiliza el operador BETWEEN.
• Su sintaxis es así:

• La condición NOT es opcional.


Criterios de selección – LIKE
e IN
• LIKE: se utiliza para buscar en
cadenas de caracteres.
• IN: se utiliza para buscador en
de un listado.

Opcional
Agrupamiento de registros y funciones
agregadas
• GROUP BY:
– Combina los registros con valores idénticos, en la lista de campos
especificados, en un único registro.
– Para cada registro se crea un valor sumario si se incluye una función SQL
agregada.
– Su sintaxis es:

– Los valores NULL en los campos GROUP BY se agrupan y no se omiten.


– Los valores NULL no se evalúan en ninguna de las funciones SQL agregadas.
– Se utiliza la cláusula WHERE para excluir aquellas filas que no desea agrupar, y
la cláusula HAVING para filtrar los registros una vez agrupados.
Agrupamiento de registros y funciones
agregadas

También existen MIN, AVG y otros más.


Consultas de unión
• Se utilizan para relacionar varias tablas en una
sola consulta.
• Existen dos tipos:
– Unión interna, conocida como INNER JOIN.
– Unión externa, conocida como UNION.
Consultas de unión – INNER JOIN
• La cláusula INNER que combina registros de dos tablas.
• Su sintaxis es:

• Donde comp es algún criterio de comparación.


• Si no agregamos el operador ON el resultados será la
combinación de todas las filas.
• Si la tabla_1 tiene 2 filas y la tabla_2 tiene 3 filas el resultado
final será de 6 filas.
Consultas de unión – INNER
JOIN

Equivalentes
Consultas de unión – INNER
JOIN

Elimina
ambigüedad

Equivalentes
Consultas de unión – UNION
• Se utiliza para crear una consulta de unión, combinando los
resultados de dos o más consultas.
• Su sintaxis es:

• UNION no devuelve filas repetidas.


• Es posible obligar a UNION que retorne todas las filas usando
el predicado ALL. Esto lo hace más eficiente.
• Todas las consultas deben tener el mismo número de campos.
• No es necesario que coincidan los tipo de las columnas.
Consultas de unión – UNION

También podría gustarte