Fundamentos de programación
Angel Soto
dreamensys@gmail.com
ansoto.com
@dreamensys
Web Developer

Sql
Bases de datos
Conjunto finito y estructurado de datos

Tipos
- Relacionales
- No relacionales
Sistema Gestor de Bases de datos
(SGBD)
Software que permite manipular bases de datos.
Algunos SGBD ya obsoletos
- Redundancia de información
- Inconsistencia de datos
- Inseguridad
- Difícil acceso y mantenimiento

SGBD
- Reutilización de datos
- Control de redundancia
- Estandarización
- Consistencia
- Integridad
- Seguridad
- Mantenimiento
- Persistencia
- Atomicidad




Tablas
Las bases de datos contienen cientos o miles de tablas y cada tabla se compone de filas y columnas.
| Juan | Perez | M | 21 |
| Maria | Castañeda | F | 25 |
| Diana | Lopez | M | 14 |
| Nombre | Apellido | Genero | Edad |
|---|
| Juan | Perez | M | 21 |
| Maria | Castañeda | F | 25 |
| Diana | Lopez | M | 14 |
| Nombre | Apellido | Género | Edad |
|---|
| Fila o registro |
|---|
Columna
Nombre columna
Dato
Celda
Cada columna puede tener un tipo de dato diferente de las demás.
SQL
Structured Query Language
Lenguaje de interacción con bases de datos que permite...
- Añadir
- Borrar
- Recuperar
- Editar
- Organizar
- Proteger
...información en una base de datos.
SQL no pertenece a un único SGBD, cada uno de ellos realiza una extensión del mismo.

T-Sql
También conocido como Transact Sql, es una extensión de Sql aplicado al SGBD de MIcrosoft.

Objetos en una base de datos
- Tablas
- Vistas
- Procedimientos Almacenados
- Funciones
- Triggers
- Usuarios
- Roles
Tipos de sentencias SQL
Data Definition Language
Definen la estructura de la base de datos.
Data Control Language
Definen el acceso y permisos de la base de datos.
Data Manipulation Language
Definen los datos contenidos en la base de datos.
DDL
DCL
DML
Transaction Control Language
Controlan las transacciones hechas a la base de datos
TCL



DDL
Crear, modificar o eliminar objetos.
- CREATE
- ALTER
- DROP
Tipos de datos
Numericos exactos
| Tipo dato | Intervalo |
|---|---|
| bigint | De -263(-9.223.372.036.854.775.808) a 263 - 1 (9.223.372.036.854.775.807) |
| int | De -231 (-2.147.483.648) a 231 - 1 (2.147.483.647) |
| smallint | De -215 (-32.768) a 215 - 1 (32.767) |
| tinyint | De 0 a 255 |
| bit | Tipo de datos entero que puede aceptar los valores 1, 0 ó NULL |
Numericos exactos
| Tipo dato | Intervalo |
|---|---|
| decimal, numeric, decimal (p, s) |
p (precisión): el número total máximo de dígitos decimales que se puede almacena. s (escala): el número máximo de dígitos decimales que se puede almacenar a la derecha del separador decimal. |
| money | Tipos de datos que representan valores monetarios o de moneda: de -922.337.203.685,4775808 a 922.337.203.685,4775807 |
| smallmoney | De -215 (-32.768) a 215 - 1 (32.767) |
Numericos Aproximados
| Tipo dato | Intervalo |
|---|---|
| float | De - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 a 1,79E+308 |
| real | De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 a 3,40E + 38 |
Fecha y hora
| Tipo dato | Intervalo |
|---|---|
| datetime | Del 1 de enero de 1753 hasta el 31 de diciembre de 9999 |
| smalldatetime | Del 1 de enero de 1900 hasta el 6 de junio de 2079 |
Cadenas de caracteres
| Tipo dato | Intervalo |
|---|---|
| char(n) | Caracteres no Unicode de longitud fija, con una longitud de n bytes. n debe ser un valor entre 1 y 8.000 |
| varchar(n) | Caracteres no Unicode de longitud variable. n indica que el tamaño de almacenamiento máximo es de 231 - 1 bytes |
| text | En desuso, sustituido por varchar. Datos no Unicode de longitud variable con una longitud máxima de 231 - 1 (2.147.483.647) caracteres |
Cadenas de caracteres Unicode
| Tipo dato | Intervalo |
|---|---|
| nchar(n) | Datos de carácter Unicode de longitud fija, con n caracteres. n debe estar comprendido entre 1 y 4.000 |
| nvarchar(n) | Datos de carácter Unicode de longitud variable. n indica que el tamaño máximo de almacenamiento es 231 - 1 bytes |
| ntext(n) | En desuso, sustituido por nvarchar. Datos Unicode de longitud variable con una longitud máxima de 230 - 1 (1.073.741.823) caracteres |
DDL
CREATE DATABASE nombre_base de datos
CREATE DATABASE TiendaDiscoStu;Crea nuevos objetos en la base de datos.
CREATE
CREATE
DDL
CREATE TABLE nombre_tabla
(
nombre_columna1 tipo_de_dato(tamaño),
nombre_columna2 tipo_de_dato(tamaño),
nombre_columna2 tipo_de_dato(tamaño),
....
);
CREATE TABLE artistas
(
id INT PRIMARY KEY IDENTITY (1,1),
identificacion INT,
nombres VARCHAR(30),
apellidos VARCHAR(35),
nombre_artistico VARCHAR(35),
sueldo FLOAT,
genero VARCHAR(50)
);CREATE
DDL
ALTER TABLE nombre_tabla
ALTER|ADD|DROP nombre_columna tipo_de_dato(tamaño)
ALTER TABLE Artistas
ALTER COLUMN genero VARCHAR(200) NOT NULL; Altera la estructura de objetos en la base de datos.
CREATE
ALTER
ALTER
DDL
DROP TABLE nombre_tabla
DROP TABLE Artistas;Elimina objetos en la base de datos.
CREATE
ALTER
DROP
DROP
DCL
Controla y administra quien accede a los objetos de la base de datos.
- GRANT
- REVOKE
CREATE
ALTER
DROP
DDL
GRANT PRIVILIGIES ON nombre_objeto TO nombre_usuario
GRANT SELECT, INSERT, UPDATE, DELETE
ON Empleados
TO PepitoPerez;Permite a usuarios leer/escribir sobre los objetos de la base de datos.
GRANT
DCL
GRANT
CREATE
ALTER
DROP
DDL
REVOKE PRIVILIGIES ON nombre_objeto TO nombre_usuario
REVOKE ALL ON Empleados FROM PepitoPerez;Niega a usuarios leer/escribir sobre los objetos de la base de datos.
GRANT
REVOKE
DCL
REVOKE
DML
Obtener, agregar, modificar o eliminar información contenida en los objetos de la base de datos.
- SELECT
- INSERT
- UPDATE
- DELETE
Estas sentencias pueden ser filtradas por la clausula WHERE
CREATE
ALTER
DROP
DDL
SELECT nombre_columna1, nombre_columna2, nombre_columna3 FROM nombre_tabla
SELECT nombres, apellidos, genero FROM artistas;Obtiene la información de un objeto en la base de datos.
GRANT
REVOKE
DCL
SELECT
DML
SELECT
Usando "*" para traer todas las columnas
SELECT * FROM artistas;CREATE
ALTER
DROP
DDL
SELECT nombre_columna1, nombre_columna2, nombre_columna3 FROM nombre_tabla WHERE nombre_columna2 [Operador de Comparación] valor2
SELECT nombres, apellidos, genero
FROM artistas
WHERE genero = 'Rock';GRANT
REVOKE
DCL
SELECT
DML
Usando WHERE
CREATE
ALTER
DROP
DDL
INSERT INTO nombre_tabla
VALUES (valor1,valor2, valor3,...)
INSERT INTO artistas
VALUES(1018456789,'Chayan Emilio','Lopez',
'El chayan',3000,'Romantico');Inserta información en un objeto en la base de datos.
GRANT
REVOKE
DCL
SELECT
INSERT
DML
INSERT
CREATE
ALTER
DROP
DDL
UPDATE nombre_tabla SET nombre_columna1 [Operador de Asignación] valor1
UPDATE artistas SET sueldo = 200;Actualiza la información de un objeto en la base de datos.
GRANT
REVOKE
DCL
SELECT
INSERT
UPDATE
DML
UPDATE
CREATE
ALTER
DROP
DDL
UPDATE nombre_tabla SET nombre_columna1 [Operador de Asignación] valor1 WHERE nombre_columna2 [Operador de Comparación] valor2
UPDATE artistas SET sueldo = 200
WHERE genero = 'Reggaeton';GRANT
REVOKE
DCL
DML
Usando WHERE
SELECT
INSERT
UPDATE
CREATE
ALTER
DROP
DDL
DELETE FROM nombre_tabla
DELETE FROM artistas;Borra información de un objeto en la base de datos.
GRANT
REVOKE
DCL
SELECT
INSERT
UPDATE
DELETE
DML
DELETE
CREATE
ALTER
DROP
DDL
DELETE FROM nombre_tabla WHERE nombre_columna2 [Operador Comparativo] valor2
DELETE FROM artistas
WHERE nombre_artistico = 'Trigresa del oriente';GRANT
REVOKE
DCL
DML
Usando WHERE
SELECT
INSERT
UPDATE
DELETE
TCL
Administra las transacciones hechas a objetos en la base de datos.
- BEGIN TRANSACTION
- COMMIT TRANSACTION
- ROLLBACK TRANSACTION
Entre otros.
Operadores (Transact-SQL)
- Aritméticos
- Lógicos
- De asignación
- De comparación
Entre otros.
Aritméticos
| Operador | Significado |
|---|---|
| + | Suma |
| - | Resta |
| * | Multiplicación |
| / | División |
| % | Módulo o resíduo |
Lógicos
| Operador | Significado |
|---|---|
| AND | TRUE si ambas expresiones booleanas son TRUE. |
| BETWEEN | TRUE si el operando está dentro de un intervalo. |
| IN | TRUE si el operando es igual a uno de la lista de expresiones. |
| LIKE | TRUE si el operando coincide con un patrón. |
| NOT | Invierte el valor de cualquier otro operador booleano. |
| OR | TRUE si cualquiera de las dos expresiones booleanas es TRUE. |
Los más usados
De asignación
El signo igual (=) es el único operador de asignación de Transact-SQL.
=
De comparación
| Operador | Significado |
|---|---|
| = | Igual a |
| > | Mayor que |
| < | Menor que |
| >= | Mayor o igual que |
| <= | Menor o igual que |
| <> | No es igual a |
Funciones integradas (Transact-SQL)
- De agregado
- De conversión
- De Fecha y hora
- Matemáticas
- De cadena
Funciones integradas que proporcionan ayuda para trabajar con la información de la base de datos.
(Las más usadas)
De agregado
| Función | Descripción | Uso |
|---|---|---|
| AVG(nombre_columna) | Devuelve el promedio de los valores de un grupo. Se omiten los valores NULL. | SELECT AVG(monto) FROM Ventas |
| MIN(nombre_columna) | Devuelve el valor mínimo de la expresión | SELECT MIN(TasaImpuesto) Ventas; |
| COUNT(nombre_columna) | Devuelve el número de elementos de un grupo | SELECT COUNT(DISTINCT Nombre) FROM Empleados; |
| MAX(nombre_columna) | Devuelve el valor máximo de la expresión | SELECT MAX(TasaImpuesto) FROM Ventas; |
| SUM(nombre_columna) | Devuelve la suma de todos los valores o solo de los valores DISTINCT de la expresión | SELECT SUM(Total) FROM Ventas; |
(Las más usadas)
De conversión
| Función | Descripción | Uso |
|---|---|---|
| CAST(dato AS tipo_dato) | Convierte una expresión de un tipo de datos en otro | SELECT CAST(236 AS nvarchar); |
| CONVERT(tipo_dato,dato) | Devuelve el valor mínimo de la expresión | SELECT CONVERT(nvarchar,236); |
| PARSE(dato AS tipo_dato) | Devuelve el resultado de una expresión, traducido al tipo de datos solicitado en SQL Server | SELECT PARSE('12/16/2010' AS datetime2) AS Result; |
(Las más usadas)
De fecha y hora
| Función | Descripción | Uso |
|---|---|---|
| GETDATE() | Devuelve un valor datetime que contiene la fecha y hora del equipo en el que la instancia de SQL Server se está ejecutando. El ajuste de zona horaria no está incluido. | SELECT GETDATE(); |
| DAY(fecha) | Devuelve un entero que representa la parte del día de date especificado. | SELECT DAY('17/11/1989'); |
| MONTH(fecha) | Devuelve el resultado de una expresión, traducido al tipo de datos solicitado en SQL ServerDevuelve un entero que representa el mes de un fecha especificado. | SELECT MONTH('17/11/1989'); |
| YEAR(fecha) | Devuelve un entero que representa el año de una fecha específica. | SELECT YEAR('17/11/1989'); |
(Las más usadas)
Matemáticas
| Función | Descripción | Uso |
|---|---|---|
| SQRT(dato) | Devuelve la raíz cuadrada del valor de tipo flotante especificado | SELECT SQRT(3); |
| ROUND(dato) | Devuelve un valor numérico, redondeado a la longitud o precisión especificadas | SELECT ROUND(3.1416,2) |
| POWER(dato,potencia) | Devuelve el valor de la expresión especificada elevado a la potencia especificada. | SELECT POWER(2,5); |
(Las más usadas)
De cadena
| Función | Descripción | Uso |
|---|---|---|
| CONCAT(cadena1,cadena2,...) | Devuelve una cadena que es el resultado de concatenar dos o más valores de cadena | SELECT CONCAT('Hola','que','tal'); |
| SUBSTRING(cadena,indice_inicio,numero_indices_desplazamiento) | Devuelve parte de una expresión de caracteres, binaria, de texto o de imagen en SQL Server. | SELECT SUBSTRING('abcdef', 2, 3); |
| REPLACE(dato,valor_a_reemplazar,valor_reemplazo) | Reemplaza todas las instancias de un valor de cadena especificado por otro valor de cadena. | SELECT REPLACE('primer texto','primer','reemplazado'); |
| LEN(cadena) | Devuelve el número de caracteres de la expresión de cadena especificada, excluidos los espacios en blanco finales | SELECT LEN('Texto de prueba'); |
(Las más usadas)
De cadena
| Función | Descripción | Uso |
|---|---|---|
| UPPER(cadena) | Devuelve una expresión de caracteres convertidos a mayúsculas | SELECT UPPER('Pedro'); |
| LOWER(cadena) | Devuelve una expresión de caracteres convertidos a minúsculas | SELECT LOWER('Juan'); |
| RTRIM(cadena) | Remueve los espacios en blanco al final de una cadena | SELECT RTRIM('Buenos días '); |
| LTRIM(cadena) | Remueve los espacios en blanco al principio de una cadena | SELECT LTRIM(' buenas tardes'); |
(Las más usadas)
SELECT TOP numero_filas, nombre_columna1, nombre_columna_2 FROM nombre_tabla
SELECT TOP 5 * FROM Artistas;Clausula TOP
SELECT nombre_columna1 AS 'nombre_alias1',nombre_columna2 AS 'nombre_alias2' FROM nombre_tabla
SELECT genero AS 'Genero Artistico'
FROM artistas;ALIAS
Son palabras que pueden reemplazar el nombre de columnas o tablas en una consulta sin alterar su estructura como tal.
SELECT nombre_columna1 ,nombre_columna2 FROM nombre_tabla WHERE nombre_columna1 IN (consulta_select)
SELECT * FROM artistas
WHERE Pais IN
(SELECT NombrePais FROM Paises
WHERE Continente = 'América');SUBCONSULTAS
Consultas anidadas en otras consultas.
Se pueden incluir en:
- SELECT
- FROM
- WHERE
SELECT nombre_columna1 ,nombre_columna2 FROM nombre_tabla WHERE nombre_columna1 ORDER BY nombre_columna
SELECT * FROM artistas
WHERE genero = 'Jazz'
ORDER BY FechaEntrada;ORDER BY
Ordenar datos dentro de una cláusula SELECT, puede tener las siguientes variaciones:
- ASC
- DESC
SELECT funcion_agregado FROM nombre_tabla WHERE nombre_columna1 GROUP BY nombre_columna_agrupar
SELECT count(*) FROM
artistas
GROUP BY generoGROUP BY
Agrupar datos dentro de una cláusula SELECT que contenga una función de agregado.
nombre_columna PRIMARY KEY,
id INT PRIMARY KEY,LLaves primarias
Campo o combinación de campos que identifica de forma única a cada fila de una tabla.
Incluida dentro de la sentencia CREATE de una tabla.
ALTER TABLE artistas WITH CHECK ADD
CONSTRAINT FK_GENERO FOREIGN KEY (GENERO_ID)
REFERENCES Generos (ID)LLaves foráneas
Identifican una columna o grupo de columnas en una tabla que se refiere a una columna o grupo de columnas en otra tabla.

Fundamentos de programación - SQL
By Angel Soto
Fundamentos de programación - SQL
- 1,445