Está en la página 1de 88

Material SQL 2008

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

Este tutorial se divide en las siguientes partes:

SQL Bsico: Las instrucciones SQL bsicas para la consulta


de datos de cualquier base de datos relacional.
SQL Avanzado: Las instrucciones SQL avanzadas para un
control completo sobre cualquier base de datos relacional.
Funciones SQL: SQL tiene multiples funciones predefinidas
para realizar ciertos clculos sobre los datos.
Comandos SQL: Listado de todos los comandos SQL
disponibles en este curso, para una referencia rpida de
los mismos.

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).

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 1


Material SQL 2008

SQL Bsico
Estas son las instrucciones SQL bsicas para el acceso a
cualquier base de datos relacional.

SQL SELECT: SELECT se utiliza para consultar datos.


SQL DISTINCT: DISTINCT sirve para eliminar los duplicados
de las consultas de datos.
SQL WHERE: WHERE se utiliza incluir las condiciones de los
datos que queremos consultar.
AND OR: AND y OR se utilizan para incluir 2 o ms
condiciones a una consulta.
SQL ORDER BY: ORDER BY se utiliza para ordenar los
resultados de una consulta.
SQL INSERT: INSERT se utiliza para insertar datos.
SQL UPDATE: UPDATE se utiliza actualizar o modificar datos
ya existentes.
SQL DELETE: DELETE se utiliza borrar datos.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 2


Material SQL 2008

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).

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 3


Material SQL 2008

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)

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 4


Material SQL 2008

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)

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 5


Material SQL 2008

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

Este ser el resultado:

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 6


Material SQL 2008

nombre apellido1

ANTONIO PEREZ

ANTONIO GARCIA

LUIS LOPEZ

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 7


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 8


Material SQL 2008

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 BENITO

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 9


Material SQL 2008

AND y 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:

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 10


Material SQL 2008

SELECT * FROM personas


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

nombre apellido1 apellido2

ANTONIO GARCIA BENITO

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 11


Material SQL 2008

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:

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 12


Material SQL 2008

nombre apellido1

ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 13


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 14


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 15


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 16


Material SQL 2008

SQL Avanzado
Estas son las instrucciones SQL bsicas para el acceso a
cualquier base de datos relacional.

SQL TOP: TOP se utiliza para especificar el nmero de


filas a mostrar en el resultado.
SQL LITE: LIKE se utiliza en la clusula WHERE para buscar
por un patrn.
SQL WILDCARDS: Wildcards (comodines) son caracteres
especiales que se utilizan para realizar bsquedas
especiales.
SQL IN: IN permite seleccionar mltiples valores en una
clusula WHERE.
SQL BETWEEN: BETWEEN se utiliza en la clusula WHERE para
seleccionar valores entre un rango de datos.
SQL ALIAS: ALIAS se utiliza para renombrar una tabla o una
columna
SQL JOINS: JOIN permite consultar datos de 2 o ms tablas.
SQL INNER JOIN:INNER JOIN sirve para combinar cada fila de
una tabla con cada fila de otra tabla.
SQL LEFT JOIN: LEFT JOIN sirve para combinar los valores
de la primera tabla con los valores de la segunda tabla.
Siempre devolver las filas de la primera tabla.
SQL RIGHT JOIN: RIGHT JOIN sirve para combinar los valores
de la primera tabla con los valores de la segunda tabla.
Siempre devolver las filas de la segunda tabla.
SQL FULL JOIN: FULL JOIN sirve para combinar los valores
de la primera tabla con los valores de la segunda tabla.
Siempre devolver las filas de las dos tablas.
SQL UNION: UNION es utilizada para acumular los resultados
de dos sentencias SELECT.
SQL UNION ALL: SQL UNION ALL es utilizada para acumular
los resultados de dos sentencias SELECT, incluso
aparecern las filas que estn repetidas.
SQL SELECT INTO: SELECT INTO se utiliza para copiar datos
de una tabla en otra tabla diferente.
SQL CREATE DATABASE: CREATE DATABASE se utiliza para crear
bases de datos.
SQL RESTRICCIONES: RESTRICCIONES se utilizan para limitar
el tipo de dato de una columna.
SQL NOT NULL: NOT NULL se utiliza para especificar que una
columna no acepta el valor NULL.
SQL UNIQUE: UNIQUE sirve para identificar de manera nica
a cada fila de una tabla
SQL UNIQUE ALTER TABLE: UNIQUE ALTER TABLE permite aadir
UNIQUE a una columna de una tabla, despus de ser creada.
SQL PRIMARY KEY: PRIMARY KEY se utiliza para identificar
de manera nica cada fila de una tabla.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 17


Material SQL 2008

SQL FOREIGN KEY: FOREIGN KEY se utiliza para identificar


una columna que es PRIMARY KEY en otra tabla.
SQL CHECK: CHECK para limitar el rango de valores de una
columna.
SQL DEFAULT: DEFAULT valor por defecto para una columna
SQL CREATE INDEX: CREATE INDEX para crear un ndice en una
tabla.
SQL DROP: DROP sirve para borrar cualquier elemento
(ndice, tabla o base de datos).
SQL TRUNCATE: TRUNCATE sirve para borrar los datos (no la
estructura) de una tabla
SQL ALTER: ALTER se utiliza para modificar la definicin
de alguna columna de una tabla.
SQL AUTO INCREMENT: AUTO INCREMENT genera numero
autoincremental para alguna columna de una tabla.
SQL VIEWS: VIEWS sirve para crear una tabla virtual (no
una tabla real) con los resultados de una consulta.
SQL DATES: DATE define diferentes tipos de datos para
fechas y horas.
SQL VALORES NULL: NULL representa a un valor indefinido.
SQL FUNCIONES NULL: FUNCIONES NULL sirven para utilizar
los valores NULL.
SQL DATOS TEXTO MySQL: DATOS TEXTO MySQL define los
diferentes formatos de campos de texto para MySQL.
SQL NUMERICOS MySQL: DATOS NUMERICOS MySQL define los
diferentes formatos de campos numricos para MySQL.
SQL DATOS FECHA MySQL: DATOS FECHA MySQL define los
diferentes formatos de campos de fecha para MySQL.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 18


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 19


Material SQL 2008

Obtendramos el siguiente resultado:

nombre apellido1 apellido2

ANTONIO PEREZ GOMEZ

ANTONIO GARCIA RODRIGUEZ

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 20


Material SQL 2008

SQL LIKE

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 21


Material SQL 2008

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 sustituye a cualquier carcter excepto los
[!lista] 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:

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 22


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 23


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 24


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 25


Material SQL 2008

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 largas o complicadas.

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:

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 26


Material SQL 2008

SELECT personas.apellido1, personas.apellido2


FROM personas
WHERE personas.nombre = 'ANTONIO'

apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 27


Material SQL 2008

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".

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 28


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 29


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 30


Material SQL 2008

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 'COMERCIAL'


(3), esta fila aparecer con las otras columnas en blanco

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 31


Material SQL 2008

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 tabla2 WHERE tabla1.columna1 =


tabla2.columna1

EJEMPLO SQL FULL JOIN

per nombre apellido1 apellido2 dep


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

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

dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL

SELECT nombre, apellido1, departamento


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

nombre apellido1 departamento

ANTONIO PEREZ ADMINISTRACION

ANTONIO GARCIA INFORMATICA

PEDRO RUIZ COMERCIAL

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 32


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 33


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 34


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 35


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 36


Material SQL 2008

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'

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 37


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 38


Material SQL 2008

SQL RESTRICCIONES

Las CONSTRAINTS son restricciones que se utilizan para limitar


el tipo de dato que puede recibir una columna de una tabla.

Las restricciones se puede definir cuando creamos la tabla


(CREATE TABLE) o posteriormente con la sentencia ALTER TABLE.

Las posibles restricciones son:

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 39


Material SQL 2008

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'.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 40


Material SQL 2008

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),
}

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 41


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 42


Material SQL 2008

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)

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 43


Material SQL 2008

SQL FOREIGN KEY

La clave externa o FOREIGN KEY, es una columna o varias


columnas, que sirven para sealar cul 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)
}

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 44


Material SQL 2008

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)

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 45


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 46


Material SQL 2008

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')

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 47


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 48


Material SQL 2008

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)

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 49


Material SQL 2008

Si queremos crear un ndice sobre varias columnas, por ejemplo,


apellido1 y apellido2

CREATE INDEX indice2personas


ON personas(apellido1, apellido2)

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 50


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 51


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 52


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 53


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 54


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 55


Material SQL 2008

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:

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 56


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 57


Material SQL 2008

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

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

Muestra la fecha y hora actuales. Por ejemplo: 2008-


NOW
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
Muestra una fecha como suma de un intervalo de tiempo
DATE_ADD
a una fecha
Muestra una fecha como resta de un intervalo de tiempo
DATE_SUB
a una fecha
DATEDIFF Muestra el nmero de das entre 2 fechas
DATE_FORMAT Muestra una fecha y hora con diferentes formatos

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 58


Material SQL 2008

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
Se genera un valor basado en la hora del sistema.
TIMESTAMP
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
Muestra una fecha como suma o resta de un intervalo de
DATEADD
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'.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 59


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 60


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 61


Material SQL 2008

SQL DATOS TEXTO 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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 62


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 63


Material SQL 2008

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'.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 64


Material SQL 2008

SQL NUMERICOS 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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 65


Material SQL 2008

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).

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 66


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 67


Material SQL 2008

SQL DATOS FECHA 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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 68


Material SQL 2008

SQL Funciones
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
Agrupar filas con el mismo valor de una columna.
BY
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.
Redondea un campo numrico a un nmero de decimales
ROUND
especificado.
NOW Devuelve la fecha y hora actuales del sistema.
FORMAT Formatea un campo segn se quiera mostrar.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 69


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 70


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 71


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 72


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 73


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 74


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 75


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 76


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 77


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 78


Material SQL 2008

Nota: Se puede agrupar tambin por varias columnas.

GROUP BY columna1, columna2

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 79


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 80


Material SQL 2008

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.

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 81


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 82


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 83


Material SQL 2008

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 resultado ser:

cliente
Rui
Per
Gom

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 84


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 85


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 86


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 87


Material SQL 2008

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

Material Recopilado por WMCA - http://sql.11sql.com/ Pag. 88