/*
    S.Q.L. Structured Query Language

    Diseñado para administrar y consultar sistemas de gestión de bases de datos relacionales
    Maneja álgebra Y cálculo relacional para realizar consultas.

    SQL es un lenguaje de definición, manipulación y contról de datos.

    Permitiendo:
    Inserción [INSERT], Consulta [SELECT], Modificación [UPDATE], Borrar [DELETE].

    Además de la Creación [CREATE] y Modificación [UPDATE] de esquemas (schemas) y
    control de acceso a los datos.

    Tipos de datos básicos SQL:
        -VARCHAR: Cadena de caracteres

        -INTEGER: Enteros con o sin signo

        -DATE   : Fecha (año, mes y día)

        -TIME   : Hora (horas, minutos y segundos)

*/
-- Cración de una tabla

--CREATE TABLE nombre_tabla (
--    nombre_columna1 tipo_de_dato,
--    nombre_columna2 tipo_de_dato,
--    nombre_columna3 tipo_de_dato,
--    ....
--);

/*
    Restricciones SQL

    NOT NULL: Impide que el dato sea nulo.
    UNIQUE: Impide que los datos se repitan.
    PRIMARY KEY: Identifica cada registro de una tabla de forma única.
    FOREIGN KEY: Identifica un registro de otra tabla de forma única.
    CHECK: Asegura el cumplimiento de una condición para todos los valores en una columna.
    DEFAULT: Valor insertado por defecto, al no especificar ninguno.
    INDEX: Utilizados para crear y devolver datos de forma eficiente.

    ej.
*/

CREATE TABLE    categoria_libro (
    CODIGO INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    NOMBRE TEXT NOT NULL
);

-- Creación de una tabla a partir de otra
--CREATE TABLE nueva_tabla AS
--  SELECT columna1, columna2, ...
--  WHERE ...;

-- ej.
CREATE TABLE copia_libro AS
    SELECT ISBN, TITULO FROM libro

/*
    Modificando el esquema de una tabla

    ALTER TABLE: Agregar, eliminar o modificar, columnas en una tabla;
                 ALTER TABLE nombre_tabla nombre_columna tipo_de_dato

                 Agregar o eliminar, resticciones de columnas.
                 ALTER TABLE nombre_tabla ALTER COLUMN
*/

-- Agregar una columna
-- ALTER TABLE nombre_tabla ADD nombre_columna tipo_de_dato;
--ej.
ALTER TABLE libro
ADD categoria_id INTEGER REFERENCES categoria_libro(ID);

ALTER TABLE libro
ADD precio INTEGER;

-- Borrar una columna
--ALTER TABLE nombre_tabla DROP COLUMN nombre_columna;
--ej.
ALTER TABLE copia_libro
DROP COLUMN TITULO;
-- SQlite no ofrece esta funcionalidad

-- Modificar tipo de dato de columna
--ALTER TABLE nombre_tabla ALTER COLUMN nombre_columna tipo_de_dato;
--ej.
ALTER TABLE libro
ALTER COLUMN precio REAL;
-- SQlite no ofrece esta funcionalidad

-- Agregar una restricción
ALTER TABLE libro
ADD CONSTRAINT chk_price CHECK (precio>=0);
-- SQlite no ofrece esta funcionalidad

-- Borrar tabla
--DROP TABLE nombre_tabla;
DROP TABLE copia_libro;

-- Borrar datos de una tabla
--TRUNCATE TABLE table_name;
-- SQlite no ofrece esta funcionalidad
