Professional Documents
Culture Documents
Sentencias SQL
Sentencias SQL
Departamento de Informática
Manipulación de la Información.
SENTENCIAS DE SQL
El SQL se compone de sentencias SQL, cada una con una utilidad diferente, como
por ejemplo:
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.
Este punto y coma también puede servir para separar una sentencia SQL de otra
sentencia SQL en la misma línea.
consultar (SELECT)
insertar (INSERT)
modificar (UPDATE)
borrar (DELETE)
DCL está compuesto por sentencias SQL para controlar las funciones de
administración :
Confirmar la operacion (COMMIT)
Retroceder la operacion (ROLLBACK)
Dar permisos (GRANT)
Quitar permisos (REVOKE)
Una de las sentencias SQL más importantes es SELECT, ya que permite
realizar consultas sobre los datos almacenados en la base de datos.
nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ
Al realizar una consulta puede ocurrir que existan valores repetidos para algunas
columnas. Por ejemplo
nombre
ANTONIO
LUIS
ANTONIO
DISTINCT
SELECT DISTINCT nombre FROM personas
nombre
ANTONIO
LUIS
Por ejemplo:
Condicion1 OR condicion2
En la tabla personas
ORDER BY se utiliza para ordenar los resultados de una consulta, según el valor
de la columna especificada.
SELECT nombre_columna(s)
FROM nombre_tabla
ORDER BY nombre_columna(s) ASC|DESC
nombre apellido1
LUIS LOPEZ
ANTONIO GARCIA
ANTONIO PEREZ
nombre apellido1
ANTONIO PEREZ
ANTONIO GARCIA
LUIS LOPEZ
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:
Ejemplo:
Dada la siguiente tabla personas:
Si queremos insertar una nueva fila en la tabla personas, lo podemos hacer con
cualquiera de las dos sentencias siguientes:
Cualquiera de estas sentencias anteriores produce que se inserte una nueva fila
en la tabla personas, quedando así dicha tabla:
UPDATE nombre_tabla
SET columna1 = valor1, columna2 = valor2
WHERE columna3 = valor3
La cláusula SET establece los nuevos valores para las columnas indicadas.
La cláusula WHERE sirve para seleccionar las filas que queremos modificar.
Ojo: Si omitimos la cláusula WHERE, por defecto, modificará los valores en todas
las filas de la tabla.
UPDATE personas
SET apellido2 = 'RODRIGUEZ'
WHERE nombre = 'ANTONIO'
AND apellido1 = 'GARCIA'
AND apellido2 = 'BENITO'
Si queremos borrar todos los registros o filas de una tabla, se utiliza la sentencia:
Esta cláusula SQL TOP es útil en tablas con muchos registros, para limitar el
número de filas a mostrar en la consulta, y así sea más rápida la consulta,
consumiendo también menos recursos en el sistema.
Si quiero seleccionar los nombres que empiezan por 'AN' en la tabla 'personas',
ejecutaría el comando siguiente:
Este es el resultado
Los caracteres Wildcards se utilizan con el operador SQL LIKE en una sentencia
SELECT.Los caracteres Wildcards son :
Ejemplos:
Ejemplos Wildcards
Resultado:
Resultado:
Resultado:
Sintaxis SQL IN
SELECT columna
FROM tabla
WHERE columna
IN (valor1, valor2, valor3, .)
Ejemplo SQL IN
SELECT columna
FROM tabla WHERE columna
BETWEEN valor1 AND valor2
SELECT *
FROM personas
WHERE apellido1
BETWEEN 'FERNANDEZ' AND 'HUERTAS'
SELECT *
FROM personas
WHERE apellido1
NOT BETWEEN 'FERNANDEZ' AND 'HUERTAS'
Un alias, es otra forma de llamar a una tabla o a una columna, y se utiliza para
simplificar las sentencias SQL cuando los nombres de tablas o columnas son
largos o complicados.
SELECT columna
FROM nombretabla
AS aliastabla
SELECT nombrecolumna
AS aliascolumna
FROM tabla
apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ
apellido1 apellido2
PEREZ GOMEZ
GARCIA RODRIGUEZ
Dichas tablas estarán relacionadas entre ellas de alguna forma, a través de alguna
de sus columnas.
Una clave primaria es una columna con un valor único para cada registro de una
tabla.
El propósito del JOIN es unir información de diferentes tablas, para no tener que
repetir datos en diferentes tablas.
Ejemplo:
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
La sentencia LEFT JOIN combina los valores de la primera tabla con los valores
de la segunda tabla. Siempre devolverá las filas de la primera tabla, incluso
aunque no cumplan la condición.
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
SELECT nombre, apellido1, departamento
FROM personas
LEFT JOIN departamentos
WHERE personas.dep = departamentos.dep
La sentencia RIGHT JOIN combina los valores de la primera tabla con los
valores de la segunda tabla. Siempre devolverá las filas de la segunda tabla,
incluso aunque no cumplan la condición.
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
SELECT nombre, apellido1, departamento
FROM personas
RIGHT JOIN departamentos
WHERE personas.dep = departamentos.dep
Aunque no exista ninguna persona del departamento 'COMERCIAL' (3), esta fila
aparecerá con las otras columnas en blanco
La sentencia FULL JOIN combina los valores de la primera tabla con los valores
de la segunda tabla. Siempre devolverá las filas de las dos tablas, aunque no
cumplan la condición.
dep departamento
1 ADMINISTRACION
2 INFORMATICA
3 COMERCIAL
Las dos sentencias SELECT tienen que tener el mismo número de columnas, con
el mismo tipo de dato y en el mismo orden.
Tabla "personas_empresa1"
Tabla "personas_empresa2"
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.
SELECT *
INTO nuevatabla [IN nuevabasedatos]
FROM tablaactual
SELECT *
INTO personasBackup
FROM personas
La sentencia CREATE TABLE se utiliza para crear una tabla en una base de
datos existente.
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.
Las CONSTRAINTS son restricciones que se utilizan para limitar el tipo de dato
que puede recibir una columna de una tabla.
NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT
La restricción NOT NULL sirve para especificar que una columna no acepta
el valor NULL, es decir, que esa columna siempre tiene que tener algún
valor, no puede estar vacía.
Ejemplo SQL NULL
CREATE TABLE personas { nombre varchar(255) NOT NULL, apellido1
varchar(255) NOT NULL, apellido2 varchar(255) }
Esta sentencia crea una tabla denominada 'personas', donde tenemos 3
columnas.
Las columnas 'nombre' y 'apellido' llevan NOT NULL, esto quiere decir que
cualquier fila insertada en esta tabla tiene que tener algún valor para las
columnas 'nombre' y 'apellido1'.
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
Crea una restricción UNIQUE (valor único en toda la tabla) para la columna
'identificador'.
Se puede crear también restricciones para varias columnas a la vez
La clave primaria, PRIMARY KEY, identifica de manera única cada fila de una
tabla.
La columna definida como clave primaria (PRIMARY KEY) debe ser UNIQUE
(valor único) y NOT NULL (no puede contener valores nulos).
Cada tabla sólo puede tener una clave primaria (PRIMARY KEY).
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í:
Ejemplo PRIMARY KEY con ALTER TABLE ALTER TABLE personas ADD
PRIMARY KEY (identificador)
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
Borrar FOREIGN KEY en MySQL ALTER TABLE personas DROP FOREIGN KEY
dep
La restricción CHECK se utiliza para limitar el rango de valores que puede tener
una columna.
CREATE TABLE pedidos { idpedido int, producto int, cantidad int, fecha date
DEFAULT GETDATE() }
Si una columna es índice de una tabla, al buscar por un valor de esa columna,
iremos directamente a la fila correspondiente. La búsqueda así es mucho más
óptima en recursos y más rápida en tiempo.
Actualizar una tabla con índices tarda más tiempo porque también hay que
actualizar los índices, así que solo se deben poner índices en las columnas por las
que buscamos frecuentemente.
DROP INDEX
DROP TABLE
DROP DATABASE
Es útil cuando sólo se quiere borrar los datos, pero no se quiere borrar la tabla.
Se utiliza para tener una clave primaria de una tabla mediante la generación
automática de un número secuencial único en la tabla.
Una vista es una tabla virtual basada en el resultado de una consulta (SELECT) a
una tabla.
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.
En la tabla personas
>
nombre apellido1 apellido2 edad
ANTONIO PEREZ GOMEZ 30
ANTONIO GARCIA RODRIGUEZ 45
PEDRO RUIZ GONZALEZ 50
>
nombre apellido1 apellido2 edad
ANTONIO PEREZ GOMEZ 30
ANTONIO GARCIA RODRIGUEZ 45
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.
Funciones para SQL Server sobre los tipos de datos de fecha y hora anteriores
Este valor NULL puede ser asignado como valor a cualquier columna de una
tabla.
Si el valor de una columna es opcional, quiere decir, que podemos insertar una fila
en la tabla sin asignarle ningún valor a esa columna opcional, así que esa columna
tomará el valor NULL.
El valor NULL es un valor especial, y por tanto, no se puede comparar con los
operadores aritméticos normales (=, >, <, <>), y en su lugar debemos utilizar los
operadores IS y IS NOT.
>
nombre apellido1 apellido2 edad
ANTONIO PEREZ 30
LUIS LOPEZ PEREZ 45
ANTONIO GARCIA 50
>
nombre apellido1 apellido2 edad
LUIS LOPEZ PEREZ 45
Si queremos cambiar un valor NULL por otro valor cualquiera, utilizaremos las
siguientes funciones (ISNULL, IFNULL, NVL, COLACESCE) según el sistema de
base de datos.
Para nuestros ejemplos, queremos que si el valor es NULL se cambie por el valor
0
SELECT producto,
preciounidad * (unidadesstock + ISNULL(unidadespedido, 0)
FROM productos
SELECT producto,
preciounidad * (unidadesstock + NVL(unidadespedido, 0)
FROM productos
SELECT producto,
preciounidad * (unidadesstock + IFNULL(unidadespedido, 0)
FROM productos
SELECT producto,
preciounidad * (unidadesstock + COALESCE(unidadespedido, 0)
FROM productos
CHAR
El tipo de dato CHAR sirve para almacenar una cadena de datos de longitud fija.
La longitud fija se define entre paréntesis, y siempre reservará espacio para esta
longitud aunque no se utilice.
VARCHAR
TINYTEXT
El tipo de datos TINYTEXT sirve para almacenar una cadena de datos (solo
caracteres, no admite número ni caracteres especiales) de una longitud máxima
de 255 caracteres.
TEXT
El tipo de dato TEXT sirve para almacenar una cadena de caracteres de longitud
máxima de 65,535 caracteres.
BLOB
El tipo de datos BLOB sirve para almacenar datos de tipo BLOB (Binary Large
Object).
MEDIUMTEXT
El tipo de dato MEDIUMTEXT sirve para almacenar una cadena con una longitud
máxima de 16.777.215 caracteres.
MEDIUMBLOB
El tipo de datos MEDIUMBLOB Sirve para almacenar datos tipo BLOB con
longitud máxima 16.777.215 bytes.
LONGTEXT
El tipo de dato LONGTEXT sirve para almacenar una cadena de longitud máxima
de 4.294.967.295 caracteres.
LONGBLOB
El tipo de dato LONGBLOB sirve para almacenar un BLOB de longitud máxima de
de 4.294.967.295 bytes.
ENUM
El tipo de dato ENUM sirve para introducir una lista de posibles valores.
Por ejemplo si definimos una columna como ENUM('uno', 'dos'), entonces en esta
columna solo puede almacenar los valores 'uno' o 'dos'.
Si queremos insertar cualquier otro valor (por ejemplo 'tres'), no se grabará 'tres' y
en su lugar quedará el campo vacío, sin valor ('').
SET
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'.
MySQL admite los siguientes tipos de datos numéricos para sus columnas
TINYINT
El tipo de dato numérico TINYINT permite números desde -128 hasta 127.
También se puede definir como UNSIGNED (sin signo), entonces los valores
posibles empiezan en 0 hasta 255.
Opcionalmente, se puede definir el número máximo de dígitos entre paréntesis
(tamaño).
SMALLINT
El tipo de dato numérico SMALLINT permite números desde -32768 hasta 32767.
También se puede definir como UNSIGNED (sin signo), entonces los valores
posibles empiezan en 0 hasta 65535.
MEDIUMINT
También se puede definir como UNSIGNED (sin signo), entonces los valores
posibles empiezan en 0 hasta 16777215.
INT
También se puede definir como UNSIGNED (sin signo), entonces los valores
posibles empiezan en 0 hasta 4294967295.
BIGINT
FLOAT
DOUBLE
DECIMAL
Por ejemplo DECIMAL(20,6) quiere decir que tendrá 14 dígitos enteros y 4 dígitos
decimales.
En MySQL pueden existir los siguientes tipos de datos para fechas
DATE
El tipo de dato DATE sirve para almacenar una fecha con el formato YYYY-MM-
DD (4 dígitos para el año, guión, 2 dígitos para el mes, guión, 2 dígitos para el
día).
DATETIME
El tipo de dato DATETIME sirve para almacenar fecha y hora, con el formato
YYYY-MM-DD HH:MM:SS
TIMESTAMP
TIME
El tipo de dato TIME sirve para almacenar la hora con el formato HH:MM:SS
YEAR
El tipo de dato YEAR sirve para almacenar el año con el formato YYYY