0% encontró este documento útil (0 votos)
79 vistas52 páginas

Manual BD

El documento explica las principales sentencias SQL para realizar consultas (SELECT), insertar (INSERT), actualizar (UPDATE) y eliminar (DELETE) datos de una base de datos. Describe la sintaxis y uso de cada sentencia a través de ejemplos con una tabla de ejemplo llamada "personas".

Cargado por

Anttonia Dzpl
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 DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
79 vistas52 páginas

Manual BD

El documento explica las principales sentencias SQL para realizar consultas (SELECT), insertar (INSERT), actualizar (UPDATE) y eliminar (DELETE) datos de una base de datos. Describe la sintaxis y uso de cada sentencia a través de ejemplos con una tabla de ejemplo llamada "personas".

Cargado por

Anttonia Dzpl
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 DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 52

Select

Una de las sentencias SQL más importantes es SELECT, ya que permite realizar consultas
sobre los datos almacenados en la base de datos.

Sintaxis SQL SELECT

SELECT * FROM nombretabla

SELECT columna1, columna2 FROM nombretabla

Para los ejemplos, tendremos la siguiente tabla de personas denominada “personas”

Estos son los datos almacenados en la tabla “personas”

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ

Si queremos consultar todos los datos de la tabla “personas”

SELECT * FROM personas

Este será el resultado:

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ

Si queremos consulta todos los nombres y primer apellido de todas las personas

SELECT nombre, apellido1 FROM personas

Este será el resultado:

nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ
Select
Una de las sentencias SQL más importantes es SELECT, ya que permite realizar consultas
sobre los datos almacenados en la base de datos.

Sintaxis SQL SELECT

SELECT * FROM nombretabla

SELECT columna1, columna2 FROM nombretabla

Para los ejemplos, tendremos la siguiente tabla de personas denominada “personas”

Estos son los datos almacenados en la tabla “personas”

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ

Si queremos consultar todos los datos de la tabla “personas”

SELECT * FROM personas

Este será el resultado:

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ

Si queremos consulta todos los nombres y primer apellido de todas las personas

SELECT nombre, apellido1 FROM personas

Este será el resultado:

nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ
DISTINCT
Al realizar una consulta puede ocurrir que existan valores repetidos para algunas columnas.
Por ejemplo
SELECT nombre FROM personas

nombre
ANTONIO
LUIS
ANTONIO

Esto no es un problema, pero a veces queremos que no se repitan, por ejemplo, si queremos
saber los nombre diferentes que hay en la tabla personas", entonces utilizaremos DISTINCT.

SELECT DISTINCT nombre FROM personas

nombre
ANTONIO
LUIS

WHERE

La cláusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar
solamente algunas filas de la tabla que cumplan una determinada condición.

El valor de la condición debe ir entre comillas simples ''.

Por ejemplo:

Seleccionar las personas cuyo nombre sea ANTONIO

SELECT * FROM personas


WHERE nombre = 'ANTONIO'

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
AND OR

Los operadores AND y OR se utilizan para filtrar resultados con 2 condiciones.

El operador AND mostrará los resultados cuando se cumplan las 2 condiciones.

Condición1 AND condición2

El operador OR mostrará los resultados cuando se cumpla alguna de las 2 condiciones.


Condicion1 OR condicion2

En la tabla personas

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ

La siguiente sentencia (ejemplo AND) dará el siguiente resultado:

SELECT * FROM personas


WHERE nombre = 'ANTONIO'
AND apellido1 = 'GARCIA'

nombre apellido1 apellido2


ANTONIO GARCIA BENITO

La siguiente sentencia (ejemplo OR) dará el siguiente resultado:

SELECT * FROM personas


WHERE nombre = 'ANTONIO'
OR apellido1 = 'GARCIA'

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO

También se pueden combinar AND y OR, como el siguiente ejemplo:

SELECT * FROM personas


WHERE nombre = 'ANTONIO'
AND (apellido1 = 'GARCIA' OR apellido1 = 'LOPEZ)

nombre apellido1 apellido2


ANTONIO GARCIA BENITO
ORDER BY se utiliza para ordenar los resultados de una consulta, según el valor de la columna
especificada.

Por defecto, se ordena de forma ascendente (ASC) según los valores de la columna.

Si se quiere ordenar por orden descendente se utiliza la palabra DES

SELECT nombre_columna(s)
FROM nombre_tabla
ORDER BY nombre_columna(s) ASC|DESC

Por ejemplo, en la tabla personas :

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO

SELECT nombre, apellido1


FROM personas
ORDER BY apellido1 ASC

Esta es la consulta resultante:

nombre apellido1
LUIS LOPEZ
ANTONIO GARCIA
ANTONIO PEREZ

Ejemplo de ordenación descendiente (DES)

SELECT nombre, apellido1


FROM personas
ORDER BY apellido1 DESC

Esta es la consulta resultante:

nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ

INSERT
La sentencia INSERT INTO se utiliza para insertar nuevas filas en una tabla.

Es posible insertar una nueva fila en una tabla de dos formas distintas:

INSERT INTO nombre_tabla


VALUES (valor1, valor2, valor3, .)

INSERT INTO nombre_tabla (columna1, columna2, columna3,.)


VALUES (valor1, valor2, valor3, .)

Ejemplo:

Dada la siguiente tabla personas:

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO

Si queremos insertar una nueva fila en la tabla personas, lo podemos hacer con cualquiera de
las dos sentencias siguientes:

INSERT INTO personas


VALUES ('PEDRO', 'RUIZ', 'GONZALEZ')
INSERT INTO personas (nombre, apellido1, apellido2)
VALUES ('PEDRO', 'RUIZ', 'GONZALEZ')

Cualquiera de estas sentencias anteriores produce que se inserte una nueva fila en la tabla
personas, quedando así dicha tabla:

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO
PEDRO RUIZ GONZALEZ

UPDATE

La sentencia UPDATE se utiliza para modificar valores en una tabla.

La sintaxis de SQL UPDATE es:


UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE columna3 = valor3

La cláusula SET establece los nuevos valores para las columnas indicadas.

La cláusula WHERE sirve para seleccionar las filas que queremos modificar.

Ojo: Si omitimos la cláusula WHERE, por defecto, modificará los valores en todas las filas de la
tabla.

Ejemplo del uso de SQL UPDATE

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO
PEDRO RUIZ GONZALEZ

Si queremos cambiar el apellido2 'BENITO' por 'RODRIGUEZ' ejecutaremos:

UPDATE personas
SET apellido2 = 'RODRIGUEZ'
WHERE nombre = 'ANTONIO'
AND apellido1 = 'GARCIA'
AND apellido2 = 'BENITO'

Ahora la tabla 'personas' quedará así:

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

DELETE

La sentencia DELETE sirve para borrar filas de una tabla.

La sintaxis de SQL DELETE es:

DELETE FROM nombre_tabla


WHERE nombre_columna = valor
Si queremos borrar todos los registros o filas de una tabla, se utiliza la sentencia:

DELETE * FROM nombre_tabla;

Ejemplo de SQL DELETE para borrar una fila de la tabla personas

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

Si queremos borrar a la persona LUIS LOPEZ PEREZ, podemos ejecutar el comando:

DELETE FROM personas


WHERE nombre = 'LUIS'
AND apellido1 = 'LOPEZ'
AND apellido2 = 'PEREZ'

La tabla 'personas' resultante será:

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
TOP
La sentencia SQL TOP se utiliza para especificar el número de filas a mostrar en el
resultado.

Esta cláusula SQL TOP es útil en tablas con muchos registros, para limitar el número de
filas a mostrar en la consulta, y así sea más rápida la consulta, consumiendo también
menos recursos en el sistema.

Esta cláusula se especifica de forma diferente según el sistema de bases de datos utilizado.

Cláusula SQL TOP para SQL SERVER

SELECT TOP número


PERCENT nombre_columna
FROM nombre_tabla

Cláusula SQL TOP para MySQL


SELECT columna(s) FROM tabla
LIMIT númerofilas

Cláusula SQL TOP para ORACLE

SELECT columna(s) FROM tabla


WHERE ROWNUM <= númerofilas

Ejemplo SQL TOP para MySQL:

Dada la siguiente tabla 'personas', quiero obtener los 2 primeros valores.

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

SELECT * FROM personas LIMIT 2

Obtendríamos el siguiente resultado:

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ

LITE

El operador LIKE se utiliza en la cláusula WHERE para buscar por un patrón.

Sintaxis de SQL LIKE

SELECT columna(s) FROM tabla WHERE columna LIKE '%patron%'

Ejemplos del uso de SQL LIKE

Dada la siguiente tabla 'personas'

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
Si quiero seleccionar los nombres que empiezan por 'AN' en la tabla 'personas', ejecutaría
el comando siguiente:

SELECT * FROM personas


WHERE nombre LIKE 'AN%'

El character '%' es un comodín, que sirve para uno o más caracteres.

Este es el resultado

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ

Otro ejemplo de SQL LIKE

Para seleccionar las personas que tienen un 'Z' en su apellido1, ejecutaríamos:

SELECT * FROM personas


WHERE apellido1 LIKE '%Z%'

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
PEDRO RUIZ GONZALEZ
WILDCARDS

Los caracteres Wildcards (comodines) son caracteres especiales que se utilizan para
realizar búsquedas especiales, como por ejemplo, buscar palabras que empiecen por una
letra determinada (letra%) o que contengan la letra a (%a%), o que contengan alguna vocal
([aeiou]), etc.

Los caracteres Wildcards se utilizan con el operador SQL LIKE en una sentencia
SELECT.Los caracteres Wildcards son :

% sustituye a cero o más caracteres


_ sustituye a 1 carácter cualquiera
[lista] sustituye a cualquier carácter de la lista
[^lista] o sustituye a cualquier carácter excepto los caracteres
[!lista] de la lista

Ejemplos:

Dada la siguiente tabla 'personas'


nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

Ejemplos Wildcards

Seleccionar las personas cuyo nombre contenga una 'R'

SELECT * FROM personas


WHERE nombre LIKE '%R%'

Resultado:

nombre apellido1 apellido2


PEDRO RUIZ GONZALEZ

Seleccionar las personas cuyo apellido1 empiece por 'GA'

SELECT * FROM personas


WHERE apellido1 LIKE 'PE_EZ'

Resultado:

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ

Seleccionar las personas cuyo apellido1 empiece por P o G

SELECT * FROM personas


WHERE apellido1 LIKE '[PG]%'

Resultado:

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ

IN

El operador IN permite seleccionar múltiples valores en una cláusula WHERE

Sintaxis SQL IN
SELECT columna
FROM tabla
WHERE columna
IN (valor1, valor2, valor3, .)

Ejemplo SQL IN

Dada la siguiente tabla 'personas'

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

Queremos seleccionar a las personas cuyo apellido1 sea 'PEREZ' o 'RUIZ'

SELECT * FROM personas


WHERE apellido1
IN ('PEREZ','RUIZ')

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
PEDRO RUIZ GONZALEZ
BETWEEN

El operador BETWEEN se utiliza en la cláusula WHERE para seleccionar valores entre un


rango de datos.

Sintaxis de SQL BETWEEN

SELECT columna
FROM tabla WHERE columna
BETWEEN valor1 AND valor2

Ejemplo de SQL BETWEEN

Dada la siguiente tabla 'personas'

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

Seleccionar personas cuyo apellido1 esté entre 'FERNANDEZ y 'HUERTAS'


SELECT *
FROM personas
WHERE apellido1
BETWEEN 'FERNANDEZ' AND 'HUERTAS'

nombre apellido1 apellido2


ANTONIO GARCIA RODRIGUEZ

Seleccionar personas cuyo apellido1 no esté entre 'FERNANDEZ y 'HUERTAS'

SELECT *
FROM personas
WHERE apellido1
NOT BETWEEN 'FERNANDEZ' AND 'HUERTAS'

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
PEDRO RUIZ GONZALEZ
ALIAS

Un alias, es otra forma de llamar a una tabla o a una columna, y se utiliza para simplificar las
sentencias SQL cuando los nombre de tablas o columnas son largos o complicados.

Sintaxis SQL ALIAS para una tabla:

SELECT columna
FROM nombretabla
AS aliastabla

Sintaxis SQL ALIAS para una columna

SELECT nombrecolumna
AS aliascolumna
FROM tabla

Ejemplos SQL ALIAS

Dada la siguiente tabla 'personas'

nombre apellido1 apellido2


ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ

Utilizamos el alias 'p' para la tabla 'personas', para simplificar la sentencia SELECT
SELECT p.apellido1, p.apellido2
FROM personas
AS p
WHERE p.nombre = 'ANTONIO'

apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ

Sin utilizar el alias, la sentencia SELECT quedaría un poco más larga:

SELECT personas.apellido1, personas.apellido2


FROM personas
WHERE personas.nombre = 'ANTONIO'

apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ
JOINS

La sentencia SQL JOIN permite consultar datos de 2 o más tablas.

Dichas tablas estarán relacionadas entre ellas de alguna forma, a través de alguna de sus
columnas.

Existen 3 tipos de JOINS: JOIN interno, JOIN externo y JOIN cruzado.

Una clave primaria es una columna con un valor único para cada registro de una tabla.

El propósito del JOIN es unir información de diferentes tablas, para no tener que repetir datos
en diferentes tablas.

Ejemplo:

Si tenemos las siguientes tablas

Tabla personas, con la clave primaria "per "

per nombre apellido1 apellido2 dep


1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 2

Tabla "departamentos", con la clave primaria "dep"

dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

Si queremos saber los nombres de las personas que trabajan en INFORMATICA, tendríamos
que hacer un JOIN de las 2 tablas "personas" y "departamentos", que se relacionarían por la
columna "dep".

Es decir, que desde la tabla "personas" y mediante la columna "dep", podemos acceder a la
información de la tabla "departamentos".
INNER JOIN

La sentencia INNER JOIN es el sentencia JOIN por defecto, y consiste en combinar cada fila
de una tabla con cada fila de la otra tabla, seleccionado aquellas filas que cumplan una
determinada condición.

SELECT * FROM tabla1 INNER JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1

Ejemplo SQL INNER JOIN

Tabla personas, con la clave primaria "per "

per nombre apellido1 apellido2 dep


1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 2

Tabla "departamentos", con la clave primaria "dep"

dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

SELECT nombre, apellido1, departamento FROM personas INNER JOIN departamentos


WHERE personas.dep = departamentos.dep

nombre apellido1 departamento


ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ INFORMATICA
LEFT JOIN
La sentencia LEFT JOIN combina los valores de la primera tabla con los valores de la segunda
tabla. Siempre devolverá las filas de la primera tabla, incluso aunque no cumplan la condición.

SELECT * FROM tabla1


LEFT JOIN tabla2
WHERE tabla1.columna1 = tabla2.columna1

Ejemplo de SQL LEFT JOIN

Tabla personas, con la clave primaria "per "

per nombre apellido1 apellido2 dep


1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4

Tabla "departamentos", con la clave primaria "dep"

dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

SELECT nombre, apellido1, departamento


FROM personas
LEFT JOIN departamentos
WHERE personas.dep = departamentos.dep

nombre apellido1 departamento


ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ

Aunque el departamento '4' de PEDRO RUIZ no existe en la tabla de departamentos, devolverá


la fila con esa columna 'departamento' en blanco.

RIGHT JOIN
La sentencia RIGHT JOIN combina los valores de la primera tabla con los valores de la segunda
tabla. Siempre devolverá las filas de la segunda tabla, incluso aunque no cumplan la condición.

En algunas bases de datos, la sentencia RIGHT JOIN es igual a RIGHT OUTER JOIN
SELECT * FROM tabla1 RIGHT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1

EJEMPLO SQL RIGHT JOIN

per nombre apellido1 apellido2 dep


1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4

Tabla "departamentos", con la clave primaria "dep"

dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

SELECT nombre, apellido1, departamento


FROM personas
RIGHT JOIN departamentos
WHERE personas.dep = departamentos.dep

nombre apellido1 departamento


ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
COMERCIAL

Aunque no exista ninguna persona del departamento 'COMERCIAL' (3), esta fila aparecerá con
las otras columnas en blanco

FULL JOIN

La sentencia FULL JOIN combina los valores de la primera tabla con los valores de la
segunda tabla. Siempre devolverá las filas de las dos tablas, aunque no cumplan la condición.

La sentencia FULL JOIN es la unión de LEFT JOIN y RIGHT JOIN

SELECT * FROM tabla1 FULL JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1

EJEMPLO SQL FULL JOIN

per nombre apellido1 apellido2 dep


1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4

Tabla "departamentos", con la clave primaria "dep"

dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

SELECT nombre, apellido1, departamento


FROM personas
FULL JOIN departamentos
WHERE personas.dep = departamentos.dep

nombre apellido1 departamento


ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ COMERCIAL
UNION

La sentencia SQL UNION es utilizada para acumular los resultados de dos sentencias
SELECT.

Las dos sentencias SELECT tienen que tener el mismo número de columnas, con el mismo
tipo de dato y en el mismo orden.

Sintaxis SQL UNION

SELECT columna1, columna2 FROM tabla1


UNION
SELECT columna1, columna2 FROM tabla2

Ejemplo SQL UNION

Tabla "personas_empresa1"

per nombre apellido1 apellido2


1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
Tabla "personas_empresa2"

per nombre apellido1 apellido2


1 JUAN APARICIO TENS
2 ANTONIO GARCIA RODRIGUEZ
3 LUIS LOPEZ VAZQUEZ

SELECT nombre, apellido1 FROM personas_empresa1


UNION
SELECT nombre, apellido1 FROM personas_empresa2

nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
PEDRO RUIZ
JUAN APARICIO
LUIS LOPEZ

La persona 'ANTONIO GARCIA RODRIGUEZ' aparecerá solo una vez en el resultado,


porque no aparecerán las filas repetidas.
SELECT INTO

Video curso online de SQL. Aprende SQL desde cero

La sentencia SQL SELECT INTO se utiliza para seleccionar datos de una tabla y copiarlos
en otra tabla diferente.

Se suele utilizar para hacer una copia de seguridad (backup) de los datos de una tabla.

Sintaxis SQL SELECT INTO

SELECT * INTO nuevatabla FROM tablaactual

Esta sentencia copiará todos los registros de la tabla 'tablaactual' en la tabla 'nuevatabla'.

La nueva tabla puede incluso estar en una base de datos diferente

SELECT *
INTO nuevatabla [IN nuevabasedatos]
FROM tablaactual
Si queremos hacer un backup de una tabla en otra

SELECT *
INTO personasBackup
FROM personas

También se pueden seleccionar sólo algunas columnas

SELECT columna1, columna2


INTO personasBackup
FROM personas

También se puede incluir una condición (WHERE)

SELECT *
INTO personasBackup
FROM personas
WHERE nombre = 'ANTONIO'

Se puede utilizar SELECT INTO con JOIN

SELECT personas.nombre, personas.apellido1, departamentos.departamento


INTO personasInformatica
FROM personas INNER JOIN departamentos
ON personas.dep = 'INFORMATICA'

CREATE DATABASE

La sentencia CREATE DATABASE se utiliza para crear bases de datos.

Sintaxis CREATE DATABASE:

CREATE DATABASE nombreBaseDatos

Ejemplo CREATE DATABASE

CREATE DATABASE mibasededatos

CREATE TABLE

La sentencia CREATE TABLE se utiliza para crear una tabla en una base de datos
existente.

Sintaxis CREATE TABLE


CREATE TABLE nombretabla
{
nombrecolumna1 tipodato1,
nombrecolumna2 tipodato2,
nombrecolumna3 tipodato3,
..
}

Ejemplo CREATE TABLE

CREATE TABLE personas


{
nombre varchar(255),
apellido1 varchar(255),
apellido2 varchar(255),
dep int
}

Esta sentencia creará la base de datos 'personas' con 4 columnas.

Las columnas 'nombre', 'apellido1' y 'apellido2' son de tipo 'varchar', es decir, acepta
valores alfanuméricos hasta una longitud máxima de 255 caracteres.

La columna 'dep' es de tipo 'int', es decir, acepta sólo números.

Existen diferentes tipos de datos, algunos son iguales en todas las bases de datos
(MySQL, ORACLE, DB2, ..) y otros pueden ser particulares para ser usados únicamente
en alguna de estas bases de datos.
Restricciones

Las CONSTRAINTS son restricciones que se utilizan para limitar el tipo de dato que
puede recibir una columna de una tabla.

Las restricciones se puede definir cuando creamos la tabla (CREATE TABLE) o


posteriormente con la sentencia ALTER TABLE.

Las posibles restricciones son:

 NOT NULL
 UNIQUE
 PRIMARY KEY
 FOREIGN KEY
 CHECK
 DEFAULT

NOT NULL
La restricción NOT NULL sirve para especificar que una columna no acepta el valor
NULL, es decir, que esa columna siempre tiene que tener algún valor, no puede estar
vacía.

Ejemplo SQL NULL

CREATE TABLE personas { nombre varchar(255) NOT NULL, apellido1


varchar(255) NOT NULL, apellido2 varchar(255) }

Esta sentencia crea una tabla denominada 'personas', donde tenemos 3 columnas.

Las columnas 'nombre' y 'apellido' llevan NOT NULL, esto quiere decir que cualquier
fila insertada en esta tabla tiene que tener algún valor para las columnas 'nombre' y
'apellido1'.
UNIQUE

La restricción UNIQUE identifica de manera única a cada fila de una tabla.

Puede haber varias restricciones UNIQUE en diferentes columnas de una tabla.

Existen varias formas diferentes de sintaxis según el sistema de base de datos


utilizado:

Ejemplo SQL UNIQUE para la base de datos MySQL

CREATE TABLE personas


{
identificador int NOT NULL,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
UNIQUE (identificador)
}

La sentencia anterior crea la tabla 'personas' con 4 columnas, donde la columna


'identifcador' tiene un valor diferente para cada fila de la tabla.

Si intentamos insertar un fila con un identificador que ya exista, nos dará un error, y
no nos dejará insertarlo.

Ejemplo SQL UNIQUE para las bases de datos ORACLE, SQLSERVIR, ACCESS

CREATE TABLE personas


{
identificador int NOT NULL UNIQUE,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
}

UNIQUE ALTER TABLE

La restricción UNIQUE se puede añadir a una columna de una tabla, después de ser creada,
mediante la sentencia ALTER TABLE.

Sintaxis de UNIQUE ALTER TABLE

ALTER TABLE personas


ADD UNIQUE (identificador)

Crea una restricción UNIQUE (valor único en toda la tabla) para la columna 'identificador'.

Se puede crear también restricciones para varias columnas a la vez

ALTER TABLE peronas


ADD CONSTRAINT copersonas
UNIQUE (identificador, apellido1)

Para eliminar una restricción en la base de datos MySQL

ALTER TABLE personas


DROP INDEX copersonas

Para eliminar una restricción en ORACLE, SQLSERVER y ACCESS

ALTER TABLE personas


DROP CONSTRAINT copersonas

PRIMARY KEY

La clave primaria, PRIMARY KEY, identifica de manera única cada fila de una tabla.

La columna definida como clave primaria (PRIMARY KEY) debe ser UNIQUE (valor único) y
NOT NULL (no puede contener valores nulos).

Cada tabla sólo puede tener una clave primaria (PRIMARY KEY).

Ejemplo PRIMARY KEY , clave primaria en MySQL


CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT
NULL, apellido1 varchar(255) NOT NULL, PRIMARY KEY (identificador) }

Ejemplo PRIMARY KEY , clave primaria en ORACLE, SQLSERVER, ACCESS

CREATE TABLE personas { identificador int NOT NULL PRIMARY KEY, nombre
varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, }

La clave primaria (PRIMARY KEY) puede estar compuesta por varias columnas, por ejemplo
por las columnas 'identificador' y 'nombre', entonces se define así:

CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT
NULL, apellido1 varchar(255) NOT NULL, CONSTRAINT pers PRIMARY KEY
(identificador, nombre) }

La clave primaria también se puede definir después de haber creado la tabla, para eso
utilizaremos el comando ALTER TABLE

Ejemplo PRIMARY KEY con ALTER TABLE ALTER TABLE personas ADD PRIMARY
KEY (identificador)

Ejemplo PRIMARY KEY multiple ALTER TABLE ALTER TABLE personas CONSTRAINT
pers PRIMARY KEY (identificador, nombre)

FOREIGN KEY

La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para
señalar cual es la clave primaria de otra tabla.

La columna o columnas señaladas como FOREIGN KEY, solo podrán tener valores que ya
existan en la clave primaria PRIMARY KEY de la otra tabla.

Ejemplo de FOREIGN KEY

Tabla "departamentos", con la clave primaria "dep"

dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

Tabla personas, con una clave externa FOREIGN KEY 'dep', que hace referencia a la clave
primaria 'dep' de la tabla anterior 'departamentos' y por tanto, solo puede tener un valor de
los que tiene en esa tabla

per nombre apellido1 apellido2 dep


1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4

Definiciones de FOREIGN KEY en CREATE TABLE para MySQL

CREATE TABLE departamentos { dep int NOT NULL,


departamento varchar(255),
PRIMARY KEY (dep)
}

CREATE TABLE personas


{
per int NOT NULL,
nombre varchar(255),
apellido1 varchar(255),
dep int NOT NULL,
PRIMARY KEY (per),
FOREIGN KEY (dep) REFERENCES departamentos(dep)
}

Definiciones de FOREIGN KEY en CREATE TABLE para ORACLE, ACCESS, SQLSERVER

CREATE TABLE departamentos


{
dep int NOT NULL PRIMARY KEY,
departamento varchar(255),
}

CREATE TABLE personas


{
per int NOT NULL PRIMARY KEY,
nombre varchar(255),
apellido1 varchar(255),
dep int FOREIGN KEY REFERENCES departamentos (dep)
}

Si la clave externa o foránea (FOREIGN KEY) está compuesta por varias columnas o
queremos ponerle un nombre, utilizaremos la fórmula siguiente:

CONSTRAINT fkpersonas FOREIGN KEY (dep, id) REFERENCES


departamentos(dep,id).

Ejemplo FOREIGN KEY con ALTER TABLE

ALTER TABLE ADD FOREIGN KEY (dep) REFERENCES departamentos(dep)

Ejemplo FOREIGN KEY múltiple (varias columnas) con ALTER TABLE:


ALTER TABLE ADD CONSTRAINT fkpersonas FOREIGN KEY (dep) REFERENCES
departamentos(dep)

Para borrar un clave externa (FOREIGN KEY) utilizamos DROP, pero varía según la base de
dato:

Borrar FOREIGN KEY en MySQL ALTER TABLE personas DROP FOREIGN KEY dep

Borrar FOREIGN KEY en ORACLE, SQLSERVER y ACCESS

ALTER TABLE personas DROP CONSTRAINT dep

CHECK

La restricción CHECK se utiliza para limitar el rango de valores que puede tener una
columna.

Se pueden definir varias restricciones CHECK en una tabla.

Ejemplo CHECK en MySQL

CREATE TABLE departamentos { dep int NOT NULL, departamento varchar(255),


CHECK (dep>0) }

Ejemplo CHECK en ORACLE, SQLSERVER y ACCESS:

CREATE TABLE departamentos { dep int NOT NULL CHECK (dep>0) departamento
varchar(255), }

Ejemplo CHECK en ALTER TABLE en MySQL

ALTER TABLE departamentos ADD CHECK (dep>0)

Ejemplo CHECK (con múltiples columnas) en ALTER TABLE en MySQL

ALTER TABLE personas ADD CHECK (per>0, edad>35)

Ejemplo CHECK en ALTER TABLE en ORACLE, SQLSERVER y ACCESS

ALTER TABLE departamentos ADD CONSTRAINT ckdepart CHECK (dep>0)

Ejemplo CHECK en ALTER TABLE con varias columnas

ALTER TABLE personas ADD CONSTRAINT ckpersona CHECK (pers>0,


nombre='antonio')
DEFAULT

La restricción DEFAULT se utiliza para establecer un valor por defecto a una columna.

Si no se especifica un valor al insertar una fila, entonces se podrá el valor por defecto
(DEFAULT) que tenga cada columna.

SQL DEFAULT en la sentencia CREATE TABLE

CREATE TABLE pedidos { idpedido int, producto int, cantidad int, fecha date DEFAULT
GETDATE() }

Si al crear un pedido, no especificamos el valor de la columna 'fecha', entonces para esa


columna se insertará por defecto obtenido de ejecutar la funcion GETDATE(), que devuelve
la fecha del sistema

En lugar de una función, podemos insertar una valor concreto '2001-01-01' o cualquier otro
valor.

SQL DEFAULT en la sentencia ALTER TABLE para MySQL

ALTER TABLE pedidos ALTER fecha DEFAULT '2012-01-01'

SQL DEFAULT en la sentencia ALTER TABLE para ORACLE, SQLSERVER, ACCESS:

ALTER TABLE pedidos ALTER COLUMN fecha SET DEFAULT '2012-01-01'

Para borrar DEFAULT en MySQL

ALTER TABLE pedidos ALTER fecha DROP DEFAULT

Para borrar DEFAULT en ORACLE, SQLSERVER, ACCESS:

ALTER TABLE pedidos ALTER COLUMN fecha DROP DEFAULT

CREATE INDEX

CREATE INDEX se utiliza para crear índices en una tabla.

Un índice sirve para buscar datos rápidamente, y no tener que recorrer toda la tabla
secuencialmente en busca alguna fila concreta.

Si una columna es índice de una tabla, al buscar por un valor de esa columna, iremos
directamente a la fila correspondiente. La búsqueda así es mucho más óptima en recursos y
más rápida en tiempo.
Si esa columna de búsqueda no fuese índice, entonces tendríamos que recorrer de forma
secuencial la tabla en busca de algún dato. Por eso, es importante crear un índice por cada
tipo de búsqueda que queramos hacer en la tabla.

Actualizar una tabla con índices tarda más tiempo porque también hay que actualizar los
índices, así que solo se deben poner índices en las columnas por las que buscamos
frecuentemente.

Se pueden crear índices ÚNICOS, es decir, índices que no admiten valores duplicados.

Sintaxis para SQL CREATE INDEX

CREATE INDEX nombreindice


ON nombretabla (nombrecolumna)

La columna que forma parte de este índice admite valores duplicados en su columna.

Sintaxis para SQL CREATE UNIQUE INDEX

CREATE UNIQUE INDEX nombreindice


ON nombretabla (nombrecolumna)

La columna que forma parte de este índice NO admite valores duplicados en su columna,
porque es una clave única.

Ejemplos para SQL CREATE INDEX

Creamos la índice 'indicepersonas' sobre la columna 'persona' de la tabla 'personas'

CREATE INDEX indicepersonas


ON personas (persona)

Si queremos crear un índice sobre varias columnas, por ejemplo, apellido1 y apellido2

CREATE INDEX indice2personas


ON personas(apellido1, apellido2)

DROP

La sentencia DROP se utiliza para borrar definitivamente un índice, tabla o base de datos.

DROP INDEX

Sintaxis DROP INDEX para MySQL

ALTER TABLE nombretabla


DROP INDEX nombreindice
Sintaxis DROP INDEX para DB2 y ORACLE

DROP INDEX nombreindice

Sintaxis DROP INDEX para ACCESS

DROP INDEX nombreindice


ON nombretabla

Sintaxis DROP INDEX para SQLSERVER

DROP INDEX nombretabla.nombreindice

DROP TABLE

Se utiliza DROP TABLE para borrar definitivamente una tabla

DROP TABLE nombretabla

DROP DATABASE

Se utiliza para borrar una base de datos definitivamente.

DROP DATABASE nombrebasededatos

TRUNCATE

Este comando SQL TRUNCATE se utiliza para eliminar o borrar los datos que contiene una
tabla.

Es útil cuando sólo se quiere borrar los datos, pero no se quiere borrar la tabla.

Este comando deja vacía una tabla, es decir, sin datos.

TRUNCATE TABLE nombretabla

ALTER

La sentencia SQL ALTER se utiliza para añadir, eliminar o modificar columnas de una tabla.

Sintaxis SQL ALTER

Para añadir una nueva columna a una tabla

ALTER TABLE nombretabla


ADD nombrecolumna tipodatocolumna
Para borrar una columna de una tabla

ALTER TABLE nombretabla


DROP COLUMN nombrecolumna

Para modificar el tipo de dato de una columna de una tabla

ALTER TABLE nombretabla


ALTER COLUMN nombrecolumna tipodatocolumna

Ejemplos de SQL ALTER

per nombre apellido1 apellido2


1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ

Dada la siguiente tabla de 'personas', queremos añadir una nueva columna, denominada
'fechadenacimiento'

ALTER TABLE personas


ADD fechadenacimiento date

per nombre apellido1 apellido2 fechadenacimiento


1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ

Si queremos modificar el tipo de dato de la columna 'fecha', y ponerle tipo 'year' en lugar de tipo
'date'

ALTER TABLE personas


ALTER COLUMN fechadenacimiento year

Si queremos borrar la columna 'fechadenacimiento', y dejarlo igual que al principio

ALTER TABLE personas


DROP COLUMN fechadenacimiento

per nombre apellido1 apellido2


1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
AUTO INCREMENT

AUTO INCREMENT permite generar un número único cuando insertamos un nuevo registro
en la tabla.

Se utiliza para tener una clave primaria de una tabla mediante la generación automática de
un número secuencial único en la tabla.

Sintaxis SQL AUTO INCREMENT

CREATE TABLE personas { persona int NOT NULL AUTO_INCREMENT, nombre


varchar(255), apellido1 varchar(255), apellido2 varchar(255) }

El valor inicial de una valor auto incremental (AUTO_INCREMENT) es 1, y se le va sumando


1 cada nuevo registro grabado en la tabla.

Si queremos que el valor inicial sea 100 en lugar de 1

ALTER TABLE personas AUTO_INCREMENT=100

Para SQL SERVER se utiliza IDENTITY en lugar de AUTO_INCREMENT

Para ACCESS se utiliza AUTOINCREMENT en lugar de AUTO_INCREMENT

Para ORACLE se define de forma diferente

CREATE SEQUENCE persona MINVALUE 1 START WITH 1 INCREMENT BY 1


CACHE 10

Una vista es una tabla virtual.

SQL CREATE VIEW

Una vista es una tabla virtual basada en el resultado de una consulta (SELECT) a una tabla.

CREATE VIEW nombrevista AS


SELECT nombrecolumna(s)
FROM nombretabla
WHERE condición

Las vista muestran siempre datos reales de una o varias tablas.

Cada vez que un usuario pregunta o consulta una vista, el sistema de base de datos, actualiza
los datos de la vista, para mostrar siempre datos reales.

Ejemplo SQL CREATE VIEW

En la tabla personas

>
nombre apellido1 apellido2 edad
ANTONIO PEREZ GOMEZ 30
ANTONIO GARCIA RODRIGUEZ 45
PEDRO RUIZ GONZALEZ 50

Creamos una vista con las personas que se llaman ANTONIO

CREATE VIEW [personas que se llaman ANTONIO] AS


SELECT nombre, apellido1, apellido2,edad
FROM personas
WHERE nombre = 'ANTONIO'

Para consultar los datos de una vista

SELECT * FROM [personas que se llama ANTONIO]

En la vista [personas que se llama ANTONIO] tenemos los datos siguientes:

>
nombre apellido1 apellido2 edad
ANTONIO PEREZ GOMEZ 30
ANTONIO GARCIA RODRIGUEZ 45

SQL REPLACE VIEW

Para reemplazar o modificar los datos de una vista:

REPLACE VIEW [personas que se llama ANTONIO] AS


SELECT nombre, apellido1, apellido2, edad
FROM personas
WHERE edad > 20

SQL DROP VIEW

Para borrar una vista

DROP VIEW nombrevista

Ejemplo borrado de la vista antes creada:

DROP VIEW [personas que se llama ANTONIO]

DATES
Existen diferentes formatos para almacenar las fechas y horas en los distintos sistemas de
bases de datos.

Los tipos de datos de cada columna se definen cuando se crea la tabla.

Tipos de Datos para las fechas y horas en la base de datos MySQL

Tipo Formato Ejemplo


DATE YYYY-MM-DD 2008-11-11
DATETIME YYYY-MM-DD 2008-11-11
HH:MM:SS 13:23:44
TIMESTAMP YYYY-MM-DD
HH:MM:SS
YEAR YYYY o YY

Funciones para MySQL sobre estos tipos de datos de fecha anteriores

NOW Muestra la fecha y hora actuales.


Por ejemplo: 2008-11-11
12:45:34
CURDATE Muestra la fecha actual. Por
ejemplo: 2008-11-11
CURTIME Muestra la hora actual. Por
ejemplo: 12:45:34
DATE Muestra la parte fecha de una
expresión fecha/hora
EXTRACT Muestra una parte de una
expresión fecha/hora
DATE_ADD Muestra una fecha como suma
de un intervalo de tiempo a una
fecha
DATE_SUB Muestra una fecha como resta
de un intervalo de tiempo a una
fecha
DATEDIFF Muestra el número de días entre
2 fechas
DATE_FORMAT Muestra una fecha y hora con
diferentes formatos

Tipos de Datos para fechas y horas en la base de datos SQL Server

DATE Formato YYYY-MM-DD


DATETIME Formato YYYY-MM-DD
HH:MM:SS
SMALLDATETIME Formato YYYY-MM-DD
HH:MM:SS
TIMESTAMP Se genera un valor basado en
la hora del sistema. Se
actualiza automáticamente.

Funciones para SQL Server sobre los tipos de datos de fecha y hora anteriores

GETDATE Muestra la fecha y hora actuales


DATEPART Muestra parte de una fecha y hora
DATEADD Muestra una fecha como suma o resta
de un intervalo de tiempo sobre una
fecha
DATEDIFF Muestra el tiempo entre 2 fechas
CONVERT Muestra la fecha y hora en diferentes
formatos

Ejemplos del uso de fecha y hora

CREATE TABLE pedidos


(
idpedido int NOT NULL,
nombreproducto varchar(50) NOT NULL,
fechapedido datetime NOT NULL
PRIMARY KEY (idpedido)
)

idpedido nombreproducto fechapedido


1 papel oficina 2012-02-23 14:05:00

Si queremos almacenar solo la fecha (y no la hora) utilizaremos el tipo de datos 'date' en


lugar de 'datetime'.

VALORES NULL

El valor NULL representa a un valor desconocido.

Este valor NULL puede ser asignado como valor a cualquier columna de una tabla.

Si el valor de una columna es opcional, quiere decir, que podemos insertar una fila en la tabla
sin asignarle ningún valor a esa columna opcional, así que esa columna tomará el valor NULL.
El valor NULL es un valor especial, y por tanto, no se puede comparar con los operadores
aritméticos normales (=, >, <, <>), y en su lugar debemos utilizar los operadores IS y IS NOT.

En la tabla personas, tenemos la columna 'apellido2' que es opcional y puede tener valores
nulos:

>
nombre apellido1 apellido2 edad
ANTONIO PEREZ 30
LUIS LOPEZ PEREZ 45
ANTONIO GARCIA 50

Ejemplo de uso de IS NULL

SELECT * FROM personas WHERE apellido2 IS NULL

>
nombre apellido1 apellido2 edad
ANTONIO PEREZ 30
ANTONIO GARCIA 50

Ejemplo de uso de IS NOT NULL

SELECT * FROM personas WHERE apellido2 IS NOT NULL

>
nombre apellido1 apellido2 edad
LUIS LOPEZ PEREZ 45
FUNCIONES NULL

Si queremos cambiar un valor NULL por otro valor cualquiera, utilizaremos las siguientes
funciones (ISNULL, IFNULL, NVL, COLACESCE) según el sistema de base de datos.

Para nuestros ejemplos, queremos que si el valor es NULL se cambie por el valor 0

Ejemplo para SQL SERVER se utiliza ISNULL:

SELECT producto,
preciounidad * (unidadesstock + ISNULL(unidadespedido, 0)
FROM productos

Ejemplo para ORACLE se utiliza NVL:


SELECT producto,
preciounidad * (unidadesstock + NVL(unidadespedido, 0)
FROM productos

Ejemplo para MySQL, hay 2 funciones equivalentes (IFNULL, COALESCE):

SELECT producto,
preciounidad * (unidadesstock + IFNULL(unidadespedido, 0)
FROM productos

SELECT producto,
preciounidad * (unidadesstock + COALESCE(unidadespedido, 0)
FROM productos

DATOS TEXTO para MySQL

Tipos de datos y rango de datos para el sistema de gestión de bases de datos MySQL

Tipos de datos de TEXTO en MySQL

CHAR

El tipo de dato CHAR sirve para almacenar una cadena de datos de longitud fija.

Puede contener caracteres, números y caracteres especiales.

La longitud fija se define entre paréntesis, y siempre reservará espacio para esta longitud
aunque no se utilice.

Por ejemplo, CHAR(50), será un campo de longitud fija de 50 posiciones.

La longitud máxima que podemos definir un campo CHAR es de 255.

VARCHAR

El tipo de datos VARCHAR sirve para almacenar una cadena de datos (caracteres, números
y caracteres especiales) de longitud variable.

La longitud máxima es de 255 caracteres.

Hace un buen uso del espacio en disco, porque no reserva el espacio de la longitud máxima
definida, si no que solo ocupa espacio el tamaño real de los datos almacenados en ese
campo.

Es el tipo de dato más utilizado para campos pequeños.


TINYTEXT

El tipo de datos TINYTEXT sirve para almacenar una cadena de datos (solo caracteres, no
admite número ni caracteres especiales) de una longitud máxima de 255 caracteres.

TEXT

El tipo de dato TEXT sirve para almacenar una cadena de caracteres de longitud máxima de
65,535 caracteres.

BLOB

El tipo de datos BLOB sirve para almacenar datos de tipo BLOB (Binary Large Object).

Admite una longitud máxima de 65,535 bytes de datos.

MEDIUMTEXT

El tipo de dato MEDIUMTEXT sirve para almacenar una cadena con una longitud máxima de
16.777.215 caracteres.

MEDIUMBLOB

El tipo de datos MEDIUMBLOB Sirve para almacenar datos tipo BLOB con longitud máxima
16.777.215 bytes.

LONGTEXT

El tipo de dato LONGTEXT sirve para almacenar una cadena de longitud máxima de
4.294.967.295 caracteres.

LONGBLOB

El tipo de dato LONGBLOB sirve para almacenar un BLOB de longitud máxima de de


4.294.967.295 bytes.
ENUM

El tipo de dato ENUM sirve para introducir una lista de posibles valores.

La longitud máxima es de 65.535 posibles valores.

Si se intenta introducir un valor en este campo, que no esté incluido en la lista, no se insertará
nada y tendrá un valor vacío ('').

Por ejemplo si definimos una columna como ENUM('uno', 'dos'), entonces en esta columna
solo puede almacenar los valores 'uno' o 'dos'.

Si queremos insertar cualquier otro valor (por ejemplo 'tres'), no se grabará 'tres' y en su lugar
quedará el campo vacío, sin valor ('').

SET

El tipo de dato SET es similar a ENUM pero la longitud máxima de valores posibles es de 64,
y los valores posibles se pueden combinar.

Por ejemplo, si definimos una columna como SET ('uno', 'dos) entonces esa columna podrá
tomar los siguientes valores 'uno' o 'dos' o 'uno,dos', 'dos,uno'.

DATOS NUMÉRICOS para MySQL

Tipos de datos numéricos para el sistema de gestión de bases de datos MySQL

MySQL admite los siguientes tipos de datos numéricos para sus columnas

TINYINT

El tipo de dato numérico TINYINT permite números desde -128 hasta 127.

También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 255.

Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis (tamaño).

SMALLINT

El tipo de dato numérico SMALLINT permite números desde -32768 hasta 32767.

También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 65535.
Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis

MEDIUMINT

El tipo de dato numérico MEDIUMINT permite números desde -8388608 hasta 8388607.

También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 16777215.

Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis

INT

El tipo de dato numérico INT permite números desde -2147483648 hasta 2147483647.

También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 4294967295.

Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis

BIGINT

El tipo de dato numérico BIGINT permite números desde -9223372036854775808 hasta


9223372036854775807.

También se puede definir como UNSIGNED (sin signo), entonces los valores posibles
empiezan en 0 hasta 18446744073709551615.

Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis

FLOAT

El tipo de dato numérico FLOAT permite almacenar pequeños números decimales (de punto
flotante).

Al ser de punto flotante, sus cálculos son aproximados. Podemos especificar el número
máximo de dígitos (tamaño) y el número de decimales (decimal).

FLOAT(6,2) tendrá 4 dígitos enteros y 2 decimales, por ejemplo, 5467.67

DOUBLE
El tipo de dato numérico DOUBLE permite almacenar grandes números decimales (de punto
flotante).

Al ser de punto flotante, sus cálculos son aproximados. Podemos especificar el número
máximo de dígitos (tamaño) y el número de decimales (decimal).

DOUBLE(5,1) tendrá 4 dígitos enteros y 1 dígito decimal, por ejemplo, 5467.1

DECIMAL

El tipo de dato numéric DECIMAL permite almacenar grandes números decimales de punto
fijo, por tanto, los cálculos con este tipo DECIMAL son exactos.

Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales


(decimal). El número máximo de dígitos es de 65.

Por ejemplo DECIMAL(20,6) quiere decir que tendrá 14 dígitos enteros y 4 dígitos decimales.

DATOS FECHA para MySQL

En MySQL pueden existir los siguientes tipos de datos para fechas

DATE

El tipo de dato DATE sirve para almacenar una fecha con el formato YYYY-MM-DD (4 dígitos
para el año, guión, 2 dígitos para el mes, guión, 2 dígitos para el día).

DATETIME

El tipo de dato DATETIME sirve para almacenar fecha y hora, con el formato YYYY-MM-DD
HH:MM:SS

TIMESTAMP

El tipo de dato TIMESTAMP es equivalente al tipo anterior, DATETIME, YYYY-MM-DD


HH:MM:SS

TIME
El tipo de dato TIME sirve para almacenar la hora con el formato HH:MM:SS

YEAR

El tipo de dato YEAR sirve para almacenar el año con el formato YYYY

El proceso de diseño de base de datos


Una base de datos bien estructurada:

 Ahorra espacio en el disco eliminando los datos redundantes.


 Mantiene la precisión e integridad de los datos.
 Ofrece acceso a los datos de formas útiles.

Diseñar una base de datos útil y eficiente requiere seguir el proceso adecuado,
incluidas las siguientes etapas:

1. Análisis de los requisitos o identificación del propósito de tu base de datos.


2. Organización de los datos en tablas.
3. Especificación de las claves primarias y análisis de las relaciones.
4. Normalización para estandarizar las tablas.

Realicemos un análisis detallado de cada paso. Ten en cuenta que esta guía se centra
en el modelo de base de datos relacional de Edgar Codd escrito en SQL (en lugar de
modelos jerárquicos, de red o de datos de objetos). Para saber más sobre los
modelos de base de datos, lee nuestra guía aquí.

Análisis de los requisitos: identificar el propósito de


la base de datos
Comprender el propósito de tu base de datos determinará tus opciones en todo el
proceso de diseño. Asegúrate de observar la base de datos desde todas las
perspectivas. Por ejemplo, si estuvieras creando una base de datos para una
biblioteca pública, deberías considerar las formas en que los clientes y bibliotecarios
necesitarían acceder a los datos.

Aquí te mostramos algunas formas de reunir información antes de crear la base de


datos:

 Entrevistar a las personas que la usarán.


 Analizar formularios de negocio, como facturas, plantillas de horas
trabajadas, encuestas.
 Examinar cualquier sistema de datos existente (incluidos archivos físicos y
digitales).

Comienza reuniendo cualquier dato existente que se incluirá en la base de datos.


Luego enumera los tipos de datos que quieres almacenar y las entidades o personas,
cosas, ubicaciones y eventos que esos datos describen, del siguiente modo:

Clientes

 Nombre
 Dirección
 Ciudad, estado, código postal
 Dirección de correo electrónico

Productos

 Nombre
 Precio
 Cantidad en stock
 Cantidad en el pedido

Pedidos

 Número del pedido


 Representante de ventas
 Fecha
 Producto(s)
 CANTIDAD
 Precio
 Total

Más adelante, esta información se volverá parte del directorio de datos, que describe
las tablas y los campos dentro de la base de datos. Asegúrate de dividir la
información en partes útiles lo más pequeñas posibles. Por ejemplo, considera
separar el nombre de la calle del país para poder filtrar más adelante a los individuos
según su país de residencia. Además, evita ubicar el mismo punto de datos en más
de una tabla porque agregarás una complejidad innecesaria.

Cuando sepas qué tipos de datos incluirán las bases de datos, de dónde provienen
esos datos y cómo se usarán, estarás listo para comenzar a planificar la base de datos
real.

Estructura de la base de datos: los bloques de


creación de una base de datos
El siguiente paso es organizar la representación visual de tu base de datos. Para ello,
debes comprender exactamente cómo se estructuran las bases de datos relacionales.

Dentro de una base de datos, los datos relacionados se agrupan en tablas, cada una
de ellas consiste en filas (también llamadas "tuplas") y columnas, como una hoja de
cálculo.

Para convertir tus listas de datos en tablas, comienza creando una tabla para cada
tipo de entidad, como productos, ventas, clientes y pedidos. Te mostramos un
ejemplo a continuación:

Cada fila de una tabla se llama "registro". Los registros incluyen datos sobre algo o
alguien, como un cliente específico. En cambio, las columnas (también conocidas
como "campos" o "atributos") contienen un único tipo de información que aparece
en cada registro, como las direcciones de todos los clientes enumerados en la tabla.

Nombre Apellido Edad Código postal

Roger Williams 43 34760

Jerrica Jorgensen 32 97453

Samantha Hopkins 56 64829

Con el fin de que los datos sean consistentes de un registro al siguiente, asigna el
tipo de datos apropiado a cada columna. Los tipos de datos comunes incluyen:

 CHAR - una longitud específica de texto.


 VARCHAR - texto de longitudes variables.
 TEXT - grandes cantidades de texto.
 INT - número entero positivo o negativo.
 FLOAT, DOUBLE - también puede almacenar números de punto flotante.
 BLOB - datos binarios.

Algunos sistemas de gestión de bases de datos también ofrecen el tipo de datos


denominado "Autonumeración", que genera automáticamente un número único en
cada fila.

A los efectos de crear una visión general de la base de datos, conocida como un
diagrama entidad-relación, no incluiremos las tablas reales, sino que cada tabla se
convertirá en un recuadro del diagrama. El título de cada recuadro debería indicar
qué describen los datos en la tabla, mientras que los atributos están enumerados a
continuación, del siguiente modo:
Por último, deberías decidir qué atributo o atributos funcionarán como clave
primaria para cada tabla, si procede. Una clave primaria (PK) es un identificador
único para una entidad determinada, esto significa que puedes seleccionar un
cliente concreto incluso si solo conoces ese valor.

Los atributos seleccionados como claves primarias deben ser únicos, inalterables y
estar siempre presentes (nunca NULL o vacíos). Por este motivo, los números de
pedido y los nombres de usuario son excelentes claves primarias, mientras que los
números de teléfono o direcciones postales no lo son. También puedes usar
múltiples campos conjuntamente como la clave primaria (esto se denomina "clave
compuesta").

Cuando llegue el momento de crear la base de datos real, ubicarás la estructura de


datos lógicos y la estructura de datos físicos en el lenguaje de definición de datos
admitido por nuestro sistema de gestión de base de datos. En este punto, también
deberías calcular el tamaño aproximado de la base de datos para asegurarte de tener
el nivel de rendimiento y el espacio de almacenamiento necesarios.

Creación de relaciones entre entidades


Cuando tus tablas de base de datos se conviertan en tablas, estarás listo para
analizar las relaciones entre esas tablas. La cardinalidad se refiere a la cantidad de
elementos que interactúan entre dos tablas relacionadas. Identificar la cardinalidad
te ayuda a asegurarte de que has dividido los datos en tablas de la forma más
eficiente.

Cada entidad puede, potencialmente, tener una relación con todas las demás, pero
por lo general esas relaciones pueden ser de uno de tres tipos:

Relaciones uno a uno

Si hay una única instancia de la Entidad A para cada instancia de la Entidad B, se dice
que tienen una relación de uno a uno (a menudo se escribe 1:1). Puedes indicar este
tipo de relación en un diagrama ER mediante una línea con un guión en cada
extremo:
A menos que tengas un buen motivo para no hacerlo, una relación 1:1 generalmente
indica que la mejor opción sería combinar los datos de las dos tablas en una sola
tabla.

Sin embargo, quizás desees crear tablas con una relación de uno a uno en una serie
particular de circunstancias. Si tienes un campo con datos opcionales, como
"descripción", que está en blanco para muchos registros, puedes mover todas las
descripciones a su propia tabla, eliminando espacio vacío y mejorando el
rendimiento de la base de datos.

Para garantizar que los datos coincidan correctamente, luego tendrías que incluir al
menos una columna idéntica en cada tabla, lo más probable es que sea la clave
primaria.

Relaciones uno a muchos

Estas relaciones suceden cuando un registro de una tabla está asociado a múltiples
entradas en otra tabla. Por ejemplo, un solo cliente puede haber solicitado múltiples
pedidos o una persona haberse llevado muchos libros de la biblioteca a la vez. Las
relaciones uno a muchos (1:M) se indican con lo que se denomina "notación patas
de gallo" como en el siguiente ejemplo:

Para implementar una relación uno a muchos (1:M) mientras preparas una base de
datos, simplemente agrega la clave primaria de "un" lado de la relación como un
atributo en la otra tabla. Cuando una clave primaria se detalla en otra tabla de esta
manera, se denomina "clave extranjera". La tabla en el lado "1" de la relación es
considerada una tabla principal respecto de la tabla secundaria que se encuentra del
otro lado.

Relaciones muchos a muchos

Cuando múltiples entidades de una tabla se pueden asociar a múltiples entidades de


otra tabla, se dice que tienen una relación de muchos a muchos (M:N). Esto puede
suceder en el caso de estudiantes y clases, ya que un estudiante puede inscribirse en
muchas clases, y una clase puede tener numerosos estudiantes.

En un diagrama ER, estas relaciones se representan con estas líneas:

Lamentablemente, no es posible implementar directamente este tipo de relación en


una base de datos. En cambio, debes dividirlo en dos relaciones uno a muchos.

Para ello, debes crear una nueva entidad entre esas dos tablas. Si la relación M:N
existe entre ventas y productos, quizás llames a esa nueva entidad
"productos_vendidos", ya que mostraría los contenidos de cada venta. Tanto las
tablas de ventas como de productos tendrían una relación 1:M con
"productos_vendidos". Esta clase de entidad intermedia se llama "tabla de enlaces",
"entidad asociativa" o "tabla de unión" en diversos modelos.

Cada registro de la tabla de enlaces se correspondería con dos de las entidades de


las tablas contiguas (también puede incluir información adicional). Por ejemplo, una
tabla de enlaces entre estudiantes y clases podría verse así:

¿Es obligatorio o no?

Otra forma de analizar las relaciones es considerar qué lado de la relación debe
existir para que el otro lado exista. El lado no obligatorio puede marcarse con un
círculo en la línea donde debería haber un guión. Por ejemplo, un país tiene que
existir para tener un representante en las Naciones Unidas, pero lo opuesto no se
cumple:

Dos entidades pueden ser mutuamente dependientes (una no podría existir sin la
otra).

Relaciones recursivas

A veces una tabla se relaciona consigo misma. Por ejemplo, una tabla de empleados
puede tener un atributo que sea "director" y que se refiera a otro individuo de la
misma tabla. Esto se llama "relación recursiva".

Relaciones redundantes

Una relación redundante es aquella que se expresa más de una vez. Por lo general,
puedes eliminar una de las relaciones sin perder información importante. Por
ejemplo, si la entidad "estudiantes" tiene una relación directa con otra entidad
llamada "profesores", pero también tiene una relación con profesores
indirectamente mediante "clases", querrás eliminar la relación entre "estudiantes"
y "profesores". Es mejor eliminar esa relación porque la única forma de que los
estudiantes se asignan a los profesores es mediante las clases.

Normalización de la base de datos


Una vez que tengas un diseño preliminar para tu base de datos, puedes aplicar reglas
de normalización para asegurarte de que las tablas estén estructuradas
correctamente. Piensa en estas reglas como los estándares de la industria.

Dicho esto, no todas las bases de datos son buenas candidatas para la normalización.
Generalmente, las bases de datos de procesamiento de transacciones en línea
(OLTP), en las que los usuarios se encargan de la creación, lectura, actualización y
eliminación de los registros, deberían estar normalizadas.

Las bases de datos de procesamiento analítico en línea (OLAP) que favorecen el


análisis y la generación de informes funcionarían mejor con un grado de
desnormalización, ya que el énfasis está en la velocidad de cálculo. Estas incluyen
aplicaciones de soporte de decisiones en las que los datos se deben analizar
rápidamente, pero no deben modificarse.

Cada forma, o nivel de normalización, incluye las reglas asociadas a las formas
inferiores.

La primera forma normal

La primera forma normal (abreviada como "1FN") especifica que cada celda de la
tabla puede tener un solo valor, nunca una lista de valores. Por lo tanto, una tabla
como esta no cumple con los requisitos:

ID del producto Color Precio

1 marrón, amarillo $15

2 rojo, verde $13

3 azul, naranja $11

Quizás pienses que la mejor solución sea dividir los datos en columnas adicionales,
pero eso también rompería las reglas: una tabla con grupos de atributos repetidos o
estrechamente relacionados entre sí no cumple con la primera forma normal. Por
ejemplo, la tabla a continuación no cumple con los requisitos:

En cambio, divide los datos en múltiples tablas o registros hasta que cada celda
contenga solo un valor y no halla columnas adicionales. En este punto, se dice que
los datos son "atómicos", es decir que se dividen en partes útiles lo más pequeñas
posibles. Para la tabla anterior, podrías crear una tabla adicional llamada "Datos de
ventas", que haría coincidir productos específicos con ventas. Así, "Ventas" tendría
una relación 1:M con "Datos de ventas".

La segunda forma normal


La segunda forma normal (2NF) establece que todos los atributos deben ser
totalmente dependientes de toda la clave primaria. Eso significa que cada atributo
debería depender directamente de la clave primaria, en lugar de indirectamente a
través de algún otro atributo.

Por ejemplo, se considera que el atributo "edad" que depende de "fecha de


nacimiento", que a su vez depende de "ID de estudiante" tiene una dependencia
funcional parcial; y una tabla que contenga estos atributos no cumpliría con la
segunda forma normal.

Además, una tabla con una clave primaria compuesta de múltiples campos viola la
segunda forma normal si uno o más de los otros campos no dependen de cada parte
de la clave.

Por lo tanto, una tabla con estos campos no respetaría la segunda forma normal
porque el atributo "Nombre del producto" depende del ID del producto, pero no del
número de pedido:

 Número de pedido (clave primaria)


 ID de producto (clave primaria)
 Nombre del producto

La tercera forma normal

La tercera forma normal (3NF) agrega a estas reglas el requisito de que cada
columna que no sea de clave sea independiente de las demás columnas. Si modificar
el valor en una columna que no sea de clave hace que cambie otro valor, entonces
esa tabla no cumple con los requisitos de la tercera forma normal.

Esto evita que almacenes cualquier dato derivado en la tabla, tal como la columna
"Impuestos" a continuación, que depende directamente del precio final del pedido:

Pedido Precio Impuestos

14325 $40.99 $2.05

14326 $13.73 $.69

14327 $24.15 $1.21

Se han propuesto formas adicionales de normalización, incluidas la forma normal de


Boyce-Codd, la cuarta, quinta y sexta forma normal, y la forma normal de
dominio/clave, pero las primeras tres son las más comunes.
Si bien estas formas explican las buenas prácticas que se deben seguir generalmente,
el grado de normalización depende del contexto de la base de datos.

Crear diagramas es rápido y sencillo con Lucidchart. Inicia una prueba gratuita hoy
mismo para empezar a crear y colaborar.

Hacer un diagrama de base de datos


Al registrarme, acepto los Términos de servicio y la Política de privacidad de Lucid
Software.

Datos multidimensionales
Algunos usuarios quizás deseen acceder a múltiples dimensiones de un único tipo
de dato, especialmente en las bases de datos OLAP. Por ejemplo, quizás deseen
conocer las ventas por cliente, estado y mes. En esta situación, lo mejor es crear una
tabla de datos central que actúe de referencia para las otras tablas de cliente, estado
y mes, de este modo:

Reglas de integridad de datos


También deberías configurar tu base de datos para validar los datos en función de
las reglas adecuadas. Muchos sistemas de gestión de base de datos, como Microsoft
Access, ejecutan automáticamente algunas de estas reglas.

La regla de integridad de la entidad afirma que la clave primaria nunca puede ser
NULL. Si la clave está compuesta por múltiples columnas, ninguna de ellas puede ser
NULL. De lo contrario, podría no identificar de forma única al registro.

La regla de la integridad referencial requiere que cada clave externa que aparece en
una tabla se corresponda con una clave primaria de la tabla a la que hace referencia.
Si la clave primaria cambia o se elimina, esos cambios deberán implementarse
donde sea que esté la referencia a esa clave en toda la base de datos.
Las reglas de la integridad lógica de negocios garantizan que los datos se adecúen a
determinados parámetros lógicos. Por ejemplo, el horario de una cita deberá fijarse
dentro de las horas laborales normales.

Agregar índices y visualizaciones


Un índice es, en esencia, una copia ordenada de una o más columnas, con valores
dispuestos de forma ascendente o descendente. Agregar un índice permite a los
usuarios encontrar los registros más rápidamente. En lugar de reordenar cada
consulta, el sistema puede acceder a los registros en el orden que especifica el índice.

Si bien los índices aceleran la recuperación de datos, pueden enlentecer la inserción,


actualización o eliminación, ya que el índice debe rediseñarse cada vez que se
modifica un registro.

Una visualización es simplemente una consulta almacenada sobre los datos. Puede
unir datos de múltiples tablas de manera útil o bien mostrar parte de una tabla.

Propiedades extendidas
Una vez que hayas finalizado la disposición básica, puedes refinar la base de datos
con propiedades extendidas, como el texto instructivo, la máscara de entrada y las
reglas de formato que se aplican a un esquema, visualización o columna
determinada. La ventaja es que, como estas reglas están almacenadas en la misma
base de datos, la presentación de los datos será consistente en todos los programas
que accedan a los mismos.

SQL y UML
El lenguaje unificado de modelado (UML) es otra forma visual de expresar sistemas
complejos creados en un lenguaje orientado a objetos. Muchos de los conceptos
mencionados en esta guía se conocen en UML con distintos nombres. Por ejemplo,
una entidad se llama "clase" en UML.

Hoy en día no se usa el UML con tanta frecuencia como antes. En la actualidad, se
emplea en entornos académicos y en las comunicaciones entre diseñadores de
software y sus clientes.

Sistemas de gestión de bases de datos


Muchas de las elecciones de diseño que tomarás dependen del sistema de gestión de
base de datos que elijas. Algunos de los sistemas más comunes incluyen:

 Oracle DB
 MySQL
 Microsoft SQL Server
 PostgreSQL
 IBM DB2

Cuando puedas elegir, selecciona un sistema de gestión de base de datos en función


del costo, los sistemas operativos, las funciones y más.

También podría gustarte