Vous êtes sur la page 1sur 16

MySQL Lenguaje DML

ndice
1. 2. Introduccin.......................................................................................................................................................... 1 Sintaxis de INSERT ................................................................................................................................................ 1 Sintaxis de INSERT ... SELECT ......................................................................................................................................... 3 3. 4. 5. 6. 7. 8. 9. Sintaxis de LOAD DATA INFILE ................................................................................................................................ 4 Sintaxis de UPDATE................................................................................................................................................ 5 Sintaxis de DELETE ................................................................................................................................................ 6 Sintaxis de REPLACE .............................................................................................................................................. 8 Sintaxis de TRUNCATE............................................................................................................................................ 8 Sintaxis de SELECT ................................................................................................................................................ 9 Sintaxis de DO .....................................................................................................................................................16

1. Introduccin
Un Lenguaje de Manipulacin de Datos (Data Manipulation Language, DML) es un lenguaje proporcionado por el sistema de gestin de base de datos que permite a los usuarios las tareas de manipulacin de los datos. En una base de datos relacional.

2. Sintaxis de INSERT
Permite insertar una fila en la tabla, es decir, aadir un registro de informacin a una tabla. INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] Inserta registros basados en valores explcitamente especificados.

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] Inserta registros basados en valores explcitamente especificados.

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] Inserta registros seleccionados de una o varias tablas. tbl_name es la tabla en que los registros deben insertarse. Las columnas para las que el comando proporciona valores pueden especificarse como sigue:

La lista de nombres de columna o la clusula SET indican las columnas explcitamente.

Tema 9

MySQL Lenguaje DML

Si no especifica la lista de columnas para INSERT... VALUES o INSERT ... SELECT, los valores para cada columna en la tabla deben proporcionarse en la lista VALUES o por el SELECT. Si no sabe el orden de las columnas en la tabla, use DESCRIBE tbl_name para encontrarlo.

Los valores de columna pueden darse de distintos modos:

Si no est ejecutando el modo estricto, cualquier columna que no tenga un valor asignado explcitamente recibe su valor por defecto (explcito o implcito). Si se est ejecutando en modo estricto, cualquier valor no correcto generar un error. Si la lista de columnas y la lista VALUES estn vacas, INSERT crea un registro con cada conjunto de columnas con sus valores por defecto:

mysql> INSERT INTO tbl_name () VALUES();

En modo STRICT obtendr un error si una columna no tiene un valor por defecto

Puede especificar una expresin

expr

para proporcionar un valor de columna. Una expresin expr puede referirse a

cualquier columna que se haya asignado antes en una lista de valores. Por ejemplo, puede hacer esto porque el valor para col2 se refiere a col1, que se ha asignado previamente:

mysql> INSERT INTO tbl_name (col1,col2) VALUES(15, col1*2);

Una excepcin involucra a columnas que contienen valores AUTO_INCREMENT. Como el valor AUTO_INCREMENT se genera tras otras asignaciones de valores, cualquier referencia a una columna AUTO_INCREMENT en la asignacin retorna un 0.

El comando INSERT soporta los siguientes modificadores:

Si usa la palabra DELAYED, el servidor pone el registro o registros a ser insertados en un buffer, y el cliente realizando el comando INSERT DELAYED puede continuar. Si la tabla est en uso, el servidor trata los registros. Cuando la tabla se libera, el servidor comienza a insertar registros, chequeando peridicamente para ver si hay alguna peticin de lectura para la tabla. Si la hay, la cola de registros retardados se suspende hasta que la tabla se libera de nuevo.

Si usa la palabra LOW_PRIORITY, la ejecucin de INSERT se retrasa hasta que no hay otros clientes leyendo de la tabla. Esto incluye a otros clientes que comiencen a leer mientras que los clientes existentes estn leyendo, y mientras el comando INSERT LOW_PRIORITY est en espera. Es posible, por lo tanto, para un cliente que realice un comando INSERT LOW_PRIORITY esperar durante mucho tiempo (o incluso para siempre) en un entorno de muchas lecturas. (Esto es un contraste de INSERT DELAYED, que deja al cliente continuar. Tenga en cuenta que LOW_PRIORITY no debe usarse normalmente con tablas MyISAM y que hacerlo deshabilita inserciones concurrentes.

Si especifica HIGH_PRIORITY, deshabilita el efecto de la opcin --low-priority-updates si el servidor se arranc con esa opcin. Hace que las inserciones concurrentes no se usen. Si usa la palabra IGNORE en un comando INSERT, los errores que ocurren mientras se ejecuta el comando se tratan como advertencias. Con IGNORE, los valores invlidos se ajustan al valor ms cercano y se insertan; las advertencias se producen pero el comando no se aborta.

Si especifica ON DUPLICATE KEY UPDATE:

o o

Se inserta un registro que duplicara un valor en un ndice UNIQUE o PRIMARY KEY, se realiza un UPDATE del antiguo registro. Permite el uso de la funcin VALUES (col_name) en la clusula UPDATE que se refiere a los valores de columna de la porcin INSERT del comando INSERT ... UPDATE . En otras palabras, VALUES (col_name) en la clusula UPDATE se refiere al valor de col_name que se insertaran, no ocurre conflicto de clave duplicada. Esta funcin es Tema 9

MySQL Lenguaje DML

especialmente til en inserciones de mltiples registros. La funcin VALUES () tiene sentido slo en comandos INSERT ... UPDATE y retorna NULL de otro modo.

Ejemplo:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) -> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

Este comando es idntico a los siguientes dos comandos:

INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=3; INSERT INTO table (a,b,c) VALUES (4,5,6) -> ON DUPLICATE KEY UPDATE c=9;

Cuando usa ON DUPLICATE KEY UPDATE, la opcin DELAYED se ignora. Puede encontrar el valor usado para una columna AUTO_INCREMENT usando la funcin SQL LAST_INSERT_ID() Si usa un comando INSERT ... VALUES con listas de mltiples valores o INSERT ... SELECT, el comando retorna una cadena de informacin en este formato:

Records: 100 Duplicates: 0 Warnings: 0

Records indica el nmero de registros procesados por el comando. (Este no es necesariamente el nmero de registros realmente insertados, ya que Duplicates puede ser distinto a cero). Duplicates indica el nmero de registros que no pueden insertarse ya que duplicaran algunos valores de ndice nicos existentes. Warnings indica el nmero de intentos para insertar valores de columna que fueron problemticos por algo. Las advertencias pueden ocurrir bajo cualquiera de las siguientes condiciones: o Insertar NULL en una columna que se ha declarado NOT NULL. Para comandos INSERT de mltiples columnas o comandos INSERT INTO... SELECT, la columna se asigna con el valor por defecto para el tipo de datos de la columna. Este es: 0 para tipos numricos. La cadena vaca ('') para tipos de cadenas. El valor cero para tipos de fecha y hora.

Un

valor

fuera

de

rango

en

cualquier

tipo

de

columna

produce

un

error

de

tipo

fuera

de

rango.

Sintaxis de INSERT ... SELECT


Es una variante de la sentencia INSERT consiste en utilizar la sentencia SELECT para obtener un conjunto de datos y, posteriormente, insertarlos en la tabla. INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] Con INSERT ... SELECT, puede insertar rpidamente varios registros en una tabla desde una o varias tablas.

Tema 9

MySQL Lenguaje DML Por ejemplo:

INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100; La siguiente condicin sirve para un comando INSERT ... SELECT :

Especifique IGNORE explcitamente para ignorar registros que causaran violaciones de clave duplicada. La tabla objetivo del comando INSERT puede aparecer en la clusula FROM de la parte SELECT de la consulta. Las columnas AUTO_INCREMENT funcionan normalmente. Actualmente, no puede insertar en una tabla y seleccionar de la misma tabla en una subconsulta. Puede usar REPLACE en lugar de INSERT para sobrescribir registros antiguos. REPLACE es la opuesta de INSERT IGNORE.

3. Sintaxis de LOAD DATA INFILE


Permite insertar datos a partir de un fichero de texto. LOAD DATA [LOCAL] INFILE file_name.txt [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY '\t'] [[OPTIONALLY] ENCLOSED BY ''] [ESCAPED BY '\\' ] ] [LINES [STARTING BY ''] [TERMINATED BY '\n'] ] [IGNORE number LINES] [(col_name,...)]

La clusula LOCAL indica, si aparece, que el fichero est en el ordenador del cliente. Si no se especifica el fichero de texto se buscar en el servidor, concretamente en el mismo directorio donde est la base de datos. Esto nos permite importar datos desde nuestro ordenador en un sistema en que el servidor de MySQL se encuentra en otra mquina. Las clusulas REPLACE e IGNORE afectan al modo en que se tratan las filas ledas que contengan el mismo valor para una clave principal o nica para una fila existente en la tabla. Si se especifica REPLACE se sustituir la fila actual por la leda. Si se especifica IGNORE el valor ledo ser ignorado. La parte INTO TABLA tbl_name indica en qu tabla se insertarn los valores ledos. La clusula FIELDS se refiere a las opciones de cada columna: TERMINATED BY 'carcter': nos permite elegir el carcter delimitador que se usar para separar cada columna. Por defecto, el valor que se usa es el tabulador, pero podemos usar ';', ',', etc. [OPTIONALLY] ENCLOSED BY 'carcter': sirve para elegir el carcter usado para entrecomillar cada columna. Por defecto no se entrecomilla ninguna columna, pero podemos elegir cualquier carcter. Si se aade la palabra OPTIONALLY slo se entrecomillarn las columnas de texto y fecha. ESCAPED BY 'carcter': sirve para indicar el carcter que se usar para escapar aquellos caracteres que pueden dificultar la lectura posterior del fichero. Por ejemplo, si terminamos las columnas con ',' y no las entrecomillamos, un carcter ','

Tema 9

MySQL Lenguaje DML

dentro de una columna de texto se interpretar como un separador de columnas. Para evitar esto se puede escapar esa coma con otro carcter. Por defecto se usa el carcter '\'.

La clusula LINES se refiere a las opciones para cada fila: STARTING BY 'carcter': permite seleccionar el carcter para comenzar cada lnea. Por defecto no se usa ningn carcter para ello. TERMINATED BY 'carcter': permite elegir el carcter para terminar cada lnea. Por defecto es el retorno de lnea, pero se puede usar cualquier otro carcter o caracteres, por ejemplo '\r\n'. IGNORE nmero LINES, que nos permite que las primeras nmero lneas no se interpreten como datos a importar. Es frecuente que los ficheros de texto que usaremos como fuente de datos contengan algunas cabeceras que expliquen el contenido del fichero, o que contengan los nombres de cada columna. Usando esta clusula podemos ignorarlas. La ltima parte nos permite indicar la columna a la que ser asignada cada una de las columnas ledas, esto ser til si el orden de las columnas en la tabla no es el mismo que en el fichero de texto, o si el nmero de columnas es diferente en ambos.

Por ejemplo, supongamos que queremos aadir el contenido del fichero empleados.txt LOAD DATA LOCAL INFILE EMPLEADOS.TXT INTO TABLE EMPLEADOS FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 2 LINES (CODIGO, COMISION,NOMBRE);

4. Sintaxis de UPDATE
Sintaxis para una tabla:

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count] Sintaxis para mltiples tablas:

UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] El comando UPDATE actualiza columnas en registros de tabla existentes con nuevos valores. La clusula SET indica qu columna modificar y los valores que puede recibir. La clusula WHERE, si se da, especifica qu registros deben actualizarse. De otro modo, se actualizan todos los registros. Si la clusula ORDER BY se especifica, los registros se actualizan en el orden que se especifica. La clusula LIMIT es el lmite de registros a actualizar.

Tema 9

MySQL Lenguaje DML El comando UPDATE soporta los siguientes modificadores:

Si usa la palabra clave LOW_PRIORITY , la ejecucin de UPDATE se retrasa hasta que no haya otros clientes leyendo de la tabla. Si usa la palabra clave IGNORE, el comando de actualizacin no aborta incluso si ocurren errores durante la actualizacin. Los registros que presenten conflictos de clave duplicada no se actualizan. Se permite actualizar columnas con expresiones.

mysql> UPDATE persondata SET age=age+1;

Las asignaciones UPDATE se evalan de izquierda a derecha. Por ejemplo, el siguiente comando dobla la columna age y luego la incrementa:

mysql> UPDATE persondata SET age=age*2, age=age+1;

Si pone en una columna el valor que tiene actualmente, MySQL se da cuenta y no la actualiza. Si actualiza una columna declarada como NOT NULL con un valor NULL provoca un error. UPDATE retorna el nmero de registros que se cambian. En MySQL 5.0, la funcin mysql_info() de la API de C retorna el nmero de registros coincidentes actualizados y el nmero de advertencias que ocurren durante el UPDATE. Puede usar LIMIT row_count para restringir el alcance del UPDATE. Una clusula LIMIT es una restriccin de registros coincidentes. El comando para en cuanto encuentra row_count registros que satisfagan la clusula WHERE , tanto si han sido cambiados como si no.

Si un comando UPDATE incluye una clusula ORDER BY, los registros se actualizan en el orden especificado por la clusula. Puede realizar operaciones UPDATE que cubran varias tablas. La parte table_references lista las tablas involucradas en el join. Aqu hay un ejemplo:

UPDATE items,month SET items.price=month.price WHERE items.id=month.id;

Este ejemplo muestra un inner join usando el operador coma.

Los comandos UPDATE de mltiples tablas pueden usar cualquier tipo de join permitido en comandos SELECT tales como LEFT JOIN.

Nota: No puede usar ORDER BY o LIMIT con un UPDATE de mltiples tablas.

En MySQL 5.0, necesita el permiso UPDATE slo para columnas referenciadas en un UPDATE de mltiples tablas que se actualizan realmente. Necesita slo el permiso SELECT para algunas columnas que se leen pero no se modifican. Si usa un comando UPDATE de mltiples tablas que involucren tablas InnoDB con restricciones de claves forneas, el optimizador de MySQL puede procesar tablas en un orden distinto al de la relacin padre/hijo. En este caso, el comando falla y hace un roll back. En su lugar, actualice una nica tabla y confen en las capacidades de ON UPDATE que proporciona InnoDB para que el resto de tablas se modifiquen acordemente.

5. Sintaxis de DELETE
Sintaxis para una tabla:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name [WHERE where_definition] Tema 9

MySQL Lenguaje DML [ORDER BY ...] [LIMIT row_count]

Sintaxis para mltiples tablas:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] tbl_name[.*] [, tbl_name[.*] ...] FROM table_references [WHERE where_definition]

O:

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name[.*] [, tbl_name[.*] ...] USING table_references [WHERE where_definition]

DELETE borra los registros de tbl_name que satisfacen la condicin dada por where_definition, y retorna el nmero de registros borrados. Sin clusula WHERE se borran todos los registros. Una forma ms rpida de hacerlo, cuando no quiere saber el nmero de registros borrados, se usa TRUNCATE TABLE. Si borra el registro conteniendo el mximo valor para una columna AUTO_INCREMENT, el valor se reusa para una tabla BDB, pero no para tablas MyISAM o InnoDB. El comando DELETE soporta los siguientes modificadores: o Si especifica LOW_PRIORITY, la ejecucin de DELETE se retarda hasta que no hay ms clientes leyendo de la tabla. o Para tablas MyISAM, si usa la palabra QUICK, el motor de almacenamiento no mezcla las hojas del ndice durante el borrado, que puede acelerar algunos tipos de operaciones de borrado. o En MySQL 5.0, la palabra clave IGNORE hace que MySQL ignore todos los errores durante el proceso de borrar registros. (Los errores encontrados durante la etapa de parseo se procesan de la forma habitual.) Los errores que se ignoran debido al uso de esta opcin se retornan como advertencias (warnigs).

La opcin de MySQL LIMIT row_count para DELETE le dice al servidor el mximo nmero de registros a borrar antes de retornar el control al cliente. Si el comando DELETE incluye una clusula ORDER BY, los registros se borran en el orden especificado por la clusula. Esto es muy til slo en conjuncin con LIMIT. Por ejemplo, el siguiente ejemplo encuentra registros coincidentes con la clusula WHERE ordenados por timestamp_column, y borra el primero (el ms viejo).

DELETE FROM somelog WHERE user = 'jcole' ORDER BY timestamp_column LIMIT 1;

Puede especificar mltiples tablas en un comando DELETE para borrar registros de una o ms tablas dependiendo de una condicin particular en mltiples tablas. Sin embargo, no puede usar ORDER BY o LIMIT en un DELETE de mltiples tablas. table_references lista las tablas involucradas en el join. o Para la primera sintaxis, slo los registros coincidentes de las tablas listadas antes de la clusula FROM se borran.

DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id; Tema 9

MySQL Lenguaje DML o

Para la segunda sintaxis, slo los registros coincidentes de las tablas listadas en la clusula FROM (antes de la clusula USING) se borran. El efecto es que puede borrar registros para varias tablas al mismo tiempo y tienen tablas adicionales que se usan para buscar:

DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;

Estos comandos usan las tres tablas al buscar registros a borrar, pero borrar los registros coincidentes slo para las tablas t1 y t2. Los ejemplos anteriores muestran inner join usando el operador coma, pero comandos DELETE de varias tablas pueden usar cualquier tipo de join permitido por comandos SELECT tales como LEFT JOIN. La sintaxis permite .* tras los nombres de tabla para compatibilidad con Access. Si usa un comando DELETE de varias tablas incluyendo tablas InnoDB para las que hay restricciones de clave fornea, el optimizador MySQL puede procesar tablas en un orden distinto del de su relacin padre/hijo. En este caso, el comando falla y se deshace. En su lugar, debe borrar de una tabla nica y confiar en la capacidad de ON DELETE que proporciona InnoDB para hacer que las otras tablas se modifiquen correctamente.

Actualmente, no puede borrar desde una tabla y seleccionar de la misma tabla en una subconsulta.

6. Sintaxis de REPLACE
REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),... O:

REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name SET col_name={expr | DEFAULT}, ... O:

REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] SELECT ... REPLACE funciona exactamente como INSERT, excepto que si un valor de la tabla tiene el mismo valor que un nuevo registro para un ndice PRIMARY KEY o UNIQUE , el antiguo registro se borra antes de insertar el nuevo. Si la tabla no dispone de ndice PRIMARY KEY, o UNIQUE usar un comando REPLACE no tiene sentido. Para usar REPLACE, debe tener los permisos INSERT y DELETE para la tabla. El comando REPLACE retorna un contador con el nmero de registros afectados. Esta es la suma de registros borrados e insertados.

7. Sintaxis de TRUNCATE
TRUNCATE TABLE tbl_name TRUNCATE TABLE vaca una tabla completamente. Lgicamente, esto es equivalente a un comando DELETE que borre todos los registros, pero hay diferencias prcticas bajo ciertas circunstancias. Para InnoDB antes de la versin 5.0.3, TRUNCATE TABLE se mapea a DELETE, as que no hay diferencia. A partir de MySQL/InnoDB-5.0.3, est disponible TRUNCATE TABLE muy rpido. La operacin se mapea a DELETE si hay restricciones de clave fornea que referencien la tabla. Para otros motores, TRUNCATE TABLE difiere de DELETE FROM en los siguientes puntos en MySQL 5.0: Tema 9

MySQL Lenguaje DML

Las operaciones de truncado destruyen los datos pero mantiene la estructura de la tabla. En las operaciones de truncado ocurre un error al intentar un truncado durante una transaccin o un bloqueo de tabla. No se retorna el nmero de registros borrados. Mientras el fichero de definicin de la tabla tbl_name.frm sea vlido, la tabla puede recrearse como una vaca con TRUNCATE TABLE, incluso si los ficheros de datos o de ndice se han corrompido. El tratador de tablas no recuerda el ltimo valor AUTO_INCREMENT usado, pero empieza a contar desde el principio. Esto es cierto incluso para MyISAM y InnoDB, que normalmente no reutilizan valores de secuencia. TRUNCATE TABLE es una extensin de Oracle SQL adoptada en MySQL.

8. SELECT
8.1. Introduccin La sentencia SELECT es la sentencia ms compleja de todas. Como hemos visto, se utiliza para consultar informacin de determinadas tablas. Es posible ejecutar consultas muy sencillas y muy complejas.

Sintaxis completa

SELECT [DISTINCT] select_expr, [select_expr] FROM tablas [WHERE filtro [GROUP BY atributos[HAVING predicado de grupo]] {[UNION\UNION ALL \INTERSECT\MINUS] seleccion} [ORDER BY atributo/s [(ASC\DESC)]]; 8.2. Consultas Bsicas

SELECT [DISTINCT] select_expr, [select_expr] FROM tablas DISTINCT, parmetro opcional que fuerza que solo se muestren los registros con valores distintos, o, dicho de otro modo, que suprima las repeticiones. select_expr, columnas que se muestran. o nombre_columna [AS alias] * expresin

Tema 9

MySQL Lenguaje DML

10

8.3. Filtros Los filtros son condiciones que cualquier SGBD interpreta para seleccionar registros y mostrarlos como resultado de la consulta.

SELECT [DISTINCT] select_expr, [select_expr] FROM tablas [WHERE filtro filtro es una expresin que indica la/s condicin/es que deben satisfacer los registros. Tema 9

MySQL Lenguaje DML

11

SELECT * FROM VEHICULOS WHERE MARCA = SEAT; 8.3.1. Expresiones para filtros

Los filtros se construyen mediante expresiones. Una expresin es una combinacin de operadores, operandos y funciones que producen un resultado.

SELECT (2+3) >(6*2), muestra 0 pq es falso que 5>12 Elementos que pueden formar parte de las expresiones: Operandos: Los operandos pueden ser constantes, 3, 2.3,Espaa,2012,01,03 o variables como edad. Operadores Aritmeticos: +, -, *, /,%; Operadores Relaciones, sirven para comparar dos operandos. Operador = > < >= <= != <> BETWEEN Significado Igual Mayor Menor Mayor o igual Menor o igual Distinto Distinto Comparacin con rango

Operadores lgicos. Los operadores lgicos toman como operandos valores lgicos, es decir, cierto o falso, en SQL 1 o 0. Operador AND OR NOT Significado Y NO

Tema 9

MySQL Lenguaje DML 8.3.2.

12

Parntesis. Sirven para alterar la prioridad de los operadores. Funciones. Funciones que incorpora cada SGBD para gestionar fechas, cadenas, nmeros Construccin de filtros

Ejemplos Seleccionar los nombres de los jugadores de los Lakers. Seleccionar los jugadores espaoles de los Lakers. Seleccionar los jugadores espaoles y eslovenos de los Lakers.

8.3.3.

Filtros con operador de pertenencia a conjuntos (IN)

Operador de pertenencia a conjuntos IN, cuya sintaxis es, nombre_columna IN (valo1, valor2.) Ejemplo Seleccionar los jugadores espaoles, eslovenos o serbios de los Lakers.

8.3.4.

Filtros con operador de rango

El operador BETWEEN permite seleccionar los registros que estn incluidos en un rango. Su sintaxis es nombre_columna BETWEEN valor1 AND valor2.

Ejemplo Seleccionar los jugadores de la nba cuyo peso este entre 270 y 300 libras. Mostrar el peso en kilogramos de los jugadores de la NBA que pesen entre 120 y 150 kilos. Una libra equivales a 0.4535 kilos. 8.3.5. Filtros con test de patrn

Selecciona los registros que cumplan una serie de carcteristicas. Compara una expresin con una cadena que contiene uno o ms comodines, que segn el estndar son % - .

SELECT * FROM VEHICULOS WHERE MARCA = %tdi%;

El carcter comodn % busca coincidencias de cualquier numero de caracteres, incluso cero caracteres.

El carcter comodn busca coincidencias de exactamente un carcter.

Ejemplo Seleccionar los equipos que empiecen por R, que terminen por S y que tengan 7 caracteres. Seleccionar los equipos cuyo nombre contenga como segunda letra la o.

8.3.6.

Filtros con lmite de nmero de registros Este tipo de filtros nos es estndar, depende del SGBD,. Consiste en limitar el nmero de registros devueltos por

una consulta. Su sintaxis es LIMIT [desplazamiento] nfilas,

nfilas, especifica el numero de filas a devolver y desplazamiento especifica a partir de qu fila se empieza a contar.

Ejemplo Seleccionar los primeros 5 equipos. Seleccionar los 3 primeros equipos a partir del 5.

Tema 9

MySQL Lenguaje DML

13

8.4. Ordenacin Para mostrar ordenados un conjunto de registros se utiliza la clusula ORDER BY de la sentencia SELECT. Permite ordenar de forma ascendente (ASC) valor por defecto o de forma descendente (DES).

SELECT [DISTINCT] select_expr, [select_expr] FROM tablas [WHERE filtro [ORDER BY atributo/s [(ASC\DESC)]]; Ejemplo

Seleccionar los equipos de la conferencia Oeste de la nba ordenados de forma ascendente por divisin. Seleccionar los equipos de la conferencia Oeste de la nba ordenados de forma ascendente por divisin y de forma descendente por nombre.

8.5. Consultas de resumen

Son consultas mas complejas cuyos resultados se obtienen extrayendo la informacin calculada de varios conjuntos de registros. El resultado SIEMPRE es un nico valor.

SELECT COUNT(*) FROM VEHICULOS;

FUNCIN Count() Max() Min() Sum() Avg()

SIGNIFICADO Cuenta registros Devuelve el mximo Devuelve el mnimo Devuelve la suma Devuelve la media

Ejemplo

Cunto pesa el jugador ms pesado de la nba? Cunto mide el jugador ms bajito de la nba? Cuntos jugadores tienen los Lakers? Cunto pesan de media los jugadores de los Blazers?

Con las consultas resumen se pueden realizar agrupaciones de registros. Se denomina agrupacin de registros a un conjunto de registros que cumplen que tienen una o varias columnas con el mismo valor. Para hacer grupos de utiliza la clusula GROUP BY.

Ejemplo

Cunto pesa el jugador ms pesado de cada equipo? Cuntos equipos tiene cada conferencia en la nba? Cunto pesan de media los jugadores de Espaa, Italia y Francia? Tema 9

MySQL Lenguaje DML 8.5.1. Filtros de Grupos

14

Los filtros de grupos deben realizarse mediante el uso de la clusula HAVING puesto que WHERE acta antes de agrupar los registros. Es decir, s se desea filtrar resultados calculados mediante agrupaciones de debe usar la siguiente sintaxis:

SELECT [DISTINCT] select_expr, [select_expr] FROM tablas [WHERE filtro [GROUP BY atributos[HAVING predicado de grupo]] [ORDER BY atributo/s [(ASC\DESC)]]; Ejemplo Seleccionar los equipos de la nba cuyos jugadores pesen de media ms de 228 libras. Seleccionar qu equipos de la nba tienen ms de 1 jugador espaol

8.6. Subconsultas Las subconsultas se utilizan para realizar filtrados con los datos de otra consulta. Estos filtros pueden ser aplicados tanto en las clusulas WHERE para filtrar registros como en la clusula HAVING para filtrar grupos.

Ejemplo Nombres de los jugadores de la divisin SouthWest.

8.6.1.

Test de comparacin Consiste en usar los operadores de comparacin para comparar el valor producido con un valor nico generado por

una subconsultas.

Ejemplo Consultar el nombre del jugador de mayor altura de la nba.

8.6.2.

Test de pertenencia a conjunto

Consiste en usar el operador IN para filtrar los registros cuya expresin coincida con algun valor producido por la subconsultas. Ejemplo Consultar las divisiones de la nba donde juegan jugadores espaoles.

8.6.3.

Test de existencia El test de existencia permite filtrar los resultados de una consulta si existen filas en la subconsultas asociada, esto

es, si la consulta genera un nmero de filas distinto de 0. Se utiliza el operador EXISTS. Puede estar precedido de la negacin NOT.

SELECT columnas FROM tabla WHERE EXISTS (subconsulta)

Tema 9

MySQL Lenguaje DML

15

Ejemplo Seleccionar los equipos que no tengan jugadores espaoles.

8.6.4.

Test cuantificados ALL y ANY

Los test cuantificados sirven para calcular la relacin entre una expresin y todos los registros de la subconsultas (ALL) o algunos (ANY).

Ejemplo Jugadores de la nba que pesan ms que todos los jugadores espaoles.

8.6.5.

Subconsultas anidadas Se puede usar una subconsultas para filtrar los resultados de otra subconsulta. De esta manera se anidan

subconsultas. Ejemplo Obtener el nombre de la ciudad donde juega el jugador ms alto de la nba

8.7. Consultas Multitabla

Una consulta multitabla es aquella en la que se puede consultar informacin de ms de una tabla. Se aprovechan los campos relacionados de las tablas para unirlas (join).

Producto Cartesiano. Sentencia JOIN 8.7.1. Combinacin Interna (INNER JOIN)

Con esta operacin es calculado el producto cruzado de todos los registros; as cada registro en la tabla A es combinado con cada registro de la tabla B; pero slo permanecen aquellos registros en la tabla combinada que satisfacen las condiciones que se especifican. Es el JOIN ms utilizado. Hay que tener especial cuidado con los valores NULL estos no se combinarn con otros valores ni siquiera un NULL, excepto que se le agreguen predicados tales como IS NULL IS NOT NULL.

De equivalencia (equi-join)

Es una especie de theta-join que usa comparaciones de igualdad en el predicado JOIN. Cuando se usan operadores, tales como < o > no se pueden clasificar en este rango.

Natural (Natural join)

Es una especializacin de la combinacin de equivalencia, anteriormente mencionada. En este caso se comparan todas las columnas que tengan el mismo nombre en ambas tablas. La tabla resultante contiene slo una columna por cada para de columnas con el mismo nombre.

8.7.2.

Combinacin externa (OUTER JOIN)

OUTER JOIN, mediante esta operacin no se requiere que cada registro en las tablas a tratar tenga un registro equivalente en la otra tabla. El registro es mantenido en la tabla combinada si no existe otro registro que le corresponda. Este tipo de operacin se subdivide dependiendo de la tabla a la cual se le admitirn los registros que no tienen correspondencia, ya sean de tabla izquierda, de tabla derecha o combinacin completa.

Tema 9

MySQL Lenguaje DML

16 De tabla izquierda (LEFT OUTER JOIN), el resultado de esta operacin siempre contiene todos los registros de la tabla de la izquierda con los valores de la tabla de la derecha correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. De tabla derecha (RIGHT OUTER JOIN), el resultado de esta operacin siempre contiene todos los registros de la tabla de la derecha con los valores de la tabla de la izquierda correspondientes, o retorna un valor nulo NULL en caso de no correspondencia. Combinacin completa (FULL OUTER JOIN), esta operacin presenta los resultados de tabla izquierda y tabla derecha aunque no tengan correspondencia en la otra tabla. La tabla combinada contendr, entonces, todos los registros de ambas tablas y presentar valores nulos NULLs para registros sin pareja.

9. Sintaxis de DO
DO expr [, expr] ...

DO ejecuta la expresin pero no retorna ningn resultado. Esto es una abreviacin de SELECT ventaja que es ms rpido cuando no le importa el resultado.

expr,

..., pero tiene la

DO es til principalmente con funciones que tienen efectos colaterales, tales como RELEASE_LOCK (), (funcin para liberar un bloqueo).

Tema 9

Vous aimerez peut-être aussi