Un compendio de sentencias SQL, trata desde las sentencias DDL hasta las DML, INSERT, UPDATE, DELETE, CREATE, ALTER,se presentan mediante ejemplos detallando su estructura. Se incluyen la creación de restricciones,el borrado de las mismas y el manejo de las llaves primarias, foraneas e indices.
Las subconsultas son incluidas, así como el trabajo con WHERE, el GROUP BY y el HAVING, considerando los operadores de grupo AVG y MAX.
Se concibe la presentación como una guía rápida de referencia para SQL.
Se baso en el SQL compatible para ORACLE
2. SQL - INTRO
SQL : Structure Query Language
Es un lenguaje muy popular para el trabajo con los motores de bases de datos,
alcanzo su punto mas alto con los sistemas de almacenamiento relacionales
(basado en relación entre tablas).
Existe un estándar definido para trabajar con SQL pero cada motor de base
datos implementa algunas sentencias propietarias pensadas en el
aprovechamiento de su sistema.
5. SELECT
SELECT *| { [DISTINCT]columna | expresión[alias], … }
FROM table;
El “*” se emplea junto a la palabra reservada SELECT para retornar todas las columnas
de la tabla, si no es empleado se tiene que referir explícitamente al campo=columna.
DISTINCT es un comando para asegurar que no se repitan los datos retornados.
Se pueden emplear los denominados Alias para referirse a un campo. Todos los campos
se separa
en el FROM se especifica el nombre de la tabla a consultar.
SELECT nombre, apellido FROM persona;
6. DEFINIENDO “ALIAS”
SELECT apellido “empleado”,
salario * 12 “sueldoTotal” FROM empleados;
Los alias ayudan a darle mas sentido a los datos resultantes de una consulta.
En el ejemplo presentado se aprecia como una expresión “salario * 12”
puede ser empleada como retorno de una consulta SELECT.
“Los alias se caracterizan por emplear las comillas dobles en su
nombramiento”.
7. CONCATENACIÓN & DUPLICACIÓN
SELECT nombre || apellido as “nombres”
FROM empleados;
Se aprecia que el símbolo “||” se emplea para unir dos campos , así como la palabra
“as” se establece para indicar el alias que llevara estos campos unidos.
SELECT Distinct departamento
FROM empleados;
La palabra “distinct” evita la repetición de campos cuando se recuperan
los datos de una tabla.
8. DESCRIBIR ESTRUCTURA
DESCRIBE “NOMBRE TABLA”
Por medio de la palabra reservada DESCRIBE o su versión resumida DESC es posible
conocer los campos con su tipo y tamaño que corresponden a un arreglo tipo tabla.
Nombre
Restricción
Tipo
Id_empleado
NOT NULL
NUMBER(5)
Nombre
NOT NULL
VARCHAR2(20)
Apellido
NOT NULL
VARCHAR2(20)
9. WHERE
SELECT *| { [DISTINCT]columna | expresión[alias], … }
FROM table
[WHERE condicion)(es)];
La palabra “WHERE” se emplea para restringir las filas que se retornan
el empleo de la misma brinda versatilidad al poder incluir diversas
condiciones.
SELECT nombre, apellido FROM persona WHERE id_empleado=23;
10. BETWEEN
SELECT apellido, salario
FROM empleados
WHERE salario BETWEEN 100 AND 300;
Con la sentencia BETWEEN se restringe un intervalo dentro de los cuales se espera
conseguir un resultado.
el empleo de la misma brinda versatilidad al poder incluir diversas
condiciones de validación.
11. IN
SELECT apellido, salario
FROM empleados
WHERE salario IN (100,200,600);
Con la sentencia IN se restringe los valores retornados únicamente a los que coincidan
con los descritos en el conjunto dado por IN.
La posibilidad de realizar una consulta al interior de los paréntesis de
IN abre nuevas posibilidades..
12. LIKE
SELECT apellido, salario
FROM empleados
WHERE apellido LIKE ‘D%’;
Retorna aquellos empleados cuyo apellido inicie con “D”.
Con LIKE se efectúa una consulta en campos de cadenas de
caracteres. El símbolo % se emplea como comodín para representar
cualquier cantidad de cadena de caracteres en la posición que se localice. Es
decir si se emplea “%D%” se retornaría cualquier apellido que contenga la
letra D.
13. ORDER BY
SELECT apellido, salario
FROM empleados
ORDER BY fecha_contrato asc/desc;
La sentencia ORDER BY permite efectuar un ordenamiento de los
datos recuperados de la consulta(las columnas), puede ser del tipo
ascendente ASC o descendente DESC, lo cual se indica al finalizar la
sentencia.
14. GROUP BY
SELECT id_ jefe,avg(salario)
FROM empleados
GROUP BY id_jefe;
La sentencia anterior retorna el promedio(avg) del salario de aquellas
personas que tienen el mismo jefe.
Algunos datos se desean trabajar como si se tratara de un grupo de
los mismos. Con la sentencia GROUP BY se agrupan los datos y permite
efectuar operaciones sobre ellos.
15. HAVING
SELECT id_ jefe,max(salario)
FROM empleados
GROUP BY id_jefe
HAVING MAX(salario)>300;
La sentencia HAVING permite efectuar consultas tipo WHERE sobre las
agrupaciones de datos.
En el ejemplo presentado si agrupo por el jefe, pero solo se
presentaran los datos de aquellos grupos que el máximo del salario sea
superior a 300.
16. SUBQUERY
SELECT nombre, apellido
FROM empleados
WHERE sueldo> (SELECT sueldo FROM empleados WHERE
apellido=‘diaz’);
La anterior se denomina “subconsulta” cuando se emplea una consulta
SQL como condición a evaluar por una consulta superior.
No todas las implementaciones de SQL admiten subconsultas, así
como tampoco todos los gestores de bases de datos las compilan.
18. INSERT
INSERT INTO nombre_tabla (campos separados por
coma) VALUES (valores para los campos, separado por
comas);
La sentencia INSERT se emplea para añadir campos a una tabla.
Cuando los campos son no numéricos se debe encerrar dentro de
comillas simples es valor escrito para que el compilador de SQL no lo
confunda con el valor de una constante.
INSERT INTO empleado (nombre, apellido, sueldo)
values(‘fabian’,’diaz’,300);
19. INSERT – VALORES NULOS
INSERT INTO empleado(nombre, apellido) VALUES
(‘fabian’,’diaz’);
Se puede insertar valores nulos por el método implícito de no nombrar el
campo.
INSERT INTO empleado VALUES
(‘fabian’,’diaz’,NULL);
Pero también se puede referenciar de forma explicita,
indicando que el campo esta vacío o nulo.
20. UPDATE
UPDATE empleado
SET salario=100
WHERE apellido=‘diaz’;
Se emplea para modificar el contenido de los campos retornados por una
consulta WHERE.
Importante: Si la clausula WHERE no se coloca, toda la tabla
sufrirá el cambio especificado.
21. DELETE
DELETE FROM empleado
WHERE apellido=‘diaz’;
Se emplea para eliminar los registros filtrados por la consulta WHERE.
Importante: Si la clausula WHERE no se coloca, toda la tabla
será borrada..
23. CREATE
CREATE TABLE nombre_tabla
(columna tipo);
Se debe especificar el nombre de la tabla junto con sus campos y
el tipo de los mismos.
Si es preciso eliminar la tabla solo es
necesario escribir:
DROP TABLE nombre_tabla
CREATE TABLE empleado
(id_empleado number(2),
nombre varchar2(20),
apellido varchar2(20),
salario number(5));
24. ALTER TABLE
Sobre una tabla se pueden realizar 3 tipos de alteraciones,
Adicionar ADD:
ALTER TABLE nombre_tabla
ADD (nombre_columna tipo_de_dato);
Modificar MODIFY:
ALTER TABLE nombre_tabla
MODIFY (nombre_columna tipo_de_dato);
Eliminar DROP:
ALTER TABLE nombre_tabla
DROP (nombre_columna);
25. RESTRICCIONES : LLAVE PRIMARIA
Las restricciones se emplean para adicionarle a las tablas un
control y coherencia.
La llave primaria permite garantizar la identificación única de
un registro al interior de la tabla.
CREATE TABLE empleado
Notese que “id_pk_empleado” es el nombre de la
(id_empleado number(2),
llave primaria y puede ser reemplazado por
nombre varchar2(20),
cualquier valor.
apellido varchar2(20),
salario number(5),
CONSTRAINT id_pk_empleado PRIMARY KEY(id_empleado));
26. RESTRICCIONES : NOT NULL
Algunos campos serán obligatorios y no podrán ser creados
vacíos o nulos, para lo cual se deben declarar de la siguiente
forma al interior de la tabla.
CREATE TABLE empleado
(id_empleado number(2),
nombre varchar2(20) NOT NULL,
apellido varchar2(20),
salario number(5));
Mas de un campo puede ser declarado con NOT
NULL, incluso todos.
27. RESTRICCIONES : UNIQUE
La llave primaria permite identificar un campo de manera única
al interior de una tabla y se emplea para referenciarlo, pero
existen otros campos que se desea no tener duplicados, aunque
no se empleen como referencia. Estos campos se crean como
únicos.
CREATE TABLE empleado
(id_empleado number(2),
nombre varchar2(20) NOT NULL,
apellido varchar2(20),
salario number(5),
“No se emplean para identificación como la llave
primaria.”
email varchar2(20),CONSTRAINT emp_email_unico UNIQUE(email));
28. RESTRICCIONES : LLAVE FORANEA
La llave foránea hace referencia a un campo que coincide con la
llave primaria de otra tabla. Se emplea para crear relaciones de
dependencia entre tablas.
CREATE TABLE empleado
(id_empleado number(2),
nombre varchar2(20),
“El campo id_departamento hace referencia a la
apellido varchar2(20),
tabla departamento que tiene un campo con el
salario number(5),
mismo nombre.”
id_departamento number(2),
email varchar2(20),CONSTRAINT emp_dep_fk (id_departamento) REFERENCES
departamento (id_departamento));
29. RESTRICCIONES : ADICIONAR/ELIMINAR
ALTER TABLE empleado
ADD CONSTRAINT emp_direc FOREIGN KEY(jefe_id)
REFERENCES empleado (id_empleado)
ALTER TABLE empleado
DROP CONSTRAINT emp_direc
“Todas las restricciones se pueden agregar o
eliminar empleando el mismo método”.
30. ÍNDICES
Los índices se emplean para agilizar las consultas sobre los
campos , ahorrando tiempo de procesamiento al gestor de base
de datos.
CREATE INDEX nombre_índice
ON nombre_tabla(nombre_campo);
CREATE INDEX nombre_emp
ON empleado(nombre);
“Se pueden tener tantos índices como campos
tenga la tabla, todo depende de las necesidades
propias del desarrollador”.