Sunteți pe pagina 1din 44

SQL Introduccin

El SQL es un lenguaje estndar de programacin 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.
El SQL es un lenguaje estructurado y un estndar ANSI para el acceso y manipulacin de los datos de
cualquier base de datos.
El SQL se compone de sentencias SQL, cada una con una utilidad diferente, como por ejemplo:
Creacin de una base de datos (CREATE DATABASE)
Creacin de una tabla (CREATE TABLE)
Creacin de una vista (CREATE VIEW)
Creacin de un ndice de una tabla (CREATE INDEX)
Creacin de procedimientos almacenados (CREATE PROCEDURE)
Creacin de disparadores (CREATE TRIGGER)
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 transaccin de una sentencia SQL (COMMIT)
Retroceder la transaccin 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 maysculas y minsculas, es decir, SELECT y select son dos palabras
iguales para SQL.
Algunos sistemas de bases de datos necesitan un punto y coma despus de cada sentencia SQL para
ejecutarse correctamente
CREATE DATATABASE mibasedeatos;
Este punto y coma tambin puede servir para separar una sentencia SQL de otra sentencia SQL en la
misma lnea.
CREATE DATATABASE mibasedeatos; CREATE TABLE mitabla1;
Las sentencias SQL se pueden agrupar por funcionalidades:
1.- Lenguaje de definicin de datos (DDL).
DDL est compuesto por sentencias para la creacin (CREATE), modificacin (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 manipulacin de datos (DML).
DML est compuesto por sentencias que sirven para :
consultar (SELECT)
insertar (INSERT)
modificar (UPDATE)
borrar (DELETE)
3.- Lenguaje de control de datos (DCL).
DCL est compuesto por sentencias SQL para controlar las funciones de administracin :
Confirmar la operacion (COMMIT)
Retroceder la operacion (ROLLBACK)
Dar permisos (GRANT)
Quitar permisos (REVOKE)

SQL Select
Una de las sentencias SQL ms 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
Esta ser el resultado:
<
nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ

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 clusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar solamente algunas filas
de la tabla que cumplan una determinada condicin.
El valor de la condicin 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
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.
Condicin1 AND condicin2
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
Tambin 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
SQL ORDER BY
ORDER BY se utiliza para ordenar los resultados de una consulta, segn el valor de la columna especificada.
Por defecto, se ordena de forma ascendente (ASC) segn 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 ordenacin descendiente (DES)
SELECT nombre, apellido1
FROM personas
ORDER BY apellido1 DESC
Esta es la consulta resultante:
nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LO
SQL 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
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 clusula SET establece los nuevos valores para las columnas indicadas.
La clusula WHERE sirve para seleccionar las filas que queremos modificar.
Ojo: Si omitimos la clusula 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
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 * 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
SQL TOP
La sentencia SQL TOP se utiliza para especificar el nmero de filas a mostrar en el resultado.
Esta clusula SQL TOP es til en tablas con muchos registros, para limitar el nmero de filas a mostrar en la
consulta, y as sea ms rpida la consulta, consumiendo tambin menos recursos en el sistema.
Esta clusula se especifica de forma diferente segn el sistema de bases de datos utilizado.
Clusula SQL TOP para SQL SERVER
SELECT TOP nmero
PERCENT nombre_columna
FROM nombre_tabla
Clusula SQL TOP para MySQL
SELECT columna(s) FROM tabla
LIMIT nmerofilas
Clusula SQL TOP para ORACLE
SELECT columna(s) FROM tabla
WHERE ROWNUM <= nmerofilas
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
Obtendramos el siguiente resultado:
nombre apellido1 apellido2
ANTONIO PEREZ GOMEZ
ANTONIO GARCIA RODRIGUEZ
SQL LITE
El operador LIKE se utiliza en la clusula WHERE para buscar por un patrn.
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, ejecutara el comando
siguiente:
SELECT * FROM personas
WHERE nombre LIKE AN%
El character % es un comodn, que sirve para uno o ms 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, ejecutaramos:
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 bsquedas
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 ms caracteres
_ sustituye a 1 carcter cualquiera
[lista] sustituye a cualquier carcter de la lista
[^lista] o [!lista] sustituye a cualquier carcter 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
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
SQL IN
El operador IN permite seleccionar mltiples valores en una clusula 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 clusula 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
SQL ALIAS
Un alias, es otra forma de llamar a una tabla o a una columna, y se utiliza para simpl ificar 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 quedara un poco ms 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 ms tablas.
Dichas tablas estarn relacionadas entre ellas de alguna forma, a travs 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 propsito del JOIN es unir informacin 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, tendramos que hacer un
JOIN de las 2 tablas personas y departamentos, que se relacionaran por la columna dep.
Es decir, que desde la tabla personas y mediante la columna dep, podemos acceder a la informacin
de la tabla departamentos.
SQL 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 condicin.
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
SQL 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 condicin.
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.
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 condicin.
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 COMERCI AL (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 condicin.
La sentencia FULL JOIN es la unin de LEFT JOIN y RIGHT JOIN
SELECT * FROM tabla1 FULL JOIN t
abla2 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
SQL UNION
La sentencia SQL UNION es utilizada para acumular los resultados de dos sentencias SELECT.
Las dos sentencias SELECT tienen que tener el mismo nmero 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 aparecern
las filas repetidas.
SQL UNION ALL
La sentencia SQL UNION ALL es utilizada para acumular los resultados de dos sentencias SELECT, incluso
aparecern las filas que estn repetidas en los resultados de ambas SELECT.
Las dos sentencias SELECT tienen que tener el mismo nmero de columnas, con el mismo tipo de dato y en
el mismo orden.
Sintaxis SQL UNION
SELECT columna1, columna2 FROM tabla1
UNION ALL
SELECT columna1, columna2 FROM tabla2
Ejemplo SQL UNION ALL
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 ALL
SELECT nombre, apellido1 FROM personas_empresa2
nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
PEDRO RUIZ
JUAN APARICIO
ANTONIO GARCIA
LUIS LOPEZ
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
Tambin se pueden seleccionar slo algunas columnas
SELECT columna1, columna2
INTO personasBackup
FROM personas
Tambin se puede incluir una condicin (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
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 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
alfanumricos hasta una longitud mxima de 255 caracteres.
La columna dep es de tipo int, es decir, acepta slo nmeros.
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 RESTRICCIONES (CONSTRAINTS)
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
SQL NOT NULL
La restriccin NOT NULL sirve para especificar que una columna no acepta el valor NULL, es decir, que esa
columna siempre tiene que tener algn valor, no puede estar vaca.
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 algn valor para las columnas nombre y apellido1.
SQL UNIQUE
La restriccin 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 segn 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), }
SQL UNIQUE ALTER TABLE
La restriccin UNIQUE se puede aadir a una columna de una tabla, despus de ser creada, mediante la
sentencia ALTER TABLE.
Sintaxis de UNIQUE ALTER TABLE
ALTER TABLE personas
ADD UNIQUE (identificador)
Crea una restriccin UNIQUE (valor nico en toda la tabla) para la columna identificador.
Se puede crear tambin restricciones para varias columnas a la vez
ALTER TABLE peronas
ADD CONSTRAINT copersonas
UNIQUE (identificador, apellido1)
Para eliminar una restriccin en la base de datos MySQL
ALTER TABLE personas
DROP INDEX copersonas
Para eliminar una restriccin en ORACLE, SQLSERVER y ACCESS
ALTER TABLE 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 (PRIMARY KEY) debe ser UNIQUE (valor nico) y NOT NULL (no
puede contener valores nulos).
Cada tabla slo 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 tambin se puede definir despus 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)
SQL FOREIGN KEY
La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para sealar cual es la
clave primaria de otra tabla.
La columna o columnas sealadas como FOREIGN KEY, solo podrn 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 fornea (FOREIGN KEY) est compuesta por varias columnas o queremos ponerle un
nombre, utilizaremos la frmula 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 mltiple (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 vara segn 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
SQL CHECK
La restriccin 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 mltiples 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)
SQL DEFAULT
La restriccin 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 funcin, 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
SQL CREATE INDEX
CREATE INDEX se utiliza para crear ndices en una tabla.
Un ndice sirve para buscar datos rpidamente, 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 bsqueda as es mucho ms ptima en recursos y ms rpida en tiempo.
Si esa columna de bsqueda no fuese ndice, entonces tendramos que recorrer de forma secuencial la
tabla en busca de algn dato. Por eso, es importante crear un ndice por cada tipo de bsqueda que
queramos hacer en la tabla.
Actualizar una tabla con ndices tarda ms tiempo porque tambin 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)
SQL 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
SQL TRUNCATE
Este comando SQL TRUNCATE se utiliza para eliminar o borrar los datos que contiene una tabla.
Es til cuando slo se quiere borrar los datos, pero no se quiere borrar la tabla.
Este comando deja vaca una tabla, es decir, sin datos.
TRUNCATE TABLE nombretabla
SQL ALTER
La sentencia SQL ALTER se utiliza para aadir, eliminar o modificar columnas de una tabla.
Sintaxis SQL ALTER
Para aadir 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 aadir 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
SQL AUTO INCREMENT
AUTO INCREMENT permite generar un nmero nico cuando insertamos un nuevo registro en la tabla.
Se utiliza para tener una clave primaria de una tabla mediante la generacin automtica de un nmero
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
SQL VIEWS
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 condicin
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]
SQL DATE
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 HH:MM:SS 2008-11-11 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 expresin fecha/hora
EXTRACT Muestra una parte de una expresin 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 nmero de das 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 automticamente.
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.
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
ningn 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 aritmticos
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) segn 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 el sistema de gestin 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, nmeros y caracteres especiales.
La longitud fija se define entre parntesis, 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 mxima que podemos definir un campo CHAR es de 255.


VARCHAR
El tipo de datos VARCHAR sirve para almacenar una cadena de datos (caracteres, nmeros y caracteres
especiales) de longitud variable.
La longitud mxima es de 255 caracteres.
Hace un buen uso del espacio en disco, porque no reserva el espacio de la longitud mxima definida, si no
que solo ocupa espacio el tamao real de los datos almacenados en ese campo.
Es el tipo de dato ms utilizado para campos pequeos.


TINYTEXT
El tipo de datos TINYTEXT sirve para almacenar una cadena de datos (solo caracteres, no admite nmero
ni caracteres especiales) de una longitud mxima de 255 caracteres.


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


BLOB
El tipo de datos BLOB sirve para almacenar datos de tipo BLOB (Binary Large Object).
Admite una longitud mxima de 65,535 bytes de datos.


MEDIUMTEXT
El tipo de dato MEDIUMTEXT sirve para almacenar una cadena con una longitud mxima de 16.777.215
caracteres.


MEDIUMBLOB
El tipo de datos MEDIUMBLOB Sirve para almacenar datos tipo BLOB con longitud mxima 16.777.215 bytes.


LONGTEXT
El tipo de dato LONGTEXT sirve para almacenar una cadena de longitud mxima de 4.294.967.295
caracteres.


LONGBLOB
El tipo de dato LONGBLOB sirve para almacenar un BLOB de longitud mxima de de 4.294.967.295 bytes.


ENUM
El tipo de dato ENUM sirve para introducir una lista de posibles valores.
La longitud mxima 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 vaco ().
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 vaco, sin valor ().


SET
El tipo de dato SET es similar a ENUM pero la longitud mxima 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 numricos en MySQL
Tipos de datos numricos para el sistema de gestin de bases de datos MySQL
MySQL admite los siguientes tipos de datos numricos para sus columnas
TINYINT
El tipo de dato numrico TINYINT permite nmeros desde -128 hasta 127.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta
255.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis (tamao).


SMALLINT
El tipo de dato numrico SMALLINT permite nmeros desde -32768 hasta 32767.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta
65535.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis


MEDIUMINT
El tipo de dato numrico MEDIUMINT permite nmeros desde -8388608 hasta 8388607.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta
16777215.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis


INT
El tipo de dato numrico INT permite nmeros desde -2147483648 hasta 2147483647.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta
4294967295.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis


BIGINT
El tipo de dato numrico BIGINT permite nmeros desde -9223372036854775808 hasta
9223372036854775807.
Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta
18446744073709551615.
Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis


FLOAT
El tipo de dato numrico FLOAT permite almacenar pequeos nmeros decimales (de punto flotante).
Al ser de punto flotante, sus clculos son aproximados. Podemos especificar el nmero mximo de dgitos
(tamao) y el nmero de decimales (decimal).
FLOAT(6,2) tendr 4 dgitos enteros y 2 decimales, por ejemplo, 5467.67


DOUBLE
El tipo de dato numrico DOUBLE permite almacenar grandes nmeros decimales (de punto flotante).
Al ser de punto flotante, sus clculos son aproximados. Podemos especificar el nmero mximo de dgitos
(tamao) y el nmero de decimales (decimal).
DOUBLE(5,1) tendr 4 dgitos enteros y 1 dgito decimal, por ejemplo, 5467.1


DECIMAL
El tipo de dato numric DECIMAL permite almacenar grandes nmeros decimales de punto fijo, por tanto,
los clculos con este tipo DECIMAL son exactos.
Podemos especificar el nmero mximo de dgitos (tamao) y el nmero de decimales (decimal). El
nmero mximo de dgitos es de 65.
Por ejemplo DECIMAL(20,6) quiere decir que tendr 14 dgitos enteros y 4 dgitos decimales.
SQL Tipos de datos fecha en 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 dgitos para el ao,
guin, 2 dgitos para el mes, guin, 2 dgitos para el da).


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 ao con el formato YYYY
Funciones SQL
SQL tiene funciones predefinidas para realizar ciertos clculos con un mayor rendimiento.


AVG Devuelve el valor medio de una columna.
COUNT Devuelve el nmero de filas de la consulta.
FIRST Devuelve el primer valor de la consulta.
LAST Devuelve el ltimo valor de la consulta.
MAX Devuelve el mayor valor de una columna.
MIN Devuelve el menor valor de una columna.
SUM Devuelve la suma de los valores de una columna.
GROUP BY Agrupar filas con el mismo valor de una columna.
HAVING Incluir condiciones con funciones SQL.
UCASE Convierte un valor a maysculas.
LCASE Convierte un valor a minsculas.
MID Extrae caracteres de un campo de texto.
LEN Devuelve la longitud de un campo de texto.
ROUND Redondea un campo numrico a un nmero de decimales especificado.
NOW Devuelve la fecha y hora actuales del sistema.
FORMAT Formatea un campo segn se quiera mostrar.
Funcin SQL AVG
La funcin AVG devuelve el valor medio de una columna de tipo numrico.
Sintaxis SQL AVG:
SELECT AVG(columna) FROM tabla
Ejemplo SQL AVG:
Tabla pedidos
id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60
Si quieres saber el valor medio del campo precio, usa la siguiente funcin SQL
SELECT AVG(precio)
AS preciomedio
FROM pedidos
La tabla resultante sera
Preciomedio
240
Si quieres seleccionar los clientes con el precio del pedido superior al precio medio de los pedidos.
SELECT * FROM pedidos
WHERE precio > (SELECT AVG(precio) FROM pedidos)
id pedido Cliente precio
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
Funcin SQL COUNT
La funcin COUNT devuelve el nmero de filas de la consulta, es decir, el nmero de registros que cumplen
una determinada condicin.
Los valores nulos no sern contabilizados.
Sintaxis de SQL COUNT:
SELECT COUNT(columna) FROM tabla
Para obtener el nmero de filas de una tabla
SELECT COUNT(*) FROM tabla
Para obtener el nmero de valores distintos de la columna especificada.
SELECT COUNT(DISTINCT columna) FROM tabla.
Ejemplos de SQL COUNT:
Dada la siguiente tabla pedidos
id pedido Cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60
SELECT COUNT(*) FROM pedidos
Devolver el nmero de filas de la tabla, es decir, 5
SELECT COUNT(*) FROM pedidos
WHERE cliente = RUIZ
Devolver el nmero de filas del resultado de la consulta, es decir, 1
SELECT COUNT(*) FROM pedidos
WHERE precio > 270
Devolver el nmero de filas del resultado de la consulta, es decir, 2
Funcin SQL FIRST
La funcin SQL FIRST devuelve el primer valor de la columna seleccionada.
Sintaxis SQL FIRST:
SELECT FIRST(columna) FROM table
Ejemplo SQL FIRST:
Dada la siguiente tabla pedidos
id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60
SELECT FIRST(precio) FROM pedidos
Devolver el valor 100, que es el valor de la columan precio de la primera fila de la tabla.
Funcin SQL LAST
La funcin SQL LAST sirve para obtener el valor de una columna de la ltima fila de la seleccin.
Sintaxis SQL LAST:
SELECT LAST(columna) FROM table
Ejemplo SQL LAST:
Dada la siguiente tabla pedidos
id Pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60
SELECT LAST(precio) FROM pedidos
Devolver el valor 60, que es el valor de la columna precio de la ltima fila de la tabla.
Funcin SQL MAX
La funcin MAX sirve para obtener el mayor valor para una columna determinada.
Sintaxis SQL MAX:
SELECT MAX(columna) FROM tabla
Ejemplo SQL MAX:
Dada la siguiente tabla pedidos
id Pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60
SELECT MAX(precio) FROM pedidos
Devolver el valor 490, que es mximo valor de la columna precio de la consulta.
Funcin SQL MIN
La funcin MIN sirve para obtener el valor ms pequeo para una columna determinada.
Sintaxis SQL MIN:
SELECT MIN(columna) FROM tabla
Ejemplo SQL MIN:
Dada la siguiente tabla pedidos
id pedido Cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60
SELECT MIN(precio) FROM pedidos
Devolver el valor 60, que es valor ms pequeo de la columna precio de la consulta.
Funcin SQL SUM
La funcin SUM permite obtener la suma total de los valores de una columna de tipo numrico.
Sintaxis SQL SUM
SELECT SUM(columna) FROM tabla
Dada la siguiente tabla pedidos
id pedido Cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RODRIGUEZ 490
5 p5 LOPEZ 60
SELECT SUM(precio) FROM pedidos
Devolver el valor 1200, que es la suma de todos los valores de la columna precio de la consulta
realizada, en este caso, de toda la tabla.
FUNCION SQL GROUP BY
La funcin GROUP BY se utiliza para juntar filas de resultados que coincidan en el valor de alguna columna
seleccionada.
Sintaxis GROUP BY
SELECT columna, funcion(columna)
FROM tabla
GROUP BY columna
Ejemplo de uso de GROUP BY
Dada la siguiente tabla pedidos
id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RUIZ 490
5 p5 GOMEZ 60
SELECT cliente, SUM(precio)
FROM pedidos
GROUP BY cliente
El resultado ser el siguiente:
cliente SUM(precio)
RUIZ 590
PEREZ 300
GOMEZ 310
El cliente RUIZ se repite 2 veces, se suman sus valores para la columna precio 490 + 100 = 590
El cliente PEREZ se queda igual, con el valor para precio de 300.
El cliente GOMEZ se repite 2 veces, y se suman sus valores para la columna precio 250 + 60 = 310
Nota: Se puede agrupar tambin por varias columnas.
GROUP BY columna1, columna2
FUNCION SQL HAVING
La funcin HAVING se utiliza para incluir condiciones con alguna funcin SQL del tipo SUM, MAX, ..
Como la clusula WHERE no se puede utilizar con funciones SQL del tipo SUM, MAX, entonces utilizamos en
su lugar, HAVING.
Sintaxis HAVING
SELECT columna1, SUM(columna2)
FROM tabla
GROUP BY columna1
HAVING SUM(columna2) < nmero
Ejemplo de SQL HAVING
Dada la siguiente tabla pedidos
id pedido cliente precio
1 p1 RUIZ 100
2 p2 PEREZ 300
3 p3 GOMEZ 250
4 p4 RUIZ 490
5 p5 GOMEZ 60
SELECT cliente, SUM(precio)
FROM pedidos
GROUP BY cliente
HAVING SUM(precio) > 500
El resultado sera:
cliente SUM(precio)
RUIZ 590
Solamente el cliente RUIZ suma en sus valores para precio 490 + 100 = 590 un valor superior a 500
El cliente GOMEZ suma en sus valores para la columna precio 250 + 60 = 310, que tambin es menor de
500, y por tanto, no aparece en la tabla resultante.
El cliente PEREZ obtiene un valor de 300, y tampoco aparece en la tabla, porque es menor de 500.
Funcin SQL UCASE
La funcin UCASE sirve para convertir a maysculas el valor de una columna.
Sintaxis SQL UCASE
SELECT UCASE(columna)
FROM tabla
Ejemplo SQL UCASE:
Dada la siguiente tabla pedidos
id pedido cliente precio
1 p1 Ruiz 100
2 p2 Perez 300
3 p3 Gomez 250
SELECT UCASE(cliente)
FROM pedidos
El resultado sera:

Cliente
RUIZ
PEREZ
GOMEZ
Funcin SQL LCASE
La funcin LCASE sirve para convertir a minsculas el valor de una columna.
Sintaxis SQL LCASE
SELECT LCASE (columna) FROM tabla
Ejemplo SQL LCASE:
Dada la siguiente tabla pedidos
id pedido cliente Precio
1 p1 Ruiz 100
2 p2 Perez 300
3 p3 Gomez 250
SELECT LCASE (cliente) FROM pedidos
El resultado sera:
Cliente
Ruiz
Perez
Gomez
Funcin SQL MID
La funcin MID se utiliza para extraer caracteres de un campo de texto
Sintaxis SQL MID
SELECT MID(columna, inicio, longitud)
FROM tabla
columna es la columna donde se quiere extraer datos de su valor.
inicio es la posicin desde la que empezar a extraer.
longitud es el nmero de caracteres a extraer. En caso de no especificarlo, coger hasta el final del
campo de texto.
Ejemplo de SQL MID:
Dada la siguiente tabla pedidos
id pedido cliente Precio
1 p1 Ruiz 100
2 p2 Perez 300
3 p3 Gomez 250
Si queremos extraer los primeros 3 caracteres de los valores de la columna cliente:
SELECT MID(cliente,1,3) FROM pedidos
El resultados ser:
Cliente
Rui
Per
Gom
Funcin SQL LEN
La funcin LEN sirve para calcular la longitud del valor de un campo de texto.
Sintaxis SQL LEN
SELECT LEN(columna) FROM tabla
Ejemplo SQL LEN
Dada la siguiente tabla pedidos
id pedido cliente precio
1 p1 Ruiz 100
2 p2 Perez 300
3 p3 Rodriguez 250
Si queremos saber la longitud de cada valor de la columna cliente:
SELECT LEN(cliente) AS cliente FROM pedidos
Cliente
4
5
9
Funcin SQL ROUND
La funcin ROUND se utiliza para redondear un campo numrico en un nmero de decimales
especificado.
Sintaxis SQL ROUND
SELECT ROUND(columna, decimales) FROM tabla
Ejemplo SQL ROUND
Dada la siguiente tabla pedidos
id pedido Cliente precio
1 p1 Ruiz 100.25
2 p2 Perez 305.57
3 p3 Rodriguez 250.84
Si queremos los precios de los pedidos sin nmeros decimales, ejecutaremos:
SELECT ROUND(precio,0) AS rprecio
FROM pedidos
El resultado sera:
rprecio
100
306
251
Funcin SQL NOW
La funcin NOW devuelve la fecha y hora actuales.
Sintaxis SQL NOW
SELECT NOW() FROM table
Ejemplo SQL NOW
Dada la siguiente tabla productos
id producto precio
1 ordenador 1200.25
2 impresora 65.57
3 teclado 10.84
Si queremos saber los precios de los productos a fecha de hoy
SELECT producto, precio, NOW() AS fecha
FROM productos
El resultado ser:
producto precio Fecha
ordenador 900.25 10/2/2012 10:15:42 AM
impresora 65.57 10/2/2012 10:15:42 AM
teclado 10.84 10/2/2012 10:15:42 AM
Funcin SQL FORMAT
La funcin FORMAT se utiliza para especificar como se mostrar un campo en el resultado de la consulta.
Sintaxis SQL FORMAT
SELECT FORMAT(columna, formato) FROM tabla
Ejemplo SQL FORMAT
Dada la siguiente tabla productos

id Producto Precio
1 ordenador 1200.25
2 Impresora 65.57
3 Teclado 10.84
Si queremos saber los precios de los productos a fecha de hoy, pero queremos que la fecha tenga el
formato YYYY-MM-DD, es decir, 4 caracteres para el ao, guin, 2 caracteres para el mes, guin y 2
caracteres para el da.
SELECT producto, precio,
FORMAT(NOW(), YYYY-MM-DD)
AS fecha
FROM productos
El resultado ser:
Producto precio fecha
Ordenador 900.25 2012-02-10
Impresora 65.57 2012-02-10
Teclado 10.84 2012-02-10