Apuntes SQL
Apuntes SQL
Argentina
J. F. Kennedy
BASE de DATOS II
APUNTE DE
SQL
2009
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Tablas
Una base de datos a menudo contiene uno o más tablas. Cada tabla es identificada por un
nombre (por ejemplo "Clientes" o "Órdenes"). Las tablas contienen registros (filas) con
datos.
El siguiente es un ejemplo de una tabla llamada "Personas":
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
La tabla contiene tres registros (uno para cada persona) y cinco columnas (P_Id, Apellido,
Nombre, Dirección, and Ciudad).
Sentencias SQL
La mayoría de las acciones que se realizan en una base de datos se hacen con sentencias
SQL.
La siguiente declaración SQL se selecciona todos los registros en La Tabla "Personas":
Algunos sistemas de base de datos requieren un punto y coma al final de las sentencias SQL.
El punto y coma es una manera estándar para separas cada sentencia SQL en un sistema de
base de datos que permite ejecutar más de una sentencia SQL para ser ejecutadas en la
misma llamada al servidor.
SQL puede ser dividido en dos partes: The Data Manipulatión Language (DML) (lenguaje de
manipulación de datos ) y el Data Definition Language (DDL).(lenguaje de manipulación de
datos)
2
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La DDL permite crear o suprimir tablas en la base de datos. También definir índices (llaves),
especificar los enlaces entre tablas, e impone limitaciones entre tablas. Las más importantes
declaraciones DDL son:
SQL DCL
Con el nombre de lenguaje de control de datos se hace referencia a la parte del lenguaje SQL
que se ocupa de los apartados de seguridad y de la integridad en el procesamiento
concurrente.
La sentencia SELECT
La sentencia SELECT es utilizada para extraer datos de una base de datos.
El resultado es almacenado en una tabla de resultados, llamada el resultado-set.
Sintaxis
SELECT column_name(s)
FROM tabla_name
y
SELECT * FROM tabla_name
Un ejemplo SELECT
La Tabla “Personas”:
3
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
SELECT * Ejemplo
Tip: el asterisco (*) es el camino rápido para seleccionar todas las columnas
4
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Ejemplo
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
Se seleccionarán solo los valores distintos de la columna llamada "Ciudad" desde la tabla.
Sandnes
Stavanger
La cláusula top
La cláusula TOP es usada para especificar la cantidad de registros que retornara la consulta
Puede ser muy útil para tablas de cientos de registros, donde la ejecución puede impactar
sobre la performance del
5
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
MySQL Sintaxis
SELECT column_name(s)
FROM tabla_name
LIMIT number
Ejemplo
SELECT *
FROM Personas
LIMIT 5
Oracle Sintaxis
SELECT column_name(s)
FROM tabla_name
WHERE ROWNUM <= number
Ejemplo
SELECT *
FROM Personas
WHERE ROWNUM <=5
Ejemplo
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Tom Vingvn 23 Stavanger
6
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
ORDER BY
La palabra clave ORDER BY es utilizada para ordenar el set de resultado por una columna
específica.
La palabra clave ORDER BY ordenar los registros en orden ascendente por defecto.
Si usted quiere ordenar los registros en un orden descendente, se usa el DESC clave.
Sintaxis
SELECT column_name(s)
FROM tabla_name
ORDER BY column_name(s) ASC|DESC
Ejemplo
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Tom Vingvn 23 Stavanger
Se seleccionará todas las personas desde la tabla y se ordenará la lista por su apellido.
7
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Se seleccionará todas las personas desde la tabla y se ordenará la lista por su apellido de
manera descendente.
La cláusula WHERE
La cláusula WHERE es utilizada para extraer sólo los registros que cumplen un criterio.
Sintaxis
SELECT column_name(s)
FROM tabla_name
WHERE column_name operator value
Ejemplo
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
8
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
WHERE Ciudad='Sandnes'
SQL usa comillas simples en los valores de los campos de textos (la mayoría de los sistemas
de base de datos aceptan también las comillas dobles). Mientras tanto los valores numéricos
no están encerrados entre comillas.
Valores de textos:
Correcto:
Incorrecto:
Valores numéricos:
Correcto:
Incorrecto:
9
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Note: En algunas versiones el símbolo de distinto no es e <> sino que podría escribirse como
!=
El operador LIKE
EJEMPLO
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
Se seleccionará las personas que viven en la ciudad que comienza con “s”.
El signo "%" puede ser usado para definir un patrón que puede ser usado antes y después
del patrón
Se seleccionarán las personas que viven en la ciudad que termina con una “s”.
10
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Se seleccionarán las personas que viven en la ciudad que contiene un patrón “tav”
Es posible seleccionar las personas que viven en la ciudad que no contienen el patrón “tav”,
para ello se utiliza la palabra NOT
Comodines
Los comodines pueden sustituir uno o más caracteres cuando se busca en una base de
datos.
11
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
[!charlist]
Ejemplo
Tabla "Personas":
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
Usando el comodín %
Se seleccionan las personas que viven en una ciudad que comience con “sa”.
Se seleccionan las personas que viven en una ciudad que contiene el patrón “nes” dentro de
las ciudades.
12
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Usando el comodín _
Se seleccionará las personas con el nombre que comienza con un caracter y continúa con
“_la”.
Se seleccionará las personas con el nombre que comienza con “s” y continúa con un
caracter, sigue con “end” otro caracter y continúa con “on”.
Se seleccionará las personas con los apellidos que comienza con “b” ,“s” o “p.
13
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Se seleccionará las personas con el nombre que no comienza con b" o "s" o "p".
El operador IN
Ejemplo
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
El operador BETWEEN
El operador BETWEEN selecciona un rango de datos entre dos valores. El valor puede ser
números , textos , o fechas.
14
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
SELECT column_name(s)
FROM tabla_name
WHERE column_name
BETWEEN value1 AND value2
Ejemplo
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
De acuerdo a los sistemas de base de datos utilizados los valores mostrados pueden incluir
los valores solicitados o excluirlos , o puede incluir el primero y excluir el último.
Para mostrar las personas que están fuera del rango se usa el NOT BETWEEN:
SELECT * FROM Personas
WHERE Apellido
NOT BETWEEN 'Hansen' AND 'Pettersen'
Operador Exist
15
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
operadores tales como >, <, o =. EXISTS es un operador especial que describiremos en esta
sección.
EXISTS simplemente verifica si la consulta interna arroja alguna fila. Si lo hace, entonces la
consulta externa procede. De no hacerlo, la consulta externa no se ejecuta, y la totalidad de
la instrucción SQL no arroja nada.
Por favor note que en vez de *, puede seleccionar una o más columnas en la consulta
interna. El efecto será idéntico.
El set- resultado es :
SUM(Sales)
2750
Al principio, esto puede parecer confuso, debido a que la subsequencia incluye la condición
[region_name = 'West'], aún así la consulta sumó los negocios para todas las regiones. Si
observamos de cerca, encontramos que debido a que la subconsulta arroja más de 0 filas, la
condición EXISTS es verdadera, y la condición colocada dentro de la consulta interna no
influencia la forma en que se ejecuta la consulta externa.
16
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Cláusula ANY
Se puede utilizar el predicado ANY o SOME, los cuales son sinónimos, para recuperar
registros de la consulta principal, que satisfagan la comparación con cualquier otro registró
recuperado en la subconsulta. El ejemplo siguiente devuelve todos los productos cuyo precio
unitario es mayor que el de cualquier producto vendido con un descuento igual o mayor al
25 por ciento:
ANY significa que, para que una fila de la consulta externa satisfaga la condición
especificada, la comparación se debe cumplir para al menos un valor de los devueltos por la
subconsulta.
Por cada fila de la consulta externa se evalúa la comparación con cada uno de los valores
devueltos por la subconsulta y si la comparación es True para alguno de los valores ANY es
verdadero, si la comparación no se cumple con ninguno de los valores de la consulta, ANY da
False a no ser que todos los valores devueltos por la subconsulta sean nulos en tal caso ANY
dará NULL.
Si la subconsulta no devuelve filas ANY da False incluso si expresión es nula.
Ejemplo:
SELECT * FROM empleados
WHERE cuota > ANY (SELECT cuota FROM empleados empleados2
where empleados.oficina = empleados2.oficina);
Obtenemos los empleados que tengan una cuota superior a la cuota de alguno de sus
compañeros de oficina, es decir los empleados que no tengan la menor cuota de su oficina.
En este caso hemos tenido un alias de tabla en la subconsulta (empleados2) para poder
utilizar una referencia externa.
Cláusula ALL
17
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Con el modificador ALL, para que se cumpla la condición, la comparación se debe cumplir
con cada uno
de los valores devueltos por la subconsulta.
Si la subconsulta no devuelve ninguna fila ALL da True.
En el ejemplo se obtendrá los empleados que tengan una cuota superior a todas las cuotas
de la oficina del empleado. Se podría pensar que se obtiene el empleado de mayor cuota de
su oficina pero no lo es, aquí hay un problema, la cuota del empleado aparece en el
resultado de subconsulta por lo tanto > no se cumplirá para todos los valores y sólo saldrán
los empleados que no tengan oficina (para los que la subconsulta no devuelve filas).
Para salvar el problema tendríamos que quitar del resultado de la subconsulta la cuota del
empleado modificando el WHERE:
De esta forma saldrían los empleados que tienen una cuota mayor que cualquier otro
empleado de su misma oficina.
O bien
Ejemplo AND
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
18
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Seleccionar sólo las personas que su nombre sea igual a "Tove" y el apellido sea igual a
"Svendson":
OR Operator Ejemplo
Seleccionar solo las personas que su nombre sea igual a "Tove" o "Ola":
Seleccionar solo las personas con el apellido igual a "Svendson" y el nombre igual a "Tove" o
"Ola":
19
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Alias
Usted puede dar otro nombre a una tabla o una columna utilizando un alias.
Esto puede ser muy útil cuando los nombres de las tablas o columnas tienen un nombre muy
largo o complejo.
El nombre de Alias puede ser cualquiera, pero usualmente debería ser corto
EJEMPLO
Asumamos que tenemos una tabla llamada "personas" y otra tabla llamada
"Product_Orden". Se dará alias de "p" y "po" respectivamente.
Se verá que cuando existen dos sentencias Select, utilizar alias hace que las consultas sean
más fáciles en la lectura y la escritura.
Nota: en el caso de subconsultas que emplean la misma tabla que la consulta externa los
alias deben ser distintos
20
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
JOIN
La palabra clave JOIN es usada en las sentencias SQL para consultar tablas de dos o más
tablas, basada sobre una relación entre columnas de estas tablas
Una tabla en la base de datos menudo son relacionadas a otra con una clave (PK, FK)
Una Clave Primaria PK es una columna ( o combinación de columnas) con un único valor
distinto para cada fila. Cada valor de la PK debe ser único en cada tabla. El propósito es el de
vincular datos juntos cruzando tablas, sin repetir todos los datos en cada tabla.
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
Notar que la columna P_Id es la clave primaria en la tabla “Personas”. Esto significa que dos
filas no pueden tener el mismo P_Id. La P_Id distingue dos personas inclusive si tienen el
mismo nombre.
Tabla “Orden":
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15
Notar que la columna O_Id es la clave primaria en la tabla Orden y que la columna P_id hace
referencia a las personas en la tabla Personas sin usar sus nombres.
La relación entre las dos tablas está dada por la columna "P_Id".
Antes de continuar con ejemplos , se listaran los tipos de JOIN que pueden ser usados y la
diferencia entre ellos.
21
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
• JOIN: Retorna las filas cuando hay al menos una concordancia entre ambas tablas
• LEFT JOIN: Retorna todas las filas desde la tabla de la izquierda, aunque no haya
coincidencias en la tabla derecha
• RIGHT JOIN: Retorna todas las filas desde la tabla de la derecha ,aunque no haya
coincidencias en la tabla izquierda
• FULL JOIN: Retorna filas cuando hay una coincidencia en una de las tablas
La palabra clave INNER JOIN retorna filas cuando hay al menos una coincidencia en ambas
tablas.
Sintaxis
SELECT column_name(s)
FROM tabla_name1
INNER JOIN tabla_name2
ON tabla_name1.column_name=tabla_name2.column_name
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
La tabla "Orden":
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15
22
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La palabra clave INNER JOIN retorna las filas si hay al menos una coincidencia en ambas
tablas. Si hay filas en "Personas" que no tienen coincidencias en "Orden", estas filas NO
serán listadas.
La palabra clave LEFT JOIN retorna todas las filas desde la tabla de la izquierda
(tabla_name1), siempre que no haya coincidencias en la tabla derecha (tabla_name2).
Sintaxis
SELECT column_name(s)
FROM tabla_name1
LEFT JOIN tabla_name2
ON tabla_name1.column_name=tabla_name2.column_name
Nota: En algunas bases de datos la palabra clave LEFT JOIN es llamada LEFT OUTER JOIN.
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
La tabla "Orden":
O_Id OrderNo P_Id
23
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15
La palabra clave LEFT JOIN retorna todas las filas desde la tabla izquierda (Personas), aunque
no haya coincidencia en la tabla derecha (Orden).
La palabra clave RIGHT JOIN retorna todas las filas desde la tabla derecha
(tabla_name2),aunque no haya coincidencia en la tabla izquierda (tabla_name1).
Nota: En algunas bases de datos la palabra calve RIGHT JOIN es llamada RIGHT OUTER JOIN.
La Tabla “Personas”:
24
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La tabla "Orden":
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15
La palabra clave RIGHT JOIN retorna todas las filas desde la tabla derecha (Orden), aunque
no existan coincidencias en la tabla izquierda (Personas).
La palabra clave FULL JOIN retorna las filas cuando hay coincidencia en una de las tablas.
Sintaxis
SELECT column_name(s)
25
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
FROM tabla_name1
FULL JOIN tabla_name2
ON tabla_name1.column_name=tabla_name2.column_name
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
La tabla “Orden”:
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 15
Se listara todas las personas y sus órdenes y todos los órdenes con sus personas.
26
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La palabra clave FULL JOIN retorna todas las filas de la tabla izquierda (Personas), y todas las
filas de las tabla derecha (Orden).Si hay filas en "Personas" que no tienen concordancia en
"Orden", o si hay filas en "Orden" que no tienen correlación en "Personas", estas filas serán
listadas también.
El operador UNION
El operador UNION es usado para combinar el resultado de dos o más sentencias SELECT.
Nótese que cada sentencia SELECT dentro de la unión debe tener el mismo número de
columnas. Las columnas deben tener igual tipo de datos , también las columna de cada
sentencia SELECT debe ser del mismo orden.
Sintaxis
SELECT column_name(s) FROM tabla_name1
UNION
SELECT column_name(s) FROM tabla_name2
Nota: El operador UNION selecciona solo los valores distintos por defecto. También permite
duplicar valores usando el término UNION ALL.
Sintaxis
SELECT column_name(s) FROM tabla_name1
UNION ALL
SELECT column_name(s) FROM tabla_name2
La columna nombres en el resultado de una UNION son siempre igual a la columna nombres
de la primer sentencia SELECT en la UNION.
UNION Ejemplo
"Empleados_Norway":
E_ID E_Nombre
01 Hansen, Ola
02 Svendson, Tove
03 Svendson, Stephen
04 Pettersen, Kari
"Empleados_USA":
E_ID E_Nombre
01 Turner, Sally
02 Kent, Clark
27
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
03 Svendson, Stephen
04 Scott, Stephen
Note: este comando no puede ser usado para listar todos los empleados en Norway and
USA. En el ejemplo hay dos empleados con el mismo nombre y solo es mostrado uno de
ellos, porque el comando unión devuelve los valores distintos.
Resultado
E_Nombre
Hansen, Ola
Svendson, Tove
Svendson, Stephen
Pettersen, Kari
Turner, Sally
28
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Kent, Clark
Svendson, Stephen
Scott, Stephen
Funciones de agregado
Las funciones de agregado retornan un simple valor, calculado desde el valor en la columna.
Funciones escalares
La Función AVG()
29
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Sintaxis
SELECT AVG(column_name) FROM tabla_name
Tabla "Orden":
O_Id Orden_Fecha Orden_Precio Clientes
1 2008/11/12 1000 Hansen
2 2008/10/23 1600 Nilsen
3 2008/09/02 700 Hansen
4 2008/09/03 300 Hansen
5 2008/08/30 2000 Jensen
6 2008/10/04 100 Nilsen
Se buscará los clientes que tienen un valor superior al promedio Orden_Precio valor.
30
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La función COUNT (column_name) retorna el número de valores (los valores NULL no serán
contados) de una columna específica:
SELECT COUNT(column_name) FROM tabla_name
Note: COUNT (DISTINCT) trabaja con ORACLE y Microsoft SQL Server, pero no con Microsoft
Access.
COUNT (column_name)
31
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La función FIRST()
FIRST() Sintaxis
SELECT FIRST(column_name) FROM tabla_name
Ejemplo FIRST()
32
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La función LAST()
Sintaxis LAST()
SELECT LAST(column_name) FROM tabla_name
Ejemplo LAST()
La función MAX()
33
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Sintaxis MAX()
SELECT MAX(column_name) FROM tabla_name
Ejemplo MAX()
La función MIN()
Sintaxis MIN()
SELECT MIN(column_name) FROM tabla_name
34
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La sentencia GROUP BY
Sintaxis GROUP BY
SELECT column_name, aggregate_function(column_name)
FROM tabla_name
WHERE column_name operator value
GROUP BY column_name
Ejemplo GROUP BY
35
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La cláusula HAVING
36
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La cláusula HAVING fue agregado al SQL porque la palabra clave WHERE no puede ser usado
con funciones de agregado.
Sintaxis HAVING
SELECT column_name, aggregate_function(column_name)
FROM tabla_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
Ejemplo HAVING
Se seleccionará si los clientes "Hansen" o "Jensen" tienen una total de orden de más de
1500.
37
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La función UCASE()
Sintaxis UCASE()
SELECT UCASE(column_name) FROM tabla_name
Ejemplo UCASE()
La función LCASE()
Sintaxis LCASE()
SELECT LCASE(column_name) FROM tabla_name
Ejemplo LCASE()
38
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La función MID()
Sintaxis MID()
SELECT MID(column_name,start[,length]) FROM tabla_name
Parámetro Descripción
column_name Requerido. El campo a extraer los caracteres
start Requerido. Especifica la posición de inicio (comienza en 1)
length Opcional. El numero de caracteres que retorna, si se omite, La función
MID() retorna el reto del texto.
Ejemplo MID()
39
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La función LEN()
Sintaxis LEN()
SELECT LEN(column_name) FROM tabla_name
Ejemplo LEN()
La función ROUND()
40
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Parámetro Descripción
column_name Requerido. Campo a redondear.
decimal Requerido. Numero de decimales a utilizar.
Ejemplo ROUND()
La función NOW()
Sintaxis NOW()
SELECT NOW() FROM tabla_name
Ejemplo NOW()
41
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La función FORMAT()
Sintaxis FORMAT()
SELECT FORMAT(column_name,format) FROM tabla_name
Parámetro Descripción
column_name Requerido. El campo a ser formateado.
format Requerido. Especifica el formato.
Ejemplo FORMAT()
Se mostraran los productos y precios con la fecha de hoy (con la fecha mostrada con el
siguiente formato "YYYY-MM-DD").
42
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La sentencia INSERT INTO es usada para insertar una nueva fila a una tabla.
La primera forma no especifica los nombres de las columnas donde los datos serán
insertados, solo los valores:
INSERT INTO tabla_name
VALUES (value1, value2, value3,...)
La segunda forma específica ambos, los nombres de las columnas y los valores a insertar:
INSERT INTO tabla_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
43
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La siguiente sentencia SQL agregará una nueva fila, pero solo agregara datos en las columnas
"P_Id", "Apellido" y "Nombre":
INSERT INTO Personas (P_Id, Apellido, Nombre)
VALUES (5, 'Tjessem', 'Jakob')
La sentencia UPDATE
Nota: Aviso, sobre la cláusula WHERE en la actualización. La cláusula WHERE especifica que
registros deben actualizarse. Si omite la cláusula WHERE, se actualizarán todos los registros.
Ejemplo UPDATE
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
44
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Sentencia UPDATE
Se debe ser cuidadoso cuando se modifican registros. Si se omite la cláusula Where ocurre lo
siguiente:
UPDATE Personas
SET Dirección='Nissestien 67', Ciudad='Sandnes'
La sentencia DELETE
45
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Sintaxis DELETE
DELETE FROM tabla_name
WHERE some_column=some_value
Note: Aviso. La cláusula WHERE especifica que registros se deben suprimirse. Si omite la
cláusula WHERE, serán eliminados todos los registros
Ejemplo DELETE
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Johan Bakken 2 Stavanger
5 Tjessem Jakob Nissestien 67 Sandnes
La tabla "Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
4 Nilsen Johan Bakken 2 Stavanger
Se puede borrar todas las filas sin borrar la tabla. Esto significa que la estructura de la tabla,
atributos e índices permanecerán intactos:
DELETE FROM tabla_name
46
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Note: Se debe tener cuidado cuando se borra los registros. No se puede volver atrás esta
sentencia.
La sentencia CREATE TABLA es usada para crear una tabla en una base de datos.
Se creara una tabla llamada "Personas" que contiene cinco columnas: P_Id, Apellido,
Nombre, Dirección, y Ciudad.
47
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Nombre varchar(255),
Dirección varchar(255),
Ciudad varchar(255)
)
La columna P_Id es de tipo entero y contendrá un número. Las columnas Apellido, Nombre,
Dirección, y Ciudad son del tipo varchar con un máximo tamaño de 255 caracteres.
SQL Restricciones
Las restricciones son usadas para limitar los tipos de datos que pueden ir en una tabla.,
Las restricciones pueden ser especificadas cuando una tabla es creada (con la sentencia
CREATE TABLA) o después de crear la tabla con la sentencia ALTER TABLA.
Lista de restricciones:
• NOT NULL
• UNIQUE
• PRIMARY KEY
• FOREIGN KEY
• CHECK
• DEFAULT
La restricción NOT NULL fuerza a los campos a contener siempre. Esto significa que no se
puede insertar un Nuevo registro o modificar un registro sin agregar un valor a este campo.
48
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Ciudad varchar(255)
)
Restricción UNIQUE
Las restricciones UNIQUE y PRIMARY KEY proveen la garantía de unicidad para una columna
o grupo de columna.
Una restricción de PRIMARY KEY automáticamente tiene una restricción UNIQUE definida
sobre esto.
Note que usted puede tener muchas restricciones por tablas , pero solo una clave primaria
por tabla.
La siguiente sentencia SQL crea una restricción UNIQUE sobre la columna "P_Id" cuando la
tabla "Personas" es creada:
MySQL:
CREATE TABLA Personas
(
P_Id int NOT NULL,
Apellido varchar(255) NOT NULL,
Nombre varchar(255),
Dirección varchar(255),
Ciudad varchar(255),
UNIQUE (P_Id)
)
Para permitir nombres de una restricción UNIQUE, y para definir una restricción UNIQUE en
varias columnas, se usa la siguiente Sintaxis SQL:
49
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
(
P_Id int NOT NULL,
Apellido varchar(255) NOT NULL,
Nombre varchar(255),
Dirección varchar(255),
Ciudad varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,Apellido)
)
Para crear una restricción UNIQUE sobre la columna "P_Id" cuando la tabla es creada se usa
la siguiente sentencia SQL:
Para permitir nombres de una restricción UNIQUE, y para definir una restricción UNIQUE en
varias columnas, se usa la siguiente Sintaxis SQL:
MySQL:
ALTER TABLA Personas
DROP INDEX uc_PersonID
La restricción PRIMARY KEY identifica cada registro como único en una tabla de una base de
datos.
50
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Cada tabla debe tener una clave primaria , y cada tabla puede tener solo una clave primaria.
La siguiente sentencia crea una PRIMARY KEY sobre la columna "P_Id" cuando la tabla
"Personas” es creado:
MySQL:
CREATE TABLA Personas
(
P_Id int NOT NULL,
Apellido varchar(255) NOT NULL,
Nombre varchar(255),
Dirección varchar(255),
Ciudad varchar(255),
PRIMARY KEY (P_Id) )
51
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Para crear una restricción PRIMARY KEY sobre la columna "P_Id" cuando la tabla es
recientemente creada se usa la siguiente sentencia SQL:
Para dar nombres a una restricción PRIMARY KEY , y para definir una restricción PRIMARY
KEY en varias columnas, utilizar la siguiente Sintaxis SQL:
Note: Si se usa la sentencia ALTER TABLA para agregar una clave primaria, las columnas con
clave primaria deben haber sido declarados para que no contengan valores nulos cuando la
tabla es creada inicialmente.
MySQL:
ALTER TABLA Personas
DROP PRIMARY KEY
Una FOREIGN KEY en una tabla apunta a una PRIMARY KEY en otra tabla.
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
52
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La tabla “Orden”:
O_Id OrderNo P_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1
La restricción FOREIGN KEY es usada para prevenir acciones que podrían destruir las
relaciones entre tablas.
La restricción FOREIGN KEY también previene que datos inválidos sean insertados en la
columna de clave foránea, porque esto has sido uno de los valores contenidos en la tabla a la
que apunta.
La siguiente sentencia crea una FOREIGN KEY sobre la columna "P_Id" cuando la tabla
"Orden" es creada:
MySQL:
CREATE TABLA Orden
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Personas(P_Id)
)
53
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Para permitir la designación de una FOREIGN KEY, y para la definición de una FOREIGN KEY
en varias columnas, utilice el siguiente Sintaxis SQL:
Para crear una restricción FOREIGN KEY sobre la columna "P_Id" cuando la tabla "Orden" ya
ha sido creada se utiliza la siguiente sentencia:
Para borrar una restricción FOREIGN KEY, se usa la siguiente sentencia SQL:
MySQL:
ALTER TABLA Orden
DROP FOREIGN KEY fk_PerOrden
54
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Restricción CHECK
La restricción CHECK es usada para limitar el rango de valores que puede ser ingresado en
una columna.
Si se define la restricción CHECK sobre una columna permitirá solo asegurar los valores para
esta columna.
Si se define una restricción CHECK sobre una tabla, esto puede limitar los valores en ciertas
columnas basadas sobre valores en otras columnas en las filas.
La siguiente sentencia SQL crea una restricción CHECK sobre la columna "P_Id" cuando la
tabla "Personas" es creada. La restricción CHECK especifica que la columna "P_Id" debe solo
incluir enteros mayores a 0.
My SQL:
CREATE TABLA Personas
(
P_Id int NOT NULL,
Apellido varchar(255) NOT NULL,
Nombre varchar(255),
Dirección varchar(255),
Ciudad varchar(255),
CHECK (P_Id>0)
)
55
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Para crear una restricción sobre la columna “P_Id" cuando la tabla ya ha sido creada se usa
las siguiente sentencia:
Restricción DEFAULT
La restricción DEFAULT es usada para insertar un valor por defecto dentro de una columna.
Los valores por defecto será argado para todo registro nuevo, si no hay otro valor
especificado.
La siguiente sentencia SQL crea una restricción DEFAULT sobre la columna "Ciudad" cuando
la tabla "Personas" es creada:
56
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
(
P_Id int NOT NULL,
Apellido varchar(255) NOT NULL,
Nombre varchar(255),
Dirección varchar(255),
Ciudad varchar(255) DEFAULT 'Sandnes'
)
La restricción DEFAULT puede también ser usado para insertar valores del sistema como ser
la función GETDATE ():
CREATE TABLA Orden
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
Orden_Fecha date DEFAULT GETDATE()
)
Para crear una restricción DEFAULT sobe la columna "Ciudad" cuando la tabla ya ha sido
creada, se usara la siguiente sentencia SQL:
MySQL:
ALTER TABLA Personas
ALTER Ciudad SET DEFAULT 'SANDNES'
MySQL:
ALTER TABLA Personas
ALTER Ciudad DROP DEFAULT
57
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Índices
Un índice puede ser creado en una tabla para buscar datos más rápido y eficientemente.
El usuario no puede ver los índices, ellos son solos usados para acelerar las búsqueda.
Nota: modificando una tabla con índices toma más tiempo que modificarla sin índice
(porque los índices también necesitan modificarse). También se debería solo crear índices
sobre columnas y tablas que serán frecuentemente consultadas.
Note: La sintaxis para crear índices entre varios base de datos diferentes. Por lo tanto: se
chequea las sintaxis para crear los índices en la base de datos.
La sentencia SQL creara un índice llamado "PIndex" sobre la columna "Apellido" en la Tabla
“Personas”:
CREATE INDEX PIndex
ON Personas (Apellido)
Si se quiere crear un índice sobre una combinación de columnas , se puede listar los
nombres de columnas entre paréntesis separados por comas:
CREATE INDEX PIndex
ON Personas (Apellido, Nombre)
58
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La sentencia ALTER TABLA es usada para agregar, borrar, o modificar columnas en una tabla
existente.
Para borrar una columna en una tabla. La Sintaxis (algunos sistemas de base de datos no
permiten borrar columnas):
ALTER TABLA tabla_name
DROP COLUMN column_name
59
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La Tabla “Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
Se añadirá una columna llamada "DateOfBirth" en la tabla "Personas".
Sentencia SQL:
ALTER TABLA Personas
ADD DateOfBirth date
Se observa que la nueva columna, "DateOfBirth", es de tipo date. El tipo de datos especifica
qué tipo de datos la columna puede contener.
La tabla "Personas”:
P_Id Apellido Nombre Dirección Ciudad DateOfBirth
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
Sentencia SQL:
ALTER TABLA Personas
ALTER COLUMN DateOfBirth year
Se observa que la columna "DateOfBirth" es del tipo year y alojara un año con dos dígitos o
cuatro dígitos.
Sentencia SQL:
60
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La tabla "Personas":
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger
Sentencia SQL para definir que la columna "P_Id” como clave primaria y autoincremental en
la Tabla “Personas”:
CREATE TABLA Personas
(
P_Id int NOT NULL AUTO_INCREMENT,
Apellido varchar(255) NOT NULL,
Nombre varchar(255),
Dirección varchar(255),
Ciudad varchar(255),
PRIMARY KEY (P_Id))
MySQL usa la palabra clave AUTO_INCREMENT para llevar a cabo el incremento automático
del campo.
61
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
La siguiente sentencia SQL define la columna "P_Id" para ser una clave primaria
autoincremental en la Tabla “Personas”:
CREATE TABLA Personas
(
P_Id int PRIMARY KEY IDENTITY,
Apellido varchar(255) NOT NULL,
Nombre varchar(255),
Dirección varchar(255),
Ciudad varchar(255)
)
El MS SQL Server usa la palabra clave IDENTITY para generar un rasgo autoincremental.
Por defecto, el valor IDENTITY comienza en 1, y será incrementado de a uno en cada nuevo
registro.
Para especificar que la columna "P_Id" debería comenzar con un valor de 10 e incrementar
de a 5, cambiar las identidad a IDENTITY(10,5).
La siguiente sentencia SQL define la columna "P_Id" para ser clave primaria auto incremental
en la Tabla “Personas”:
CREATE TABLA Personas
(
P_Id PRIMARY KEY AUTOINCREMENT,
Apellido varchar(255) NOT NULL,
Nombre varchar(255),
Dirección varchar(255),
Ciudad varchar(255)))
62
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Para especificar que la columna "P_Id" columna debería comenzar con el valor 10 y
incrementar en 5, Cambiar el autoincremento a AUTOINCREMENT (10,5).
Para insertar un nuevo registro en la tabla "Personas", no se debe especificar un valor para
la columna "P_Id" (un único valor será agregado automáticamente):
INSERT INTO Personas (Nombre,Apellido)
VALUES ('Lars','Monsen')
Sintaxis en Oracle
En SQL, una vista es una tabla virtual basada en un set de resultado de una sentencia SQL.
63
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Una vista contiene filas y columnas como una tabla real. El campo en una vista son campos
desde una o más tablas reales en una base de datos.
Se puede agregar a una función SQL, sentencias WHERE, y JOIN para una vista y presente los
datos como si los datos vinieran de una tabla simple.
Nota: una vista siempre muestra datos actualizados. El motor de la base de datos recrea los
datos usando las sentencias de vista de SQL.
La vista "Current Product List" lista todos los productos actives (productos que nos está
descontinuados) desde la tabla “Productos" . La vista es creada con las sentencia SQL:
CREATE VIEW [Current Product List] AS
SELECT ProductID,Producto
FROM Productos
WHERE Discontinued=No
Una vista que selecciona todas lo productos en el tabal "Productos" con una unidad de
precio más alto que el promedio de precios:
CREATE VIEW [Productos Above Average Price] AS
SELECT Producto, Unidadprecio
FROM Productos
WHERE Unidadprecio>(SELECT AVG(Unidadprecio) FROM Productos)
Esta vista calcula el total de ventas para cada categoría en 1997. Nótese que esta vista
selecciona estos datos desde otra vista llamada "Product Sales for 1997":
CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName
64
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Se puede agregar una condición en la consulta. Se verá el total de ventas solo en la categoría
"Beverages":
SELECT * FROM [Category Sales For 1997]
WHERE CategoryName='Beverages'
Modificando Vistas
Se puede agregar la columna"Category" para las vista "Current Product List". Se modificará
la vista así:
CREATE VIEW [Current Product List] AS
SELECT ProductID,Producto, Category
FROM Productos
WHERE Discontinued=No
SQL Dates
La mayoría de las dificultades La parte más difícil cuando se trabaja con fechas es el
asegurarse de que el formato de la fecha que se están tratando de insertar, coincide con el
formato de la columna fecha en la base de datos.
Siempre y cuando los datos contienen sólo la porción de fecha , Las consultas trabajarán
como se esperaba. Sin embargo, si contiene una porción tiempo, se vuelve complicada.
Antes de hablar sobre las complicaciones de consulta para fechas, se verá las más
importantes funciones incorporadas para trabajar con fechas.
65
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
MySQL Viene con los siguientes tipos de datos para almacenar una fecha o una fecha/hora
valor en la base de datos:
SQL Server Viene con los siguientes tipos de datos para almacenar una fecha o una
fecha/hora valor en la base de datos:
66
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Note: los tipos fecha son elegidos para una columna cuando se crea una nueva tabla en una
base de datos..
Tabla “Orden":
OrderId Producto Orden_Fecha
1 Geitost 2008-11-11
2 Camembert Pierrot 2008-11-09
3 Mozzarella di Giovanni 2008-11-11
4 Mascarpone Fabioli 2008-10-29
Se asume ahora que la tabla "Orden" incluye los valores de tiempo en la columna
"Orden_Fecha":
OrderId Producto Orden_Fecha
1 Geitost 2008-11-11 13:23:44
2 Camembert Pierrot 2008-11-09 15:45:21
3 Mozzarella di Giovanni 2008-11-11 11:12:01
4 Mascarpone Fabioli 2008-10-29 14:56:59
Pero no se obtendrá el resultado, porque la consulta la realice sobre la fecha sin la parte de
tiempo.
67
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Tip: Si se quiere mantener la consulta simple y fácil de mantener, no se debe permitir el uso
de tiempo en los datos.
Valores NULL
Si una columna en una tabla es opcional, se puede insertar un nuevo registro o modificar
uno existente sin agregar un valor a la columna. Esto significa que el campo será salvado con
un valor NULL.
Los valores NULL son tratados de manera diferente de otros valores
Tabla "Personas":
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Stavanger
Se supone que la columna "Dirección” en la tabla "Personas" es opcional. Esto significa que
si se inserta un nuevo registró sin un valor para la columna "Dirección", la columna
“Dirección" será guardada con valores NULL .
Esto no es posible comparar el valor NULL con los operadores de comparación =, <, o <>. Se
tendrá que usar los operadores IS NULL e IS NOT NULL.
SQL IS NULL
Cómo podemos seleccionar sólo los registros con valores NULL en la " Dirección " en la
columna
68
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Cómo podemos seleccionar sólo los registros con valores no NULL en la " Dirección " en la
columna?
Tabla “Productos":
P_Id Producto Unidadprecio UnidadsInStock UnidadsOnOrder
1 Jarlsberg 10.45 16 15
2 Mascarpone 32.56 23
3 Gorgonzola 15.67 9 20
La función ISNULL () de Microsoft es usada para especificar cómo se quiere tratar los valores
NULL.
Las funciones NVL (), IFNULL (), y COALESCE () puede ser usado también para obtener el
mismo resultado.
69
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Oracle
Oracle no tiene una función ISNULL (), aunque se puede usar la función NVL () para obtener
el mismo resultado:
SELECT Producto, Unidadprecio*(UnidadsInStock+NVL(UnidadsOnOrder,0))
FROM Productos
MySQL
MySQL posee una función ISNULL() , pero ,. Esta trabaja un poco diferente que la función
ISNULL () de Microsoft.
70
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
AutoNumber Campo auto numérico, permite dar a cada registro su propio 4 bytes
numero , usualmente comienza en 1
Date/Time Usado para Fechas y Horas 8 bytes
Yes/No Campo lógico que puede mostrarse como Yes/No, True/False, o 1 bit
On/Off. En el código se usa la constante True y False
(equivalente a -1 and 0). Note: los valores Muy no son alojados
en estos campos
Ole Object Puede almacenar fotos, videos, u otros BLOBs (Binary Large hasta
OBjects) 1GB
Hyperlink Contiene enlaces a otros archives
Text types:
Datos tipo Descripción
CHAR(size) Tiene una longitud fija string (puede contener letras, números y
caracteres especiales). El tamaño fijo está especificado en paréntesis.
Puede almacenar hasta 255 caracteres
VARCHAR(size) Tiene una longitud fija string (puede contener letras, números y
caracteres especiales). El elemento fijo posee una longitud variable string
(puede contener letras, números y caracteres especiales). El tamaño
máximo está especificado en paréntesis. Puede almacenar hasta 255
caracteres. Nota: Si se pone un mayor valor que 255 se convertirá en un
tipo de texto
TINYTEXT Almacena un string con un valor máximo de of 255 caracteres
TEXT Almacena un string con un valor máximo de of 65,535 caracteres
BLOB BLOBs (Binary Large OBjects). Almacenas hasta 65,535 bytes
MEDIUMTEXT Almacena un string con un tamaño máximo de 16,777,215 caracteres
MEDIUMBLOB Para BLOBs (Binary Large OBjects). Almacena hasta 16,777,215 bytes de
datos
LONGTEXT Almacena un string con un tamaño máximo de 4,294,967,295 caracteres
LONGBLOB Para BLOBs (Binary Large OBjects). Almacena hasta 4,294,967,295 bytes
de datos
ENUM(x,y,z,etc.) Permite ingresar una lista de posibles valores. Se puede listar hasta
65535 valores en un ENUM list. Si un valor insertado no está en la lista, se
insertará un valor en blanco.
Tipos numéricos:
71
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
* Los tipos entero tienen una opción extra llamado Sin signo o UNSIGNED. Normalmente, el
entero va desde un valor negativo a un valor positivo. Añadir el atributo UNSIGNED moverá
el rango hasta que comienza en cero en lugar de un número negativo
Date types:
Data tipo Descripción
DATE() A date. Format: YYYY-MM-DD
72
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Character strings:
Data tipo Descripción Storage
char(n) Longitud fija, cadena de caracteres. Max 8,000 caracteres n
varchar(n) Longitud Variable, cadena de caracteres. Max 8,000 caracteres
varchar(max) Longitud Variable, cadena de caracteres. Max 1,073,741,824 c
caracteres
text Longitud Variable, cadena de caracteres. Max 2GB de texto
Unicode strings:
Data tipo Descripción Storage
nchar(n) Longitud fija, cadena de caracteres Unicode data. Max 4,000
caracteres
nvarchar(n) Longitud Variable Unicode data. Max 4,000 caracteres
nvarchar(max) Longitud Variable Unicode data. Max 536,870,912 caracteres
ntext Longitud Variable Unicode data. Max 2GB of text data
Binary types:
Data tipo Descripción Storage
bit Permite valores 0, 1, o NULL
binary(n) Longitud Fija binary data. Max 8,000 bytes
varbinary(n) Longitud Variable binary data. Max 8,000 bytes
varbinary(max) Longitud Variable binary data. Max 2GB
image Longitud Variable binary data. Max 2GB
Number types:
Data tipo Descripción Storage
73
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Date types:
Data tipo Descripción Storage
datetime A partir de enero 1, 1753 a Diciembre 31, 9999 con una precisión 8 bytes
de 3.33 milisegundos
74
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
datetime2 A partir de enero 1, 0001 y Diciembre 31, 9999 con una precisión 6-8
de 100 nanosegundos bytes
smalldatetime A partir de enero 1, 1900 a Junio 6, 2079 con una precisión de 1 4 bytes
minuto
date Guardar una fecha sólo. A partir de enero 1, 0001 a Diciembre 3 bytes
31, 9999
time Almacenar un tiempo sólo con una precisión de 100 3-5
nanosegundos bytes
datetimeoffset El mismo datetime2 con la adición de una zona horaria 8-10
compensado bytes
timestamp Almacena un número único que se actualiza cada vez una fila
obtiene creado o modificados. La timestamp valor se basa en un
reloj interno y no corresponden a tiempo real. Cada tabla puede
tener sólo una variable timestamp
DCL
Seguridad
DCL comandos son utilizadas para imponer seguridad en un ambiente de una base de datos
multiusuario. Hay Dos tipos de DCL comandos son GRANT y REVOKE. Sólo el administrador
de base de datos o propietario de la objeto de base de datos puede imponer o remover los
privilegios sobre la base de datos.
SQL GRANT es un comando usado para dar acceso o privilegios sobre los objetos de una Base
de datos a un usuario.
Sintaxis GRANT:
75
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
GRANT privilegE_Nombre
ON object_name
TO {user_name |PUBLIC |rolE_Nombre}
[WITH GRANT OPTION];
Por Ejemplo:
Este comando concede un permiso SELECT sobre la tabla employee para el user1.
Debe usar la opción WITH GRANT con cuidado, porque si otorga privilegio SELECT al
empleado user1 sobre tabla a usando la WITH GRANT , entonces el user1 puede conceder a
su vez privilegio SELECT sobre tabla a otro usuario.
DENY
Crea una entrada en el sistema de seguridad que deniega un permiso de una cuenta de
seguridad en la base de datos actual e impide que la cuenta de seguridad herede los
permisos a través de los miembros de su grupo o función.
Sintaxis
Permisos de la instrucción:
DENY{ALL | instrucción[,...n]}
TO cuentaSeguridad[,...n]
76
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
| ON {procedimientoAlmacenado | procedimientoExtendido}
}
TO cuentaSeguridad[,…n]
[CASCADE]
Comando REVOKE:
El comando REVOKE remueve los derechos de accesos o privilegios a los objetos de base de
datos.
La Sintaxis REVOKE:
REVOKE privilegE_Nombre
ON object_name
FROM {user_name |PUBLIC |rolE_Nombre}
Revoke Ejemplo
Es te comando removerá los privilegios se selección sobre la tabla empleados para el usuario
user1.
Cuando son revocados los privilegios select sobre la tabla para un usuario, el usuario no
estará habilitado para realizar consultas select otra vez.
Por otro lado, si el usuario ha recibido privilegios SELECT sobre la tabla desde más de un
usuario, puede realizar una selección desde la tabla hasta que todos los que dieron los
privilegios los revoquen.
Privilegios y roles:
Privileges: Privilegios define los derechos de acceso a un usuario en una base de datos. Hay
dos tipos de privilegios
77
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Privilegios de Objetos:
Roles
Los roles son una colección de privilegios o derechos de acceso. Cuando hay muchos
usuarios en una base de datos se torna difícil conceder o revocar privilegios a los usuarios.
Por lo tanto, si se definen roles , se puede conceder o revocar privilegios a los usuarios, de
manera automática. Se pueden crear roles o utilizar los roles en el sistema predefinidos.
78
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Creando Roles:
Ejemplo: Para crear roles llamados “Testing” con un password como "pwd",se utiliza:
Es más fácil que dar privilegios GRANT o REVOKE para el usuario A los usuarios mediante un
rol en lugar de asignar un privilegio directamente a cada usuario. Si un rol es identificado por
una contraseña, entonces, cuando se concede o revoca privilegios a un rol, definitivamente
se tienen que identificar con la contraseña
Ejemplo: Dar privilegios CREATE TABLA a un usuario mediante los roles llamado testing:
Segundo, conceder el privilegio CREATE TABLA al ROLE testing. Se puede agregar más
privilegios a los roles.
79
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Una de las principales bondades de las claves foráneas es que permiten eliminar y actualizar
registros en cascada.
Con las restricciones de clave foránea podemos eliminar un registro de la tabla cliente y a la
vez eliminar un registro de la tabla venta usando sólo una sentencia DELETE. Esto es llamado
eliminación en cascada, en donde todos los registros relacionados son eliminados de
acuerdo a las relaciones de clave foránea. Una alternativa es no eliminar los registros
relacionados, y poner el valor de la clave foránea a NULL (asumiendo que el campo puede
tener un valor nulo). En este caso, no se puede poner el valor de la clave foránea id_cliente
en la tabla venta, ya que se ha definido como NOT NULL. Las opciones estándar cuando se
elimina un registro con clave foránea son:
• ON DELETE RESTRICT
• ON DELETE NO ACTION
• ON DELETE SET DEFAULT
• ON DELETE CASCADE
• ON DELETE SET NULL
ON DELETE SET DEFAULT - se supone que pone el valor de la clave foránea al valor por
omisión (DEFAULT) que se definió al momento de crear la tabla.
Si se especifica ON DELETE SET NULL, las filas en la tabla hijo son actualizadas
automáticamente poniendo en las columnas de la clave foránea el valor NULL. Si se
especifica una acción SET NULL, debe asegurarse de no declarar las columnas en la tabla
como NOT NULL.
Ejemplo se verá cómo están los registros antes de ejecutar la sentencia DELETE:
La tabla "Personas”:
80
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Tabla ventas
Id_factura Id cliente cantidad
1 1 23
2 3 39
3 2 81
La tabla "Personas”:
P_Id Apellido Nombre Dirección Ciudad
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
4 Nilsen Johan Bakken 2 Stavanger
Tabla ventas
Id_factura Id cliente cantidad
1 1 23
3 2 81
Las restricciones de integridad referencial en cascada permiten definir las acciones que SGBD
lleva a cabo cuando un usuario intenta eliminar o actualizar una clave a la que apuntan las
claves externas existentes.
81
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Las cláusulas REFERENCES de las instrucciones CREATE TABLE y ALTER TABLE admiten las
cláusulas ON DELETE y ON UPDATE. Las acciones en cascada también se pueden definir
mediante el cuadro de diálogo Relaciones de clave externa.
ON DELETE NO ACTION
Especifica que si se intenta eliminar una fila con una clave a la que hacen referencia las
claves externas de las filas existentes en otras tablas, se produce un error y se revierte la
instrucción DELETE.
ON UPDATE NO ACTION
Especifica que si se intenta actualizar un valor de clave en una fila a cuya clave hacen
referencia las claves externas de filas existentes en otras tablas, se produce un error y se
revierte la instrucción UPDATE.
ON DELETE CASCADE
Especifica que si se intenta eliminar una fila con una clave a la que hacen referencia claves
externas de filas existentes en otras tablas, todas las filas que contienen dichas claves
externas también se eliminan.
ON UPDATE CASCADE
Específica que si se intenta actualizar un valor de clave de una fila a cuyo valor de clave
hacen referencia claves externas de filas existentes en otras tablas, también se actualizan
todos los valores que conforman la clave externa al nuevo valor especificado para la clave.
Especifica que si se intenta eliminar una fila con una clave a la que hacen referencia las
claves externas de las filas existentes de otras tablas, todos los valores que conforman la
82
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
clave externa de las filas a las que se hace referencia se establecen en NULL. Todas las
columnas de clave externa de la tabla de destino deben aceptar valores NULL para que esta
restricción se ejecute.
Especifica que si se intenta actualizar una fila con una clave a la que hacen referencia las
claves externas de las filas existentes de otras tablas, todos los valores que conforman la
clave externa de las filas a las que se hace referencia se establecen en NULL. Todas las
columnas de clave externa de la tabla de destino deben aceptar valores NULL para que esta
restricción se ejecute.
Especifica que si se intenta eliminar una fila con una clave a la que hacen referencia las
claves externas de las filas existentes de otras tablas, todos los valores que conforman la
clave externa de las filas a las que se hace referencia se establecen como predeterminados.
Todas las columnas de clave externa de la tabla de destino deben tener una definición
predeterminada para que esta restricción se ejecute. Si una columna acepta valores NULL y
no se ha establecido ningún valor predeterminado explícito, NULL se convierte en el valor
predeterminado implícito de la columna. Todos los valores distintos de NULL que se
establecen debido a ON DELETE SET DEFAULT deben tener unos valores correspondientes en
la tabla principal para mantener la validez de la restricción de la clave externa.
Especifica que si se intenta actualizar una fila con una clave a la que hacen referencia las
claves externas de las filas existentes de otras tablas, todos los valores que conforman la
clave externa de la fila a los que se hace referencia se establecen en sus valores
predeterminados. Todas las columnas externas de la tabla de destino deben tener una
definición predeterminada para que esta restricción se ejecute. Si una columna se convierte
en NULL, y no hay establecido ningún valor predeterminado explícito, NULL deviene el valor
predeterminado implícito de la columna. Todos los valores no NULL que se establecen
debido a ON UPDATE SET DEFAULT deben tener unos valores correspondientes en la tabla
principal para mantener la validez de la restricción de clave externa.
TRANSACCIONES
Dentro del mundo real las bases de datos se deben actualizar constantemente, pero
habitualmente estas no son realizadas por una sola operación sino, que es un conjunto de
varias de ellas que se ejecutan como ser :
83
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Para dejar la base de datos en un estado de consistencia, los cambios deben producirse
como una unidad. Si un fallo del sistema u otro error crea una situación en la que algunas de
las actualizaciones son procesadas y otros no, la integridad de la base de datos se perderá.
Así mismo si otro usuario calcula porcentajes totales o parcialmente a través de la secuencia
de cambios, los cálculos serán incorrectos. La secuencia de cambios debe ser un todo o nada
en la base de datos propuesta. SQL ofrece precisamente esta capacidad a través de sus
características de procesamiento de transacción.
Una transacción es una secuencia de uno o varios comandos SQL que juntos forman una
unidad lógica de trabajo. La sentencia SQL que forma la operación es estrechamente
interdependiente y relacionada con acciones. Cada declaración en la transacción realiza una
parte de una tarea, pero todos ellos son necesarios para completar la tarea. La transacción le
indica al SMDB que debe ejecutar la totalidad de las sentencia en la secuencia dispuestas
para garantiza la integridad de la base de datos. Las declaraciones en una transacción se
ejecutan como una unidad atómica de trabajo en la base de datos. el DBMS debe asegurarse
de que cuando falta la recuperación es completa, la base de datos no refleja una operación
parcial.
En SQL92, no hay declaración de iniciar la transacción.
COMMIT y ROLLBACK
Las transacciones se apoyan en las sentencias SQL donde agrupan el conjunto de sentencias
que integra el procesamiento de transacciones
■ COMMIT.
El comando COMMIT señala el éxito final de una transacción. Se le dice al DBMS que la
transacción se ha completado, todos los estados que conforman la transacción se han
ejecutado, y es la base de datos consistente.
■ ROLLBACK.
El ROLLBACK señalas que la transacción NO se realizo con éxito. Le dice al DBMS que el
usuario no desea completar la transacción, el DBMS debe hacer restauración de todas las
modificaciones introducidas a la base de datos durante la operación para dejarla tal cual la
operación comenzó.
El COMMIT y ROLLBACK se ejecutan con las sentencias SQL, como SELECT, INSERT, y
UPDATE.
84
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
• begin
• commit
• rollback
Begin y commit
• begin
Inicia la transacción
• commit
Finaliza la transacción
Sintaxis:
• begin [ transaction_name ]
• commit [ transaction_name ]
update accounts
update accounts
Rollback
85
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Sintaxis:
rollback [ transaction_name ]
Ejemplo:
begin tran
update accounts
update accounts
else
86
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
87
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
SELECT column_name
FROM tabla_name AS tabla_alias
BETWEEN SELECT column_name(s)
FROM tabla_name
WHERE column_name
BETWEEN value1 AND value2
CREATE DATABASE CREATE DATABASE databasE_Nombre
CREATE TABLA CREATE TABLA tabla_name
(
column_name1 data_type,
column_name2 data_type,
column_name2 data_type,
...
)
CREATE INDEX CREATE INDEX index_name
ON tabla_name (column_name)
88
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
WHERE some_column=some_value
89
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
SELECT column_name(s)
INTO new_tabla_name [IN externaldatabase]
FROM old_tabla_name
SELECT TOP SELECT TOP number|percent column_name(s)
FROM tabla_name
TRUNCATE TABLA TRUNCATE TABLA tabla_name
UNION SELECT column_name(s) FROM tabla_name1
UNION
SELECT column_name(s) FROM tabla_name2
UNION ALL SELECT column_name(s) FROM tabla_name1
UNION ALL
SELECT column_name(s) FROM tabla_name2
UPDATE UPDATE tabla_name
SET column1=value, column2=value,...
WHERE some_column=some_value
WHERE SELECT column_name(s)
FROM tabla_name
WHERE column_name operator value
90
Universidad Argentina J. F. Kennedy BASE de DATOS II SQL 2009
Bibliografía
www.sql.org
SQL, the complete reference - James R. Groff, Paul N. Weinberg - 2002 - 1050 páginas
SQL in a nutshell - Kevin E. Kline, Daniel Kline, Brand Hunt - 2004 - 691 páginas
SQL: A BEGINNER'S GUIDE 3/E - Andy Oppel, Robert Sheldon - 2008 - 534 páginas
91