Instroducción a SQL
[Link]
Structure Query
Language
Es un lenguaje informático de
base de datos diseñado para la
gestión de sistemas de bases de
datos relacionales, basado en el
[Link]
álgebra y cálculo relacional.
Resumiento, SQL es
❏ Lenguaje informático declarativo
❏ Asociado al modelo relacional (RDBMS)
❏ Estandarizado por ANSI (American National Standards Institute)
[Link]
¿Qué puedo hacer SQL?
❏ Definir estructuras de datos (DDL)
❏ Manipular datos (DML)
❏ Controlar permisos de acceso (DCL)
[Link]
Data definition language
❏ CREATE DATABASE - crea una base de datos
❏ DROP DATABASE - elimina una base de datos
❏ CREATE TABLE - crea una tabla
❏ ALTER TABLE - modifica una tabla
❏ DROP TABLE - elimina una tabla
❏ CREATE INDEX - crea un índice sobre una tabla
❏ DROP INDEX - elimina un índice
❏ CREATE VIEW - crea una vista sobre los datos
❏ DROP VIEW - elimina una vista
❏ CREATE CONSTRAINT - crea una restricción sobre los datos
[Link]
❏ DROP CONSTRAINT - elimina una restricción
CREATE/DROP
DATABASE
❏ La instrucción CREATE DATABASE se utiliza para crear
una base de datos.
❏ La instrucción DROP DATABASE se utiliza para
eliminar una base de datos. Esta operación elimina
todas las tablas y datos de la base de datos.
CREATE DATABASE <nombre_base_de_datos>;
[Link]
DROP DATABASE <nombre_base_de_datos>;
CREATE TABLE
❏ La sentencia CREATE TABLE se utiliza para crear una
tabla en una base de datos.
CREATE TABLE <nombre_tabla> (
<nombre_columna> <DATA_TYPE> [<CONSTRAINT>],
<nombre_columna> <DATA_TYPE> [<CONSTRAINT>],
…
);
[Link]
Tipos de datos (DATA TYPE)
Un “tipo de datos” (data type) es un atributo que especifica
el tipo de datos que puede contener el objeto, es decir,
define el tipo de valor (dato) que puede contener un
objeto.
❏ Alfanumérico (character)
❏ Numérico (numeric)
❏ Binario (bit)
❏ Fecha (date time)
[Link]
Tipos de datos (DATA TYPE)
Alfanuméricos
❏ CHAR(size) - alfanumérico de dimensión fija (ASCII).
❏ VARCHAR(max-size) - alfanumérico de dimensión
variable (ASCII).
❏ NCHAR(size) - alfanumérico de dimensión fija con
soporte para caracteres internacionales (UNICODE).
❏ NVARCHAR(max-size) - alfanumérico de dirección
variable con soporte de caracteres internacionales
(UNICODE).
[Link]
Tipos de datos (DATA TYPE)
Numéricos
❏ SMALLINT - número entero (16 bits)
❏ INT - número entero (32 bits)
❏ REAL - número flotante (32 bits)
❏ DECIMAL - número flotante
❏ DECIMAL (precisión, escala)
[Link]
Tipos de datos (DATA TYPE)
Binarios
❏ El tipo de datos BIT es un valor entero que acepta 0, 1
y NULL.
❏ BIT representa un tipo booleano con valores
VERDADERO (1) y FALSO (0).
❏ BIT(size) - binario de tamaño fijo
[Link]
Tipos de datos (DATA TYPE)
Fechas
❏ DATE - fecha (ej. 2010-05-03)
❏ TIME - hora (ej. [Link]), la granularidad es en
nanosegundos.
❏ TIMESTAMP - fecha y hora (ej. 2010-05-03 [Link])
❏ TIMESTAMPZ - fecha y hora con zona horaria (ej.
2010-05-03 [Link] GMT-03)
[Link]
Tipos de datos (DATA TYPE)
Large Objects
❏ CLOB(max-size) - Objeto grande de tipo alfanumérico
❏ BLOB(max-size) - Objeto grande de tipo binario
[Link]
Restricciones (CONSTRAINTS)
Las restricciones de SQL se utilizan para especificar reglas
para los datos de una tabla. Las restricciones se utilizan
para limitar el tipo de datos que pueden incluirse en una
tabla. Esto asegura la precisión y confiabilidad de los
datos en la tabla.
❏ NOT NULL
❏ UNIQUE
❏ PRIMARY KEY
❏ FOREIGN KEY
[Link]
❏ CHECK
❏ DEFAULT
Restricciones (CONSTRAINTS)
CREATE/DROP CONSTRAINT
CREATE CONSTRAINT <nombre_restriccion>
<restrinccion>;
DROP CONSTRAINT <nombre_restriccion>;
[Link]
Restricciones (CONSTRAINTS)
NOT NULL
❏ La restricción NOT NULL obliga a una columna a NO
aceptar valores NULL.
❏ La restricción NOT NULL impone que un campo
siempre contenga un valor. Esto significa que no
puede insertar un nuevo registro o actualizar un
registro sin agregar un valor a este campo.
CREATE TABLE <nombre_tabla> (
<nombre_columna> DATA_TYPE NOT NULL,
[Link]
…
);
Restricciones (CONSTRAINTS)
UNIQUE
❏ La restricción UNIQUE identifica de forma única cada
registro en una tabla de base de datos.
❏ Las restricciones UNIQUE y PRIMARY KEY
proporcionan una garantía de unicidad para una
columna o conjunto de columnas.
❏ Una restricción PRIMARY KEY automáticamente tiene
definida una restricción UNIQUE. Tenga en cuenta que
puede tener muchas restricciones UNIQUE por tabla,
[Link]
pero solo una restricción PRIMARY KEY por tabla.
Restricciones (CONSTRAINTS)
UNIQUE
CREATE TABLE <nombre_tabla> (
<nombre_columna> DATA_TYPE UNIQUE,
…
CONSTRAINT <nombre_restriccion> UNIQUE ([<nombre_columna>])
);
CREATE CONSTRAINT <nombre_restriccion>
UNIQUE <nombre_tabla>([<nombre_columna>]);
[Link]
Restricciones (CONSTRAINTS)
PRIMARY KEY
❏ La restricción PRIMARY KEY identifica de forma única
cada registro en una tabla de base de datos.
❏ Las claves primarias deben contener valores únicos.
❏ Una columna de PRIMARY KEY no puede contener
valores NULL.
❏ Cada tabla debe tener una clave principal y cada tabla
sólo puede tener UNA clave principal.
[Link]
Restricciones (CONSTRAINTS)
PRIMARY KEY
CREATE TABLE <nombre_tabla> (
…,
CONSTRAINT <nombre_restriccion>
PRIMARY KEY ([<nombre_columna>])
);
CREATE CONSTRAINT <nombre_restriccion>
PRIMARY KEY <nombre_tabla>([<nombre_columna>]);
[Link]
Restricciones (CONSTRAINTS)
FOREIGN KEY
❏ FOREIGN KEY en una tabla apunta a una PRIMARY
KEY en otra tabla.
❏ La restricción FOREIGN KEY se usa para evitar
acciones que destruirían enlaces entre tablas.
❏ La restricción FOREIGN KEY también evita que se
inserte un formulario de datos no válido en la columna
de clave externa, porque tiene que ser uno de los
valores contenidos en la tabla a la que apunta.
[Link]
Restricciones (CONSTRAINTS)
FOREIGN KEY
CREATE TABLE <nombre_tabla> (
…,
CONSTRAINT <nombre_restriccion>
FOREIGN KEY <nombre_columna>
REFERENCES <nombre_tabla_foranea>(<nombre_columna_foranea>)
);
CREATE CONSTRAINT <nombre_restriccion>
FOREIGN KEY <nombre_tabla>(<nombre_columna>)
[Link]
REFERENCES <nombre_tabla_foranea>(<nombre_columna_foranea>);
Restricciones (CONSTRAINTS)
CHECK
❏ La restricción CHECK se usa para limitar el rango de
valores que se puede colocar en una columna.
❏ Si define una restricción CHECK en una sola columna,
solo permite ciertos valores para esta columna.
❏ Si define una restricción CHECK en una tabla, puede
limitar los valores en ciertas columnas en función de
los valores en otras columnas de la fila.
[Link]
Restricciones (CONSTRAINTS)
CHECK
CREATE TABLE <nombre_tabla> (
<nombre_columna> DATA_TYPE
CHECK (<nombre_columna> <operador> <valor>)
…,
CONSTRAINT <nombre_restriccion>
CHECK (<nombre_columna> <operador> <valor>)
);
CREATE CONSTRAINT <nombre_restriccion>
CHECK <nombre_tabla>(<nombre_columna> <operador> <valor>);
[Link]
Restricciones (CONSTRAINTS)
DEFAULT
❏ La restricción DEFAULT se utiliza para insertar un valor
predeterminado en una columna.
❏ El valor predeterminado se agregará a todos los
registros nuevos, si no se especifica ningún otro valor.
CREATE TABLE <nombre_tabla>(
<nombre_columna> DATA_TYPE DEFAULT <valor>,
…
);
[Link]
CREATE TABLE
Empleado Departamento
Nro_Emp Nombre Puesto Nro_Depto Nro_Depto Nombre Locación
1 Alicia Presidente 10 10 Contabilidad Buenos Aires
2 Bernardo Director 30 20 I+D Cordoba
3 Carlos Director 10 30 Ventas San Luis
4 Miguel Líder 20 40 Operaciones Mendoza
[Link]
CREATE TABLE
CREATE TABLE departamento (
nro_depto INT NOT NULL UNIQUE,
nombre VARCHAR(128) NOT NULL,
locacion VARCHAR(25)
);
CREATE CONSTRAINT departamento_pk
PRIMARY KEY departamento(nro_depto);
[Link]
CREATE TABLE
CREATE TABLE empleado (
nro_emp INT NOT NULL UNIQUE,
nombre VARCHAR(128) NOT NULL,
puesto VARCHAR(25) DEFAULT “Empleado”,
nro_depto INT
);
CREATE CONSTRAINT empleado_pk PRIMARY KEY empleado(nro_emp);
CREATE CONSTRAINT empleado_nro_depto_fk
FOREIGN KEY empleado(nro_depto)
REFERENCES departamento(nro_depto);
[Link]
ALTER TABLE
❏ La declaración ALTER TABLE se usa para agregar,
eliminar o modificar columnas en una tabla existente.
ALTER TABLE <nombre_tabla>
ADD COLUMN <nombre_columna> <DATA_TYPE> [<CONSTRAINT>];
ALTER TABLE <nombre_tabla> DROP COLUMN <nombre_columna>;
[Link]
ALTER TABLE <nombre_tabla>
RENAME COLUMN <nombre_columna> TO <nuevo_nombre_columna>;
ALTER TABLE
MODIFICAR TIPO DE DATO (DATA
TYPE)
-- SQL Server
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> <DATA_TYPE>;
-- Oracle
ALTER TABLE <nombre_tabla>
MODIFY <nombre_columna> <DATA_TYPE>;
-- PostgreSQL
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> TYPE <DATA_TYPE>;
-- MySQL
[Link]
ALTER TABLE <nombre_tabla>
MODIFY COLUMN <nombre_columna> <DATA_TYPE>;
ALTER TABLE
AGREGAR NOT NULL
-- SQL Server
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> <DATA_TYPE> NOT NULL;
-- Oracle
ALTER TABLE <nombre_tabla>
MODIFY <nombre_columna> <DATA_TYPE> NOT NULL;
-- PostgreSQL
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> SET NOT NULL;
-- MySQL
[Link]
ALTER TABLE <nombre_tabla>
MODIFY COLUMN <nombre_columna> <DATA_TYPE> NOT NULL;
ALTER TABLE
ELIMINAR NOT NULL
-- SQL Server
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> <DATA_TYPE>;
-- Oracle
ALTER TABLE <nombre_tabla>
MODIFY (<nombre_columna> NULL);
-- PostgreSQL
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> DROP NOT NULL;
-- MySQL
[Link]
ALTER TABLE <nombre_tabla>
MODIFY <nombre_columna> <DATA_TYPE>;
ALTER TABLE
AGREGAR UNIQUE
ALTER TABLE <nombre_tabla>
ADD UNIQUE ([<nombre_columna>]);
ALTER TABLE <nombre_tabla>
ADD CONSTRAINT <nombre_restriccion> UNIQUE ([<nombre_columna>]);
[Link]
ALTER TABLE
ELIMINAR UNIQUE
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> DROP UNIQUE;
ALTER TABLE <nombre_tabla>
DROP CONSTRAINT <nombre_restriccion>;
[Link]
ALTER TABLE
AGREGAR PRIMARY KEY
ALTER TABLE <nombre_tabla>
ADD PRIMARY KEY ([<nombre_columna>]);
ALTER TABLE <nombre_tabla>
ADD CONSTRAINT <nombre_restriccion>
PRIMARY KEY ([<nombre_columna>]);
[Link]
ALTER TABLE
ELIMINAR PRIMARY KEY
ALTER TABLE <nombre_tabla>
DROP PRIMARY KEY;
ALTER TABLE <nombre_tabla>
DROP CONSTRAINT <nombre_restriccion>;
[Link]
ALTER TABLE
AGREGAR FOREIGN KEY
ALTER TABLE <nombre_tabla>
ADD FOREIGN KEY <nombre_columna>
REFERENCES <nombre_tabla_foranea>(nombre_columna_foranea>);
ALTER TABLE <nombre_tabla>
ADD CONSTRAINT <nombre_restriccion>
FOREIGN KEY <nombre_columna>
REFERENCES <nombre_tabla_foranea>(nombre_columna_foranea>);
[Link]
ALTER TABLE
ELIMINAR FOREIGN KEY
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> DROP FOREIGN KEY;
ALTER TABLE <nombre_tabla>
DROP CONSTRAINT <nombre_restriccion>;
[Link]
ALTER TABLE
AGREGAR CHECK
ALTER TABLE <nombre_tabla>
ADD CHECK (<nombre_columna> <operador> <valor>);
ALTER TABLE <nombre_tabla>
ADD CONSTRAINT <nombre_restriccion>
CHECK (<nombre_columna> <operador> <valor>);
[Link]
ALTER TABLE
ELIMINAR CHECK
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> DROP CHECK;
ALTER TABLE <nombre_tabla>
DROP CONSTRAINT <nombre_restriccion>;
[Link]
ALTER TABLE
AGREGAR DEFAULT
-- SQL Server
ALTER TABLE <nombre_tabla>
ADD CONSTRAINT <nombre_restriccion>
DEFAULT <valor> FOR <nombre_columna>;
-- Oracle
ALTER TABLE <nombre_tabla>
MODIFY <nombre_columna> SET DEFAULT <valor>;
-- PostgreSQL
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> SET DEFAULT <valor>;
-- PostgreSQL
[Link]
ALTER TABLE <nombre_tabla>
ALTER <nombre_columna> SET DEFAULT <valor>;
ALTER TABLE
ELIMINAR DEFAULT
-- SQL Server | Oracle | PostgreSQL
ALTER TABLE <nombre_tabla>
ALTER COLUMN <nombre_columna> DROP DEFAULT;
-- MySQL
ALTER TABLE <nombre_tabla>
ALTER <nombre_columna> DROP DEFAULT;
[Link]
DROP TABLE
❏ La declaración DROP TABLE se usa para eliminar una
tabla existente.
❏ Esta declaración elimina todos los datos de la tabla.
DROP TABLE <nombre_tabla>;
[Link]
CREATE INDEX
❏ Se puede crear un índice en una tabla para encontrar
datos de manera más rápida y eficiente.
❏ Los usuarios no pueden ver los índices, solo se
utilizan para acelerar las búsquedas/consultas.
❏ Nota: Actualizar una tabla con índices lleva más
tiempo que actualizar una tabla sin ellos (porque los
índices también necesitan una actualización). Por lo
tanto, solo debe crear índices en columnas (y tablas)
[Link]
que se buscarán con frecuencia.
CREATE INDEX
CREATE INDEX <nombre_indice>
ON <nombre_tabla>([<nombre_columna>]);
CREATE UNIQUE INDEX <nombre_indice>
ON <nombre_tabla>([<nombre_columna>]);
[Link]
DROP INDEX
❏ La declaración DROP INDEX se usa para eliminar un
índice existente.
DROP INDEX <nombre_indice>;
[Link]
CREATE VIEW
❏ En SQL, una vista es una tabla virtual basada en el
conjunto de resultados de una instrucción SQL.
❏ Una vista contiene filas y columnas, como una tabla
real. Los campos de una vista son campos de una o
más tablas reales de la base de datos.
❏ Puede agregar funciones SQL, instrucciones WHERE y
JOIN a una vista y presentar los datos como si
proviniera de una sola tabla.
[Link]
CREATE VIEW
CREATE VIEW <nombre_vista>
AS <sentencia_select>;
[Link]
DROP VIEW
❏ La declaración DROP VIEW se usa para eliminar una
vista existente.
DROP VIEW <nombre_vista>;
[Link]
Data control language
❏ GRANT - autoriza a uno o más usuarios a realizar una
operación o un conjunto de operaciones en un objeto.
❏ REVOKE - elimina una concesión, que puede ser la concesión
predeterminada.
GRANT [<operacion>] ON [<objeto>] TO <role/usuario>
WITH GRANT OPTION;
REVOKE [<operacion>] ON [<objeto>] FROM <role/usuario>;
[Link]
Data manipulation language
❏ INSERT INTO - insertar nuevos datos en una base de datos
❏ UPDATE - actualizar los datos en una base de datos
❏ DELETE - borrar datos de una base de datos
❏ SELECT - extraer datos de una base de datos
[Link]
DML
INSERT
INSERT INTO <nombre_tabla>
VALUES ([<valor>]);
INSERT INTO <nombre_tabla> ([<nombre_columna>])
VALUES ([<valor>]);
INSERT INTO empleado
VALUES (1, ‘Juan’, ‘Empleado’, 10);
INSERT INTO empleado
VALUES (1, ‘Juan’, , 10);
[Link]
INSERT INTO empleado (nro_emp, nombre, nro_depto)
VALUES (1, ‘Juan’, 10);
DML
UPDATE
UPDATE TABLE <nombre_tabla>
SET [<nombre_columna> = <valor>]
WHERE <condicion>;
UPDATE TABLE empleado
SET nombre = ‘Juan Pablo’
WHERE nro_emp = 1;
[Link]
DML
DELETE
DELETE FROM <nombre_tabla>
WHERE <condicion>;
DELETE FROM empleado
WHERE nro_emp = 1;
[Link]
[Link]