# Curso SQL - DÍA 1 ## Qué es una tabla, registro, campo ### Tabla Las tablas son objetos fundamentales de una base de datos porque en ellas es donde se conserva toda la información o los datos. Una tabla está compuesta por: - **Campo:** Corresponde al nombre de la columna. Debe ser único y debe tener un tipo de dato asociado. - **Registro:** Corresponde a cada fila que compone la tabla. ## Tipos de datos de un campo ### Tipo numéricos |Nombre|Tamaño de almacenamiento|Descripción|Distancia| |-|-|-|-| |smallint|2 bytes|Entero de rango pequeño|-32768 a +32767| |integer|4 bytes|Elección típica para entero|-2147483648 a +2147483647| |bigint|8 bytes|Entero de gran alcance|-9223372036854775808 a 9223372036854775807| |decimal|variable|Precisión especificada por el usuario, exacta|Hasta 131072 dígitos antes del punto decimal; hasta 16383 dígitos después del punto decimal| |numeric|variable|Precisión especificada por el usuario, exacta|Hasta 131072 dígitos antes del punto decimal; hasta 16383 dígitos después del punto decimal| |real|4 bytes|Precisión variable, inexacta|Precisión de 6 dígitos decimales| |double precision|8 bytes|Precisión variable, inexacta|Precisión de 15 dígitos decimales |smallserial|2 bytes|Pequeño entero autoincrementador|1 a 32767| |serial|4 bytes|Entero autoincrementador|1 a 2147483647| |bigserial|8 bytes|Gran entero autoincrementador|1 a 9223372036854775807| ### Tipos monetarios |Nombre|Tamaño de almacenamiento|Descripción|Distancia| |-|-|-|-| |money|8 bytes|cantidad de moneda|-92233720368547758.08 a +92233720368547758.07| ### Tipo caracteres |string|Nombre y descripción| |-|-| |1|**character varying(n), varchar(n)** - Longitud variable con límite| |2|**character(n), char(n)** -Longitud fija, acolchada en blanco| |3|**text** - Longitud ilimitada variable| ### Tipo datos binarios |Nombre|Tamaño de almacenamiento|Descripción| |-|-|-| |bytea|1 o 4 bytes más la cadena binaria real|cadena binaria de longitud variable| ### Tipos de fecha / hora Las fechas se cuentan según el calendario gregoriano. Aquí, todos los tipos tienen una resolución de 1 microsegundo / 14 dígitos, excepto el tipo de fecha, cuya resolución es el día. |Nombre|Tamaño de almacenamiento|Descripción|Valor bajo|Valor alto| |-|-|-|-|-| |timestamp \[\(p\)\] ***[without time zone]***|8 bytes|Tanto la fecha como la hora (sin zona horaria)|4713 BC|294276 AD| |TIMESTAMPTZ|8 bytes|Tanto la fecha como la hora, con zona horaria|4713 BC|294276 AD| |date|4 bytes|Fecha (sin hora del día)|4713 BC|5874897 AD| |time \[\(p\)\] ***[without time zone]***|8 bytes|Hora del día (sin fecha)|00:00:00|24:00:00| |time \[\(p\)\] ***with time zone***|12 bytes|Solo horas del día, con zona horaria|00:00:00+1459| 24:00:00-1459| |interval [fields] \[\(p\)\]|12 bytes|Intervalo de tiempo|-178000000 years|178000000 years| Para más tipos de datos e información, sugerimos visitar la [documentacion oficial](https://www.postgresql.org/docs/current/datatype.html). ## Como crear una tabla En Postgresql, la sintaxis para la creación de una tabla es la siguiente: ```sql= CREATE TABLE [IF NOT EXISTS] table_name ( column1 datatype(length) column_constraint, column2 datatype(length) column_constraint, column3 datatype(length) column_constraint, table_constraints ); ``` En donde: - ``table_name`` representa el nombre de la tabla. - ``column1``, ``column2`` y ``column3`` representan las columnas de la tabla. - ``datatype(length)`` representa el tipo de dato de la columna. - ``column_constraint`` representa las restricciones de la columna (de esto se va a hablar en otro capítulo). - ``table_constraints`` representa las restricciones de la tabla (de esto se va a hablar en otro capítulo). Un ejemplo de cómo se crea una tabla sencilla sería el siguiente: ```sql= CREATE TABLE roles ( role_id serial PRIMARY KEY, role_name VARCHAR (255) UNIQUE NOT NULL ); ``` Para obtener más información al respecto, visite la [documentación oficial](https://www.postgresql.org/docs/current/sql-createtable.html). ## Laboratorio I ### Crear la tabla "Usuarios" Se debe crear la tabla ``usuarios`` que contenga los siguientes campos: - DNI - Nombre y Apellido - Email - Usuario - Contraseña - Fecha de Nacimiento - Edad - Tipo de usuario (donde puede tomar los valores "ADMIN", "USER" o "GER") Como consigna a esto, se pide utilizar los tipos de datos adecuados y óptimos para cada campo.