SQL

                     Creación de Base de Datos                          

Ejemplo de creación de base de datos para crear un foro sencillo:

CREATE DATABASE
IF NOT EXISTS foro 
DEFAULT CHARACTER SET latin1 
COLLATE latin1_swedish_ci;

USE foro;


CREATE TABLE comentarios (
  id_comentario int(10) UNSIGNED NOT NULL,
  foros_id_foro int(10) UNSIGNED NOT NULL,
  usuarios_id_usuario int(10) UNSIGNED NOT NULL,
  comentario text,
  fecha date DEFAULT NULL,
  hora time DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE foros (
  id_foro int(10) UNSIGNED NOT NULL,
  nombre varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


CREATE TABLE usuarios (
  id_usuario int(10) UNSIGNED NOT NULL,
  nombre varchar(50) NOT NULL,
  contrasena varchar(20) NOT NULL,
  correo varchar(30) NOT NULL,
  avatar varchar(100) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ==============================================
--    Creación de los índices para las tablas 
-- ==============================================
--    Indices de la tabla: foros

ALTER TABLE foros
  ADD PRIMARY KEY (id_foro),
  ADD UNIQUE KEY id_foro(id_foro);

--    Indices de la tabla: usuarios

ALTER TABLE usuarios
  ADD PRIMARY KEY (id_usuario),
  ADD UNIQUE KEY id_usuario(id_usuario);


--    Indices de la tabla: comentarios

ALTER TABLE comentarios
  ADD PRIMARY KEY (id_comentario),
  ADD UNIQUE KEY id_comentario(id_comentario),
  ADD KEY FKIndex1 (Usuarios_id_usuario),
  ADD KEY FKIndex2 (Foros_id_foro);

-- ===================================================
--  Creación de los valores de incremento automático
--              en campos índices:
-- ===================================================
--    AUTO_INCREMENT de la tabla: comentarios

ALTER TABLE comentarios
  MODIFY id_comentario int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;


--    AUTO_INCREMENT de la tabla: foros

ALTER TABLE foros
  MODIFY id_foro int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;


--    AUTO_INCREMENT de la tabla: usuarios

ALTER TABLE usuarios
  MODIFY id_usuario int(10) UNSIGNED NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1;
  

-- ==============================================
--    Restricciones Constraint para tablas 
-- ==============================================

--  Integridad referencial para la tabla: comentarios

ALTER TABLE comentarios
  ADD CONSTRAINT comentarios_ibfk_1 
  FOREIGN KEY (Usuarios_id_usuario
  REFERENCES usuarios (id_usuario
  ON DELETE NO ACTION 
  ON UPDATE CASCADE,
  
ADD CONSTRAINT comentarios_ibfk_2 
FOREIGN KEY (Foros_id_foro
REFERENCES foros (id_foro
ON DELETE NO ACTION 
ON UPDATE CASCADE;

                                       INSTRUCCIONES BÁSICAS                                  


Insertar registro en una tabla:
INSERT INTO nombreTable(campo1,campo2... campoN) VALUES(dato1,dato2...datoN)

Actualizar datos en una tabla:
UPDATE nombreTabla SET campo1 dato1, campo2 dato,... ,campoN = datoN WHERE condición

Eliminar registros de una tabla:
DELETE nombreTabla WHERE condición

Recuperar datos de tablas.
SELECT campo1, campo2,...,campoN FROM nombreTabla [WHERE condicion] [GROUP BY campo1, campo2,...,campoN] [ORDER BY campo1, campo2, campoN]

Las instrucciones WHERE, GROUP BY y ORDER BY son opcionales.


      Uso de alias para identificar una tabla.                                                                       

Se utiliza para hacer referencia a una tabla sin tener que anotar el nombre completo de la tabla.

nombreTabla AS alias

Ejemplo:

SELECT u.nombre,f.consulta FROM usuarios AS usu INNER JOIN foropublico AS f ON usu.id = f.idAutor WHERE f.fecha = '2017/07/09/'

Esta consulta recupera todos los nombres de usuarios y sus participaciones en el foro el día 09/julio/2017.

Observar que se usa la letra f para hacer referencia a la tabla foropublico, mientras que para referirse a la tabla usuarios se emplea usu. Estos son los alias definidos para cada tabla. 

                                                     Uso de Joins                                                  

Una instrucción Join, permite realizar consultas que recuperan datos de distintas tablas. Aunque existen diversos tipos de joins, no todos son soportados por  todos los gestores de base de datos relacionales. Así que mencionaré los tres mayormente utilizados y que están soportados por la mayoría de los gestores:

1. INNER JOIN
2. RIGHT JOIN
3. LEFT JOIN

1. Inner Join:
Cuando se requiere recuperar todos los registros que cumplen con la condiciones de igualdad especificadas entre las tablas.

Ejemplo:  Recuperar todos los nombres de los usuarios y las fechas en que realizaron comentarios en el foro:

SELECT usuario.nombre, comentarios.fecha FROM usuarios INNER JOIN comentarios ON usuarios.id_usuario = comentarios.usuarios_id_usuario

La consulta devolverá únicamente los nombres de usuarios que realizaron comentarios y la fechas en que fueron publicados.

2. Right join:
Si se requiere recuperar todos los registros que estén contenidos únicamente en la tabla de la derecha y tengan una relación con la tabla izquierda.

Ejemplo: Recuperar todos las fechas de cada comentario y el nombre del foro.


SELECT foros.nombrecomentarios.fecha FROM foros RIGHT JOIN comentarios ON foros.id_foro = comentarios.foros_id_foros

La consulta devolverá solo los nombre de foros que tengan algún comentario registrado. Si no existiera integridad referencial entre ambas tablas y la tabla comentarios contuviera registros sin relación en la tabla de foros, se presentarían las fechas de los comentarios y el nombre del foro aparecería null.

3. Left Join
Se utiliza para recuperar todos los registros de la tabla de la izquierda sin importar si existe algún registro relacionado en la tabla de la derecha.

Ejemplo: Recuperar todos los nombres de foros y cada nombre de sus comentarios publicados.


SELECT foros.nombrecomentarios.comentario FROM foros LEFT JOIN comentarios ON foros.id_foro = comentarios.foros_id_foros

Esta consulta devolverá todos los nombres de los foros y los comentarios publicados al respecto, sin embargo, la columna comentario presentará null al no encontrar un registro relacionado en la tabla comentarios.

No hay comentarios.:

Publicar un comentario