El SQL es un lenguaje estndar de programacin 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 estndar ANSI para el acceso y manipulacin de los datos de cualquier base de datos. El SQL se compone de sentencias SQL, cada una con una utilidad diferente, como por ejemplo: Creacin de una base de datos (CREATE DATABASE) Creacin de una tabla (CREATE TABLE) Creacin de una vista (CREATE VIEW) Creacin de un ndice de una tabla (CREATE INDEX) Creacin de procedimientos almacenados (CREATE PROCEDURE) Creacin 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 transaccin de una sentencia SQL (COMMIT) Retroceder la transaccin de una sentencia SQL (ROLLBACK). 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 maysculas y minsculas, es decir, SELECT y select son dos palabras iguales para SQL. Algunos sistemas de bases de datos necesitan un punto y coma despus de cada sentencia SQL para ejecutarse correctamente CREATE DATATABASE mibasedeatos; Este punto y coma tambin puede servir para separar una sentencia SQL de otra sentencia SQL en la misma lnea. CREATE DATATABASE mibasedeatos; CREATE TABLE mitabla1; Las sentencias SQL se pueden agrupar por funcionalidades: 1.- Lenguaje de definicin de datos (DDL). DDL est compuesto por sentencias para la creacin (CREATE), modificacin (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 manipulacin de datos (DML). DML est compuesto por sentencias que sirven para : consultar (SELECT) insertar (INSERT) modificar (UPDATE) borrar (DELETE) 3.- Lenguaje de control de datos (DCL). DCL est compuesto por sentencias SQL para controlar las funciones de administracin : Confirmar la operacion (COMMIT) Retroceder la operacion (ROLLBACK) Dar permisos (GRANT) Quitar permisos (REVOKE)
SQL Select Una de las sentencias SQL ms 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 Esta ser el resultado: < nombre apellido1 ANTONIO PEREZ ANTONIO GARCIA LUIS LOPEZ
SQL DISTINCT Al realizar una consulta puede ocurrir que existan valores repetidos para algunas columnas. Por ejemplo SELECT nombre FROM personas nombre ANTONIO LUIS ANTONIO Esto no es un problema, pero a veces queremos que no se repitan, por ejemplo, si queremos saber los nombre diferentes que hay en la tabla personas, entonces utilizaremos DISTINCT. SELECT DISTINCT nombre FROM personas nombre ANTONIO LUIS SQL WHERE La clusula WHERE se utiliza para hacer filtros en las consultas, es decir, seleccionar solamente algunas filas de la tabla que cumplan una determinada condicin. El valor de la condicin 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 SQL AND 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. Condicin1 AND condicin2 El operador OR mostrar los resultados cuando se cumpla alguna de las 2 condiciones. Condicion1 OR condicion2 En la tabla personas nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA BENITO LUIS LOPEZ PEREZ La siguiente sentencia (ejemplo AND) dar el siguiente resultado: SELECT * FROM personas WHERE nombre = ANTONIO AND apellido1 = GARCIA nombre apellido1 apellido2 ANTONIO GARCIA BENITO La siguiente sentencia (ejemplo OR) dar el siguiente resultado: SELECT * FROM personas WHERE nombre = ANTONIO OR apellido1 = GARCIA nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA BENITO Tambin se pueden combinar AND y OR, como el siguiente ejemplo: SELECT * FROM personas WHERE nombre = ANTONIO AND (apellido1 = GARCIA OR apellido1 = LOPEZ) nombre apellido1 apellido2 ANTONIO GARCIA SQL ORDER BY ORDER BY se utiliza para ordenar los resultados de una consulta, segn el valor de la columna especificada. Por defecto, se ordena de forma ascendente (ASC) segn los valores de la columna. Si se quiere ordenar por orden descendente se utiliza la palabra DES SELECT nombre_columna(s) FROM nombre_tabla ORDER BY nombre_columna(s) ASC|DESC Por ejemplo, en la tabla personas : nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ LUIS LOPEZ PEREZ ANTONIO GARCIA BENITO SELECT nombre, apellido1 FROM personas ORDER BY apellido1 ASC Esta es la consulta resultante: nombre apellido1 LUIS LOPEZ ANTONIO GARCIA ANTONIO PEREZ Ejemplo de ordenacin descendiente (DES) SELECT nombre, apellido1 FROM personas ORDER BY apellido1 DESC Esta es la consulta resultante: nombre apellido1 ANTONIO PEREZ ANTONIO GARCIA LUIS LO 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 LOPEZ PEREZ ANTONIO GARCIA BENITO Si queremos insertar una nueva fila en la tabla personas, lo podemos hacer con cualquiera de las dos sentencias siguientes: INSERT INTO personas VALUES (PEDRO, RUIZ, GONZALEZ) INSERT INTO personas (nombre, apellido1, apellido2) VALUES (PEDRO, RUIZ, GONZALEZ) Cualquiera de estas sentencias anteriores produce que se inserte una nueva fila en la tabla personas, quedando as dicha tabla: nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ LUIS LOPEZ PEREZ ANTONIO GARCIA BENITO PEDRO RUIZ GONZALEZ 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 clusula SET establece los nuevos valores para las columnas indicadas. La clusula WHERE sirve para seleccionar las filas que queremos modificar. Ojo: Si omitimos la clusula WHERE, por defecto, modificar los valores en todas las filas de la tabla. Ejemplo del uso de SQL UPDATE nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ LUIS LOPEZ PEREZ ANTONIO GARCIA BENITO PEDRO RUIZ GONZALEZ Si queremos cambiar el apellido2 BENITO por RODRIGUEZ ejecutaremos: UPDATE personas SET apellido2 = RODRIGUEZ WHERE nombre = ANTONIO AND apellido1 = GARCIA AND apellido2 = BENITO Ahora la tabla personas quedar as: nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ LUIS LOPEZ PEREZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ SQL DELETE La sentencia DELETE sirve para borrar filas de una tabla. La sintaxis de SQL DELETE es: DELETE FROM nombre_tabla WHERE nombre_columna = valor Si queremos borrar todos los registros o filas de una tabla, se utiliza la sentencia: DELETE * FROM nombre_tabla; Ejemplo de SQL DELETE para borrar una fila de la tabla personas nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ LUIS LOPEZ PEREZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Si queremos borrar a la persona LUIS LOPEZ PEREZ, podemos ejecutar el comando: DELETE FROM personas WHERE nombre = LUIS AND apellido1 = LOPEZ AND apellido2 = PEREZ La tabla personas resultante ser: nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ SQL TOP La sentencia SQL TOP se utiliza para especificar el nmero de filas a mostrar en el resultado. Esta clusula SQL TOP es til en tablas con muchos registros, para limitar el nmero de filas a mostrar en la consulta, y as sea ms rpida la consulta, consumiendo tambin menos recursos en el sistema. Esta clusula se especifica de forma diferente segn el sistema de bases de datos utilizado. Clusula SQL TOP para SQL SERVER SELECT TOP nmero PERCENT nombre_columna FROM nombre_tabla Clusula SQL TOP para MySQL SELECT columna(s) FROM tabla LIMIT nmerofilas Clusula SQL TOP para ORACLE SELECT columna(s) FROM tabla WHERE ROWNUM <= nmerofilas Ejemplo SQL TOP para MySQL: Dada la siguiente tabla personas, quiero obtener los 2 primeros valores. nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ SELECT * FROM personas LIMIT 2 Obtendramos el siguiente resultado: nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ SQL LITE El operador LIKE se utiliza en la clusula WHERE para buscar por un patrn. Sintaxis de SQL LIKE SELECT columna(s) FROM tabla WHERE columna LIKE %patron% Ejemplos del uso de SQL LIKE Dada la siguiente tabla personas nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Si quiero seleccionar los nombres que empiezan por AN en la tabla personas, ejecutara el comando siguiente: SELECT * FROM personas WHERE nombre LIKE AN% El character % es un comodn, que sirve para uno o ms caracteres. Este es el resultado nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ Otro ejemplo de SQL LIKE Para seleccionar las personas que tienen un Z en su apellido1, ejecutaramos: SELECT * FROM personas WHERE apellido1 LIKE %Z% nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ PEDRO RUIZ GONZALEZ SQL WILDCARDS Los caracteres Wildcards (comodines) son caracteres especiales que se utilizan para realizar bsquedas especiales, como por ejemplo, buscar palabras que empiecen por una letra determinada (letra%) o que contengan la letra a (%a%), o que contengan alguna vocal ([aeiou]), etc. Los caracteres Wildcards se utilizan con el operador SQL LIKE en una sentencia SELECT.Los caracteres Wildcards son : % sustituye a cero o ms caracteres _ sustituye a 1 carcter cualquiera [lista] sustituye a cualquier carcter de la lista [^lista] o [!lista] sustituye a cualquier carcter excepto los caracteres de la lista Ejemplos: Dada la siguiente tabla personas nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Ejemplos Wildcards Seleccionar las personas cuyo nombre contenga una R SELECT * FROM personas WHERE nombre LIKE %R% Resultado: nombre apellido1 apellido2 PEDRO RUIZ GONZALEZ Seleccionar las personas cuyo apellido1 empiece por GA SELECT * FROM personas WHERE apellido1 LIKE PE_EZ Resultado: nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ 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 SQL IN El operador IN permite seleccionar mltiples valores en una clusula WHERE Sintaxis SQL IN SELECT columna FROM tabla WHERE columna IN (valor1, valor2, valor3, ) Ejemplo SQL IN Dada la siguiente tabla personas nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Queremos seleccionar a las personas cuyo apellido1 sea PEREZ o RUIZ SELECT * FROM personas WHERE apellido1 IN (PEREZ,RUIZ) nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ PEDRO RUIZ GONZALEZ SQL BETWEEN El operador BETWEEN se utiliza en la clusula WHERE para seleccionar valores entre un rango de datos. Sintaxis de SQL BETWEEN SELECT columna FROM tabla WHERE columna BETWEEN valor1 AND valor2 Ejemplo de SQL BETWEEN Dada la siguiente tabla personas nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Seleccionar personas cuyo apellido1 est entre FERNANDEZ y HUERTAS SELECT * FROM personas WHERE apellido1 BETWEEN FERNANDEZ AND HUERTAS nombre apellido1 apellido2 ANTONIO GARCIA RODRIGUEZ Seleccionar personas cuyo apellido1 no est entre FERNANDEZ y HUERTAS SELECT * FROM personas WHERE apellido1 NOT BETWEEN FERNANDEZ AND HUERTAS nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ PEDRO RUIZ GONZALEZ SQL ALIAS Un alias, es otra forma de llamar a una tabla o a una columna, y se utiliza para simpl ificar las sentencias SQL cuando los nombre de tablas o columnas son largos o complicados. Sintaxis SQL ALIAS para una tabla: SELECT columna FROM nombretabla AS aliastabla Sintaxis SQL ALIAS para una columna SELECT nombrecolumna AS aliascolumna FROM tabla Ejemplos SQL ALIAS Dada la siguiente tabla personas Nombre apellido1 apellido2 ANTONIO PEREZ GOMEZ ANTONIO GARCIA RODRIGUEZ PEDRO RUIZ GONZALEZ Utilizamos el alias p para la tabla personas, para simplificar la sentencia SELECT SELECT p.apellido1, p.apellido2 FROM personas AS p WHERE p.nombre = ANTONIO apellido1 apellido2 PEREZ GOMEZ GARCIA RODRIGUEZ Sin utilizar el alias, la sentencia SELECT quedara un poco ms larga: SELECT personas.apellido1, personas.apellido2 FROM personas WHERE personas.nombre = ANTONIO apellido1 apellido2 PEREZ GOMEZ GARCIA RODRIGUEZ SQL JOINS La sentencia SQL JOIN permite consultar datos de 2 o ms tablas. Dichas tablas estarn relacionadas entre ellas de alguna forma, a travs 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 propsito del JOIN es unir informacin 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, tendramos que hacer un JOIN de las 2 tablas personas y departamentos, que se relacionaran por la columna dep. Es decir, que desde la tabla personas y mediante la columna dep, podemos acceder a la informacin de la tabla departamentos. 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 condicin. 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 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 2 Tabla departamentos, con la clave primaria dep dep Departamento 1 ADMINISTRACION 2 INFORMATICA 3 COMERCIAL SELECT nombre, apellido1, departamento FROM personas INNER JOIN departamentos WHERE personas.dep = departamentos.dep nombre apellido1 Departamento ANTONIO PEREZ ADMINISTRACION ANTONIO GARCIA INFORMATICA PEDRO RUIZ INFORMATICA 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 condicin. SELECT * FROM tabla1 LEFT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1 Ejemplo de SQL LEFT JOIN Tabla personas, con la clave primaria per
per nombre apellido1 apellido2 dep 1 ANTONIO PEREZ GOMEZ 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 4 Tabla departamentos, con la clave primaria dep dep Departamento 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. 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 condicin. En algunas bases de datos, la sentencia RIGHT JOIN es igual a RIGHT OUTER JOIN SELECT * FROM tabla1 RIGHT JOIN tabla2 WHERE tabla1.columna1 = tabla2.columna1 EJEMPLO SQL RIGHT JOIN Per nombre apellido1 apellido2 dep 1 ANTONIO PEREZ GOMEZ 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 4 Tabla departamentos, con la clave primaria dep dep departamento 1 ADMINISTRACION 2 INFORMATICA 3 COMERCIAL SELECT nombre, apellido1, departamento FROM personas 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 COMERCI AL (3), esta fila aparecer con las otras columnas en blanco 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 condicin. La sentencia FULL JOIN es la unin de LEFT JOIN y RIGHT JOIN SELECT * FROM tabla1 FULL JOIN t abla2 WHERE tabla1.columna1 = tabla2.columna1 EJEMPLO SQL FULL JOIN per Nombre apellido1 apellido2 dep 1 ANTONIO PEREZ GOMEZ 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 4 Tabla departamentos, con la clave primaria dep Dep departamento 1 ADMINISTRACION 2 INFORMATICA 3 COMERCIAL SELECT nombre, apellido1, departamento FROM personas FULL JOIN departamentos WHERE personas.dep = departamentos.dep nombre apellido1 departamento ANTONIO PEREZ ADMINISTRACION ANTONIO GARCIA INFORMATICA PEDRO RUIZ COMERCIAL 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 nmero de columnas, con el mismo tipo de dato y en el mismo orden. Sintaxis SQL UNION SELECT columna1, columna2 FROM tabla1 UNION SELECT columna1, columna2 FROM tabla2 Ejemplo SQL UNION Tabla personas_empresa1
per nombre apellido1 apellido2 1 ANTONIO PEREZ GOMEZ 2 ANTONIO GARCIA RODRIGUEZ 3 PEDRO RUIZ GONZALEZ Tabla personas_empresa2 per nombre apellido1 apellido2 1 JUAN APARICIO TENS 2 ANTONIO GARCIA RODRIGUEZ 3 LUIS LOPEZ VAZQUEZ SELECT nombre, apellido1 FROM personas_empresa1 UNION SELECT nombre, apellido1 FROM personas_empresa2 nombre apellido1 ANTONIO PEREZ ANTONIO GARCIA PEDRO RUIZ JUAN APARICIO LUIS LOPEZ La persona ANTONIO GARCIA RODRIGUEZ aparecer solo una vez en el resultado, porque no aparecern las filas repetidas. SQL UNION ALL La sentencia SQL UNION ALL es utilizada para acumular los resultados de dos sentencias SELECT, incluso aparecern las filas que estn repetidas en los resultados de ambas SELECT. Las dos sentencias SELECT tienen que tener el mismo nmero de columnas, con el mismo tipo de dato y en el mismo orden. Sintaxis SQL UNION SELECT columna1, columna2 FROM tabla1 UNION ALL SELECT columna1, columna2 FROM tabla2 Ejemplo SQL UNION ALL Tabla personas_empresa1 per nombre apellido1 apellido2 1 ANTONIO PEREZ GOMEZ 2 ANTONIO GARCIA RODRIGUEZ 3 PEDRO RUIZ GONZALEZ Tabla personas_empresa2 per nombre apellido1 apellido2 1 JUAN APARICIO TENS 2 ANTONIO GARCIA RODRIGUEZ 3 LUIS LOPEZ VAZQUEZ SELECT nombre, apellido1 FROM personas_empresa1 UNION ALL SELECT nombre, apellido1 FROM personas_empresa2 nombre apellido1 ANTONIO PEREZ ANTONIO GARCIA PEDRO RUIZ JUAN APARICIO ANTONIO GARCIA LUIS LOPEZ La persona ANTONIO GARCIA RODRIGUEZ aparecer dos veces, porque est en los dos resultados de las sentencias SELECT. 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 Tambin se pueden seleccionar slo algunas columnas SELECT columna1, columna2 INTO personasBackup FROM personas Tambin se puede incluir una condicin (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 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 SQL CREATE TABLE La sentencia CREATE TABLE se utiliza para crear una tabla en una base de datos existente. Sintaxis CREATE TABLE CREATE TABLE nombretabla { nombrecolumna1 tipodato1, nombrecolumna2 tipodato2, nombrecolumna3 tipodato3, . } Ejemplo CREATE TABLE CREATE TABLE personas { nombre varchar(255), apellido1 varchar(255), apellido2 varchar(255), dep int } Esta sentencia crear la base de datos personas con 4 columnas. Las columnas nombre, apellido1 y apellido2 son de tipo varchar, es decir, acepta valores alfanumricos hasta una longitud mxima de 255 caracteres. La columna dep es de tipo int, es decir, acepta slo nmeros. Existen diferentes tipos de datos, algunos son iguales en todas las bases de datos (MySQL, ORACLE, DB2, ..) y otros pueden ser particulares para ser usados nicamente en alguna de estas bases de datos. SQL RESTRICCIONES (CONSTRAINTS) 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 SQL NOT NULL La restriccin NOT NULL sirve para especificar que una columna no acepta el valor NULL, es decir, que esa columna siempre tiene que tener algn valor, no puede estar vaca. 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 algn valor para las columnas nombre y apellido1. SQL UNIQUE La restriccin 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 segn 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), } SQL UNIQUE ALTER TABLE La restriccin UNIQUE se puede aadir a una columna de una tabla, despus de ser creada, mediante la sentencia ALTER TABLE. Sintaxis de UNIQUE ALTER TABLE ALTER TABLE personas ADD UNIQUE (identificador) Crea una restriccin UNIQUE (valor nico en toda la tabla) para la columna identificador. Se puede crear tambin restricciones para varias columnas a la vez ALTER TABLE peronas ADD CONSTRAINT copersonas UNIQUE (identificador, apellido1) Para eliminar una restriccin en la base de datos MySQL ALTER TABLE personas DROP INDEX copersonas Para eliminar una restriccin en ORACLE, SQLSERVER y ACCESS ALTER TABLE personas DROP CONSTRAINT copersonas 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 slo 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 tambin se puede definir despus 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) SQL FOREIGN KEY La clave externa o FOREIGN KEY, es una columna o varias columnas, que sirven para sealar cual es la clave primaria de otra tabla. La columna o columnas sealadas como FOREIGN KEY, solo podrn 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 1 2 ANTONIO GARCIA RODRIGUEZ 2 3 PEDRO RUIZ GONZALEZ 4 Definiciones de FOREIGN KEY en CREATE TABLE para MySQL CREATE TABLE departamentos { dep int NOT NULL, departamento varchar(255), PRIMARY KEY (dep) }
CREATE TABLE personas { per int NOT NULL, nombre varchar(255), apellido1 varchar(255), dep int NOT NULL, PRIMARY KEY (per), FOREIGN KEY (dep) REFERENCES departamentos(dep) } Definiciones de FOREIGN KEY en CREATE TABLE para ORACLE, ACCESS, SQLSERVER CREATE TABLE departamentos { dep int NOT NULL PRIMARY KEY, departamento varchar(255), }
CREATE TABLE personas { per int NOT NULL PRIMARY KEY, nombre varchar(255), apellido1 varchar(255), dep int FOREIGN KEY REFERENCES departamentos (dep) } Si la clave externa o fornea (FOREIGN KEY) est compuesta por varias columnas o queremos ponerle un nombre, utilizaremos la frmula 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 mltiple (varias columnas) con ALTER TABLE: ALTER TABLE ADD CONSTRAINT fkpersonas FOREIGN KEY (dep) REFERENCES departamentos(dep) Para borrar un clave externa (FOREIGN KEY) utilizamos DROP, pero vara segn 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 SQL CHECK La restriccin 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 mltiples 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) SQL DEFAULT La restriccin 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 funcin, 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 SQL CREATE INDEX CREATE INDEX se utiliza para crear ndices en una tabla. Un ndice sirve para buscar datos rpidamente, 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 bsqueda as es mucho ms ptima en recursos y ms rpida en tiempo. Si esa columna de bsqueda no fuese ndice, entonces tendramos que recorrer de forma secuencial la tabla en busca de algn dato. Por eso, es importante crear un ndice por cada tipo de bsqueda que queramos hacer en la tabla. Actualizar una tabla con ndices tarda ms tiempo porque tambin hay que actualizar los ndices, as que solo se deben poner ndices en las columnas por las que buscamos frecuentemente. Se pueden crear ndices NICOS, es decir, ndices que no admiten valores duplicados. Sintaxis para SQL CREATE INDEX CREATE INDEX nombreindice ON nombretabla (nombrecolumna) La columna que forma parte de este ndice admite valores duplicados en su columna. Sintaxis para SQL CREATE UNIQUE INDEX CREATE UNIQUE INDEX nombreindice ON nombretabla (nombrecolumna) La columna que forma parte de este ndice NO admite valores duplicados en su columna, porque es una clave nica. Ejemplos para SQL CREATE INDEX Creamos la ndice indicepersonas sobre la columna persona de la tabla personas CREATE INDEX indicepersonas ON personas (persona) Si queremos crear un ndice sobre varias columnas, por ejemplo, apellido1 y apellido2 CREATE INDEX indice2personas ON personas(apellido1, apellido2) 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 SQL TRUNCATE Este comando SQL TRUNCATE se utiliza para eliminar o borrar los datos que contiene una tabla. Es til cuando slo se quiere borrar los datos, pero no se quiere borrar la tabla. Este comando deja vaca una tabla, es decir, sin datos. TRUNCATE TABLE nombretabla SQL ALTER La sentencia SQL ALTER se utiliza para aadir, eliminar o modificar columnas de una tabla. Sintaxis SQL ALTER Para aadir 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 RUIZ GONZALEZ Dada la siguiente tabla de personas, queremos aadir una nueva columna, denominada 'fechadenacimiento' ALTER TABLE personas ADD fechadenacimiento date per nombre apellido1 apellido2 fechadenacimiento 1 ANTONIO PEREZ GOMEZ 2 ANTONIO GARCIA RODRIGUEZ 3 PEDRO RUIZ GONZALEZ Si queremos modificar el tipo de dato de la columna fecha, y ponerle tipo 'year' en lugar de tipo 'date' ALTER TABLE personas ALTER COLUMN fechadenacimiento year Si queremos borrar la columna fechadenacimiento, y dejarlo igual que al principio ALTER TABLE personas DROP COLUMN fechadenacimiento per nombre apellido1 apellido2 1 ANTONIO PEREZ GOMEZ 2 ANTONIO GARCIA RODRIGUEZ 3 PEDRO RUIZ GONZALEZ SQL AUTO INCREMENT AUTO INCREMENT permite generar un nmero nico cuando insertamos un nuevo registro en la tabla. Se utiliza para tener una clave primaria de una tabla mediante la generacin automtica de un nmero 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 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 condicin 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 RUIZ GONZALEZ 50 Creamos una vista con las personas que se llaman ANTONIO CREATE VIEW [personas que se llaman ANTONIO] AS SELECT nombre, apellido1, apellido2,edad FROM personas WHERE nombre = ANTONIO Para consultar los datos de una vista SELECT * FROM [personas que se llama ANTONIO] En la vista [personas que se llama ANTONIO] tenemos los datos siguientes: > nombre apellido1 apellido2 edad ANTONIO PEREZ GOMEZ 30 ANTONIO GARCIA RODRIGUEZ 45 SQL REPLACE VIEW Para reemplazar o modificar los datos de una vista: REPLACE VIEW [personas que se llama ANTONIO] AS SELECT nombre, apellido1, apellido2, edad FROM personas WHERE edad > 20 SQL DROP VIEW Para borrar una vista DROP VIEW nombrevista Ejemplo borrado de la vista antes creada: DROP VIEW [personas que se llama ANTONIO] SQL DATE Existen diferentes formatos para almacenar las fechas y horas en los distintos sistemas de bases de datos. Los tipos de datos de cada columna se definen cuando se crea la tabla. Tipos de Datos para las fechas y horas en la base de datos MySQL Tipo Formato Ejemplo DATE YYYY-MM-DD 2008-11-11 DATETIME YYYY-MM-DD HH:MM:SS 2008-11-11 13:23:44 TIMESTAMP YYYY-MM-DD HH:MM:SS YEAR YYYY o YY Funciones para MySQL sobre estos tipos de datos de fecha anteriores NOW Muestra la fecha y hora actuales. Por ejemplo: 2008-11-11 12:45:34 CURDATE Muestra la fecha actual. Por ejemplo: 2008-11-11 CURTIME Muestra la hora actual. Por ejemplo: 12:45:34 DATE Muestra la parte fecha de una expresin fecha/hora EXTRACT Muestra una parte de una expresin 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 nmero de das entre 2 fechas DATE_FORMAT Muestra una fecha y hora con diferentes formatos Tipos de Datos para fechas y horas en la base de datos SQL Server DATE Formato YYYY-MM-DD DATETIME Formato YYYY-MM-DD HH:MM:SS SMALLDATETIME Formato YYYY-MM-DD HH:MM:SS TIMESTAMP Se genera un valor basado en la hora del sistema. Se actualiza automticamente. 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 Fechapedido 1 papel oficina 2012-02-23 14:05:00 Si queremos almacenar solo la fecha (y no la hora) utilizaremos el tipo de datos date en lugar de datetime. 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 ningn 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 aritmticos 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 30 LUIS LOPEZ PEREZ 45 ANTONIO GARCIA 50 Ejemplo de uso de IS NULL SELECT * FROM personas WHERE apellido2 IS NULL >
nombre apellido1 apellido2 edad ANTONIO PEREZ 30 ANTONIO GARCIA 50 Ejemplo de uso de IS NOT NULL SELECT * FROM personas WHERE apellido2 IS NOT NULL > nombre apellido1 apellido2 edad LUIS LOPEZ PEREZ 45 SQL FUNCIONES NULL Si queremos cambiar un valor NULL por otro valor cualquiera, utilizaremos las siguientes funciones (ISNULL, IFNULL, NVL, COLACESCE) segn 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 SQL Tipos de datos de texto en MySQL Tipos de datos y rango de datos para el sistema de gestin 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, nmeros y caracteres especiales. La longitud fija se define entre parntesis, 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 mxima que podemos definir un campo CHAR es de 255.
VARCHAR El tipo de datos VARCHAR sirve para almacenar una cadena de datos (caracteres, nmeros y caracteres especiales) de longitud variable. La longitud mxima es de 255 caracteres. Hace un buen uso del espacio en disco, porque no reserva el espacio de la longitud mxima definida, si no que solo ocupa espacio el tamao real de los datos almacenados en ese campo. Es el tipo de dato ms utilizado para campos pequeos.
TINYTEXT El tipo de datos TINYTEXT sirve para almacenar una cadena de datos (solo caracteres, no admite nmero ni caracteres especiales) de una longitud mxima de 255 caracteres.
TEXT El tipo de dato TEXT sirve para almacenar una cadena de caracteres de longitud mxima de 65,535 caracteres.
BLOB El tipo de datos BLOB sirve para almacenar datos de tipo BLOB (Binary Large Object). Admite una longitud mxima de 65,535 bytes de datos.
MEDIUMTEXT El tipo de dato MEDIUMTEXT sirve para almacenar una cadena con una longitud mxima de 16.777.215 caracteres.
MEDIUMBLOB El tipo de datos MEDIUMBLOB Sirve para almacenar datos tipo BLOB con longitud mxima 16.777.215 bytes.
LONGTEXT El tipo de dato LONGTEXT sirve para almacenar una cadena de longitud mxima de 4.294.967.295 caracteres.
LONGBLOB El tipo de dato LONGBLOB sirve para almacenar un BLOB de longitud mxima de de 4.294.967.295 bytes.
ENUM El tipo de dato ENUM sirve para introducir una lista de posibles valores. La longitud mxima es de 65.535 posibles valores. Si se intenta introducir un valor en este campo, que no est incluido en la lista, no se insertar nada y tendr un valor vaco (). 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 vaco, sin valor ().
SET El tipo de dato SET es similar a ENUM pero la longitud mxima 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. SQL Tipos de datos de numricos en MySQL Tipos de datos numricos para el sistema de gestin de bases de datos MySQL MySQL admite los siguientes tipos de datos numricos para sus columnas TINYINT El tipo de dato numrico TINYINT permite nmeros desde -128 hasta 127. Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 255. Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis (tamao).
SMALLINT El tipo de dato numrico SMALLINT permite nmeros desde -32768 hasta 32767. Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 65535. Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis
MEDIUMINT El tipo de dato numrico MEDIUMINT permite nmeros desde -8388608 hasta 8388607. Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 16777215. Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis
INT El tipo de dato numrico INT permite nmeros desde -2147483648 hasta 2147483647. Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 4294967295. Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis
BIGINT El tipo de dato numrico BIGINT permite nmeros desde -9223372036854775808 hasta 9223372036854775807. Tambin se puede definir como UNSIGNED (sin signo), entonces los valores posibles empiezan en 0 hasta 18446744073709551615. Opcionalmente, se puede definir el nmero mximo de dgitos entre parntesis
FLOAT El tipo de dato numrico FLOAT permite almacenar pequeos nmeros decimales (de punto flotante). Al ser de punto flotante, sus clculos son aproximados. Podemos especificar el nmero mximo de dgitos (tamao) y el nmero de decimales (decimal). FLOAT(6,2) tendr 4 dgitos enteros y 2 decimales, por ejemplo, 5467.67
DOUBLE El tipo de dato numrico DOUBLE permite almacenar grandes nmeros decimales (de punto flotante). Al ser de punto flotante, sus clculos son aproximados. Podemos especificar el nmero mximo de dgitos (tamao) y el nmero de decimales (decimal). DOUBLE(5,1) tendr 4 dgitos enteros y 1 dgito decimal, por ejemplo, 5467.1
DECIMAL El tipo de dato numric DECIMAL permite almacenar grandes nmeros decimales de punto fijo, por tanto, los clculos con este tipo DECIMAL son exactos. Podemos especificar el nmero mximo de dgitos (tamao) y el nmero de decimales (decimal). El nmero mximo de dgitos es de 65. Por ejemplo DECIMAL(20,6) quiere decir que tendr 14 dgitos enteros y 4 dgitos decimales. SQL Tipos de datos fecha en 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 dgitos para el ao, guin, 2 dgitos para el mes, guin, 2 dgitos para el da).
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 ao con el formato YYYY Funciones SQL SQL tiene funciones predefinidas para realizar ciertos clculos con un mayor rendimiento.
AVG Devuelve el valor medio de una columna. COUNT Devuelve el nmero de filas de la consulta. FIRST Devuelve el primer valor de la consulta. LAST Devuelve el ltimo valor de la consulta. MAX Devuelve el mayor valor de una columna. MIN Devuelve el menor valor de una columna. SUM Devuelve la suma de los valores de una columna. GROUP BY Agrupar filas con el mismo valor de una columna. HAVING Incluir condiciones con funciones SQL. UCASE Convierte un valor a maysculas. LCASE Convierte un valor a minsculas. MID Extrae caracteres de un campo de texto. LEN Devuelve la longitud de un campo de texto. ROUND Redondea un campo numrico a un nmero de decimales especificado. NOW Devuelve la fecha y hora actuales del sistema. FORMAT Formatea un campo segn se quiera mostrar. Funcin SQL AVG La funcin AVG devuelve el valor medio de una columna de tipo numrico. 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 funcin SQL SELECT AVG(precio) AS preciomedio FROM pedidos La tabla resultante sera 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 Funcin SQL COUNT La funcin COUNT devuelve el nmero de filas de la consulta, es decir, el nmero de registros que cumplen una determinada condicin. Los valores nulos no sern contabilizados. Sintaxis de SQL COUNT: SELECT COUNT(columna) FROM tabla Para obtener el nmero de filas de una tabla SELECT COUNT(*) FROM tabla Para obtener el nmero 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 nmero de filas de la tabla, es decir, 5 SELECT COUNT(*) FROM pedidos WHERE cliente = RUIZ Devolver el nmero de filas del resultado de la consulta, es decir, 1 SELECT COUNT(*) FROM pedidos WHERE precio > 270 Devolver el nmero de filas del resultado de la consulta, es decir, 2 Funcin SQL FIRST La funcin 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. Funcin SQL LAST La funcin SQL LAST sirve para obtener el valor de una columna de la ltima fila de la seleccin. 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. Funcin SQL MAX La funcin 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 mximo valor de la columna precio de la consulta. Funcin SQL MIN La funcin MIN sirve para obtener el valor ms pequeo 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 ms pequeo de la columna precio de la consulta. Funcin SQL SUM La funcin SUM permite obtener la suma total de los valores de una columna de tipo numrico. 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. FUNCION SQL GROUP BY La funcin 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 Nota: Se puede agrupar tambin por varias columnas. GROUP BY columna1, columna2 FUNCION SQL HAVING La funcin HAVING se utiliza para incluir condiciones con alguna funcin SQL del tipo SUM, MAX, .. Como la clusula 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) < nmero 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 SUM(precio) RUIZ 590 Solamente el cliente RUIZ suma en sus valores para precio 490 + 100 = 590 un valor superior a 500 El cliente GOMEZ suma en sus valores para la columna precio 250 + 60 = 310, que tambin 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. Funcin SQL UCASE La funcin UCASE sirve para convertir a maysculas 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 Funcin SQL LCASE La funcin LCASE sirve para convertir a minsculas 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 Funcin SQL MID La funcin 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 posicin desde la que empezar a extraer. longitud es el nmero 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 resultados ser: Cliente Rui Per Gom Funcin SQL LEN La funcin 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 Funcin SQL ROUND La funcin ROUND se utiliza para redondear un campo numrico en un nmero 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 nmeros decimales, ejecutaremos: SELECT ROUND(precio,0) AS rprecio FROM pedidos El resultado sera: rprecio 100 306 251 Funcin SQL NOW La funcin 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 Funcin SQL FORMAT La funcin FORMAT se utiliza para especificar como se mostrar un campo en el resultado de la consulta. Sintaxis SQL FORMAT SELECT FORMAT(columna, formato) FROM tabla Ejemplo SQL FORMAT 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, pero queremos que la fecha tenga el formato YYYY-MM-DD, es decir, 4 caracteres para el ao, guin, 2 caracteres para el mes, guin y 2 caracteres para el da. SELECT producto, precio, FORMAT(NOW(), YYYY-MM-DD) AS fecha FROM productos El resultado ser: Producto precio fecha Ordenador 900.25 2012-02-10 Impresora 65.57 2012-02-10 Teclado 10.84 2012-02-10