Вы находитесь на странице: 1из 49

|

|
|
|
|
|
|
|
=
|
Tutorial SQL
SQL

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

El lenguaje SQL se utiliza para acceder y manipular datos en cualquier base de datos del mercado, como
por ejemplo, para las bases de datos MySQL, Oracle, DB2, SQL Server, Access.

SQL Introducción

El SQL es un lenguaje estructurado y un estándar ANSI para el acceso y manipulación de los datos de
cualquier base de datos.

El SQL se compone de sentencias SQL, cada una con una utilidad diferente, como por ejemplo:

­ Creación de una base de datos (CREATE DATABASE)


­ Creación de una tabla (CREATETABLE)
­ Creación de una vista (CREATEVIEW)
­ Creación de un índice de una tabla (CREATE INDEX)
­ Creación de procedimientos almacenados (CREATE PROCEDURE)
­ Creación de disparadores (CREATETRIGGER)
­ Consultar los datos almacenados en una tabla (SELECT)
­ Insertar datos en una tabla (INSERT)
­ Modificar datos ya existentes en una tabla (UPDATE)
­ Borrar datos almacenados en una tabla (DELETE)
­ Dar permiso de acceso a los datos de una tabla (GRANT)
­ Eliminar permisos de acceso a datos de una tabla (REVOKE)
­ Finalizar la transacción de una sentencia SQL (COMMIT)
­ Retroceder la transacción de una sentencia SQL (ROLLBACK).

SQL Sintaxis

Un sistema de base de datos suele contener varias bases de datos.


Cada base de datos suele contener varias tablas.
Las tablas almacenan los datos organizados por filas.
Cada fila contiene varios campos.
Cada campo tiene una serie de propiedades, como por ejemplo, el nombre del campo, su longitud, tipo de
dato que se va a almacenar, etc.

Las sentencias SQL no son sensibles a mayúsculas y minúsculas, es decir, ‘SELECT’ y ‘select’ son dos
palabras iguales para SQL.

Algunos sistemas de bases de datos necesitan un punto y coma después de cada sentencia SQL para
ejecutarse correctamente
CREATE DATATABASE mibasedeatos;

Este punto y coma también puede servir para separar una sentencia SQL de otra sentencia SQL en la
misma línea.
CREATE DATATABASE mibasedeatos; CREATE TABLE mitabla1;
Las sentencias SQL se pueden agrupar por funcionalidades:

1.­ Lenguaje de definición de datos (DDL).

DDL está compuesto por sentencias para la creación (CREATE), modificación (ALTER) y borrado
(DROP) de los componentes principales de una base de datos:
­ base de datos (DATABASE),
­ tablas (TABLE)
­ vistas (VIEW)
­ índices (INDEX)
­ procedimientos almacenados (PROCEDURE)
­ disparadores (TRIGGER).

2.­ Lenguaje de manipulación de datos (DML).

DML está compuesto por sentencias que sirven para consultar (SELECT), insertar (INSERT), modificar
(UPDATE) y borrar (DELETE) cualquier dato almacenado en la base de datos.

3.­ Lenguaje de control de datos (DCL).

DCL está compuesto por sentencias SQL para controlar las funciones de administración que realiza el
gestor de base de datos, tales como, COMMIT, ROLLBACK, GRANT y REVOKE.
SQL 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
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO

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

SELECT * FROM personas

Este será el resultado:

nombre apellido1 apellido2


======== ======== =======
ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO

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

SELECT nombre, apellido1 FROM personas

Esta será el resultado:

nombre apellido1
====== =======
ANTONIO PEREZ
LUIS LOPEZ
ANTONIO GARCIA
SQL 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
SQL 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
SQL 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
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO

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’ ORapellido1 = ‘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
SQL ORDERBY

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)
ORDERBY
FROM nombre_tabla
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 ORDERBY apellido1 ASC

Esta es la consulta resultante:

nombre apellido1 apellido2


======== ======== =======
LUIS LOPEZ PEREZ
ANTONIO GARCIA BENITO
ANTONIO PEREZ GOMEZ

Ejemplo de ordenación descendiente (DES)

SELECT nombre, apellido1 FROM personas ORDER BY apellido1 DESC

Esta es la consulta resultante:

nombre apellido1 apellido2


======== ======== =======
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA BENITO
LUIS LOPEZ PEREZ
SQL INSERT

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

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

INSERTINTO nombre_tabla
VALUES (valor1, valor2, valor3, …)

INSERTINTO nombre_tabla (columna1, columna2, columna3,…)


VALUES (valor1, valor2, valor3, …)

Ejemplo:

Dada la siguiente tabla personas:

En la 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:

INSERTINTO personas VALUES (‘PEDRO’, ‘RUIZ’, ‘GONZALEZ’)

INSERTINTO 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
SQL 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:

Tabla ‘personas’:
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í:

Tabla ‘personas’:
nombre apellido1 apellido2
======== ======== =======
ANTONIO PEREZ GOMEZ
LUIS LOPEZ PEREZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
SQL 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*
Ejemplo de FROM
SQL DELETE para borrar una fila de la tabla:
nombre_tabla;

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
SQLAVANZADO

SQL 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


SELECTTOP 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 WHEREROWNUM<= 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
SQL 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
SQL 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 [!lista] sustituye a cualquier carácter excepto los caracteres 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
======== ======== =======
PED​R​O RUIZ GONZALEZ

Seleccionar las personas cuyo apellido1 empiece por ‘GA’


SELECT * FROM personas WHERE apellido1 LIKE ‘PE_EZ’
Resultado:
nombre apellido1 apellido2
======== ======== =======
ANTONIO PE​R​EZ GOMEZ

Seleccionar las personas cuyo apellido1 empiece por P o G


SELECT * FROM personas WHERE apellido1 LIKE ‘[PG]%’
Resultado:
nombre apellido1 apellido2
======== ======== =======
ANTONIO P​EREZ GOMEZ
ANTONIO G​ARCIA RODRIGUEZ
SQL 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
SQL 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​ ‘HUERTAS’


‘FERNANDEZ’ ​AND​

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
SQL 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 ASp 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
SQL 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 “cppersona “


cppersona nombre apellido1 apellido2 cpdepartamento
======== ======== ======== ======= ===========
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 2

Tabla “departamentos”, con la clave primaria “cpdepartamento”


cpdepartamento 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
“cpdepartamento”.
Es decir, que desde la tabla “personas” y mediante la columna “cpdepartamento”, podemos acceder a la
información de la tabla “departamentos”.
SQL INNERJOIN

La sentencia INNERJOIN 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.

WHERE
SELECT * FROM
INNERJOIN tabla2tabla1 = tabla2.columna1
tabla1.columna1

Ejemplo SQL INNERJOIN

Tabla personas, con la clave primaria “cppersona “


cppersona nombre apellido1 apellido2 cpdepartamento
======== ======== ======== ======= ===========
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 2

Tabla “departamentos”, con la clave primaria “cpdepartamento”


cpdepartamento departamento
============ ====================
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

SELECT nombre, apellido1, departamento


FROM personas INNERJOIN departamentos
WHERE personas.cpdepartamento = departamentos.cpdepartamento

nombre apellido1 departamento


======== ======== ================
ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ INFORMATICA
SQL LEFTJOIN

La sentencia LEFTJOIN 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 SQL LEFTJOIN

Tabla personas, con la clave primaria “cppersona “


cppersona nombre apellido1 apellido2 cpdepartamento
======== ======== ======== ======= ===========
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4

Tabla “departamentos”, con la clave primaria “cpdepartamento”


cpdepartamento departamento
============ ====================
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

SELECT nombre, apellido1, departamento


FROM personas ​LEFTJOIN​ departamentos
WHERE personas.cpdepartamento = departamentos.cpdepartamento

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.
SQL 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 OUTERJOIN

SELECT * FROM tabla1


RIGHT JOIN
WHERE tabla2
tabla1.columna1 = tabla2.columna1

EJEMPLO SQL RIGHT JOIN

Tabla personas, con la clave primaria “cppersona “


cppersona nombre apellido1 apellido2 cpdepartamento
======== ======== ======== ======= ===========
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4

Tabla “departamentos”, con la clave primaria “cpdepartamento”


cpdepartamento departamento
============ ====================
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

SELECT nombre, apellido1, departamento


FROM personas ​RIGHTJOIN​ departamentos
WHERE personas.cpdepartamento = departamentos.cpdepartamento

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.
SQL 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 LEFTJOIN y RIGHTJOIN

SELECT * FROM tabla1


FULL JOIN tabla2
WHERE tabla1.columna1 = tabla2.columna1

EJEMPLO SQL FULL JOIN

Tabla personas, con la clave primaria “cppersona “


cppersona nombre apellido1 apellido2 cpdepartamento
======== ======== ======== ======= ===========
1 ANTONIO PEREZ GOMEZ 1
2 ANTONIO GARCIA RODRIGUEZ 2
3 PEDRO RUIZ GONZALEZ 4

Tabla “departamentos”, con la clave primaria “cpdepartamento”


cpdepartamento departamento
============ ====================
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

SELECT nombre, apellido1, departamento


FROM personas ​FULL JOIN​ departamentos
WHERE personas.cpdepartamento = departamentos.cpdepartamento

nombre apellido1 departamento


======== ======== ================
ANTONIO PEREZ ADMINISTRACION
ANTONIO GARCIA INFORMATICA
PEDRO RUIZ
COMERCIAL
SQLUNION

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 SQLUNION

UNION columna1, columna2 FROM tabla1


SELECT

SELECT columna1, columna2 FROM tabla2

Ejemplo SQLUNION

Tabla “personas_empresa1”

cppersona nombre apellido1 apellido2


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

Tabla “personas_empresa2”

cppersona 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 apellido2


======== ======== =======
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
JUAN APARICIO TENS
LUIS LOPEZ VAZQUEZ

La persona ‘ANTONIO GARCIA RODRIGUEZ’ aparecerá solo una vez en el resultado, porque no
aparecerán las filas repetidas.
SQLUNIONALL

La sentencia SQL UNIONALL es utilizada para acumular los resultados de dos sentencias SELECT,
incluso aparecerán las filas que estén repetidas en los resultados de ambas 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 SQLUNION

columna1, columna2 FROM tabla1


UNION ALL
SELECT

SELECT columna1, columna2 FROM tabla2

Ejemplo SQLUNIONALL

Tabla “personas_empresa1”

cppersona nombre apellido1 apellido2


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

Tabla “personas_empresa2”

cppersona nombre apellido1 apellido2


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

SELECT nombre, apellido1 FROM personas_empresa1


UNION ALL
SELECT nombre, apellido1 FROM personas_empresa2

nombre apellido1 apellido2


======== ======== =======
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
PEDRO RUIZ GONZALEZ
JUAN APARICIO TENS
ANTONIO GARCIA RODRIGUEZ
LUIS LOPEZ VAZQUEZ

La persona ‘ANTONIO GARCIA RODRIGUEZ’ aparecerá dos veces, porque está en los dos resultados
de las sentencias SELECT.
SQL SELECT INTO

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
INTO personas.nombre, personas.apellido1, departamentos.departamento
personasInformatica

FROM personas INNERJOIN departamentos


ON personas.cpdepartamento = ‘INFORMATICA’
SQL 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


SQL CREATETABLE

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

Sintaxis CREATE TABLE

CREATE TABLE nombretabla


{
nombrecolumna1 tipodato2,
nombrecolumna2 tipodato1,

nombrecolumna3 tipodato3,
….
}

Ejemplo CREATETABLE

CREATETABLE personas
{
nombre varchar(255),
apellido1 varchar(255),
apellido2 varchar(255),
cpdepartamento 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 ‘cpdepartamento’ 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.
SQL CONSTRAINTS (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 ALTERTABLE.

Las posibles restricciones son:


­ NOT NULL
­ UNIQUE
­ PRIMARY KEY
­ FOREIGN KEY
­ CHECK
­ DEFAULT
SQL 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

CREATETABLE 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’.
SQLUNIQUE

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

CREATETABLE personas
{
identificador int NOT NULL​UNIQUE​,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
}
SQLUNIQUE ALTERTABLE

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

Sintaxis de UNIQUE ALTERTABLE

ALTERTABLE 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


Para eliminar unaperonas
ALTERTABLE ADD
restricción enCONSTRAINT
la base de datos copersonas
MySQL UNIQUE (identificador, apellido1)

ALTERTABLE personas DROP INDEX copersonas

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


ALTERTABLE personas DROP CONSTRAINT copersonas
SQL PRIMARY KEY

La clave primaria, PRIMARY KEY, identifica de manera única cada fila de una tabla.
La columna definida como clave primaria (PRIMARYKEY) debe ser UNIQUE (valor único) y NOT
NULL (no puede contener valores nulos).
Cada tabla sólo puede tener una clave primaria (PRIMARYKEY).

Ejemplo PRIMARYKEY, clave primaria en MySQL

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

Ejemplo PRIMARYKEY, clave primaria en ORACLE, SQLSERVER, ACCESS

CREATETABLE 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í:

CREATETABLE personas
{
identificador int NOT NULL,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
CONSTRAINT cppersonas PRIMARY KEY​
(identificador, nombre)
}
La clave primaria también se puede definir después de haber creado la tabla, para eso utilizaremos el
comando ALTERTABLE

Ejemplo PRIMARYKEY con ALTERTABLE


ALTERTABLE personas
ADD PRIMARYKEY(identificador)

Ejemplo PRIMARYKEY multiple ALTERTABLE


ALTERTABLE personas
CONSTRAINT cppersonas PRIMARYKEY (identificador, nombre)
SQL 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 “cpdepartamento”


cpdepartamento departamento
============ ====================
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

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

cppersona nombre apellido1 apellido2 cpdepartamento


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

Definiciones de FOREIGN KEY en CREATETABLE para MySQL


CREATETABLE departamentos
{
cpdepartamento int NOT NULL,
departamento varchar(255),
PRIMARY KEY (cpdepartamento)
}
CREATE TABLE personas
{
cppersona int NOT NULL,
nombre varchar(255),
apellido1 varchar(255),
cpdepartamento int NOT NULL,
PRIMARYKEY (cppersona),
FOREIGN KEY​(cpdepartamento) REFERENCES departamentos(cpdepartamento)
}

Definiciones de FOREIGN KEY en CREATETABLE para ORACLE, ACCESS, SQLSERVER

CREATETABLE departamentos
{
cpdepartamento int NOT NULL PRIMARY KEY,
departamento varchar(255),
}
CREATETABLE personas
{
cppersona int NOT NULL PRIMARY KEY,
nombre varchar(255),
apellido1 varchar(255),
cpdepartamento int ​FOREIGN KEY ​REFERENCES departamentos (cpdepartamento)
}

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 (cpdepartamento, id)
REFERENCES departamentos(cpdepartamento,id).

Ejemplo FOREIGN KEY con ALTERTABLE


ALTERTABLE
ADD FOREIGN KEY (cpdepartamento)
REFERENCES departamentos(cpdepartamento)

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


ALTERTABLE
ADD CONSTRAINT fkpersonas
FOREIGN KEY (cpdepartamento)
REFERENCES departamentos(cpdepartamento)

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

Borrar FOREIGN KEY en MySQL


ALTERTABLE personas
DROP FOREIGN KEY cpdepartamento

Borrar FOREIGN KEY en ORACLE, SQLSERVER y ACCESS


ALTERTABLE personas
DROP CONSTRAINT cpdepartamento
SQL 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

CREATETABLE departamentos
{
cpdepartamento int NOT NULL,
departamento varchar(255),
CHECK (cpdepartamento>0)
}

Ejemplo CHECK en ORACLE, SQLSERVER y ACCESS:

CREATE TABLE departamentos


{
cpdepartamento int NOT NULL CHECK (cpdepartamento>0)
departamento varchar(255),
}

Ejemplo CHECK en ALTERTABLE en MySQL


ALTERTABLE departamentos
ADD CHECK (cpdepartamento>0)

Ejemplo CHECK (con múltiples columnas) en ALTERTABLE en MySQL


ALTERTABLE personas
ADD CHECK (cppersona>0, edad>35)

Ejemplo CHECK en ALTERTABLE en ORACLE, SQLSERVER y ACCESS


ALTERTABLE departamentos
ADD CONSTRAINT ckdepart CHECK (cpdepartamento>0)

Ejemplo CHECK en ALTERTABLE con varias columnas


ALTERTABLE personas
ADD CONSTRAINT ckpersona CHECK (cppersonas>0, nombre=’antonio’)
SQL 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 CREATETABLE

CREATETABLE 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 ALTERTABLE para MySQL

ALTERTABLE pedidos
ALTER fecha DEFAULT ‘2012­01­01’

SQL DEFAULT en la sentencia ALTERTABLE para ORACLE, SQLSERVER, ACCESS​:

ALTERTABLE pedidos
ALTER COLUMN fecha SET DEFAULT ‘2012­01­01’

Para borrar DEFAULT en MySQL

ALTERTABLE pedidos
ALTER fecha DROP DEFAULT

Para borrar DEFAULT en ORACLE, SQLSERVER, ACCESS​:

ALTERTABLE pedidos
ALTER COLUMN fecha DROP DEFAULT
SQL 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 CREATEUNIQUE INDEX

CREATEUNIQUE 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 ‘idpersona’ de la tabla ‘personas’

CREATE INDEXindicepersonas ON personas (idpersona)

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

CREATE INDEXindice2personas ON personas(apellido1, apellido2)


SQL DROP

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

DROP INDEX

Sintaxis DROP INDEX para MySQL


ALTERTABLE 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 DROPTABLE para borrar definitivamente una tabla

DROPTABLE nombretabla

DROP DATABASE

Se utiliza para borrar una base de datos definitivamente.

DROP DATABASE nombrebasededatos


SQL 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


SQL 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


ALTERTABLE nombretabla ADD nombrecolumna tipodatocolumna

Para borrar una columna de una tabla


ALTERTABLE nombretabla DROP COLUMN nombrecolumna

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


ALTERTABLE nombretabla ALTER COLUMN nombrecolumna tipodatocolumna

Ejemplos de SQL ALTER

cppersona 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 con la fechadenacimiento

ALTERTABLE personas ADD fecha date

cppersona 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’

ALTERTABLE personas ALTER COLUMN fecha year

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

ALTERTABLE personas DROP COLUMNfechadenacimiento

cppersona nombre apellido1 apellido2


======== ======== ======== =======
1 ANTONIO PEREZ GOMEZ
2 ANTONIO GARCIA RODRIGUEZ
3 PEDRO RUIZ GONZALEZ
SQL 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

CREATETABLE personas
{
idpersona 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


ALTERTABLE 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


CREATESEQUENCE idpersona
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
SQL VIEWS

Una vista es una tabla virtual.

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

CREATEVIEW 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 CREATEVIEW

En la tabla personas
nombre apellido1 apellido2 edad
======== ======== ======= ===
ANTONIO PEREZ GOMEZ 30
LUIS LOPEZ PEREZ 45
ANTONIO GARCIA BENITO 50

Creamos una vista con las personas que se llaman ANTONIO


CREATEVIEW [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 BENITO 50

SQL REPLACEVIEW

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
DROPVIEW nombrevista

Ejemplo borrado de la vista antes creada:


DROPVIEW [personas que se llama ANTONIO]
SQL 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


DATE Formato YYYY­MM­DD Ejemplo: 2008­11­11
DATETIME Formato YYYY­MM­DD HH:MM:SS Ejemplo: 2008­11­11 13:23:44
TIMESTAMP Formato YYYY­MM­DD HH:MM:SS
YEAR Formato 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

CREATETABLE pedidos
(
idpedido int NOT NULL,
nombreproducto varchar(50) NOT NULL,
fechapedido NOT NULL
​datetime​
PRIMARYKEY (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’.
SQL 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
SQL 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
SQL Tipos de datos de texto en MySQL
Tipos de datos y rango de datos para los distintos sistemas de bases de datos.
MySQL
Tipos de datos en MySQL
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​: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​: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​:Sirve para almacenar una cadena de caracteres de longitud máxima de 65,535 caracteres.
BLOB​:Sirve para almacenar datos de tipo BLOB (Binary Large Object). Admite una longitud máxima
de 65,535 bytes de datos.
MEDIUMTEXT​:Sirve para almacenar una cadena con una longitud máxima de 16.777.215 caracteres
MEDIUMBLOB​:Sirve para almacenar datos tipo BLOB con longitud máxima 16.777.215 bytes
LONGTEXT​:Para almacenar una cadena de longitud máxima de 4.294.967.295 caracteres
LONGBLOB​:Para almacenar un BLOB de longitud máxima de de 4.294.967.295 bytes
ENUM​:Permite 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​: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’.
SQL Tipos de datos de numéricos en MySQL
MySQL admite los siguientes tipos de datos numéricos para sus columnas:
TINYINT​ (tamaño) : 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​ (tamaño): 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​ (tamaño): 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​ (tamaño): 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​ (tamaño): 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​ (tamaño, decimal): Para 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​ (tamaño, decimal): Para 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​ (tamaño, decimal): Para 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.
SQL Tipos de datos fecha en MySQL
En MySQL pueden existir los siguientestipos de datos para fechas:
DATE: 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: Para almacenar fecha y hora, con el formato YYYY-MM-DD HH:MM:SS
TIMESTAMP.: Es equivalente al tipo anterior, DATETIME, YYYY-MM-DD HH:MM:SS
TIME : Para almacenar la hora con el formato HIH:MM:SS

YEAR : Para almacenar el año con el formato YYYY

Вам также может понравиться