Material SQL 2008
Material SQL El SQL es un lenguaje estándar de programación para el acceso a bases de datos. El lenguaje SQL se utiliza para acceder y manipular datos en cualquier base de datos del mercado, como por ejemplo, para las bases de datos MySQL, Oracle, DB2, SQL Server, Access. Este tutorial se divide en las siguientes partes:
SQL Básico: Las instrucciones SQL básicas 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 cálculos sobre los datos. Comandos SQL: Listado de todos los comandos SQL disponibles en este curso, para una referencia rápida de los mismos.
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).
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
1
Material SQL 2008
SQL Básico Estas son las instrucciones SQL básicas 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 más 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 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).
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 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) 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 administración:
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 más importantes es SELECT, ya que permite realizar consultas sobre los datos almacenados en la base de datos. Sintaxis SQL SELECT SELECT * FROM nombretabla SELECT columna1, columna2 FROM nombretabla Para los ejemplos, tendremos la siguiente tabla de personas denominada ‚personas‛ Estos son los datos almacenados en la tabla ‚personas‛ nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
ANTONIO
GARCIA
BENITO
LUIS
LOPEZ
PEREZ
Si queremos consultar todos los datos de la tabla ‚personas‛
SELECT * FROM personas Este será el resultado: nombre
apellido1
apellido2
ANTONIO
PEREZ
GOMEZ
ANTONIO
GARCIA
BENITO
LUIS
LOPEZ
PEREZ
Si queremos consulta todos los nombres y primer apellido de todas las personas SELECT nombre, apellido1 FROM personas
Este será el resultado:
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 cláusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar solamente algunas filas de la tabla que cumplan una determinada condición. El valor de la condición debe ir entre comillas simples ''. Por ejemplo: Seleccionar las personas cuyo nombre sea ANTONIO SELECT * FROM personas WHERE nombre = 'ANTONIO' nombre
apellido1
apellido2
ANTONIO PEREZ
GOMEZ
ANTONIO GARCIA
BENITO
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. 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 ANTONIO GARCIA LUIS LOPEZ
GOMEZ BENITO PEREZ
La siguiente sentencia (ejemplo AND) dará el siguiente resultado: SELECT * FROM personas WHERE nombre = 'ANTONIO' AND apellido1 = 'GARCIA' nombre apellido1 apellido2
ANTONIO GARCIA
BENITO
La siguiente sentencia (ejemplo OR) dará el siguiente resultado: SELECT * FROM personas WHERE nombre = 'ANTONIO' OR apellido1 = 'GARCIA' nombre apellido1 apellido2
ANTONIO PEREZ
GOMEZ
ANTONIO GARCIA
BENITO
También se pueden combinar AND y OR, como el siguiente ejemplo:
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
ANTONIO
apellido1
GARCIA
apellido2
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,
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
PEREZ
LOPEZ
ANTONIO GARCIA
BENITO
SELECT nombre, apellido1 FROM personas ORDER BY apellido1 ASC Esta es la consulta resultante: nombre
apellido1
LUIS
LOPEZ
ANTONIO
GARCIA
ANTONIO
PEREZ
Ejemplo de ordenación descendiente (DES) SELECT nombre, apellido1 FROM personas ORDER BY apellido1 DESC
Esta es la consulta resultante:
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
PEREZ
LOPEZ
ANTONIO GARCIA
BENITO
Si queremos insertar una nueva fila en la tabla personas, lo podemos hacer con cualquiera de las dos sentencias siguientes: INSERT VALUES INSERT VALUES
INTO personas ('PEDRO', 'RUIZ', 'GONZALEZ') INTO personas (nombre, apellido1, apellido2) ('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 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 LUIS ANTONIO PEDRO
PEREZ LOPEZ GARCIA RUIZ
GOMEZ PEREZ BENITO 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 LUIS ANTONIO PEDRO
PEREZ LOPEZ GARCIA RUIZ
GOMEZ PEREZ RODRIGUEZ
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
PEREZ
LOPEZ
ANTONIO GARCIA
RODRIGUEZ
PEDRO
GONZALEZ
RUIZ
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 básicas para el acceso a cualquier base de datos relacional.
SQL TOP: TOP se utiliza para especificar el número de
filas a mostrar en el resultado. SQL LITE: LIKE se utiliza en la cláusula WHERE para buscar por un patrón. SQL WILDCARDS: Wildcards (comodines) son caracteres especiales que se utilizan para realizar búsquedas especiales. SQL IN: IN permite seleccionar múltiples valores en una cláusula WHERE. SQL BETWEEN: BETWEEN se utiliza en la cláusula 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 más 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 aparecerán las filas que estén 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 añadir UNIQUE a una columna de una tabla, después 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 definición 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 numéricos 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 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
GONZALEZ
RUIZ
SELECT * FROM personas LIMIT 2
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
19
Material SQL 2008 Obtendríamos 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 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
ANTONIO PEREZ
apellido2
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
ANTONIO PEREZ
apellido2
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
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 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: % _ [lista] [^lista] o [!lista]
sustituye a cero o más caracteres sustituye a 1 carácter cualquiera sustituye a cualquier carácter de la 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
GONZALEZ
RUIZ
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 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
GONZALEZ
RUIZ
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
GONZALEZ
RUIZ
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
24
Material SQL 2008
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
ANTONIO PEREZ
apellido2
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
GONZALEZ
RUIZ
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
GONZALEZ
RUIZ
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: 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 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".
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 condición. SELECT * FROM tabla1 INNER JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1 Ejemplo SQL INNER JOIN Tabla personas, con la clave primaria "per " per
nombre
apellido1
apellido2 dep
1
ANTONIO PEREZ
GOMEZ
2
ANTONIO GARCIA
RODRIGUEZ 2
3
PEDRO
GONZALEZ
RUIZ
1
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
INFORMATICA
RUIZ
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 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
2
ANTONIO GARCIA
RODRIGUEZ 2
3
PEDRO
GONZALEZ
RUIZ
1 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 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
2
ANTONIO GARCIA
RODRIGUEZ 2
3
PEDRO
GONZALEZ
RUIZ
1
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 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
2
ANTONIO GARCIA
RODRIGUEZ 2
3
PEDRO
GONZALEZ
RUIZ
1 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 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
GONZALEZ
RUIZ
Tabla "personas_empresa2" per
nombre
apellido1
APARICIO
apellido2
1
JUAN
2
ANTONIO GARCIA
RODRIGUEZ
3
LUIS
VAZQUEZ
LOPEZ
TENS
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 aparecerán 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 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
GONZALEZ
RUIZ
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 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'
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 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'.
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
40
Material SQL 2008
SQL UNIQUE La restricción UNIQUE identifica de manera única a cada fila de una tabla. Puede haber varias restricciones UNIQUE en diferentes columnas de una tabla. Existen varias formas diferentes de sintaxis según el sistema de base de datos utilizado: Ejemplo SQL UNIQUE para la base de datos MySQL CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, apellido2 varchar(255), UNIQUE (identificador) } La sentencia anterior crea la tabla 'personas' con 4 columnas, donde la columna 'identifcador' tiene un valor diferente para cada fila de la tabla. Si intentamos insertar un fila con un identificador que ya exista, nos dará un error, y no nos dejará insertarlo. Ejemplo SQL UNIQUE para las bases de datos ORACLE, SQLSERVIR, ACCESS CREATE TABLE personas { identificador int NOT NULL UNIQUE, nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, apellido2 varchar(255), }
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
41
Material SQL 2008
SQL 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
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 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)
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 señalar cuál es la clave primaria de otra tabla. La columna o columnas señaladas como FOREIGN KEY, solo podrán tener valores que ya existan en la clave primaria PRIMARY KEY de la otra tabla. Ejemplo de FOREIGN KEY
Tabla "departamentos", con la clave primaria "dep" dep
departamento
1
ADMINISTRACION
2
INFORMATICA
3
COMERCIAL
Tabla personas, con una clave externa FOREIGN KEY 'dep', que hace referencia a la clave primaria 'dep' de la tabla anterior 'departamentos' y por tanto, solo puede tener un valor de los que tiene en esa tabla
per nombre
apellido1 apellido2 dep
1
ANTONIO PEREZ
GOMEZ
2
ANTONIO GARCIA
RODRIGUEZ 2
3
PEDRO
GONZALEZ
RUIZ
1
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 foránea (FOREIGN KEY) está compuesta por varias columnas o queremos ponerle un nombre, utilizaremos la fórmula siguiente: CONSTRAINT fkpersonas FOREIGN KEY (dep, id) REFERENCES departamentos(dep,id). Ejemplo FOREIGN KEY con ALTER TABLE ALTER TABLE ADD FOREIGN KEY (dep) REFERENCES departamentos(dep) Ejemplo FOREIGN KEY múltiple (varias columnas) con ALTER TABLE: ALTER TABLE ADD CONSTRAINT fkpersonas FOREIGN KEY (dep) REFERENCES departamentos(dep)
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
45
Material SQL 2008 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
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
46
Material SQL 2008
SQL CHECK La restricción CHECK se utiliza para limitar el rango de valores que puede tener una columna. Se pueden definir varias restricciones CHECK en una tabla. Ejemplo CHECK en MySQL 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')
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
47
Material SQL 2008
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
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 rápidamente, y no tener que recorrer toda la tabla secuencialmente en busca alguna fila concreta. Si una columna es índice de una tabla, al buscar por un valor de esa columna, iremos directamente a la fila correspondiente. La búsqueda así es mucho más óptima en recursos y más rápida en tiempo. Si esa columna de búsqueda no fuese índice, entonces tendríamos que recorrer de forma secuencial la tabla en busca de algún dato. Por eso, es importante crear un índice por cada tipo de búsqueda que queramos hacer en la tabla. Actualizar una tabla con índices tarda más tiempo porque también hay que actualizar los índices, así que solo se deben poner índices en las columnas por las que buscamos frecuentemente. Se pueden crear índices ÚNICOS, es decir, índices que no admiten valores duplicados. Sintaxis para SQL CREATE INDEX CREATE INDEX nombreindice ON nombretabla (nombrecolumna) La columna que forma parte de este índice admite valores duplicados en su columna. Sintaxis para SQL CREATE UNIQUE INDEX CREATE UNIQUE INDEX nombreindice ON nombretabla (nombrecolumna) La columna que forma parte de este índice NO admite valores duplicados en su columna, porque es una clave única. Ejemplos para SQL CREATE INDEX Creamos la índice 'indicepersonas' sobre la columna 'persona' de la tabla 'personas' CREATE INDEX indicepersonas ON personas (persona)
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 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
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
52
Material SQL 2008
SQL ALTER La sentencia SQL ALTER se utiliza para añadir, eliminar o modificar columnas de una tabla. Sintaxis SQL ALTER Para añadir una nueva columna a una tabla 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
GONZALEZ
RUIZ
Dada la siguiente tabla de 'personas', queremos añadir 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
GONZALEZ
RUIZ
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 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
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 condición Las vista muestran siempre datos reales de una o varias tablas. Cada vez que un usuario pregunta o consulta una vista, el sistema de base de datos, actualiza los datos de la vista, para mostrar siempre datos reales. Ejemplo SQL CREATE VIEW En la tabla personas > nombre
apellido1
apellido2
edad
ANTONIO PEREZ
GOMEZ
30
ANTONIO GARCIA
RODRIGUEZ
45
PEDRO
GONZALEZ
50
RUIZ
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 NOW
Muestra la fecha y hora actuales. Por ejemplo: 200811-11 12:45:34
CURDATE
Muestra la fecha actual. Por ejemplo: 2008-11-11
CURTIME
Muestra la hora actual. Por ejemplo: 12:45:34
DATE
Muestra la parte fecha de una expresión fecha/hora
EXTRACT
Muestra una parte de una expresión fecha/hora
DATE_ADD
Muestra una fecha como suma de un intervalo de tiempo a una fecha
DATE_SUB
Muestra una fecha como resta de un intervalo de tiempo a una fecha
DATEDIFF
Muestra el número de días entre 2 fechas
DATE_FORMAT Muestra una fecha y hora con diferentes formatos
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 automáticamente. Funciones para SQL Server sobre los tipos de datos de fecha y hora anteriores GETDATE Muestra la fecha y hora actuales DATEPART Muestra parte de una fecha y hora DATEADD
Muestra una fecha como suma o resta de un intervalo de tiempo sobre una fecha
DATEDIFF Muestra el tiempo entre 2 fechas CONVERT Muestra la fecha y hora en diferentes formatos Ejemplos del uso de fecha y hora CREATE TABLE pedidos ( idpedido int NOT NULL, nombreproducto varchar(50) NOT NULL, fechapedido datetime NOT NULL PRIMARY KEY (idpedido) ) idpedido nombreproducto
1
papel oficina
fechapedido
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 ningún valor a esa columna opcional, así que esa columna tomará el valor NULL. El valor NULL es un valor especial, y por tanto, no se puede comparar con los operadores aritméticos normales (=, >, <, <>), y en su lugar debemos utilizar los operadores IS y IS NOT. En la tabla personas, tenemos la columna 'apellido2' que es opcional y puede tener valores nulos: > nombre apellido1 apellido2 edad
ANTONIO PEREZ LUIS LOPEZ ANTONIO GARCIA
PEREZ
30 45 50
Ejemplo de uso de IS NULL SELECT * FROM personas WHERE apellido2 IS NULL > nombre apellido1 apellido2 edad
ANTONIO PEREZ ANTONIO GARCIA
30 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) 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
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 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 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 máxima de 65,535 caracteres.
BLOB
El tipo de datos BLOB sirve para almacenar datos de tipo BLOB (Binary Large Object). Admite una longitud máxima de 65,535 bytes de datos.
MEDIUMTEXT
El tipo de dato MEDIUMTEXT sirve para almacenar una cadena con una longitud máxima de 16.777.215 caracteres.
MEDIUMBLOB
El tipo de datos MEDIUMBLOB Sirve para almacenar datos tipo BLOB con longitud máxima 16.777.215 bytes.
LONGTEXT
El tipo de dato LONGTEXT sirve para almacenar una cadena de longitud máxima de 4.294.967.295 caracteres.
LONGBLOB
El tipo de dato LONGBLOB sirve para almacenar un BLOB de longitud máxima de de 4.294.967.295 bytes.
ENUM
El tipo de dato ENUM sirve para introducir una lista de posibles valores. La longitud máxima es de 65.535 posibles valores.
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 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'.
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
64
Material SQL 2008
SQL NUMERICOS MySQL Tipos de datos numéricos para el sistema de gestión de bases de datos MySQL
MySQL admite los siguientes tipos de datos numéricos para sus columnas TINYINT
El tipo de dato numérico TINYINT permite números desde -128 hasta 127. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 255. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis (tamaño).
SMALLINT
El tipo de dato numérico SMALLINT permite números desde -32768 hasta 32767. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 65535. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis
MEDIUMINT
El tipo de dato numérico MEDIUMINT permite números desde 8388608 hasta 8388607. También se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 16777215. Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
65
Material SQL 2008 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).
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
66
Material SQL 2008 DOUBLE(5,1) tendrá 4 dígitos enteros y 1 dígito decimal, por ejemplo, 5467.1
DECIMAL
El tipo de dato numéric DECIMAL permite almacenar grandes números decimales de punto fijo, por tanto, los cálculos con este tipo DECIMAL son exactos. Podemos especificar el número máximo de dígitos (tamaño) y el número de decimales (decimal). El número máximo de dígitos es de 65. Por ejemplo DECIMAL(20,6) quiere decir que tendrá 14 dígitos enteros y 4 dígitos decimales.
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 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
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
68
Material SQL 2008
SQL Funciones SQL tiene funciones predefinidas para realizar ciertos cálculos con un mayor rendimiento. AVG COUNT FIRST LAST MAX MIN SUM GROUP BY HAVING UCASE LCASE MID LEN ROUND NOW FORMAT
Devuelve Devuelve Devuelve Devuelve Devuelve Devuelve Devuelve
el el el el el el la
valor medio de una columna. número de filas de la consulta. primer valor de la consulta. último valor de la consulta. mayor valor de una columna. menor valor de una columna. suma de los valores de una columna.
Agrupar filas con el mismo valor de una columna. Incluir condiciones con funciones SQL. Convierte un valor a mayúsculas. Convierte un valor a minúsculas. Extrae caracteres de un campo de texto. Devuelve la longitud de un campo de texto. Redondea un campo numérico a un número de decimales especificado. Devuelve la fecha y hora actuales del sistema. Formatea un campo según se quiera mostrar.
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
69
Material SQL 2008
Función SQL AVG La función AVG devuelve el valor medio de una columna de tipo numérico. 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 función SQL SELECT AVG(precio) AS preciomedio FROM pedidos La tabla resultante sería 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
Función SQL COUNT La función COUNT devuelve el número de filas de la consulta, es decir, el número de registros que cumplen una determinada condición. Los valores nulos no serán contabilizados. Sintaxis de SQL COUNT: SELECT COUNT(columna) FROM tabla Para obtener el número de filas de una tabla SELECT COUNT(*) FROM tabla Para obtener el número 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 número 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 número de filas del resultado de la consulta, es decir, 1 SELECT COUNT(*) FROM pedidos WHERE precio > 270 Devolverá el número de filas del resultado de la consulta, es decir, 2
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
72
Material SQL 2008
Función SQL FIRST La función 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
Función SQL LAST La función SQL LAST sirve para obtener el valor de una columna de la última fila de la selección. 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
Función SQL MAX La función 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 máximo valor de la columna ‘precio’ de la consulta.
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
75
Material SQL 2008
Función SQL MIN La función MIN sirve para obtener el valor más pequeño 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 más pequeño de la columna ‘precio’ de la consulta.
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
76
Material SQL 2008
Función SQL SUM La función SUM permite obtener la suma total de los valores de una columna de tipo numérico. 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 función 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 también por varias columnas. GROUP BY columna1, columna2
Material Recopilado por WMCA - http://sql.11sql.com/ Pag.
79
Material SQL 2008
FUNCION SQL HAVING La función HAVING se utiliza para incluir condiciones con alguna función SQL del tipo SUM, MAX, .. Como la cláusula 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) < número 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
RUIZ
SUM(precio)
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 también 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
Función SQL UCASE La función UCASE sirve para convertir a mayúsculas 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
Función SQL LCASE La función LCASE sirve para convertir a minúsculas 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
Función SQL MID La función 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 posición desde la que empezar a extraer. ‘longitud’ es el número 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
Función SQL LEN La función 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
Función SQL ROUND La función ROUND se utiliza para redondear un campo numérico en un número 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 números 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
Función SQL NOW La función 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