viernes, 25 de octubre de 2019

Diferencias SQL en MySQL, SQL Server, Oracle, PostgreSQL y SQLite

Veremos un diagrama EER de dos tablas y como se realizan las declaraciones de las mismas en los distintos gestores de bases de datos:

  • MySql y MariaBD
  • Oracle
  • SQL Server
  • PostgreSQL
  • SQLite


MySql y MariaBD

CREATE TABLE IF NOT EXISTS inquilinos (
  id INT NOT NULL AUTO_INCREMENT,
  dni VARCHAR(8) NOT NULL,
  nombres VARCHAR(150) NOT NULL,
  paterno VARCHAR(150) NOT NULL,
  materno VARCHAR(150) NOT NULL,
  telefono VARCHAR(40) NULL,
  correo VARCHAR(200) NULL,
  deuda DECIMAL(10,2) NOT NULL,
  fecha_ingreso DATE NOT NULL,
  PRIMARY KEY (idinquilinos),
  UNIQUE INDEX dni_UNIQUE (dni ASC),
  UNIQUE INDEX correo_UNIQUE (correo ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;

INSERT INTO inquilinos(dni, nombres, paterno, materno, 
telefono, fecha_ingreso, correo, deuda) VALUES 
('31378082','LUISA', 'PAUCAR','NARRO','999888777',
'2018-01-28','lpaucar@mail.com',0.00),
('43331042','AUGUSTO','SOTOMAYOR','NARVAJO','900800700',
'2019-10-08','asoto@mail.com',0.00);

SELECT * FROM inquilinos


Oracle



SQL Server

CREATE TABLE inquilinos (
  id INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
  dni VARCHAR(8) UNIQUE NOT NULL,
  nombres VARCHAR(150) NOT NULL,
  paterno VARCHAR(150) NOT NULL,
  materno VARCHAR(150) NOT NULL,
  telefono VARCHAR(40) NULL,
  correo VARCHAR(200) UNIQUE NOT NULL,
  deuda MONEY NOT NULL,
  fecha_ingreso DATE NOT NULL DEFAULT CURRENT_TIMESTAMP
);

INSERT INTO [inquilinos] ([dni],[nombres],[paterno],
   [materno],[telefono],[correo],[deuda],[fecha_ingreso]
   ) VALUES
	 ('31378082','LUISA', 'PAUCAR','NARRO','999888777',
        'lpaucar@mail.com',0.00,'2018-01-28'),
	 ('43331042','AUGUSTO','SOTOMAYOR','NARVAJO','900800700',
        'asoto@mail.com',0.00,'2019-10-08');

SELECT * FROM inquilinos


PostgreSQL

CREATE TABLE public."Usuarios"
(
    id serial NOT NULL,
    dni character(8) NOT NULL,
    nombres character varying(100) NOT NULL,
    apellidos character varying(150) NOT NULL,
    fecha_nacimiento date NOT NULL,
    PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
);

ALTER TABLE public."Usuarios"
    OWNER to postgres;


INSERT INTO Usuarios(
 dni, nombres, apellidos, fecha_nacimiento)
 VALUES ('71700011', 'Alan Damian', 'Toledo Higuchi', '1990-10-01');


SQLite

lunes, 21 de octubre de 2019

Creando una vista en MySQL

Diagrama EER

En este ejemplo vamos a implementar el código SQL para MySQL de la siguientes tablas que tenemos según el diagrama EER:



Lo que deseamos es crear una vista, esta vista actúa como una tabla que nosotros podemos personalizar a partir de consultas SELECT, son muy útiles para representar información de dos o más tablas que se relacionan en una sola. Ojo una vista no es una tabla propiamente dicha y solo se le puede aplicar SELECT, es decir solo ver sus datos, no se puede agregar, actualizar o eliminar registros de una vista, estos son registros de sus respectivas tablas y ahí se deben ejecutar dichas sentencias


Código SQL

Primero debemos tener la consulta que deseamos convertir en una vista, en este caso relacionar un pago con un inquilino, de forma que yo pueda ver el código del pago, el DNI del inquilino, sus nombres y apellidos en un solo campo, el pago que realizo, la fecha y hora (por separado) que lo hizo. El código resultante será el siguiente:

SELECT 
  pagos.idpagos,
  inquilinos.dni,
  CONCAT_WS(" ", inquilinos.nombres, inquilinos.paterno, inquilinos.materno),
  pagos.monto
  DATE(pagos.fecha),
  TIME(pagos.fecha)
FROM pagos INNER JOIN inquilinos 
  ON pagos.inquilino = inquilinos.idinquilinos

  • La función "CONCAT_WS" nos permite concatenar dos o más campos, indicando como primer parámetro el caracter de separación, en este caso el espacio en blanco (" ").
  • Podemos extraer la fecha de un DATETIME con la función YEAR.
  • Podemos extraer la hora de un DATETIME con la función TIME.
Ahora debemos asignar un "alias" a cada campo para tener un mejor orden:

SELECT 
  pagos.idpagos id,
  inquilinos.dni dni,
  CONCAT_WS(" ", inquilinos.nombres, inquilinos.paterno, inquilinos.materno) datos,
  pagos.monto monto
  DATE(pagos.fecha) fecha,
  TIME(pagos.fecha) hora
FROM pagos INNER JOIN inquilinos 
  ON pagos.inquilino = inquilinos.idinquilinos


Ahora podemos proceder a crear la vista anteponiendo lo siguiente: "CREATE VIEW ________ AS" de la siguiente manera

CREATE VIEW pagos_view AS
SELECT 
  pagos.idpagos id,
  inquilinos.dni dni,
  CONCAT_WS(" ", inquilinos.nombres, inquilinos.paterno, inquilinos.materno) datos,
  pagos.monto monto,
  DATE(pagos.fecha) fecha,
  TIME(pagos.fecha) hora
FROM pagos INNER JOIN inquilinos 
  ON pagos.inquilino = inquilinos.idinquilinos

  • El nombre de la vista es "pagos_view".
  • Podemos aplicarle consultas SELECT donde el nombre de los campos son los "alias" que le elegimos.

Probando

SELECT * FROM pagos_view;


Nos debe devolver algo así:

id dni datos monto fecha hora
1 31378082 LUISA PAUCAR NARRO 400.00 2019-10-21 21:34:35
2 43331042 AUGUSTO SOTOMAYOR NARVAJO 300.00 2019-10-18 18:30:00

Creando una tabla con clave foránea en MySQL

Diagrama EER

En este ejemplo vamos a implementar el código SQL para MySQL de la siguientes tablas que tenemos según el diagrama EER. Si quieres el código SQL de la tabla "inquilinos" has clic aquí


Código SQL

El código resultante será el siguiente:

CREATE TABLE IF NOT EXISTS pagos (
   idpagos INT NOT NULL AUTO_INCREMENT,
   inquilino INT NOT NULL,
   monto DECIMAL(10,2) NOT NULL,
   fecha DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY (idpagos),
   CONSTRAINT fk_pago_inquilino
     FOREIGN KEY (inquilino)
     REFERENCES inquilinos (idinquilinos)
       ON DELETE NO ACTION
       ON UPDATE NO ACTION
)ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


  • El campo "inquilino" sera nuestra clave foránea, lo que significa que estará vinculado a la tabla "inquilinos", de tal manera que para agregar un pago, primero debemos tener por lo menos un inquilino, ya que el campo es "NOT NULL".
  • La clave "fk_pago_inquilino" es el nombre de la clave foránea debe ser única, lo que implica que no se podrá repetir este nombre en ningún campo o nombre de relación de esta base de datos.
  • Se usa las siguientes sentencias:
    • ON DELETE NO ACTION: Implica que si se desea eliminar un registro de "inquilinos" que tenga por lo menos un pago, saltará un error y no dejará borrarlo.
    • ON UPDATE NO ACTION: Implica que si se desea actualizar la clave primaria de un registro de "inquilinos" que tenga por lo menos un pago, saltará un error y no dejará cambiar la clave, pero ¿Por qué querríamos hacer eso?
  • ENGINE = InnoDB, nos garantiza que podremos utilizar claves foráneas y soporte del "commit" y "rollback"
  • DEFAULT CHARACTER SET = utf8; nos permite ingresar caracteres especiales como la "ñ" o vocales tildadas a nuestros registros.


Insertando datos de prueba

INSERT INTO pagos(inquilino, monto, fecha) 
   VALUES (1,400,CURRENT_TIMESTAMP),
          (2,300,"2019-10-18 18:30:00");

  • En el caso del campo "fecha", se emplea en el primer caso "CURRENT_TIMESTAMP" que devuelve la fecha y hora actual para el servidor MySQL, en el segundo caso se especifica la fecha y hora en el formato "YYYY-MM-DD HH:MM:SS".


viernes, 11 de octubre de 2019

Creando una tabla en MySQL

Diagrama EER

En este ejemplo vamos a implementar el código SQL para MySQL de la siguiente tabla que tenemos según el diagrama EER


Código SQL

El código resultante será el siguiente:

CREATE TABLE IF NOT EXISTS inquilinos (
  idinquilinos INT NOT NULL AUTO_INCREMENT,
  dni VARCHAR(8) NOT NULL,
  nombres VARCHAR(150) NOT NULL,
  paterno VARCHAR(150) NOT NULL,
  materno VARCHAR(150) NOT NULL,
  telefono VARCHAR(40) NULL,
  correo VARCHAR(200) NULL,
  deuda DECIMAL(10,2) NOT NULL,
  fecha_ingreso DATE NOT NULL,
  PRIMARY KEY (idinquilinos),
  UNIQUE INDEX dni_UNIQUE (dni ASC))
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


  • El campo "idinquilinos" sera "AUTO_INCREMENT", lo que significa que iniciará en 1 y cada registro que se inserte generará automáticamente un nuevo valor sin que necesitemos especificarlo. Al ser un dato numérico simple y no un código se obtiene mayor velocidad en consultas a la base de datos.
  • El campo "idinquilinos" sera "PRIMARY KEY", lo que implica que será la clave primaria es decir cada registro tendrá un único identificador que es este campo y nos servirá para realizar búsquedas o emplearlo como referencias para claves foráneas a otras tablas.
  • El campo "dni" es de tipo "UNIQUE", lo que implica que no se podrá repetir este valor en ningún registro de esta tabla.
  • ENGINE = InnoDB, nos garantiza que podremos utilizar claves foráneas y soporte del "commit" y "rollback"
  • DEFAULT CHARACTER SET = utf8; nos permite ingresar caracteres especiales como la "ñ" o vocales tildadas a nuestros registros.


Insertando datos de prueba

INSERT INTO inquilinos(dni, nombres, paterno, materno, 
telefono, fecha_ingreso, correo, deuda) VALUES 

('31378082','LUISA', 'PAUCAR','NARRO','999888777',
'2018-01-28','lpaucar@mail.com',0.00),

('43331042','AUGUSTO','SOTOMAYOR','NARVAJO','900800700',
'2019-10-08','asoto@mail.com',0.00);


lunes, 19 de agosto de 2019

Imágenes, sonidos, mapas y video en HTML5

Imágenes en HTML5

El uso de imágenes en HTML se realiza mediante la etiqueta "img", se establece las siguientes propiedades

  • Fuente: src=""
  • Alto: height=""
  • Ancho: width=""
  • Descripción: alt=""

Ejemplo:

<img src="https://www.blogger.com/img/blogger-logotype-color-black-1x.png"
     width="200" 
     height="50" 
     alt="logo de Blogger"/>

En este caso establecemos como fuente de la imagen el logo de Blogger mediante su URL que apunta a un archivo de imagen (pero se puede llamar archivos locales por ejemplo: src="img/foto.png"), un alto de 50px, ancho de 200 px y una descripción que indica que es el logo de Blooger y quedaría de la siguiente manera:

logo de Blogger

Nota: La descripción es muy importante hoy en día, pues permite que personas con cualquier dificultad visual mediante su navegador y las extensiones para estos casos les indiquen de que se trata aquella imagen que no puedan visualizar.



Sonidos en HTML5

El uso de sonidos mediante la etiqueta "audio" es sencillo y la interfaz viene por defecto en cada navegador que permite su uso. Tiene como atributos:
  • Controles: controls
  • Reproducción automática: autoplay
  • Repetición automática: loop
  • Pre-carga: preload, para archivos pesados, que puede tomar tres valores:
    • Primer caso: preload = "none", no se almacena en el Buffer el archivo.
    • Segundo caso: preload = "auto", almacena el archivo.
    • Tercer caso: preload = "metada", solo almacena metadatos.

Ejemplo:

<audio src="audio.ogg" controls autoplay loop>
   <p>Mensaje en caso no se pueda reproducir en un navegador</p>
</audio>

En este caso establecemos como fuente un archivo llamado audio.ogg con los controles, reproducción automática y repeticiones activadas.


Nota: Los formatos más comunes y soportados son ogg y mp3, pero no los únicos.



Mapas en HTML5

Su inserción es mucho más efectiva empleando servicios de terceros como Google Maps

Ejemplo:

<iframe src="https://www.google.com/maps/embed?
pb=!1m18!1m12!1m3!1d124130.9974978055!2d-72.00929001754207!3d-
13.529842657332434!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3
!1m2!1s0x916dd5d826598431%3A0x2aa996cc2318315d!2sCusco!5e0!3m2
!1ses-419!2spe!4v1566252558372!5m2!1ses-419!2spe" 
   width="600" height="450" frameborder="0" 
   style="border:0" allowfullscreen></iframe>

En este caso empleamos el servicio de Google Maps para la ciudad de Cusco:




Video en HTML5

Se pueden implementar mediante la etiqueta "video" o desde un servicio de terceros como YouTube

Ejemplos:

<video controls>
  <source src="mine.mp4" type="video/mp4">
</video>

En este caso establecemos como fuente un archivo llamado mine.mp4. Podemos emplear también Youtube.

Tablas en HTML5

La etiqueta <table>

Para la construcción de tablas en HTML se emplea el elemento HTML Table, dentro de este se crea la cabecera, el cuerpo y pie de tabla.
  • Cabecera: <thead>
  • Cuerpo: <tbody>
  • Pie: <tfoot>
Dentro de la cabecera de la tabla se colocan los <tr> que son las filas y dentro de estas filas las columnas de las cabeceras que son los <th>

Dentro del cuerpo y/o del pie de la tabla se colocan los <tr> que son las filas y dentro de estas filas las columnas que son los <td>, su puede optar por colocar <th> en el pie de la tabla

Modificaciones básicas

A la etiqueta Table se le agrega una propiedad que es "border" indicando el grosor del borde, si este se omite la tabla aparecerá sin borde.

Por ejemplo el siguiente código consideramos un borde de 1px:

<table border="1">
    <thead>
        <tr>
            <th>Titulo 1</th>
            <th>Titulo 2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Cuerpo 1.1</td>
            <td>Cuerpo 2.1</td>
        </tr>
        <tr>
            <td>Cuerpo 1.2</td>
            <td>Cuerpo 2.2</td>
        </tr>
        <tr>
            <td>Cuerpo 3.2</td>
            <td>Cuerpo 3.2</td>
        </tr>
    </tbody>
    <tfoot>
        <tr>
            <th>Pie 1</th>
            <th>Pie 2</th>
        </tr>
    </tfoot>
</table>


Generaría lo siguiente:

Titulo 1 Titulo 2
Cuerpo 1.1 Cuerpo 2.1
Cuerpo 1.2 Cuerpo 2.2
Cuerpo 3.2 Cuerpo 3.2
Pie 1 Pie 2

Se puede observar que el contenido de los <th> aparece centrado y en negrita, que es una característica de esta etiqueta.

Etiqueta <caption>

A la tabla también se le puede agregar un título general mediante la etiqueta <caption>

Por ejemplo el siguiente código consideramos un borde de 1px:
<table border="1">
    <caption>Título de la tabla</caption>
    <thead>
        <tr>
            <th>Titulo 1</th>
            <th>Titulo 2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Cuerpo 1.1</td>
            <td>Cuerpo 2.1</td>
        </tr>
        <tr>
            <td>Cuerpo 1.2</td>
            <td>Cuerpo 2.2</td>
        </tr>
        <tr>
            <td>Cuerpo 3.2</td>
            <td>Cuerpo 3.2</td>
        </tr>
    </tbody>
    <tfoot>
        <tr>
            <th>Pie 1</th>
            <th>Pie 2</th>
        </tr>
    </tfoot>
</table>


Generaría lo siguiente:

Título de la tabla
Titulo 1 Titulo 2
Cuerpo 1.1 Cuerpo 2.1
Cuerpo 1.2 Cuerpo 2.2
Cuerpo 3.2 Cuerpo 3.2
Pie 1 Pie 2

La propiedad colspan

Mediante esta propiedad una columna puede ocupar el espacio de más de 1 columna.

Por ejemplo el siguiente código consideramos un borde de 1px:

<table border="1">
    <caption>Título de la tabla</caption>
    <thead>
        <tr>
            <th>Titulo 1</th>
            <th>Titulo 2</th>
            <th>Titulo 3</th>
            <th>Titulo 4</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Cuerpo 1.1</td>
            <td>Cuerpo 2.1</td>
            <td colspan="2">Cuerpo 3</td>
        </tr>
        <tr>
            <td colspan="4">Cuerpo 2.1</td>
        </tr>
        <tr>
            <td>Cuerpo 3.1</td>
            <td colspan="3">Cuerpo 3.2</td>
        </tr>
    </tbody>
    <tfoot>
        <tr>
            <th colspan="2">Pie 1</th>
            <th colspan="2">Pie 2</th>
        </tr>
    </tfoot>
</table>


Generaría lo siguiente:

Título de la tabla
Titulo 1 Titulo 2 Titulo 3 Titulo 4
Cuerpo 1.1 Cuerpo 2.1 Cuerpo 3
Cuerpo 2.1
Cuerpo 3.1 Cuerpo 3.2
Pie 1 Pie 2

domingo, 18 de agosto de 2019

Caracteres especiales en HTML

Tabla de caracteres especiales en HTML



Nombre Símbolo Código
Signo ampersand & &amp;
Comillas dobles " &quot;
Signo "menor que" < &lt;
Signo "mayor que" > &gt;
Espacio en blanco &nbsp;
Apertura de exclamación ¡ &iexcl;
Apertura de interrogación ¿ &iquest;
Signo del centavo ¢ &cent;
Signo de la Libra Esterlina £ &pound;
Signo de divisa general ¤ &curren;
Signo de Yen ¥ &yen;
Barra vertical dividida ¦ &brvbar;
Signo de sección § &sect;
Diéresis ¨ &uml;
Signo de copyright © &copy;
Indicador ordinal femenino ª &ordf;
Indicador ordinal masculino º &ordm;
Comillas angulares de apertura « &laquo;
Comillas angulares de cierre » &raquo;
Signo de negación (angular) ¬ &not;
Signo de registrado ® &reg;
Raya superior ¯ &macr;
Signo de grado ° &deg;
Signo de más o menos ± &plusmm;
Superíndice uno ¹ &sup1;
Superíndice dos - cuadrado ² &sup2;
Superíndice tres - cubo ³ &sup3;
Acento agudo ´ &acute;
Signo de micro µ &micro;
Signo de fin de párrafo &para;
Punto medio · &middot;
Cedilla ¸ &cedil;
Un cuarto ¼ &frac14;
Un medio ½ &frac12;
Tres cuartos ¾ &frac34;
A mayúscula con acento grave À &Agrave;
A minúscula con acento grave à &agrave;
A mayúscula con acento agudo (tilde) Á &Aacute;
A minúscula con acento agudo (tilde) á &aacute;
A mayúscula con acento circunflejo  &Acirc;
A minúscula con acento circunflejo â &acirc;
A mayúscula con virgulilla à &Atilde;
A minúscula con virgulilla ã &atilde;
A mayúscula con diéresis Ä &Auml;
A minúscula con diéresis ä &auml;
A mayúscula con anillo Å &Aring;
A minúscula con anillo å &aring;
E mayúscula con acento grave È &Egrave;
E minúscula con acento grave è &egrave;
E mayúscula con acento agudo (tilde) É &Eacute;
E minúscula con acento agudo (tilde) é &eacute;
E mayúscula con acento circunflejo Ê &Ecirc;
E minúscula con acento circunflejo ê &ecirc;
E mayúscula con diéresis Ë &Euml;
E minúscula con diéresis ë &euml;
I mayúscula con acento grave Ì &Igrave;
I minúscula con acento grave ì &igrave;
I mayúscula con acento agudo (tilde) Í &Iacute;
I minúscula con acento agudo (tilde) í &iacute;
I mayúscula con acento circunflejo Î &Icirc;
I minúscula con acento circunflejo î &icirc;
I mayúscula con virgulilla Ĩ &Itilde;
I minúscula con virgulilla ĩ &itilde;
I mayúscula con diéresis Ï &Iuml;
I minúscula con diéresis ï &iuml;
O mayúscula con acento grave Ò &Ograve;
O minúscula con acento grave ò &ograve;
O mayúscula con acento agudo (tilde) Ó &Oacute;
O minúscula con acento agudo (tilde) ó &oacute;
O mayúscula con acento circunflejo Ô &Ocirc;
O minúscula con acento circunflejo ô &ocirc;
O mayúscula con virgulilla Õ &Otilde;
O minúscula con virgulilla õ &otilde;
O mayúscula con barra inclinada Ø &Oslash;
O minúscula con barra inclinada ø &oslash;
O mayúscula con diéresis Ö &Ouml;
O minúscula con diéresis ö &ouml;
U mayúscula con acento grave Ù &Ugrave;
U minúscula con acento grave ù &ugrave;
U mayúscula con acento agudo (tilde) Ú &Uacute;
U minúscula con acento agudo (tilde) ú &uacute;
U mayúscula con acento circunflejo Û &Ucirc;
U minúscula con acento circunflejo û &ucirc;
U mayúscula con diéresis Ü &Uuml;
U minúscula con diéresis ü &uuml;
Diptongo AE mayúscula Æ &AElig;
Diptongo AE minúscula æ &aelig;
C mayúscula con cedilla Ç &Ccedil;
C minúscula con cedilla ç &ccedil;
Ñ mayúscula Ñ &Ntilde;
Ñ minúscula ñ &ntilde;