
CHAR(): Cadena de longitud constante.
CHAR: Sinónimo de CHAR(1). Puede contener un único carácter.
VARCHAR(): Contiene una cadena de longitud variable.
TINYINT: Entero. Rango con signo de -128 a 127. Rango sin singo de 0 a 255.
BIT: Sinónimo de TINYINT(1).
BOOL: Sinónimo de TINYINT(1).
BOOLEAN: Sinónimo de TINYINT(1).
SMALLINT: Entero. Rango con signo de -32768 a 32767. Rango sin singo de 0 a 65535.
MEDIUMINT: Entero. Rango con signo de -8388608 a 8388607. Rango sin signo de 0 y 16777215.
INT: Entero. Rango con signo de -2147483648 a 2147483647. Rango sin singo de 0 a 4294967295.
INTEGER: Sinónimo de INT.
BIGINT: Entero. Rango con signo de -9223372036854775808 a 9223372036854775807. Rango sin signo de 0 a 18446744073709551615.
FLOAT: Real. Contiene un número en coma flotante. precision puede ser menor o igual que 24 para números de precisión sencilla y entre 25 y 53 para números en coma flotante de doble precisión.
FLOAT(): Real. Los valores permitidos son entre -3.402823466E+38 y -1.175494351E-38, 0, y entre 1.175494351E-38 y 3.402823466E+38. Si se especifica el modificador UNSIGNED, los valores negativos no se permiten.
DOUBLE: Real. Los valores permitidos están entre -1.7976931348623157E+308 y -2.2250738585072014E-308, 0, y entre 2.2250738585072014E-308 y 1.7976931348623157E+308. Si se especifica el modificador UNSIGNED, no se permiten los valores negativos.
DOUBLE PRECISION: Sinónimo de DOUBLE.
REAL: Sinónimo de DOUBLE.
DECIMAL: Contiene un número en coma flotante sin empaquetar. Se comporta igual que una columna CHAR: "sin empaquetar" significa qu se almacena como una cadena, usando un carácter para cada dígito del valor.
DEC: Sinónimo de DECIMAL.
NUMERIC: Sinónimo de DECIMAL.
FIXED: Sinónimo de DECIMAL.
DATE: Fecha. El rango soportado está entre '1000-01-01' y '9999-12-31'. MySQL muestra los valores DATE con el formato 'AAAA-MM-DD', pero es posible asignar valores a columnas de este tipo usando tanto números como cadenas.
DATETIME: Fecha y hora. El rango soportado está entre '1000-01-01 00:00:00' y '9999-12-31 23:59:59'. MySQL muestra los valores DATETIME con el formato 'AAAA-MM-DD HH:MM:SS', pero es posible asignar valores a columnas de este tipo usando tanto cadenas como números.
TIMESTAMP: Fecha y hora. El rango está entre '1970-01-01 00:00:00' y algún momento del año 2037.
TIME: Hora. El rango está entre '-838:59:59' y '838:59:59'. MySQL muestra los valores TIME en el formato 'HH:MM:SS', pero permite asignar valores a columnas TIME usando tanto cadenas como números.
YEAR: Contiene un año en formato de 2 ó 4 dígitos (por defecto es 4). Los valores válidos son entre 1901 y 2155, y 0000 en el formato de 4 dígitos. Y entre 1970-2069 si se usa el formato de 3 dígitos (70-69).
TINYBLOB: Contiene una columna BLOB con una longitud máxima de 255 caracteres.
TINYTEXT: Contiene una columna TEXT con una longitud máxima de 255 caracteres.
BLOB: Contiene una columna BLOB con una longitud máxima de 65535 caracteres.
TEXT: Contiene una columna TEXT con una longitud máxima de 65535 caracteres.
MEDIUMBLOB: Contiene una columna BLOB con una longitud máxima de 16777215 caracteres.
MEDIUMTEXT: Contiene una columna TEXT con una longitud máxima de 16777215 caracteres.
LONGBLOB: Contiene una columna BLOB con una longitud máxima de 4294967298 caracteres.
LONGTEXT: Contiene una columna TEXT con una longitud máxima de 4294967298 caracteres.
ENUM: Contiene un enumerado. Un objeto de tipo cadena que puede tener un único valor, entre una lista de valores 'valor1', 'valor2', ..., NULL o el valor especial de error "". Un ENUM puede tener un máximo de 65535 valores diferentes.
SET: Contiene un conjunto. Un objeto de tipo cadena que puede tener cero o más valores, cada uno de los cuales debe estar entre una lista de valores 'valor1', 'valor2', ...

Consulatar versión MySQL y fecha actual:
SELECT VERSION(), CURRENT_DATE;
Sintaxis para mostrar todos los ampos de una tabla:
SELECT * FROM <tabla>;
Crear una base de datos:
CREATE DATABASE prueba;
Averiguar cuántas bases de datos existen en nuestro sistema:
SHOW DATABASES;
Seleccionar una base de datos:
USE prueba;
Sintaxis para definir un campo:
nombre_col tipo [NOT NULL | NULL] [DEFAULT valor_por_defecto]
[AUTO_INCREMENT] [[PRIMARY] KEY] [COMMENT 'string']
[definición_referencia]
Crear tablas con las columnas que indiquemos:Ejemplo 1:
CREATE TABLE gente (nombre VARCHAR(40), fecha DATE);
Ejemplo 2 (valores nulos):
CREATE TABLE ciudad1 (nombre CHAR(20) NOT NULL, poblacion INT NULL);
Ejemplo 3 (valor por defecto):
CREATE TABLE ciudad2 (nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000);
Ejemplo 4 (clave primaria):
CREATE TABLE ciudad3 (nombre CHAR(20) NOT NULL PRIMARY KEY, poblacion INT NULL DEFAULT 5000);
Ejemplo 5 (columnas autoincrementadas):
CREATE TABLE ciudad5 (clave INT AUTO_INCREMENT PRIMARY KEY, nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000);
Ejemplo 6 (comentarios):
CREATE TABLE ciudad6 (clave INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Clave principal', nombre CHAR(50) NOT NULL, poblacion INT NULL DEFAULT 5000);
Sintaxis definición de campos:
definición_columnas
| [CONSTRAINT [símbolo]] PRIMARY KEY (index_nombre_col,...)
| KEY [nombre_index] (nombre_col_index,...)
| INDEX [nombre_index] (nombre_col_index,...)
| [CONSTRAINT [símbolo]] UNIQUE [INDEX]
[nombre_index] [tipo_index] (nombre_col_index,...)
| [FULLTEXT|SPATIAL] [INDEX] [nombre_index] (nombre_col_index,...)
| [CONSTRAINT [símbolo]] FOREIGN KEY
[nombre_index] (nombre_col_index,...) [definición_referencia]
| CHECK (expr)
Sintaxis para definir claves primarias:
definición_columnas
| PRIMARY KEY (index_nombre_col,...)
Ejemplo1:
CREATE TABLE ciudad4 (nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000, PRIMARY KEY (nombre));
Ejemplo 2:
CREATE TABLE mitabla1 (id1 CHAR(2) NOT NULL, id2 CHAR(2) NOT NULL, texto CHAR(30), PRIMARY KEY (id1, id2));
Ejemplo 3 (opciones KEY o INDEX):
CREATE TABLE mitabla2 (id INT, nombre CHAR(19), INDEX (nombre));
CREATE TABLE mitabla3 (id INT, nombre CHAR(19), KEY (nombre)); (Eqivalente a la anterior)
Ejemplo 4 (crear un índice sobre parte de una columna):
CREATE TABLE mitabla4 (id INT, nombre CHAR(19), INDEX (nombre(4)));
Ejemplo 5 (índices con claves únicas):
CREATE TABLE mitabla5 (id INT, nombre CHAR(19), UNIQUE (nombre));
CREATE TABLE mitabla6 (id INT, nombre CHAR(19) NOT NULL, UNIQUE (nombre));
CREATE TABLE mitabla7 (id INT, nombre CHAR(19), PRIMARY KEY (nombre)); (Eqivalente a la anterior)
Ejemplo 6 (claves foráneas):
CREATE TABLE personas (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(40), fecha DATE);
CREATE TABLE telefonos (numero CHAR(12), id INT NOT NULL REFERENCES personas (id) ON DELETE CASCADE ON UPDATE CASCADE);
Nota: En MySQL sólo existe soporte para claves foráneas en tablas de tipo InnoDB.
Sintaxis clve foranea:
CREATE TABLE nombre
definición_de_columnas
[CONSTRAINT [símbolo]] FOREIGN KEY [nombre_index] (nombre_col_index,...)
[REFERENCES nombre_tabla [(nombre_col,...)]
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT]
[ON UPDATE RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT]]
Ejemplo 7 (usando tablas InnoDB):
CREATE TABLE personas2 (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(40), fecha DATE) ENGINE=InnoDB;
CREATE TABLE telefonos2 (numero CHAR(12), id INT NOT NULL, KEY (id), FOREIGN KEY (id) REFERENCES personas2 (id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
Notas:
ON DELETE <opción>, indica que acciones se deben realizar en la tabla actual si se borra una fila en la tabla referenciada.
ON UPDATE <opción>, es análogo pero para modificaciones de claves.
RESTRICT <opción>, esta opción impide eliminar o modificar filas en la tabla referenciada si existen filas con el mismo valor de clave foránea.
CASCADE <opción>, borrar o modificar una clave en una fila en la tabla referenciada con un valor determinado de clave, implica borrar las filas con el mismo valor de clave foránea o modificar los valores de esas claves foráneas.
SET NULL <opción>, borrar o modificar una clave en una fila en la tabla referenciada con un valor determinado de clave, implica asignar el valor NULL a las claves foráneas con el mismo valor.
NO ACTION <opción>, las claves foráneas no se modifican, ni se eliminan filas en la tabla que las contiene.
SET DEFAULT <opción>, borrar o modificar una clave en una fila en la tabla referenciada con un valor determinado implica asignar el valor por defecto a las claves foráneas con el mismo valor.
Ejemplo 8:
CREATE TABLE personas3 (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(40), fecha DATE) ENGINE=InnoDB;
CREATE TABLE telefonos3 (numero CHAR(12), id INT NOT NULL, KEY (id), FOREIGN KEY (id) REFERENCES personas3 (id) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE=InnoDB;
Sintaxis motor de almacenamiento:
{ENGINE|TYPE} = {BDB|HEAP|ISAM|InnoDB|MERGE|MRG_MYISAM|MYISAM }
Notas:
BerkeleyDB o BDB: tablas de transacción segura con bloqueo de página.
HEAP o MEMORY: tablas almacenadas en memoria.
ISAM: motor original de MySQL.
InnoDB: tablas de transacción segura con bloqueo de fila y claves foráneas.
MERGE o MRG_MyISAM: una colección de tablas MyISAM usadas como una única tabla.
MyISAM: el nuevo motor binario de almacenamiento portable que reemplaza a ISAM.
Las tablas MyISAM o InnoDB se usan con mucha frecuencia.
Mostrar estructura de campos:
SHOW COLUMNS FROM gente;
Ver la instrucción usada para crear una tabla:
SHOW CREATE TABLE gente;
Sintaxis para eliminar una tabla:
DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ...
Ejemplos:
DROP TABLE ciudad6;
Nota: Se pueden añadir las palabras IF EXISTS para evitar errores si la tabla a eliminar no existe.
DROP TABLE IF EXISTS ciudad6;
Sintaxis para eliminar una base de datos:
DROP DATABASE [IF EXISTS] db_name
Ejemplo:
CREATE DATABASE borrame;
USE borrame;
CREATE TABLE borrame (id INT, nombre CHAR(40));
SHOW DATABASES;
SHOW TABLES;
DROP DATABASE IF EXISTS borrame;
Ejemplo de creación y manipulación de una base de datos:
CREATE DATABASE meteo;
USE meteo;
CREATE TABLE estacion (
identificador MEDIUMINT UNSIGNED NOT NULL,
latitud VARCHAR(14) NOT NULL,
longitud VARCHAR(15) NOT NULL,
altitud MEDIUMINT NOT NULL,
PRIMARY KEY (identificador)
) ENGINE=InnoDB;
CREATE TABLE muestra (
identificadorestacion MEDIUMINT UNSIGNED NOT NULL,
fecha DATE NOT NULL,
temperaturaminima TINYINT,
temperaturamaxima TINYINT,
precipitaciones SMALLINT UNSIGNED,
humedadminima TINYINT UNSIGNED,
humedadmaxima TINYINT UNSIGNED,
velocidadminima SMALLINT UNSIGNED,
velocidadmaxima SMALLINT UNSIGNED,
KEY (identificadorestacion),
FOREIGN KEY (identificadorestacion)
REFERENCES estacion(identificador)
ON DELETE NO ACTION
ON UPDATE CASCADE
) ENGINE=InnoDB;

SHOW TABLES;
Insertar registros:
INSERT INTO gente VALUES ('Fulano','1974-04-12');
INSERT INTO gente VALUES ('Mengano','1978-06-15');
INSERT INTO gente VALUES ('Tulano','2000-12-02'), ('Pegano','1993-02-10');
INSERT INTO ciudad2 VALUES ('Perillo', DEFAULT);
INSERT INTO ciudad5 (poblacion,nombre) VALUES (7000000, 'Madrid'), (9000000, 'París'), (3500000, 'Berlín');
INSERT INTO ciudad5 SET nombre='Roma', poblacion=8000000;
INSERT INTO ciudad3 (nombre, poblacion) VALUES ('Madrid', 7000000);
INSERT INTO ciudad3 (nombre, poblacion) VALUES ('París', 9000000),('Madrid', 7200000) ON DUPLICATE KEY UPDATE poblacion=VALUES(poblacion);
INSERT INTO ciudad3 (nombre, poblacion) VALUES ('París', 9100000) ON DUPLICATE KEY UPDATE poblacion=poblacion;
INSERT INTO ciudad3 (nombre, poblacion) VALUES ('París', 9100000) ON DUPLICATE KEY UPDATE poblacion=0;
Reemplazar registros:
Sintaxis:
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name [(col_name,...)]
VALUES (,...),(...),...
REPLACE [LOW_PRIORITY | DELAYED]
[INTO] tbl_name
SET col_name=, ...
Ejemplos:
REPLACE INTO ciudad3 (nombre, poblacion) VALUES ('Madrid', 7200000), ('París', 9200000), ('Berlín', 6000000);
REPLACE INTO ciudad3 VALUES ('Roma', 9500000);
REPLACE INTO ciudad3 SET nombre='Londres', poblacion=10000000;
Sintaxis para actualizar registros:
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name
SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]
Ejemplos:
UPDATE ciudad3 SET poblacion=poblacion*1.10;
UPDATE ciudad5 SET clave=clave+10, poblacion=poblacion*0.97;
UPDATE ciudad5 SET poblacion=poblacion*1.03 WHERE nombre='Roma';
UPDATE ciudad5 SET clave=clave-10 LIMIT 2;
UPDATE gente SET fecha="1985-04-12" ORDER BY fecha LIMIT 1;
UPDATE gente SET fecha="2001-12-02" ORDER BY fecha DESC LIMIT 1;
Sintaxis para eliminar registros:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM table_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]
Ejemplos:
DELETE FROM ciudad3;
DELETE FROM ciudad5 WHERE clave=2;
DELETE FROM ciudad5 ORDER BY poblacion DESC LIMIT 2;
Vaciar una tabla:
TRUNCATE ciudad5;
Selección de datos (SELECT):
Sintaxis:
SELECT [ALL | DISTINCT | DISTINCTROW]
expresion_select,...
FROM referencias_de_tablas
WHERE condiciones
[GROUP BY
[ASC | DESC], ... [WITH ROLLUP]]
[HAVING condiciones]
[ORDER BY
[ASC | DESC] ,...]
[LIMIT ]
Ejemplo 1 (Forma incondicional):
SELECT * FROM gente;
Ejemplo 2 (limitar las campos):
SELECT nombre FROM gente;
Ejemplo 3 (expresiones que no corresponden a tablas):
SELECT SIN(3.1416/2), 3+5, 7*4;
Ejemplo 4 (aplicar funciones sobre campos):
SELECT nombre, fecha, DATEDIFF(CURRENT_DATE(),fecha)/365 FROM gente;
Ejemplo 5 (alias):
SELECT nombre, fecha, DATEDIFF(CURRENT_DATE(),fecha)/365 AS edad FROM gente;
Ejemplo 5 (alias omitiendo AS):
SELECT 2+3 "2+2";
Mostrar todos los valores de un campo:
INSERT INTO gente VALUES ('Pimplano', '1978-06-15'), ('Frutano', '1985-04-12');
SELECT fecha FROM gente;
Nota: La sentencia que hemos usado asume el valor por defecto (ALL) para el grupo de opciones ALL, DISTINCT y DISTINCTROW. DISTINCT y DISTINCTROW son sinónimos.
Mostrar valores unicos de un campo:
SELECT DISTINCT fecha FROM gente;
Limitar las registros:
SELECT * FROM gente WHERE nombre="Mengano";
SELECT * FROM gente WHERE fecha>="1986-01-01";
SELECT * FROM gente WHERE fecha>="1986-01-01" AND fecha < "2000-01-01";
Agrupar filas:
SELECT fecha FROM gente GROUP BY fecha;
SELECT nombre,fecha FROM gente GROUP BY fecha;
SELECT fecha, COUNT(*) AS cuenta FROM gente GROUP BY fecha;
Nota: a parte de COUNT() existen otras funciones como MAX(), MIN(), SUM(), AVG(), STD() y VARIANCE(). Ejemplo: SELECT MAX(nombre) FROM gente;
Seleccionar cuando no es posible usar WHERE (Cláusula HAVING):
CREATE TABLE muestras (
ciudad VARCHAR(40),
fecha DATE,
temperatura TINYINT
);
INSERT INTO muestras (ciudad,fecha,temperatura) VALUES
('Madrid', '2005-03-17', 23),
('París', '2005-03-17', 16),
('Berlín', '2005-03-17', 15),
('Madrid', '2005-03-18', 25),
('Madrid', '2005-03-19', 24),
('Berlín', '2005-03-19', 18);
SELECT ciudad, MAX(temperatura) FROM muestras GROUP BY ciudad HAVING MAX(temperatura)>16;
Ordenar resultados:
SELECT * FROM gente ORDER BY fecha;
SELECT * FROM gente ORDER BY fecha DESC;
Limitar el número de filas de salida:
SELECT * FROM gente LIMIT 3;
SELECT * FROM gente LIMIT 0,2;
SELECT * FROM gente LIMIT 2,2;
SELECT * FROM gente LIMIT 4,2;
SELECT * FROM gente LIMIT 6,2;

Operador de asignación:
Ejemplo 1 (=):
SET @hoy = CURRENT_DATE();
SELECT @hoy;
Ejemplo 2 (:=):
SELECT @x:=10;
SELECT @x;
SELECT @fecha_min:=MIN(fecha), @fecha_max:=MAX(fecha) FROM gente;
SELECT * FROM gente WHERE fecha=@fecha_min;
Ejemplo 1 (=):
SET @hoy = CURRENT_DATE();
SELECT @hoy;
Ejemplo 2 (:=):
SELECT @x:=10;
SELECT @x;
SELECT @fecha_min:=MIN(fecha), @fecha_max:=MAX(fecha) FROM gente;
SELECT * FROM gente WHERE fecha=@fecha_min;
Operadores lógicos:
Valores:
SELECT TRUE, FALSE, NULL;
Operador Y (AND):
SELECT 1 AND 0, 1 AND NULL, 0 AND NULL, 1 AND 0 AND 1;
Operador O (OR):
SELECT 1 OR 0, 1 OR NULL, 0 OR NULL, 1 OR 0 OR 1;
Operador O exclusivo (XOR):
SELECT 1 XOR 0, 1 XOR NULL, 0 XOR NULL, 1 XOR 0 XOR 1;
Operador de negación (NOT):
SELECT NOT 0, NOT 1, NOT NULL;
Operador de igualdad (=):
SELECT * FROM gente WHERE fecha="2001-12-02";
SELECT "0" = 0, "0.1"=.1;
Operador de igualdad con NULL seguro (<=>):
SELECT NULL = 1, NULL = NULL;
SELECT NULL <=> 1, NULL <=> NULL;
Nota: El operador <=> funciona igual que el operador =, salvo que si en la comparación una o ambas de las expresiones es nula el resultado no es NULL. Si se comparan dos expresiones nulas, el resultado es verdadero.
Operador de desigualdad (<>, !=):
SELECT 100 <> 32, 43 != 43;
Operadores de comparación de magnitud (<=, <, >, >=):
SELECT "hola" < "adios", "2004-12-31" > "2004-12-01";
SELECT ".01" >= "0.01", .01 >= 0.01;
Verificación de NULL:
Nota: Los operadores IS NULL e IS NOT NULL sirven para verificar si una expresión determinada es o no nula.
Sintaxis:
<expresión> IS NULL
<expresión> IS NOT NULL
Ejemplos:
SELECT NULL IS NULL;
SELECT "NULL" IS NOT NULL;
Sintaxis equivalente:
ISNULL(<expresión>)
Ejemplo:
SELECT 1/0 IS NULL, ISNULL(1/0);
Verificar pertenencia a un rango:
Sintaxis:
<expresión> BETWEEN mínimo AND máximo
<expresión> NOT BETWEEN mínimo AND máximo
Ejemplos:
SELECT 23 BETWEEN 1 AND 100;
SELECT 23 >= 1 AND 23 <= 100;
SELECT 23 NOT BETWEEN 1 AND 100;
SELECT NOT (23 BETWEEN 1 AND 100);
Elección de no nulos (COALESCE):
Sintaxis:
COALESCE(<expr1>, <expr2>, <expr3>...)
Ejemplo:
SET @a=23, @b="abc", @d="1998-11-12";
SELECT COALESCE(@c, @a, @b, @d);
Valores máximo y mínimo de una lista:
Sintaxis:
GREATEST(<expr1>, <expr2>, <expr3>...)
LEAST(<expr1>, <expr2>, <expr3>...)
Nota: Los operadores GREATEST y LEAST devuelven el valor máximo y mínimo respectivamente.
Ejemplos:
SELECT LEAST(2,5,7,1,23,12);
SELECT GREATEST(2,5,7,1,23,12);
SELECT GREATEST(2,5,"7",1,"a",12);
Verificar conjuntos:
Sintaxis:
IN (<expr1>, <expr2>, <expr3>...)
NOT IN (<expr1>, <expr2>, <expr3>...)
Nota: Los operadores IN y NOT IN sirven para averiguar si el valor de una expresión determinada está dentro de un conjunto indicado.
Ejemplos:
SELECT 10 IN(2, 4, 6, 8, 10);
Encontrar intervalo:
Sintaxis:
INTERVAL(<expresión>, <límite1>, <limite1>, ... <limiten>)
Ejemplo:
SET @x = 19;
SELECT INTERVAL(@x, 0, 10, 20, 30, 40);
SELECT INTERVAL("Gerardo", "Antonio", "Fernando", "Ramón", "Xavier");
Operadores aritméticos:
Operador de adición:
SELECT 192+342, 23.54+23;
Operador de sustracción:
SELECT 192-342, 23.54-23;
Operador unitario menos:
SET @x=100;
SELECT -@x;
Operador de multiplicación:
SELECT 12343432*3123243, 312*32*12;
Operador de división:
SELECT 2132143/3123, 4324/25434, 43/0;
Operador de división entera:
SELECT 2132143 DIV 3123, 4324 DIV 25434, 43 DIV 0;
Operadores de bits:
Operador de bits O (|):
SELECT 234 | 334, 32 | 23, 15 | 0;
Operador de bits Y (&):
SELECT 234 & 334, 32 & 23, 15 & 0;
Operador de bits O exclusivo (^):
SELECT 234 ^ 334, 32 ^ 23, 15 ^ 0;
Operador de bits de complemento (~):
SELECT ~234, ~32, ~15;
SET @x = ~1;
SET @x = ~1 +1, @y = 1;
Operador de desplazamiento a la izquierda (<<):
SELECT 234 << 25, 32 << 5, 15 << 1;
Operador de desplazamiento a la derecha (>>):
SELECT 234 >> 25, 32 >> 5, 15 >> 1;
Contar bits:
SELECT BIT_COUNT(15), BIT_COUNT(12);
Operadores de control de flujo:
Operador CASE:
Sintaxis:
CASE valor WHEN [valor1] THEN resultado1 [WHEN [valori] THEN resultadoi ...] [ELSE resultado] END
CASE WHEN [condición1] THEN resultado1 [WHEN [condicióni] THEN resultadoi ...] [ELSE resultado] END
Ejemplos:
SET @x=1;
SELECT CASE @x WHEN 1 THEN "uno"
WHEN 2 THEN "varios"
ELSE "muchos" END;
SET @x=2;
SELECT CASE WHEN @x=1 THEN "uno"
WHEN @x=2 THEN "varios"
ELSE "muchos" END;
Operadores para cadenas:
Operador LIKE:
Sintaxis:
<expresión> LIKE <patrón> [ESCAPE 'carácter_escape']
Comodines:
%: Coincidencia con cualquier número de caracteres, incluso ninguno.
_: Coincidencia con un único carácter.
Ejemplos:
SELECT "hola" LIKE "_o%";
SELECT "hola" LIKE "HOLA";
SELECT "%_%" LIKE "_\_\%";
SELECT "%_%" LIKE "_!_!%" ESCAPE '!';
SELECT 1450 LIKE "1%0";
Operador NOT LIKE:
Sintaxis:
<expresión> NOT LIKE <patrón> [ESCAPE 'carácter_escape']
NOT (<expresión> LIKE <patrón> [ESCAPE 'carácter_escape']) (Expresión quivalente a la anterior)
Operadores REGEXP y RLIKE:
Sintaxis:
<expresión> RLIKE <patrón>
<expresión> REGEXP <patrón>
Ejemplo:
SELECT 'a' REGEXP '^[a-d]';
Operadores NOT REGEXP y NOT RLIKE:
Sintaxis:
<expresión> NOT RLIKE <patrón>
<expresión> NOT REGEXP <patrón>
NOT (<expresión> REGEXP <patrón>) (Expresión quivalente a la anterior)
Operadores de casting:
Operador BINARY:
SELECT 'a' = 'A', 'a' = BINARY 'A';
SELECT 'a' = 'a ', 'a' = BINARY 'a ';
Nota: El operador BINARY convierte una cadena de caracteres en una cadena binaria.
Tabla de precedencia de operadores:
Operador
:=
||, OR, XOR
&&, AND
NOT
BETWEEN, CASE, WHEN, THEN, ELSE
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
|
&
<<, >>
-, +
*, /, DIV, %, MOD
^
- (unitario), ~ (complemento)
!
BINARY, COLLATE
Paréntesis:
SELECT 10+5*2, (10+5)*2;

IF: Elección en función de una expresión booleana.
IFNULL: Elección en función de si el valor de una expresión es NULL.
NULLIF: Devuelve NULL en función del valor de una expresión.
Funciones matemáticas:
ABS: Devuelve el valor absoluto.
ACOS: Devuelve el arcocoseno.
ASIN: Devuelve el arcoseno.
ATAN y ATAN2: Devuelven el arcotangente.
CEILING y CEIL: Redondeo hacia arriba.
COS: Coseno de un ángulo.
COT: Cotangente de un ángulo.
CRC32: Cálculo de comprobación de redundancia cíclica.
DEGREES: Conversión de grados a radianes.
EXP: Cálculo de potencias de e.
FLOOR: Redondeo hacia abajo.
LN: Logaritmo natural.
LOG: Logaritmo en base arbitraria.
LOG10: Logaritmo en base 10.
LOG2: Logaritmo en base dos.
MOD o %: Resto de una división entera.
PI: Valor del número π.
POW o POWER: Valor de potencias.
RADIANS: Conversión de radianes a grados.
RAND: Valores aleatorios.
ROUND: Cálculo de redondeos.
SIGN: Devuelve el signo.
SIN: Cálculo del seno de un ángulo.
SQRT: Cálculo de la raíz cuadrada.
TAN: Cálculo de la tangente de un ángulo.
TRUNCATE: Elimina decimales.
Funciones de cadenas:
ASCII: Valor de código ASCII de un carácter.
BIN: Converión a binario.
BIT_LENGTH: Cálculo de longitud de cadena en bits.
CHAR: Convierte de ASCII a carácter.
CHAR_LENGTH o CHARACTER_LENGTH: Cálculo de longitud de cadena en caracteres.
COMPRESS: Comprime una cadena de caracteres.
CONCAT: Concatena dos cadenas de caracteres.
CONCAT_WS: Concatena cadenas con separadores.
CONV: Convierte números entre distintas bases.
ELT: Elección entre varias cadenas.
EXPORT_SET: Expresiones binarias como conjuntos.
FIELD: Busca el índice en listas de cadenas.
FIND_IN_SET: Búsqueda en listas de cadenas.
HEX: Conversión de números a hexadecimal.
INSERT: Inserta una cadena en otra.
INSTR: Busca una cadena en otra.
LEFT: Extraer parte izquierda de una cadena.
LENGTH u OCTET_LENGTH: Calcula la longitud de una cadena en bytes.
LOAD_FILE: Lee un fichero en una cadena.
LOCATE o POSITION: Encontrar la posición de una cadena dentro de otra.
LOWER o LCASE: Convierte una cadena a minúsculas.
LPAD: Añade caracteres a la izquierda de una cadena.
LTRIM: Elimina espacios a la izquierda de una cadena.
MAKE_SET: Crea un conjunto a partir de una expresión binaria.
OCT: Convierte un número a octal.
ORD: Obtiene el código ASCII, incluso con caracteres multibyte.
QUOTE: Entrecomilla una cadena.
REPEAT: Construye una cadena como una repetición de otra.
REPLACE: Busca una secuencia en una cadena y la sustituye por otra.
REVERSE: Invierte el orden de los caracteres de una cadena.
RIGHT: Devuelve la parte derecha de una cadena.
RPAD: Inserta caracteres al final de una cadena.
RTRIM: Elimina caracteres blancos a la derecha de una cadena.
SOUNDEX: Devuelve la cadena "soundex" para una cadena concreta.
SOUNDS LIKE: Compara cadenas según su pronunciación.
SPACE: Devuelve cadenas consistentes en espacios.
SUBSTRING o MID: Extraer subcadenas de una cadena.
SUBSTRING_INDEX: Extraer subcadenas en función de delimitadores.
TRIM: Elimina sufijos y/o prefijos de una cadena.
UCASE o UPPER: Convierte una cadena a mayúsculas.
UNCOMPRESS: Descomprime una cadena comprimida mediante COMPRESS.
UNCOMPRESSED_LENGTH: Calcula la longitud original de una cadena comprimida.
UNHEX: Convierte una cadena que representa un número hexadecimal a cadena de caracteres.
STRCMP: Compara cadenas.
MATCH: Función de búsqueda de texto.
Funciones de fecha:
ADDDATE: Suma un intervalo de tiempo a una fecha.
ADDTIME: Suma tiempos.
CONVERT_TZ: Convierte tiempos entre distintas zonas horarias.
CURDATE o CURRENTDATE: Obtener la fecha actual.
CURTIME o CURRENT_TIME: Obtener la hora actual.
DATE: Extraer la parte correspondiente a la fecha.
DATEDIFF: Calcula la diferencia en días entre dos fechas.
DATE_ADD: Aritmética de fechas, suma un intervalo de tiempo.
DATE_SUB: Aritmética de fechas, resta un intervalo de tiempo.
DATE_FORMAT: Formatea el valor de una fecha.
DAY o DAYOFMONTH: Obtiene el día del mes a partir de una fecha.
DAYNAME: Devuelve el nombre del día de la semana.
DAYOFWEEK: Devuelve el índice del día de la semana.
DAYOFYEAR: Devuelve el día del año para una fecha.
EXTRACT: Extrae parte de una fecha.
FROM_DAYS: Obtener una fecha a partir de un número de días.
FROM_UNIXTIME: Representación de fechas UNIX en formato de cadena.
GET_FORMAT: Devuelve una cadena de formato.
HOUR: Extrae la hora de un valor time.
LAST_DAY: Devuelve la fecha para el último día del mes de una fecha.
MAKEDATE: Calcula una fecha a partir de un año y un día del año.
MAKETIME: Calcula un valor de tiempo a partir de una hora, minuto y segundo.
MICROSECOND: Extrae los microsegundos de una expresión de fecha/hora o de hora.
MINUTE: Extrae el valor de minutos de una expresión time.
MONTH: Devuelve el mes de una fecha.
MONTHNAME: Devuelve el nombre de un mes para una fecha.
NOW o CURRENT_TIMESTAMP o LOCALTIME o LOCALTIMESTAMP o SYSDATE: Devuelve la fecha y hora actual.
PERIOD_ADD: Añade meses a un periodo (año/mes).
PERIOD_DIFF: Calcula la diferencia de meses entre dos periodos (año/mes).
QUARTER: Devuelve el cuarto del año para una fecha.
SECOND: Extrae el valor de segundos de una expresión time.
SEC_TO_TIME: Convierte una cantidad de segundos a horas, minutos y segundos.
STR_TO_DATE: Obtiene un valor DATETIME a partir de una cadena con una fecha y una cadena de formato.
SUBDATE: Resta un intervalo de tiempo de una fecha.
SUBTIME: Resta dos expresiones time.
TIME: Extrae la parte de la hora de una expresión fecha/hora.
TIMEDIFF: Devuelve en tiempo entre dos expresiones de tiempo.
TIMESTAMP: Convierte una expresión de fecha en fecha/hora o suma un tiempo a una fecha.
TIMESTAMPADD: Suma un intervalo de tiempo a una expresión de fecha/hora.
TIMESTAMPDIFF: Devuelve la diferencia entre dos expresiones de fecha/hora.
TIME_FORMAT: Formatea un tiempo.
TIME_TO_SEC: Convierte un tiempo a segundos.
TO_DAYS: Calcula el número de días desde el año cero.
UNIX_TIMESTAMP: Devuelve un timestamp o una fecha en formato UNIX, segundos desde 1070.
UTC_DATE: Devuelve la fecha UTC actual.
UTC_TIME: Devuelve la hora UTC actual.
UTC_TIMESTAMP: Devuelve la fecha y hora UTC actual.
WEEK: Calcula el número de semana para una fecha.
WEEKDAY: Devuelve el número de día de la semana para una fecha.
WEEKOFYEAR: Devuelve el número de la semana del año para una fecha.
YEAR: Extrae el año de una fecha.
YEARWEEK: Devuelve el año y semana de una fecha.
Funciones de casting (conversión de tipos):
CAST o CONVERT: Conversión de tipos explícita.
Funciones de encripdado:
AES_ENCRYPT y AES_DECRYPT: Encriptar y desencriptar datos usando el algoritmo oficial AES.
DECODE: Desencripta una cadena usando una contraseña.
ENCODE: Encripta una cadena usando una contraseña.
DES_DECRYPT: Desencripta usando el algoritmo Triple-DES.
DES_ENCRYPT: Encripta usando el algoritmo Triple-DES.
ENCRYPT: Encripta str usando la llamada del sistema Unix crypt().
MD5: Calcula un checksum MD5 de 128 bits para la cadena string.
PASSWORD u OLD_PASSWORD: Calcula una cadena contraseña a partir de la cadena en texto plano.
SHA o SHA1: Calcula un checksum SHA1 de 160 bits para una cadena.
Funciones de información:
BENCHMARK: Ejecuta una expresión varias veces.
CHARSET: Devuelve el conjunto de caracteres de una cadena.
COERCIBILITY: Devuelve el valor de restricción de colección de una cadena.
COLLATION: Devuelve la colección para el conjunto de caracteres de una cadena.
CONNECTION_ID: Devuelve el ID de una conexión.
CURRENT_USER: Devuelve el nombre de usuario y el del host para la conexión actual.
DATABASE: Devuelve el nombre de la base de datos actual.
FOUND_ROWS: Calcular cuántas filas se hubiesen obtenido en una sentencia SELECT sin la cláusula LIMIT.
LAST_INSERT_ID: Devuelve el último valor generado automáticamente para una columna AUTO_INCREMENT.
USER o SESSION_USER o SYSTEM_USER: Devuelve el nombre de usuario y host actual de MySQL.
VERSION: Devuelve la versión del servidor MySQL.
Funciones miscelaneas:
DEFAULT: Devuelve el valor por defecto para una columna.
FORMAT: Formatea el número según la plantilla '#,###,###.##.
GET_LOCK: Intenta obtener un bloqueo con el nombre dado.
INET_ATON: Obtiene el entero equivalente a la dirección de red dada en formato de cuarteto con puntos.
INET_NTOA: Obtiene la dirección en formato de cuarteto con puntos dado un entero.
IS_FREE_LOCK: Verifica si un nombre de bloqueo está libre.
IS_USED_LOCK: Verifica si un nombre de bloqueo está en uso.
MASTER_POS_WAIT: Espera hasta que el esclavo alcanza la posición especificada en el diario maestro.
RELEASE_LOCK: Libera un bloqueo.
UUID: Devuelve un identificador único universal.
Funciones de grupos:
AVG: Devuelve el valor medio.
BIT_AND: Devuelve la operación de bits AND para todos los bits de una expresión.
BIT_OR: Devuelve la operación de bits OR para todos los bits de una expresión.
BIT_XOR: Devuelve la operación de bits XOR para todos los bits de una expresión.
COUNT: Devuelve el número de valores distintos de NULL en las filas recuperadas por una sentencia SELECT.
COUNT DISTINCT: Devuelve el número de valores diferentes, distintos de NULL.
GROUP_CONCAT: Devuelve una cadena con la concatenación de los valores de un grupo.
MIN: Devuelve el valor mínimo de una expresión.
MAX: Devuelve el valor máximo de una expresión.
STD o STDDEV: Devuelve la desviación estándar de una expresión.
SUM: Devuelve la suma de una expresión.
VARIANCE: Devuelve la varianza estándar de una expresión.

Producto cartesiano:
INSERT INTO personas2 (nombre, fecha) VALUES
("Fulanito", "1956-12-14"),
("Menganito", "1975-10-15"),
("Tulanita", "1985-03-17"),
("Fusganita", "1976-08-25");
SELECT * FROM personas2;
INSERT INTO telefonos2 (id, numero) VALUES
(1, "123456789"),
(1, "145654854"),
(1, "152452545"),
(2, "254254254"),
(4, "456545654"),
(4, "441415414");
SELECT * FROM telefonos2;
SELECT * FROM personas2,telefonos2;
Nota: El producto cartesiano de dos tablas son todas las combinaciones de todas las filas de las dos tablas.
http://mysql.conclase.net/curso/?cap=012a#MUL_JOIN
Código SQL para crear las primeras bases de datos y tablas de ejemplo:
ResponderEliminarCREATE DATABASE prueba;
USE prueba;
CREATE TABLE gente (nombre VARCHAR(40), fecha DATE);
CREATE TABLE ciudad1 (nombre CHAR(20) NOT NULL, poblacion INT NULL);
CREATE TABLE ciudad2 (nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000);
CREATE TABLE ciudad3 (nombre CHAR(20) NOT NULL PRIMARY KEY, poblacion INT NULL DEFAULT 5000);
CREATE TABLE ciudad6 (clave INT AUTO_INCREMENT PRIMARY KEY COMMENT 'Clave principal', nombre CHAR(50) NOT NULL, poblacion INT NULL DEFAULT 5000);
CREATE TABLE ciudad4 (nombre CHAR(20) NOT NULL, poblacion INT NULL DEFAULT 5000, PRIMARY KEY (nombre));
CREATE TABLE mitabla1 (id1 CHAR(2) NOT NULL, id2 CHAR(2) NOT NULL, texto CHAR(30), PRIMARY KEY (id1, id2));
CREATE TABLE mitabla2 (id INT, nombre CHAR(19), INDEX (nombre));
CREATE TABLE mitabla3 (id INT, nombre CHAR(19), KEY (nombre));
CREATE TABLE mitabla4 (id INT, nombre CHAR(19), INDEX (nombre(4)));
CREATE TABLE mitabla5 (id INT, nombre CHAR(19), UNIQUE (nombre));
CREATE TABLE mitabla6 (id INT, nombre CHAR(19) NOT NULL, UNIQUE (nombre));
CREATE TABLE mitabla7 (id INT, nombre CHAR(19), PRIMARY KEY (nombre));
CREATE TABLE personas (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(40), fecha DATE);
CREATE TABLE telefonos (numero CHAR(12), id INT NOT NULL REFERENCES personas (id) ON DELETE CASCADE ON UPDATE CASCADE);
CREATE TABLE personas2 (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(40), fecha DATE) ENGINE=InnoDB;
CREATE TABLE telefonos2 (numero CHAR(12), id INT NOT NULL, KEY (id), FOREIGN KEY (id) REFERENCES personas2 (id) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
CREATE TABLE personas3 (id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(40), fecha DATE) ENGINE=InnoDB;
CREATE TABLE telefonos3 (numero CHAR(12), id INT NOT NULL, KEY (id), FOREIGN KEY (id) REFERENCES personas3 (id) ON DELETE RESTRICT ON UPDATE CASCADE) ENGINE=InnoDB;
CREATE DATABASE meteo;
USE meteo;
CREATE TABLE estacion (
identificador MEDIUMINT UNSIGNED NOT NULL,
latitud VARCHAR(14) NOT NULL,
longitud VARCHAR(15) NOT NULL,
altitud MEDIUMINT NOT NULL,
PRIMARY KEY (identificador)
) ENGINE=InnoDB;
CREATE TABLE muestra (
identificadorestacion MEDIUMINT UNSIGNED NOT NULL,
fecha DATE NOT NULL,
temperaturaminima TINYINT,
temperaturamaxima TINYINT,
precipitaciones SMALLINT UNSIGNED,
humedadminima TINYINT UNSIGNED,
humedadmaxima TINYINT UNSIGNED,
velocidadminima SMALLINT UNSIGNED,
velocidadmaxima SMALLINT UNSIGNED,
KEY (identificadorestacion),
FOREIGN KEY (identificadorestacion)
REFERENCES estacion(identificador)
ON DELETE NO ACTION
ON UPDATE CASCADE
) ENGINE=InnoDB;
INSERT INTO gente VALUES ('Fulano','1974-04-12');
ResponderEliminarINSERT INTO gente VALUES ('Mengano','1978-06-15');
INSERT INTO gente VALUES ('Tulano','2000-12-02'), ('Pegano','1993-02-10');
INSERT INTO ciudad2 VALUES ('Perillo', DEFAULT);
INSERT INTO ciudad5 (poblacion,nombre) VALUES (7000000, 'Madrid'), (9000000, 'París'), (3500000, 'Berlín');
INSERT INTO ciudad5 SET nombre='Roma', poblacion=8000000;
INSERT INTO ciudad3 (nombre, poblacion) VALUES ('Madrid', 7000000);
INSERT INTO ciudad3 (nombre, poblacion) VALUES ('París', 9000000),('Madrid', 7200000) ON DUPLICATE KEY UPDATE poblacion=VALUES(poblacion);
INSERT INTO ciudad3 (nombre, poblacion) VALUES ('París', 9100000) ON DUPLICATE KEY UPDATE poblacion=poblacion;
INSERT INTO ciudad3 (nombre, poblacion) VALUES ('París', 9100000) ON DUPLICATE KEY UPDATE poblacion=0;
REPLACE INTO ciudad3 (nombre, poblacion) VALUES ('Madrid', 7200000), ('París', 9200000), ('Berlín', 6000000);
REPLACE INTO ciudad3 VALUES ('Roma', 9500000);
REPLACE INTO ciudad3 SET nombre='Londres', poblacion=10000000;
UPDATE ciudad3 SET poblacion=poblacion*1.10;
UPDATE ciudad5 SET clave=clave+10, poblacion=poblacion*0.97;
UPDATE ciudad5 SET poblacion=poblacion*1.03 WHERE nombre='Roma';
UPDATE ciudad5 SET clave=clave-10 LIMIT 2;
UPDATE gente SET fecha="1985-04-12" ORDER BY fecha LIMIT 1;
UPDATE gente SET fecha="2001-12-02" ORDER BY fecha DESC LIMIT 1;
DELETE FROM ciudad3;
DELETE FROM ciudad5 WHERE clave=2;
DELETE FROM ciudad5 ORDER BY poblacion DESC LIMIT 2;
INSERT INTO gente VALUES ('Pimplano', '1978-06-15'), ('Frutano', '1985-04-12');
CREATE TABLE muestras (
ciudad VARCHAR(40),
fecha DATE,
temperatura TINYINT
);
INSERT INTO muestras (ciudad,fecha,temperatura) VALUES
('Madrid', '2005-03-17', 23),
('París', '2005-03-17', 16),
('Berlín', '2005-03-17', 15),
('Madrid', '2005-03-18', 25),
('Madrid', '2005-03-19', 24),
('Berlín', '2005-03-19', 18);
INSERT INTO personas2 (nombre, fecha) VALUES
ResponderEliminar("Fulanito", "1956-12-14"),
("Menganito", "1975-10-15"),
("Tulanita", "1985-03-17"),
("Fusganita", "1976-08-25");
SELECT * FROM personas2;
INSERT INTO telefonos2 (id, numero) VALUES
(1, "123456789"),
(1, "145654854"),
(1, "152452545"),
(2, "254254254"),
(4, "456545654"),
(4, "441415414");
SELECT * FROM telefonos2;