Curso de MySQL
Consultas, lista de correo 'C++ Con Clase' 'MySQL Con Clase' página de entrada Tabla de contenido Contactar con Webmaster
Curso Sentencias Funciones API C

SQL

Sentencias

ALTER TABLE ANALYZE TABLE BACKUP TABLE BEGIN BEGIN WORK CHECK TABLE CHECKSUM TABLE COMMIT CREATE DATABASE CREATE TABLE CREATE USER DELETE DESCRIBE DO DROP DATABASE DROP INDEX DROP TABLE DROP USER FLUSH GRANT HANDLER INSERT INSERT ... SELECT INSERT DELAYED KILL LOAD DATA LOCK TABLES OPTIMIZE TABLE RENAME TABLE REPAIR TABLE REPLACE RESET REVOKE ROLLBACK SELECT SET SET TRANSACTION SHOW SHOW CHARACTER SET SHOW COLLATION SHOW COLUMNS SHOW CREATE DATABASE SHOW CREATE TABLE SHOW CREATE VIEW SHOW DATABASES SHOW ENGINES SHOW ERRORS SHOW GRANTS SHOW INDEX SHOW INNODB STATUS SHOW KEYS SHOW LOGS SHOW PRIVILEGES SHOW PROCESSLIST SHOW STATUS SHOW TABLE STATUS SHOW TABLES SHOW VARIABLES SHOW WARNINGS START TRANSACTION TRUNCATE UNION UNLOCK TABLES UPDATE USE

JOIN

MySQL soporta las siguientes sintaxis para JOIN para ser usadas como la parte de referencia de tabla en sentencias SELECT y sentecias DELETE y UPDATE multitabla:

table_reference, table_reference
table_reference [INNER | CROSS] JOIN table_reference [join_condition]
table_reference STRAIGHT_JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference [join_condition]
table_reference NATURAL [LEFT [OUTER]] JOIN table_reference
{ OJ table_reference LEFT OUTER JOIN table_reference
    ON conditional_expr }
table_reference RIGHT [OUTER] JOIN table_reference [join_condition]
table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference

Donde table_reference se define como:

tbl_name [[AS] alias]
    [[USE INDEX (key_list)]
      | [IGNORE INDEX (key_list)]
      | [FORCE INDEX (key_list)]]

Y join_condition se define como:

ON conditional_expr | USING (column_list)

Generalmente no será necesario especificar condiciones en la parte ON para restringir qué filas se quieren en el conjunto de resultados, pero es mejor especificar esas condiciones en la cláusula WHERE. Hay algunas excepciones a esta regla.

Hay que tener en cuenta que la sintaxis INNER JOIN permite una join_condition sólo a partir de MySQL 3.23.17. Para JOIN y CROSS JOIN sólo se permite a partir de MySQL 4.0.11.

La sintaxis { OJ ... LEFT OUTER JOIN ...} mostrada anteriormente sólo existe por compatibilidad con ODBC.

Desde MySQL 3.23.12, se pueden obtener pistas sobre cuáles son los índices que debe usar MySQL cuando recupere información desde una tabla. Mediante la especificación de USE INDEX (key_list), se puede indicar a MySQL que use sólo uno de los índices posibles para encontrar filas en una tabla. La sintaxis alternativa IGNORE INDEX (key_list) se puede usar para indicar a MySQL que no use algún índice particular. Estas pistas son aconsejable si EXPLAIN muestra que MySQL está usando el índice equivocado de una lista de posibles índices.

A partir de MySQL 4.0.9, se puede usar FORCE INDEX. Esto funciona como USE INDEX (key_list) pero con el añadido de que se asumirá que un recorrido secuencial de la tabla será demasiado costoso. En otras palabras, se usará un un recorrido secuencial sólo si no hay modo de usar uno de los índices dados para encontrar filas en la tabla.

USE KEY, IGNORE KEY y FORCE KEY son sinónimos de USE INDEX, IGNORE INDEX y FORCE INDEX.

Nota: USE INDEX, IGNORE INDEX y FORCE INDEX sólo afectan a aquellos índices usados cuando MySQL decide el modo de encontrar filas en la tabla y cómo hacer la reunión. No afectan a si un índice será usado cuando se resuelva una cláusula ORDER BY o GROUP BY.

Algunos ejemplos de reunión:

mysql> SELECT * FROM table1,table2 WHERE table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 USING (id);
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id
    ->          LEFT JOIN table3 ON table2.id=table3.id;
mysql> SELECT * FROM table1 USE INDEX (key1,key2)
    ->          WHERE key1=1 AND key2=2 AND key3=3;
mysql> SELECT * FROM table1 IGNORE INDEX (key3)
    ->          WHERE key1=1 AND key2=2 AND key3=3;

(4.1.1)