Page 1

Manual de SQL Con Ejemplos

Recopilaci贸n:

Ing. Jorge Luis Cuenca Cabrera


Manual de SQL

Contenido INTRODUCCIÓN......................................................................................................................... 3 SINTAXIS ................................................................................................................................... 4 SQL SELECT ............................................................................................................................... 5 SQL DISTINCT ............................................................................................................................ 6 WHERE...................................................................................................................................... 6 AND y OR .................................................................................................................................. 7 ORDER BY .................................................................................................................................. 8 INSERT ...................................................................................................................................... 9 UPDATE .................................................................................................................................. 10 DELETE .................................................................................................................................... 11 TOP ......................................................................................................................................... 12 LIKE......................................................................................................................................... 13 WILDCARDS............................................................................................................................. 14 IN............................................................................................................................................ 15 BETWEEN ................................................................................................................................ 16 ALIAS ...................................................................................................................................... 17 JOINS ...................................................................................................................................... 18 INNER JOIN ............................................................................................................................. 18 LEFT JOIN ................................................................................................................................ 19 RIGHT JOIN.............................................................................................................................. 20 FULL JOIN ................................................................................................................................ 21 UNION .................................................................................................................................... 22 UNION ALL .............................................................................................................................. 23 SELECT INTO............................................................................................................................ 24 CREATE DATABASE .................................................................................................................. 25 CREATE TABLE ......................................................................................................................... 25 RESTRICCIONES ....................................................................................................................... 26 NOT NULL ............................................................................................................................... 26 UNIQUE .................................................................................................................................. 26 UNIQUE ALTER TABLE .............................................................................................................. 27 PRIMARY KEY .......................................................................................................................... 28 FOREIGN KEY ........................................................................................................................... 28 CHECK ..................................................................................................................................... 30 DEFAULT ................................................................................................................................. 31 CREATE INDEX ......................................................................................................................... 31 Recopilación: Ing. Jorge L. Cuenca Cabrera

1


Manual de SQL DROP ...................................................................................................................................... 32 TRUNCATE .............................................................................................................................. 33 ALTER...................................................................................................................................... 33 AUTO INCREMENT................................................................................................................... 35 VIEWS ..................................................................................................................................... 35 DATES ..................................................................................................................................... 37 VALORES NULL ........................................................................................................................ 38 FUNCIONES NULL .................................................................................................................... 39 DATOS TEXTO MYSQL .............................................................................................................. 40 DATOS NUMÉRICOS MYSQL ..................................................................................................... 41 DATOS FECHA MYSQL .............................................................................................................. 43

Recopilación: Ing. Jorge L. Cuenca Cabrera

2


Manual de SQL

INTRODUCCIÓN El SQL es un lenguaje estándar de programación para el acceso a bases de datos. El lenguaje SQL se utiliza para acceder y manipular datos en cualquier base de datos del mercado, como por ejemplo, para las bases de datos MySQL, Oracle, DB2, SQL Server, Access. El SQL es un lenguaje estructurado y un estándar ANSI para el acceso y manipulación de los datos de cualquier base de datos. El SQL se compone de sentencias SQL, cada una con una utilidad diferente, como por ejemplo: Creación de una base de datos (CREATE DATABASE) Creación de una tabla (CREATE TABLE) Creación de una vista (CREATE VIEW) Creación de un índice de una tabla (CREATE INDEX) Creación de procedimientos almacenados (CREATE PROCEDURE) Creación 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 transacción de una sentencia SQL (COMMIT) Retroceder la transacción de una sentencia SQL (ROLLBACK).

Recopilación: Ing. Jorge L. Cuenca Cabrera

3


Manual de SQL

SINTAXIS Un sistema de base de datos suele contener varias bases de datos. Cada base de datos suele contener varias tablas. Las tablas almacenan los datos organizados por filas. Cada fila contiene varios campos. Cada campo tiene una serie de propiedades, como por ejemplo, el nombre del campo, su longitud, tipo de dato que se va a almacenar, etc. Las sentencias SQL no son sensibles a mayúsculas y minúsculas, es decir, 'SELECT' y 'select' son dos palabras iguales para SQL. Algunos sistemas de bases de datos necesitan un punto y coma después de cada sentencia SQL para ejecutarse correctamente

CREATE DATATABASE mibasedeatos; Este punto y coma también puede servir para separar una sentencia SQL de otra sentencia SQL en la misma línea.

CREATE DATATABASE mibasedeatos; CREATE TABLE mitabla1; Las sentencias SQL se pueden agrupar por funcionalidades: 1.- Lenguaje de definición de datos (DDL). DDL está compuesto por sentencias para la creación (CREATE), modificación (ALTER) y borrado (DROP) de los componentes principales de una base de datos:      

base de datos (DATABASE) tablas (TABLE) vistas (VIEW) índices (INDEX) procedimientos almacenados (PROCEDURE) disparadores (TRIGGER).

2.- Lenguaje de manipulación de datos (DML). DML está compuesto por sentencias que sirven para:    

consultar (SELECT) insertar (INSERT) modificar (UPDATE) borrar (DELETE)

3.- Lenguaje de control de datos (DCL). DCL está compuesto por sentencias SQL para controlar las funciones de administración:

Recopilación: Ing. Jorge L. Cuenca Cabrera

4


Manual de SQL    

Confirmar la operacion (COMMIT) Retroceder la operacion (ROLLBACK) Dar permisos (GRANT) Quitar permisos (REVOKE)

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

Sintaxis SQL SELECT

SELECT * FROM nombretabla SELECT columna1, columna2 FROM nombretabla Para los ejemplos, tendremos la siguiente tabla de personas denominada “personas” Estos son los datos almacenados en la tabla “personas”

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

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

Recopilación: Ing. Jorge L. Cuenca Cabrera

5


Manual de SQL Este 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

WHERE La clรกusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar solamente algunas filas de la tabla que cumplan una determinada condiciรณn. El valor de la condiciรณn debe ir entre comillas simples ''. Por ejemplo: Seleccionar las personas cuyo nombre sea ANTONIO

SELECT * FROM personas WHERE nombre = 'ANTONIO'

Recopilaciรณn: Ing. Jorge L. Cuenca Cabrera

6


Manual de SQL

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

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.

Condición1 AND condición2 El operador OR mostrará los resultados cuando se cumpla alguna de las 2 condiciones.

Condicion1 OR condicion2 En la tabla personas

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

LUIS

LOPEZ

PEREZ

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

SELECT * FROM personas WHERE nombre = 'ANTONIO' AND apellido1 = 'GARCIA'

nombre

apellido1

apellido2

ANTONIO

GARCIA

BENITO

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

SELECT * FROM personas WHERE nombre = 'ANTONIO' OR apellido1 = 'GARCIA'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

BENITO

Recopilación: Ing. Jorge L. Cuenca Cabrera

7


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

SELECT * FROM personas WHERE nombre = 'ANTONIO' AND (apellido1 = 'GARCIA' OR apellido1 = 'LOPEZ)

nombre

apellido1

ANTONIO

GARCIA

apellido2

ORDER BY ORDER BY se utiliza para ordenar los resultados de una consulta, según el valor de la columna especificada. Por defecto, se ordena de forma ascendente (ASC) según los valores de la columna. Si se quiere ordenar por orden descendente se utiliza la palabra DES

SELECT nombre_columna(s) FROM nombre_tabla ORDER BY nombre_columna(s) ASC|DESC Por ejemplo, en la tabla personas :

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

BENITO

SELECT nombre, apellido1 FROM personas ORDER BY apellido1 ASC Esta es la consulta resultante:

nombre

apellido1

LUIS

LOPEZ

ANTONIO

GARCIA

ANTONIO

PEREZ

Ejemplo de ordenación descendiente (DES)

SELECT nombre, apellido1 FROM personas ORDER BY apellido1 DESC

Recopilación: Ing. Jorge L. Cuenca Cabrera

8


Manual de SQL Esta es la consulta resultante:

nombre

apellido1

ANTONIO

PEREZ

ANTONIO

GARCIA

LUIS

LOPEZ

INSERT La sentencia INSERT INTO se utiliza para insertar nuevas filas en una tabla. Es posible insertar una nueva fila en una tabla de dos formas distintas:

INSERT INTO nombre_tabla VALUES (valor1, valor2, valor3, .) INSERT INTO nombre_tabla (columna1, columna2, columna3,.) VALUES (valor1, valor2, valor3, .) Ejemplo: Dada la siguiente tabla personas:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

BENITO

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

INSERT INTO personas VALUES ('PEDRO', 'RUIZ', 'GONZALEZ') INSERT INTO personas (nombre, apellido1, apellido2) VALUES ('PEDRO', 'RUIZ', 'GONZALEZ') Cualquiera de estas sentencias anteriores produce que se inserte una nueva fila en la tabla personas, quedando as铆 dicha tabla:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

LUIS

LOPEZ

PEREZ

ANTONIO

GARCIA

BENITO

PEDRO

RUIZ

GONZALEZ

Recopilaci贸n: Ing. Jorge L. Cuenca Cabrera

9


Manual de SQL

UPDATE La sentencia UPDATE se utiliza para modificar valores en una tabla. La sintaxis de SQL UPDATE es:

UPDATE nombre_tabla SET columna1 = valor1, columna2 = valor2 WHERE columna3 = valor3 La cláusula SET establece los nuevos valores para las columnas indicadas. La cláusula WHERE sirve para seleccionar las filas que queremos modificar. Ojo: Si omitimos la cláusula WHERE, por defecto, modificará los valores en todas las filas de la tabla. Ejemplo del uso de SQL UPDATE

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

Recopilación: Ing. Jorge L. Cuenca Cabrera

10


Manual de 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

Recopilaci贸n: Ing. Jorge L. Cuenca Cabrera

11


Manual de SQL

TOP La sentencia SQL TOP se utiliza para especificar el número de filas a mostrar en el resultado. Esta cláusula SQL TOP es útil en tablas con muchos registros, para limitar el número de filas a mostrar en la consulta, y así sea más rápida la consulta, consumiendo también menos recursos en el sistema. Esta cláusula se especifica de forma diferente según el sistema de bases de datos utilizado. Cláusula SQL TOP para SQL SERVER

SELECT TOP número PERCENT nombre_columna FROM nombre_tabla Cláusula SQL TOP para MySQL

SELECT columna(s) FROM tabla LIMIT númerofilas Cláusula SQL TOP para ORACLE

SELECT columna(s) FROM tabla WHERE ROWNUM <= númerofilas Ejemplo SQL TOP para MySQL: Dada la siguiente tabla 'personas', quiero obtener los 2 primeros valores.

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

SELECT * FROM personas LIMIT 2 Obtendríamos el siguiente resultado:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

Recopilación: Ing. Jorge L. Cuenca Cabrera

12


Manual de SQL

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

SELECT columna(s) FROM tabla WHERE columna LIKE '%patron%' Ejemplos del uso de SQL LIKE Dada la siguiente tabla 'personas'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Si quiero seleccionar los nombres que empiezan por 'AN' en la tabla 'personas', ejecutaría el comando siguiente:

SELECT * FROM personas WHERE nombre LIKE 'AN%' El character '%' es un comodín, que sirve para uno o más caracteres. Este es el resultado

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

Otro ejemplo de SQL LIKE Para seleccionar las personas que tienen un 'Z' en su apellido1, ejecutaríamos: SELECT * FROM personas WHERE apellido1 LIKE '%Z%'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

PEDRO

RUIZ

GONZALEZ

Recopilación: Ing. Jorge L. Cuenca Cabrera

13


Manual de SQL

WILDCARDS Los caracteres Wildcards (comodines) son caracteres especiales que se utilizan para realizar búsquedas especiales, como por ejemplo, buscar palabras que empiecen por una letra determinada (letra%) o que contengan la letra a (%a%), o que contengan alguna vocal ([aeiou]), etc. Los caracteres Wildcards se utilizan con el operador SQL LIKE en una sentencia SELECT.Los caracteres Wildcards son:

%

sustituye a cero o más caracteres

_

sustituye a 1 carácter cualquiera

[lista]

sustituye a cualquier carácter de la lista

[^lista] o [!lista]

sustituye a cualquier carácter excepto los caracteres de la lista

Ejemplos: Dada la siguiente tabla 'personas'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Ejemplos Wildcards Seleccionar las personas cuyo nombre contenga una 'R'

SELECT * FROM personas WHERE nombre LIKE '%R%' Resultado:

nombre

apellido1

apellido2

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

Recopilación: Ing. Jorge L. Cuenca Cabrera

14


Manual de SQL Seleccionar las personas cuyo apellido1 empiece por P o G

SELECT * FROM personas WHERE apellido1 LIKE '[PG]%' Resultado:

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

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

SELECT columna FROM tabla WHERE columna IN (valor1, valor2, valor3, .) Ejemplo SQL IN Dada la siguiente tabla 'personas'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

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

SELECT * FROM personas WHERE apellido1 IN ('PEREZ','RUIZ')

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

PEDRO

RUIZ

GONZALEZ

Recopilación: Ing. Jorge L. Cuenca Cabrera

15


Manual de SQL

BETWEEN El operador BETWEEN se utiliza en la cláusula WHERE para seleccionar valores entre un rango de datos. Sintaxis de SQL BETWEEN

SELECT columna FROM tabla WHERE columna BETWEEN valor1 AND valor2 Ejemplo de SQL BETWEEN Dada la siguiente tabla 'personas'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

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

SELECT * FROM personas WHERE apellido1 BETWEEN '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

Recopilación: Ing. Jorge L. Cuenca Cabrera

16


Manual de SQL

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

SELECT columna FROM nombretabla AS aliastabla Sintaxis SQL ALIAS para una columna

SELECT nombrecolumna AS aliascolumna FROM tabla Ejemplos SQL ALIAS Dada la siguiente tabla 'personas'

nombre

apellido1

apellido2

ANTONIO

PEREZ

GOMEZ

ANTONIO

GARCIA

RODRIGUEZ

PEDRO

RUIZ

GONZALEZ

Utilizamos el alias 'p' para la tabla 'personas', para simplificar la sentencia SELECT

SELECT p.apellido1, p.apellido2 FROM personas AS p WHERE p.nombre = 'ANTONIO'

apellido1

apellido2

PEREZ

GOMEZ

GARCIA

RODRIGUEZ

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

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

apellido1

apellido2

PEREZ

GOMEZ

GARCIA

RODRIGUEZ

Recopilación: Ing. Jorge L. Cuenca Cabrera

17


Manual de SQL

JOINS La sentencia SQL JOIN permite consultar datos de 2 o más tablas. Dichas tablas estarán relacionadas entre ellas de alguna forma, a través de alguna de sus columnas. Existen 3 tipos de JOINS: JOIN interno, JOIN externo y JOIN cruzado. Una clave primaria es una columna con un valor único para cada registro de una tabla. El propósito del JOIN es unir información de diferentes tablas, para no tener que repetir datos en diferentes tablas. Ejemplo: Si tenemos las siguientes tablas Tabla personas, con la clave primaria "per "

per

nombre

apellido1

apellido2

dep

1

ANTONIO

PEREZ

GOMEZ

1

2

ANTONIO

GARCIA

RODRIGUEZ

2

3

PEDRO

RUIZ

GONZALEZ

2

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

dep

departamento

1

ADMINISTRACION

2

INFORMATICA

3

COMERCIAL

Si queremos saber los nombres de las personas que trabajan en INFORMATICA, tendríamos que hacer un JOIN de las 2 tablas "personas" y "departamentos", que se relacionarían por la columna "dep". Es decir, que desde la tabla "personas" y mediante la columna "dep", podemos acceder a la información de la tabla "departamentos".

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

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

Recopilación: Ing. Jorge L. Cuenca Cabrera

18


Manual de SQL Tabla personas, con la clave primaria "per "

per

nombre

apellido1

apellido2

dep

1

ANTONIO

PEREZ

GOMEZ

1

2

ANTONIO

GARCIA

RODRIGUEZ

2

3

PEDRO

RUIZ

GONZALEZ

2

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

dep

departamento

1

ADMINISTRACION

2

INFORMATICA

3

COMERCIAL

SELECT nombre, apellido1, departamento FROM personas INNER JOIN departamentos WHERE personas.dep = departamentos.dep

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

INFORMATICA

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

SELECT * FROM tabla1 LEFT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1 Ejemplo de SQL LEFT JOIN Tabla personas, con la clave primaria "per "

per

nombre

apellido1

apellido2

dep

1

ANTONIO

PEREZ

GOMEZ

1

2

ANTONIO

GARCIA

RODRIGUEZ

2

3

PEDRO

RUIZ

GONZALEZ

4

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

dep

departamento

Recopilaci贸n: Ing. Jorge L. Cuenca Cabrera

19


Manual de SQL

1

ADMINISTRACION

2

INFORMATICA

3

COMERCIAL

SELECT nombre, apellido1, departamento FROM personas LEFT JOIN departamentos WHERE personas.dep = departamentos.dep

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

Aunque el departamento '4' de PEDRO RUIZ no existe en la tabla de departamentos, devolver谩 la fila con esa columna 'departamento' en blanco.

RIGHT JOIN La sentencia RIGHT JOIN combina los valores de la primera tabla con los valores de la segunda tabla. Siempre devolver谩 las filas de la segunda tabla, incluso aunque no cumplan la condici贸n. En algunas bases de datos, la sentencia RIGHT JOIN es igual a RIGHT OUTER JOIN

SELECT * FROM tabla1 RIGHT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1 EJEMPLO SQL RIGHT JOIN

per

nombre

apellido1

apellido2

dep

1

ANTONIO

PEREZ

GOMEZ

1

2

ANTONIO

GARCIA

RODRIGUEZ

2

3

PEDRO

RUIZ

GONZALEZ

4

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

dep

departamento

1

ADMINISTRACION

2

INFORMATICA

3

COMERCIAL

SELECT nombre, apellido1, departamento FROM personas

Recopilaci贸n: Ing. Jorge L. Cuenca Cabrera

20


Manual de SQL RIGHT JOIN departamentos WHERE personas.dep = departamentos.dep

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA COMERCIAL

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

FULL JOIN La sentencia FULL JOIN combina los valores de la primera tabla con los valores de la segunda tabla. Siempre devolverรก las filas de las dos tablas, aunque no cumplan la condiciรณn. La sentencia FULL JOIN es la uniรณn de LEFT JOIN y RIGHT JOIN

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

per

nombre

apellido1

apellido2

dep

1

ANTONIO

PEREZ

GOMEZ

1

2

ANTONIO

GARCIA

RODRIGUEZ

2

3

PEDRO

RUIZ

GONZALEZ

4

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

dep

departamento

1

ADMINISTRACION

2

INFORMATICA

3

COMERCIAL

SELECT nombre, apellido1, departamento FROM personas FULL JOIN departamentos WHERE personas.dep = departamentos.dep

nombre

apellido1

departamento

ANTONIO

PEREZ

ADMINISTRACION

ANTONIO

GARCIA

INFORMATICA

PEDRO

RUIZ

COMERCIAL

Recopilaciรณn: Ing. Jorge L. Cuenca Cabrera

21


Manual de 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 número de columnas, con el mismo tipo de dato y en el mismo orden. Sintaxis SQL UNION

SELECT columna1, columna2 FROM tabla1 UNION SELECT columna1, columna2 FROM tabla2 Ejemplo SQL UNION Tabla "personas_empresa1"

per

nombre

apellido1

apellido2

1

ANTONIO

PEREZ

GOMEZ

2

ANTONIO

GARCIA

RODRIGUEZ

3

PEDRO

RUIZ

GONZALEZ

Tabla "personas_empresa2"

per

nombre

apellido1

apellido2

1

JUAN

APARICIO

TENS

2

ANTONIO

GARCIA

RODRIGUEZ

3

LUIS

LOPEZ

VAZQUEZ

SELECT nombre, apellido1 FROM personas_empresa1 UNION SELECT nombre, apellido1 FROM personas_empresa2

nombre

apellido1

ANTONIO

PEREZ

ANTONIO

GARCIA

PEDRO

RUIZ

JUAN

APARICIO

LUIS

LOPEZ

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

Recopilación: Ing. Jorge L. Cuenca Cabrera

22


Manual de SQL

UNION ALL La sentencia SQL UNION ALL es utilizada para acumular los resultados de dos sentencias SELECT, incluso aparecerán las filas que estén repetidas en los resultados de ambas SELECT. Las dos sentencias SELECT tienen que tener el mismo número de columnas, con el mismo tipo de dato y en el mismo orden. Sintaxis 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.

Recopilación: Ing. Jorge L. Cuenca Cabrera

23


Manual de SQL

SELECT INTO La sentencia SQL SELECT INTO se utiliza para seleccionar datos de una tabla y copiarlos en otra tabla diferente. Se suele utilizar para hacer una copia de seguridad (backup) de los datos de una tabla. Sintaxis SQL SELECT INTO

SELECT * INTO nuevatabla FROM tablaactual Esta sentencia copiará todos los registros de la tabla 'tablaactual' en la tabla 'nuevatabla'. La nueva tabla puede incluso estar en una base de datos diferente

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

SELECT * INTO personasBackup FROM personas También se pueden seleccionar sólo algunas columnas

SELECT columna1, columna2 INTO personasBackup FROM personas También se puede incluir una condición (WHERE)

SELECT * INTO personasBackup FROM personas WHERE nombre = 'ANTONIO' Se puede utilizar SELECT INTO con JOIN

SELECT personas.nombre, personas.apellido1, departamentos.departamento INTO personasInformatica FROM personas INNER JOIN departamentos ON personas.dep = 'INFORMATICA'

Recopilación: Ing. Jorge L. Cuenca Cabrera

24


Manual de 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

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

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

CREATE TABLE personas { nombre varchar(255), apellido1 varchar(255), apellido2 varchar(255), dep int } Esta sentencia creará la base de datos 'personas' con 4 columnas. Las columnas 'nombre', 'apellido1' y 'apellido2' son de tipo 'varchar', es decir, acepta valores alfanuméricos hasta una longitud máxima de 255 caracteres. La columna 'dep' es de tipo 'int', es decir, acepta sólo números. Existen diferentes tipos de datos, algunos son iguales en todas las bases de datos (MySQL, ORACLE, DB2, ..) y otros pueden ser particulares para ser usados únicamente en alguna de estas bases de datos.

Recopilación: Ing. Jorge L. Cuenca Cabrera

25


Manual de 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

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

CREATE TABLE personas {nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, apellido2 varchar(255) } Esta sentencia crea una tabla denominada 'personas', donde tenemos 3 columnas. Las columnas 'nombre' y 'apellido' llevan NOT NULL, esto quiere decir que cualquier fila insertada en esta tabla tiene que tener algún valor para las columnas 'nombre' y 'apellido1'.

UNIQUE La restricción UNIQUE identifica de manera única a cada fila de una tabla. Puede haber varias restricciones UNIQUE en diferentes columnas de una tabla. Existen varias formas diferentes de sintaxis según el sistema de base de datos utilizado: Ejemplo SQL UNIQUE para la base de datos MySQL

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

Recopilación: Ing. Jorge L. Cuenca Cabrera

26


Manual de SQL La sentencia anterior crea la tabla 'personas' con 4 columnas, donde la columna 'identifcador' tiene un valor diferente para cada fila de la tabla. Si intentamos insertar un fila con un identificador que ya exista, nos dará un error, y no nos dejará insertarlo. Ejemplo SQL UNIQUE para las bases de datos ORACLE, SQLSERVIR, ACCESS

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

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

ALTER TABLE personas ADD UNIQUE (identificador) Crea una restricción UNIQUE (valor único en toda la tabla) para la columna 'identificador'. Se puede crear también restricciones para varias columnas a la vez

ALTER TABLE peronas ADD CONSTRAINT copersonas UNIQUE (identificador, apellido1) Para eliminar una restricción en la base de datos MySQL

ALTER TABLE personas DROP INDEX copersonas Para eliminar una restricción en ORACLE, SQLSERVER y ACCESS

ALTER TABLE personas DROP CONSTRAINT copersonas

Recopilación: Ing. Jorge L. Cuenca Cabrera

27


Manual de 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 sólo puede tener una clave primaria (PRIMARY KEY). Ejemplo PRIMARY KEY, clave primaria en MySQL

CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, PRIMARY KEY (identificador) } Ejemplo PRIMARY KEY, clave primaria en ORACLE, SQLSERVER, ACCESS

CREATE TABLE personas { identificador int NOT NULL PRIMARY KEY, nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, } La clave primaria (PRIMARY KEY) puede estar compuesta por varias columnas, por ejemplo por las columnas 'identificador' y 'nombre', entonces se define así:

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

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

FOREIGN KEY La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para señalar cual es la clave primaria de otra tabla. La columna o columnas señaladas como FOREIGN KEY, solo podrán tener valores que ya existan en la clave primaria PRIMARY KEY de la otra tabla. Ejemplo de FOREIGN KEY Tabla "departamentos", con la clave primaria "dep"

dep

departamento

1

ADMINISTRACION

2

INFORMATICA

Recopilación: Ing. Jorge L. Cuenca Cabrera

28


Manual de SQL

3

COMERCIAL

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

per

nombre

apellido1

apellido2

dep

1

ANTONIO

PEREZ

GOMEZ

1

2

ANTONIO

GARCIA

RODRIGUEZ

2

3

PEDRO

RUIZ

GONZALEZ

4

Definiciones de FOREIGN KEY en CREATE TABLE para MySQL

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

CREATE TABLE personas { per int NOT NULL, nombre varchar(255), apellido1 varchar(255), dep int NOT NULL, PRIMARY KEY (per), FOREIGN KEY (dep) REFERENCES departamentos(dep) } Definiciones de FOREIGN KEY en CREATE TABLE para ORACLE, ACCESS, SQLSERVER

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

CREATE TABLE personas { per int NOT NULL PRIMARY KEY, nombre varchar(255), apellido1 varchar(255), dep int FOREIGN KEY REFERENCES departamentos (dep) } Si la clave externa o for谩nea (FOREIGN KEY) est谩 compuesta por varias columnas o queremos ponerle un nombre, utilizaremos la f贸rmula siguiente:

CONSTRAINT fkpersonas FOREIGN KEY (dep, id) REFERENCES departamentos(dep,id). Ejemplo FOREIGN KEY con ALTER TABLE

Recopilaci贸n: Ing. Jorge L. Cuenca Cabrera

29


Manual de SQL

ALTER TABLE ADD FOREIGN KEY (dep) REFERENCES departamentos(dep) Ejemplo FOREIGN KEY múltiple (varias columnas) con ALTER TABLE:

ALTER TABLE ADD CONSTRAINT fkpersonas FOREIGN KEY (dep) REFERENCES departamentos(dep) Para borrar un clave externa (FOREIGN KEY) utilizamos DROP, pero varía según la base de dato:

Borrar FOREIGN KEY en MySQL ALTER TABLE personas DROP FOREIGN KEY dep Borrar FOREIGN KEY en ORACLE, SQLSERVER y ACCESS

ALTER TABLE personas DROP CONSTRAINT dep

CHECK La restricción CHECK se utiliza para limitar el rango de valores que puede tener una columna. Se pueden definir varias restricciones CHECK en una tabla. Ejemplo CHECK en MySQL

CREATE TABLE departamentos { dep int NOT NULL, departamento varchar(255), CHECK (dep>0) } Ejemplo CHECK en ORACLE, SQLSERVER y ACCESS:

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

ALTER TABLE departamentos ADD CHECK (dep>0) Ejemplo CHECK (con múltiples columnas) en ALTER TABLE en MySQL

ALTER TABLE personas ADD CHECK (per>0, edad>35) Ejemplo CHECK en ALTER TABLE en ORACLE, SQLSERVER y ACCESS

ALTER TABLE departamentos ADD CONSTRAINT ckdepart CHECK (dep>0) Ejemplo CHECK en ALTER TABLE con varias columnas

ALTER TABLE personas ADD CONSTRAINT ckpersona CHECK (pers>0, nombre='antonio')

Recopilación: Ing. Jorge L. Cuenca Cabrera

30


Manual de SQL

DEFAULT La restricción DEFAULT se utiliza para establecer un valor por defecto a una columna. Si no se especifica un valor al insertar una fila, entonces se podrá el valor por defecto (DEFAULT) que tenga cada columna. SQL DEFAULT en la sentencia CREATE TABLE CREATE TABLE pedidos { idpedido int, producto int, cantidad int, fecha date DEFAULT GETDATE() } Si al crear un pedido, no especificamos el valor de la columna 'fecha', entonces para esa columna se insertará por defecto obtenido de ejecutar la funcion GETDATE(), que devuelve la fecha del sistema En lugar de una función, podemos insertar una valor concreto '2001-01-01' o cualquier otro valor. SQL DEFAULT en la sentencia ALTER TABLE para MySQL

ALTER TABLE pedidos ALTER fecha DEFAULT '2012-01-01' SQL DEFAULT en la sentencia ALTER TABLE para ORACLE, SQLSERVER, ACCESS:

ALTER TABLE pedidos ALTER COLUMN fecha SET DEFAULT '2012-01-01' Para borrar DEFAULT en MySQL

ALTER TABLE pedidos ALTER fecha DROP DEFAULT Para borrar DEFAULT en ORACLE, SQLSERVER, ACCESS:

ALTER TABLE pedidos ALTER COLUMN fecha DROP DEFAULT

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

Recopilación: Ing. Jorge L. Cuenca Cabrera

31


Manual de SQL Actualizar una tabla con índices tarda más tiempo porque también hay que actualizar los índices, así que solo se deben poner índices en las columnas por las que buscamos frecuentemente. Se pueden crear índices ÚNICOS, es decir, índices que no admiten valores duplicados. Sintaxis para SQL CREATE INDEX

CREATE INDEX nombreindice ON nombretabla (nombrecolumna) La columna que forma parte de este índice admite valores duplicados en su columna. Sintaxis para SQL CREATE UNIQUE INDEX

CREATE UNIQUE INDEX nombreindice ON nombretabla (nombrecolumna) La columna que forma parte de este índice NO admite valores duplicados en su columna, porque es una clave única. Ejemplos para SQL CREATE INDEX Creamos la índice 'indicepersonas' sobre la columna 'persona' de la tabla 'personas'

CREATE INDEX indicepersonas ON personas (persona) Si queremos crear un índice sobre varias columnas, por ejemplo, apellido1 y apellido2

CREATE INDEX indice2personas ON personas(apellido1, apellido2)

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

ALTER TABLE nombretabla DROP INDEX nombreindice Sintaxis DROP INDEX para DB2 y ORACLE

DROP INDEX nombreindice Sintaxis DROP INDEX para ACCESS

Recopilación: Ing. Jorge L. Cuenca Cabrera

32


Manual de SQL

DROP INDEX nombreindice ON nombretabla Sintaxis DROP INDEX para SQLSERVER

DROP INDEX nombretabla.nombreindice DROP TABLE Se utiliza DROP TABLE para borrar definitivamente una tabla

DROP TABLE nombretabla DROP DATABASE Se utiliza para borrar una base de datos definitivamente.

DROP DATABASE nombrebasededatos

TRUNCATE Este comando SQL TRUNCATE se utiliza para eliminar o borrar los datos que contiene una tabla. Es útil cuando sólo se quiere borrar los datos, pero no se quiere borrar la tabla. Este comando deja vacía una tabla, es decir, sin datos.

TRUNCATE TABLE nombretabla

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

ALTER TABLE nombretabla ADD nombrecolumna tipodatocolumna Para borrar una columna de una tabla

ALTER TABLE nombretabla DROP COLUMN nombrecolumna Para modificar el tipo de dato de una columna de una tabla

Recopilación: Ing. Jorge L. Cuenca Cabrera

33


Manual de SQL

ALTER TABLE nombretabla ALTER COLUMN nombrecolumna tipodatocolumna Ejemplos de SQL ALTER

per

nombre

apellido1

apellido2

1

ANTONIO

PEREZ

GOMEZ

2

ANTONIO

GARCIA

RODRIGUEZ

3

PEDRO

RUIZ

GONZALEZ

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

ALTER TABLE personas ADD fechadenacimiento date

per nombre

apellido1 apellido2

1

ANTONIO PEREZ

2

ANTONIO GARCIA RODRIGUEZ

3

PEDRO

RUIZ

fechadenacimiento

GOMEZ 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

Recopilaci贸n: Ing. Jorge L. Cuenca Cabrera

34


Manual de SQL

AUTO INCREMENT AUTO INCREMENT permite generar un número único cuando insertamos un nuevo registro en la tabla. Se utiliza para tener una clave primaria de una tabla mediante la generación automática de un número secuencial único en la tabla. Sintaxis SQL AUTO INCREMENT

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

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 condición Las vista muestran siempre datos reales de una o varias tablas. Cada vez que un usuario pregunta o consulta una vista, el sistema de base de datos, actualiza los datos de la vista, para mostrar siempre datos reales. Ejemplo SQL CREATE VIEW En la tabla personas

Recopilación: Ing. Jorge L. Cuenca Cabrera

35


Manual de SQL >

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]

Recopilaci贸n: Ing. Jorge L. Cuenca Cabrera

36


Manual de 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

NOW

Muestra la fecha y hora actuales. Por ejemplo: 2008-11-11 12:45:34

CURDATE

Muestra la fecha actual. Por ejemplo: 200811-11

CURTIME

Muestra la hora actual. Por ejemplo: 12:45:34

DATE

Muestra la parte fecha de una expresión fecha/hora

EXTRACT

Muestra una parte de una expresión fecha/hora

DATE_ADD

Muestra una fecha como suma de un intervalo de tiempo a una fecha

DATE_SUB

Muestra una fecha como resta de un intervalo de tiempo a una fecha

DATEDIFF

Muestra el número de días entre 2 fechas

DATE_FORMAT Muestra una fecha y hora con diferentes formatos Tipos de Datos para fechas y horas en la base de datos SQL Server

DATE

Formato YYYY-MM-DD

DATETIME

Formato YYYY-MM-DD HH:MM:SS

SMALLDATETIME Formato YYYY-MM-DD HH:MM:SS TIMESTAMP

Se genera un valor basado en la hora del sistema. Se actualiza automáticamente.

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

Recopilación: Ing. Jorge L. Cuenca Cabrera

37


Manual de SQL

GETDATE

Muestra la fecha y hora actuales

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

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

idpedido

nombreproducto

fechapedido

1

papel oficina

2012-02-23 14:05:00

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

VALORES NULL El valor NULL representa a un valor desconocido. Este valor NULL puede ser asignado como valor a cualquier columna de una tabla. Si el valor de una columna es opcional, quiere decir, que podemos insertar una fila en la tabla sin asignarle ningún valor a esa columna opcional, así que esa columna tomará el valor NULL. El valor NULL es un valor especial, y por tanto, no se puede comparar con los operadores aritméticos normales (=, >, <, <>), y en su lugar debemos utilizar los operadores IS y IS NOT. En la tabla personas, tenemos la columna 'apellido2' que es opcional y puede tener valores nulos: >

nombre

apellido1

ANTONIO

PEREZ

LUIS

LOPEZ

ANTONIO

GARCIA

apellido2

edad 30

PEREZ

45 50

Ejemplo de uso de IS NULL

SELECT * FROM personas WHERE apellido2 IS NULL

Recopilación: Ing. Jorge L. Cuenca Cabrera

38


Manual de SQL >

nombre

apellido1

apellido2

edad

ANTONIO

PEREZ

30

ANTONIO

GARCIA

50

Ejemplo de uso de IS NOT NULL

SELECT * FROM personas WHERE apellido2 IS NOT NULL >

nombre

apellido1

apellido2

edad

LUIS

LOPEZ

PEREZ

45

FUNCIONES NULL Si queremos cambiar un valor NULL por otro valor cualquiera, utilizaremos las siguientes funciones (ISNULL, IFNULL, NVL, COLACESCE) seg煤n el sistema de base de datos. Para nuestros ejemplos, queremos que si el valor es NULL se cambie por el valor 0 Ejemplo para SQL SERVER se utiliza ISNULL:

SELECT producto, preciounidad * (unidadesstock + ISNULL(unidadespedido, 0) FROM productos Ejemplo para ORACLE se utiliza NVL:

SELECT producto, preciounidad * (unidadesstock + NVL(unidadespedido, 0) FROM productos Ejemplo para MySQL, hay 2 funciones equivalentes (IFNULL, COALESCE):

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

Recopilaci贸n: Ing. Jorge L. Cuenca Cabrera

39


Manual de SQL

DATOS TEXTO MYSQL Tipos de datos y rango de datos para el sistema de gestión de bases de datos MySQL Tipos de datos de TEXTO en MySQL CHAR El tipo de dato CHAR sirve para almacenar una cadena de datos de longitud fija. Puede contener caracteres, números y caracteres especiales. La longitud fija se define entre paréntesis, y siempre reservará espacio para esta longitud aunque no se utilice. Por ejemplo, CHAR(50), será un campo de longitud fija de 50 posiciones. La longitud máxima que podemos definir un campo CHAR es de 255. VARCHAR El tipo de datos VARCHAR sirve para almacenar una cadena de datos (caracteres, números y caracteres especiales) de longitud variable. La longitud máxima es de 255 caracteres. Hace un buen uso del espacio en disco, porque no reserva el espacio de la longitud máxima definida, si no que solo ocupa espacio el tamaño real de los datos almacenados en ese campo. Es el tipo de dato más utilizado para campos pequeños. TINYTEXT El tipo de datos TINYTEXT sirve para almacenar una cadena de datos (solo caracteres, no admite número ni caracteres especiales) de una longitud máxima de 255 caracteres. TEXT El tipo de dato TEXT sirve para almacenar una cadena de caracteres de longitud máxima de 65,535 caracteres. BLOB El tipo de datos BLOB sirve para almacenar datos de tipo BLOB (Binary Large Object). Admite una longitud máxima de 65,535 bytes de datos.

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

MEDIUMBLOB

Recopilación: Ing. Jorge L. Cuenca Cabrera

40


Manual de SQL El tipo de datos MEDIUMBLOB Sirve para almacenar datos tipo BLOB con longitud máxima 16.777.215 bytes. LONGTEXT El tipo de dato LONGTEXT sirve para almacenar una cadena de longitud máxima de 4.294.967.295 caracteres. LONGBLOB El tipo de dato LONGBLOB sirve para almacenar un BLOB de longitud máxima de de 4.294.967.295 bytes. ENUM El tipo de dato ENUM sirve para introducir una lista de posibles valores. La longitud máxima es de 65.535 posibles valores. Si se intenta introducir un valor en este campo, que no esté incluido en la lista, no se insertará nada y tendrá un valor vacío (''). Por ejemplo si definimos una columna como ENUM('uno', 'dos'), entonces en esta columna solo puede almacenar los valores 'uno' o 'dos'. Si queremos insertar cualquier otro valor (por ejemplo 'tres'), no se grabará 'tres' y en su lugar quedará el campo vacío, sin valor (''). SET El tipo de dato SET es similar a ENUM pero la longitud máxima de valores posibles es de 64, y los valores posibles se pueden combinar. Por ejemplo, si definimos una columna como SET ('uno', 'dos) entonces esa columna podrá tomar los siguientes valores 'uno' o 'dos' o 'uno,dos', 'dos,uno'.

DATOS NUMÉRICOS MYSQL Tipos de datos numéricos para el sistema de gestión de bases de datosMySQL MySQL admite los siguientes tipos de datos numéricos para sus columnas TINYINT El tipo de dato numérico TINYINT permite números desde -128 hasta 127. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 255. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis (tamaño). SMALLINT El tipo de dato numérico SMALLINT permite números desde -32768 hasta 32767.

Recopilación: Ing. Jorge L. Cuenca Cabrera

41


Manual de SQL También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 65535. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis MEDIUMINT El tipo de dato numérico MEDIUMINT permite números desde -8388608 hasta 8388607. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 16777215. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis INT El tipo de dato numérico INT permite números desde -2147483648 hasta 2147483647. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 4294967295. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis BIGINT El tipo de dato numérico BIGINT permite números desde -9223372036854775808 hasta 9223372036854775807. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 18446744073709551615. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis FLOAT El tipo de dato numérico FLOAT permite almacenar pequeños números decimales (de punto flotante). Al ser de punto flotante, sus cálculos son aproximados. Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales (decimal). FLOAT(6,2) tendrá 4 dígitos enteros y 2 decimales, por ejemplo, 5467.67 DOUBLE El tipo de dato numérico DOUBLE permite almacenar grandes números decimales (de punto flotante). Al ser de punto flotante, sus cálculos son aproximados. Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales (decimal). DOUBLE(5,1) tendrá 4 dígitos enteros y 1 dígito decimal, por ejemplo, 5467.1 DECIMAL

Recopilación: Ing. Jorge L. Cuenca Cabrera

42


Manual de SQL El tipo de dato numérico DECIMAL permite almacenar grandes números decimales de punto fijo, por tanto, los cálculos con este tipo DECIMAL son exactos. Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales (decimal). El número máximo de dígitos es de 65. Por ejemplo DECIMAL(20,6) quiere decir que tendrá 14 dígitos enteros y 4 dígitos decimales.

DATOS FECHA MYSQL En MySQL pueden existir los siguientes tipos de datos para fechas

DATE El tipo de dato DATE sirve para almacenar una fecha con el formato YYYY-MM-DD (4 dígitos para el año, guión, 2 dígitos para el mes, guión, 2 dígitos para el día). DATETIME El tipo de dato DATETIME sirve para almacenar fecha y hora, con el formato YYYY-MM-DD HH:MM:SS TIMESTAMP El tipo de dato TIMESTAMP es equivalente al tipo anterior, DATETIME, YYYY-MM-DD HH:MM:SS TIME El tipo de dato TIME sirve para almacenar la hora con el formato HH:MM:SS YEAR El tipo de dato YEAR sirve para almacenar el año con el formato YYYY

Recopilación: Ing. Jorge L. Cuenca Cabrera

43

Manual SQL  

Sentencias y ejemplos SQL