Sie sind auf Seite 1von 32

SQL

Dra. Araiza
Elementos del lenguaje SQL
• Comandos. Son las distintas instrucciones que se pueden realizar desde SQLDDL, Data Definition
Language (Lenguaje de definición de datos). Lo forman los comandos que permiten modificar la
estructura de la base de datos. Más claramente, son los comandos que modifican los metadatos. Lo
forman las instrucciones CREATE, ALTER, DROP, RENAME y TRUNCATE.
• Con estos comandos se crean, por ejemplo, tablas (CREATE TABLE), usuarios (CREATE USER),
vistas (CREATE VIEW), etc. Otros comandos permiten modificar (ALTER) y borrar (DROP) estos
elementos.
• DCL, Data Control Language (Lenguaje de control de datos). Administran los derechos y
restricciones de los usuarios. Lo forman las instrucciones GRANT y REVOKE.
• DML, Data Manipulation Language (Lenguaje de manipulación de datos). Lo forman los comandos
que modifican filas (y por lo tanto datos) de las tablas. Lo forman las instrucciones INSERT,
UPDATE, MERGE y DELETE.
10/28/2020
SELECT
Se trata del comando que permite realizar consultas sobre los datos de la base de datos. Aunque esta
operación forma parte de la función de manipulación (y por lo tanto del lenguaje DML) , es tan
importante que, en la actualidad, se le asocia toda una función: la función de consulta. Por ello, se
entiende que forma parte del lenguaje DQL (Data Query Language, Lenguaje de consulta de datos).

SELECT * | {[DISTINCT columna | expresión [alias], ...}FROM


tabla;

SELECT nombre FROM cliente;

10/28/2020
Otros
• Cláusulas. Son palabras especiales que permiten modificar el funcionamiento de un comando.
Ejemplos: WHERE, ORDER BY, etc.
• Operadores. Permiten crear expresiones complejas. Pueden ser aritméticos (+,-,*,/,...) o de
comparación y lógicos (>, <, !=,<>, AND, OR,...)
• Funciones. Son elementos que reciben parámetros y devuelven resultados que facilitan crear
instrucciones complejas. Ejemplos: SUM(), SYSDATE, etc.
• Literales. Valores concretos para las consultas: números, textos, caracteres,... Ejemplos: 2, 12.34,
‘Avda Cardenal Cisneros’
• Metadatos. Es información de la estructura de la base de datos. Por ejemplo: nombres de tablas,
nombres de columnas, etc.

10/28/2020
Normas de escritura
• En SQL no se distingue entre mayúsculas y minúsculas (salvo en los textos literales; es decir, en los
datos).
• Las instrucciones finalizan con el signo de punto y coma
• Cualquier comando SQL (SELECT, INSERT,...) puede ser partidos por espacios o saltos de línea
antes de finalizar la instrucción. Se usa para mejorar la legibilidad de las instrucciones. También se
pueden tabular líneas para facilitar la lectura si fuera necesario.
• Lo que no podemos es partir en varias líneas una palabra.
• Los comentarios en el código SQL comienzan por /* y terminan por */ (excepto en algunos SGBD).
En Oracle, como en otros sistemas, existe también el comentario de una línea mediante los símbolos
--:

10/28/2020
A fin de probar el SQL hay que tener en cuenta
que existe una versión de Oracle que es gratuita
para un uso sin ánimo de lucro llamada Oracle
11g Express Edition
◦ Disponible en.
◦ http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html

10/28/2020
Objetos de la base de datos
◦ Según los estándares actuales, una base de datos es un conjunto de objetos pensados para gestionar datos. Estos
objetos están contenidos en esquemas, los esquemas suelen estar asociados al perfil de un usuario en particular.
◦ En SQL estándar, existe el concepto de catálogo, que sirve para almacenar esquemas, y estos sirven para almacenar
objetos. Así el nombre completo de un objeto vendría dado por:

catálogo.esquema.objeto
◦ Es decir, los objetos pertenecen a esquemas y estos a catálogos.
◦ En casi todos los sistemas de bases de datos hay un catálogo por defecto, de modo que, si no se indica catálogo alguno
al crear objetos, estos se almacenan allí. Del mismo modo, hay esquemas por defecto.
◦ Oracle no posee catálogos. Sin embargo, sí existen esquemas. Los esquemas de Oracle están relacionados con los
usuarios: cada usuario posee un esquema (con el mismo nombre que el usuario) pensado para almacenar sus objetos.
Aunque podemos almacenar (si tenemos permisos para ello) objetos en otros esquemas, nuestros objetos (tablas,
vistas, etc.) estarán normalmente en nuestro esquema.

10/28/2020
Creación de tablas: nombres
◦ Deben cumplir las siguientes reglas (se comentan las reglas de Oracle, en otros SGBD podrían cambiar):
◦ Deben comenzar con una letra
◦ No deben tener más de 30 caracteres
◦ Solo se permiten utilizar letras del alfabeto (inglés), números o el signo de subrayado (también los signos $ y #, pero esos
se utilizan de manera especial, por lo que no son recomendados)
◦ No puede haber dos tablas con el mismo nombre dentro del mismo esquema (pueden coincidir los nombres si están en
distintos esquemas)
◦ No puede coincidir con el nombre de una palabra reservada SQL (por ejemplo, no se puede llamar SELECT a una tabla)
◦ En el caso de que el nombre tenga espacios en blanco o caracteres nacionales (permitido solo en algunas bases de datos),
entonces se suele entrecomillar con comillas dobles. En el estándar SQL 99 (respetado por Oracle) se pueden utilizar
comillas dobles al poner el nombre de la tabla a fin de hacerla sensible a las mayúsculas (se diferenciará entre
“FACTURAS” y “Facturas”)
◦ Nota: Estas son también las propiedades que debe cumplir cualquier nombre de objeto en una base de datos (nombres de
vistas, columnas, restricciones,…)

10/28/2020
CREATE TABLE (1/2)
◦ Es la orden SQL que permite crear una tabla. Por defecto será almacenada en el espacio y esquema del
usuario que crea la tabla. Sintaxis:

CREATE TABLE [esquema.] nombreDeTabla ( nombreDeLaColumna1 tipoDeDatos


[DEFAULT valor] [restricciones] [, ...]);

Ejemplo:
CREATE TABLE proveedores (nombre VARCHAR(25));
Crea una tabla con un solo campo de tipo VARCHAR.

Solo se podrá crear la tabla si el usuario posee los permisos necesarios para ello. Si la tabla
pertenece a otro esquema (suponiendo que el usuario tenga permiso para grabar tablas en ese otro
esquema), se antepone al nombre de la tabla , el nombre del esquema:

10/28/2020
CREATE TABLE (2/2)
◦ Se puede indicar un valor por defecto para el atributo mediante la cláusula DEFAULT.
◦ Ejemplo:

CREATE TABLE Proveedores ( nombre VARCHAR(25), localidad VARCHAR(30) DEFAULT ‘Palencia’);

De este modo si añadimos un proveedor y no indicamos localidad, se tomará Palencia como localidad de
dicho Proveedor.

Podemos utilizar DEFAULT y usar funciones del sistema. Por ejemplo:

CREATE TABLE Prestamos( id_prestamo NUMBER(8), fecha_prestamo DATE DEFAULT SYSDATE);

10/28/2020
Tipos de datos
A la hora de crear tablas, hay
que indicar el tipo de datos de
cada campo. Necesitamos pues
conocer los distintos tipos de
datos. Estos son:

10/28/2020
Tipos de datos
A la hora de crear tablas, hay
que indicar el tipo de datos de
cada campo. Necesitamos pues
conocer los distintos tipos de
datos. Estos son:

10/28/2020
Textos
◦ Para almacenar texto, Oracle dispone de los siguientes tipos:
◦ VARCHAR2 . Utilizado para textos de longitud variable. En este tipo, para cada valor, Oracle almacena primero el tamaño del
texto y luego almacena el texto. De esa forma un texto corto ocupa en disco menos que un texto largo.
◦ Cuando se indica VARCHAR2 como tipo, se debe de indicar también un número entre paréntesis que indicará el tamaño
máximo del texto. Para Oracle las palabras VARCHAR y VARCHAR2 son equivalentes. Pero se aconseja utilizar
VARCHAR2. Se admiten textos que ocupen hasta 4000 bytes como máximo.
◦ CHAR. Para textos de longitud fija. En las columnas que usen este tipo de datos, los valores siempre ocuparán el mismo
tamaño. Por ejemplo, si hemos indicado como tipo CHAR(20), todos los textos ocuparán 20 caracteres, sean del tamaño que
sean. El tipo CHAR, como mucho puede indicar un tamaño de 2000 bytes.
◦ NCHAR. El tipo NCHAR permite utilizar un segundo juego de caracteres para poder almacenar textos usando la
configuración regional de cada país. De hecho, NCHAR usa la tabla Unicode.
◦ NVARCHAR2. La idea es la misma que en el caso anterior, pero ahora pensando en el almacenamiento de caracteres de
longitud variable.

10/28/2020
Textos
◦ En todos estos tipo, conviene indicar suficiente espacio para almacenar los valores. En el caso de los VARCHAR2, no se
malgasta espacio por poner más espacio del deseado ya que si el texto es más pequeño que el tamaño indicado, el resto del
espacio se ocupa: aunque también es conveniente ajustar ya que evita que se pueden introducir más caracteres de los
necesarios en la base de datos.
◦ A la hora de introducir valores de tipo texto, hay que tener en cuenta que los textos literales se entrecomillan en todas las
instrucciones SQL. Ejemplo:
INSERT INTO Personas(cod_persona,nombre)
VALUES (1,‘Juan Luis’);

En el ejemplo anterior Juan Luis, es el nombre de la persona que estamos añadiendo a la tabla Personas. Puesto que es un texto, se
entrecomilla con comillas simples.

Podría ocurrir que el propio texto literal requiera indicar comillas simples. En Oracle eso se soluciona mediante el operador q que
permite indicar otro carácter delimitador del texto distinto de la comilla simple. Por ejemplo:

q’[O’Hara]’

O’Hara es un texto que tiene dentro un apostrofe (es decir, una comilla simple). Tras el operador q, y entre comillas
simples, se indican los nuevos delimitadores del texto (en el ejemplo son los corchetes) y dentro de ellos el texto que,
evidentemente, no puede contener ninguno de los nuevos delimitadores (es decir, no puede contener corchetes).
10/28/2020
Números
◦ En Oracle, el tipo NUMBER es un tipo muy versátil que permite representar todo tipo de números.
◦ Su rango permite almacenar números de entre 10-130 y 9,99999999999 * 10128. Si intentamos añadir un número fuera de
este rango, Oracle produciría un error.
◦ números de coma fija
◦ Son los números más utilizados en las bases de datos. Indicando este tipo, se nos permite almacenar números decimales de
forma exacta. Su desventaja es que ocupan más que los números de coma flotante y que, además, las computadoras no saben
operar con estos números de forma nativa, por lo que los cálculos con ellos son más lentos (aunque más precisos). Los
números decimales (números de coma fija) se indican mediante el formato: NUMBER(p,s)
◦ Donde p es la precisión máxima del número y s es la escala (número de decimales a la derecha de la coma). Por ejemplo,
NUMBER (8,3) indica que se representan números de ocho cifras de precisión y tres decimales. Los decimales en Oracle se
presentan con el punto y no con la coma.
◦ Para números enteros se indica NUMBER(p) donde p es el número de dígitos. Eso es equivalente a NUMBER(p,0).
◦ Para números de coma flotante (equivalentes a los float o double de muchos lenguajes de programación) simplemente se
indica el texto NUMBER sin precisión ni escala.

10/28/2020
Precisión y escala
◦ La cuestión de la precisión y la escala es compleja. Para entenderla mejor, se muestran estos ejemplos:

Número escrito por el


ormato Se almacena como…
usuario
NUMBER 345255.345 345255.345
NUMBER(9) 345255.345 345255
NUMBER(9,2) 345255.345 345255.35
NUMBER(7) 345255.345 Da error de precisión
NUMBER(9,-2) 345255.345 345300
NUMBER(7,2) 345255.345 Da error de precisión

En definitiva, la precisión debe incluir todos los dígitos del número (puede llegar hasta 38 dígitos). La escala solo indica los
decimales que se respetarán del número, pero si es negativa indica ceros a la izquierda del decimal.

10/28/2020
Números
◦ Enteros
◦ Oracle también permite almacenar números enteros. En este caso se indica la palabra NUMBER seguida
del número máximo de cifras que podrán almacenarse. Por ejemplo, NUMBER(8) permitiría almacenar
números sin decimales de hasta ocho cifras.

◦ Números en coma flotante


◦ Se indican simplemente con la palabra NUMBER, sin indicar número alguno después. Como se ha
indicado anteriormente, los números en coma flotante permiten almacenar números decimales que se
operan muy rápido por parte de las computadoras, pero que no almacenan los números con exactitud
absoluta. Tienen una precisión limitada.

10/28/2020
Fechas y Horas
◦ Las fechas y las horas en Oracle (como en otros sistemas) se almacenan internamente en un formato especial (realmente es un
formato numérico). Sin embargo, las personas representamos las fechas indicando años, meses, día del mes, hora, minutos y
segundos.
◦ Por lo tanto, hay que tener en cuenta que el formato en el que se muestran las fechas por pantalla cuando consultamos datos, es
una conversión para que las personas entendamos las fechas. Internamente se almacenan de otra forma.
◦ Oracle posee cuatro tipos de datos relacionados con fechas. (nosotros veremos estos 2)
◦ DATE
◦ TIMESTAMP

10/28/2020
tipo DATE
◦ El tipo DATE permite almacenar fechas sin tener en cuenta las horas, minutos y segundos. Oracle posee
la función SYSDATE para obtener la fecha actual.
◦ Las fechas no se pueden manipular directamente y se debe usar la función TO_DATE (que se detallará
en temas posteriores) para pasar un texto que representa fechas a la fecha correspondiente. Ejemplo:
TO_DATE(‘3/5/2020’,’DD/MM/YYYY’)

El resultado es la fecha que representa el 3 de mayo de 2020. La expresión DD/MM/YYYY


indica que estamos usando hasta dos cifras para el día, que le siguen (separadas por el símbolo /)
hasta dos cifras para el mes y finalmente 4 cifras para el año.

10/28/2020
tipo TIMESTAMP
◦ Es una extensión del anterior, almacena valores de día, mes y año, junto con hora, minuto y segundos,
incluso con decimales para los segundos. Con lo que representa un instante concreto en el tiempo.
◦ Es conveniente usar la función TO_DATE para representar datos TIMESTAMP:

TO_DATE(‘2/2/2020 18:34:23’,’DD/MM/YYYY HH24:MI:SS’)

Si intentamos almacenar datos que contienen (además de la fecha) horas, minutos y segundos en una
columna de tipo DATE, solo se almacenará el año, mes y día.

10/28/2020
Datos de gran tamaño
◦ Son tipos pensados para almacenar datos de tamaño muy grande. Son datos largos y desestructurados (no se desea sobre ellos
ningún tipo de ordenación o ser usado como claves o restricciones del tipo que sea). En los datos de tipo LOB (CLOB o
BLOB) se admiten hasta 4GB de información en cada valor. En los BFILE hasta 8 GB.
CLOB
◦ Utilizado para almacenar textos.
BLOB
◦ Utilizado para almacenar datos binarios. Para almacenar datos binarios se requiere utilizar las librerías o interfaces
especialmente dedicados a esta tarea de Oracle.
BFILE
◦ Sirve para almacenar datos binarios. Pero, en este caso, los datos binarios se almacenan en archivos externos a la base de
datos, normalmente dentro del servidor de base de datos. Para ello se almacena la ruta a cada archivo, mediante funciones
especiales (como BFILENAME, por ejemplo).

10/28/2020
comando DESCRIBE
◦ El comando DESCRIBE, permite obtener la estructura de una tabla. Ejemplo:

DESCRIBE existencias;
◦ Y aparecerán los campos de la tabla proveedores. Esta instrucción no es parte del SQL estándar, pero casi es considerada así ya
que casi todos los SGBD la utilizan. Un ejemplo del resultado de la orden anterior (en Oracle) sería:

Nombre ¿Nulo? Tipo


N_ALMACEN NOT NULL NUMBER(2)
TIPO NOT NULL VARCHAR2(2)
MODELO NOT NULL NUMBER(2)
CANTIDAD   NUMBER(7)

10/28/2020
Borrar tablas
◦ La orden DROP TABLE seguida del nombre de una tabla, permite eliminar la tabla en cuestión.
◦ Al borrar una tabla:
◦ Desaparecen todos los datos
◦ Cualquier vista y sinónimo referente a la tabla seguirá existiendo, pero ya no funcionará (conviene eliminarlos)
◦ Lógicamente, solo se pueden eliminar las tablas sobre las que tenemos permiso de borrado.
◦ Normalmente, el borrado de una tabla es irreversible, y no hay ninguna petición de confirmación, por lo que conviene ser muy
cuidadoso con esta operación.

10/28/2020
10/28/2020

MODIFICAR TABLAS
Cambiar de nombre a una tabla
◦ De forma estándar (SQL estándar) se hace:
ALTER TABLE nombreViejo RENAME TO nombreNuevo;

En Oracle, además de con la orden anterior, se realiza mediante la orden RENAME (que permite el cambio de nombre de
cualquier objeto). Sintaxis:
RENAME nombreViejo TO nombreNuevo;

Pero por coherencia es mejor hacerlo de la primera forma (la del estándar).

10/28/2020
Borrar contenido de tablas
Oracle dispone de una orden no estándar para eliminar definitivamente los datos de una tabla
es la orden TRUNCATE. A esta orden le sigue el nombre de la tabla a borrar.

TRUNCATE hace que se elimine el contenido de la tabla, pero no la estructura en sí. Incluso borra del
archivo de datos el espacio ocupado por la tabla.

Aunque solo elimina datos, se trata de una instrucción DDL (luego no es revocable) y es incondicional: es
decir, no admite borrar solo una parte de una tabla.

10/28/2020
Añadir columnas
ALTER
TABLE nombreTabla ADD(nombreColumna TipoDatos [Propiedades] [,columnaSiguiente tipoDatos
 [propiedades]...)

Permite añadir nuevas columnas a la tabla. Se deben indicar su tipo de datos y sus propiedades si es
necesario (al estilo de CREATE TABLE).

Las nuevas columnas se añaden al final, no se puede indicar otra posición (hay que recordar que el orden
de las columnas no importa).

Ejemplo:

ALTER TABLE facturas ADD (fecha DATE);

Muchas bases de datos (pero no Oracle) requieren escribir la palabra COLUMN tras la palabra ADD.

10/28/2020
Borrar columnas

ALTER TABLE nombreTabla DROP(columna [,columnaSiguiente,...]);

Elimina la columna indicada de manera irreversible.


No se puede eliminar una columna si es la única columna que queda en la tabla. En ese caso, (habrá que usar el comando DROP
TABLE.
Ejemplo de borrado de columna:
ALTER TABLE facturas DROP (fecha);
Al igual que en el caso anterior, en SQL estándar se puede escribir el texto COLUMN tras la palabra DROP.

10/28/2020
Modificar columnas
◦ Permite cambiar el tipo de datos y propiedades de una determinada columna. Sintaxis:

ALTER TABLE nombreTabla MODIFY(columna tipo [propiedades] [columnaSiguiente tipo [propiedades] ...]

Los cambios que se permiten en las columnas son (en Oracle):

Incrementar precisión o anchura de los tipos de datos


Solo se puede reducir la anchura si la anchura máxima de un campo si esa columna posee nulos en todos los registros, o todos
los valores existentes tienen un tamaño menor o igual a la nueva anchura.
Se puede pasar de CHAR a VARCHAR2 y viceversa (si no se modifica la anchura)
Se puede pasar de DATE a TIMESTAMP y viceversa
Cualquier otro cambio solo es posible si la tabla está vacía
Si, a través de este comando, modificamos el valor de la propiedad DEFAULT de una tabla, dicho cambio solo tendrá efecto en
la inserción de nuevas filas.
Ejemplo:
ALTER TABLE facturas MODIFY(fecha TIMESTAMP);
En el caso de SQL estándar en lugar de MODIFY se emplea ALTER (que además opcionalmente puede ir seguida de
COLUMN).
Por ejemplo:

ALTER TABLE facturas ALTER COLUMN fecha TIMESTAMP;


10/28/2020
Renombrar columna
◦ Esto permite cambiar el nombre de una columna. Sintaxis

ALTER TABLE nombreTabla RENAME COLUMN nombreAntiguo TO nombreNuevo

Ejemplo:

ALTER TABLE facturas RENAME COLUMN fecha TO fechaYhora;

10/28/2020
Valor por defecto
◦ A cada columna se le puede asignar un valor por defecto durante su creación mediante la propiedad DEFAULT. Se puede
poner esta propiedad durante la creación o modificación de la tabla, añadiendo la palabra DEFAULT tras el tipo de datos del
campo y colocando detrás el valor que se desea por defecto.
◦ Ejemplo:
CREATE TABLE articulo (cod NUMBER(7), nombre VARCHAR2(25), precio NUMBER(11,2) DEFAULT 3.5);

La palabra DEFAULT se puede añadir durante la creación o la modificación de la tabla (comando ALTER


TABLE). El valor indicado con DEFAULT se aplica cuando añadimos filas a una tabla dejando el valor de
la columna vacío en lugar de NULL, a la columna se le asignará el valor por defecto indicado.

10/28/2020
Title Lorem Ipsum

LOREM IPSUM DOLOR SIT AMET, NUNC VIVERRA IMPERDIET PELLENTESQUE HABITANT
CONSECTETUER ADIPISCING ENIM. FUSCE EST. VIVAMUS A MORBI TRISTIQUE SENECTUS ET
ELIT. TELLUS. NETUS.

Das könnte Ihnen auch gefallen