Manual de iniciación a la programación

Transcripción

Manual de iniciación a la programación
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Manual de iniciación a la
programación
Autores del manual
Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com:
Sara Alvarez
Emmanuel García De Caro Miguel Angel Alvarez
Equipo DesarrolloWeb.com
http://www.desarrolloweb.com
(36 capítulos)
Webmaster de Blasten.com
http://www.blasten.com
(1 capítulo)
Director de DesarrolloWeb.com
http://www.desarrolloweb.com
(1 capítulo)
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
1
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Conceptos básicos y definiciones sobre programación
Empezaremos con unas definiciones un poco técnicas, pero que son imprescindibles para el
aprendizaje.
Tecnología
Dentro del campo que nos interesa a nosotros, la tecnología tiene el objetivo de eliminar las
tareas repetitivas, facilitando el trabajo y haciéndolo más eficiente así como aumentando la
productividad y los beneficios de la empresa.
Programación
La programación es una de las etapas más importantes del ciclo de vida de un proyecto
(explicaremos más adelante lo que es este termino), y requiere un método de trabajo. La
programación es el resultado de dicho trabajo.
La programación es el instrumento que permite la ejecución de las tareas automatizadas de un
sistema informático.
Las herramientas que utilizaremos para programar son los lenguajes de programación, a
través de las cuales codificaremos los programas.
Programa
Conjunto de instrucciones entendibles por el ordenador que permiten realizar un trabajo o
resolver un problema.
Un programa debe ser finito, es decir, tiene que tener un inicio y un fin. Tiene que estar bien
confeccionado para que, al introducir un dato, salga una solución y si se volviese a introducir el
mismo dato, saliese de nuevo la misma solución.
Metodología de la programación
Se entiende como metodología de la programación al conjunto de normas, métodos y
anotaciones que nos indican la forma de programar.
Cada lenguaje de programación sigue una metodología distinta.
Lenguaje de programación
Es un conjunto de reglas semánticas así como sintácticas que los programadores usan para la
codificación de instrucciones de un programa o algoritmo de programación.
Existen varios lenguajes de programación.
Entorno de programación o entorno de desarrollo
Es el conjunto de herramientas utilizadas para la elaboración de un programa.
Recursos
Conjunto de componentes hardware que utilizaremos para la elaboración de un programa (cpu,
disco duro…..).
Una vez conocidos los conceptos básicos necesarios para el aprendizaje de la programación
podemos empezar a ver los diferentes tipos de lenguajes de programación.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
2
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Artículo por Sara Alvarez
Tipos de lenguajes de programación
El ordenador sólo entiende un lenguaje conocido como código binario o código máquina,
consistente en ceros y unos. Es decir, sólo utiliza 0 y 1 para codificar cualquier acción.
Los lenguajes más próximos a la arquitectura hardware se denominan lenguajes de bajo nivel
y los que se encuentran más cercanos a los programadores y usuarios se denominan lenguajes
de alto nivel.
Lenguajes de bajo nivel
Son lenguajes totalmente dependientes de la máquina, es decir que el programa que se realiza
con este tipo de lenguajes no se pueden migrar o utilizar en otras maquinas.
Al estar prácticamente diseñados a medida del hardware, aprovechan al máximo las
características del mismo.
Dentro de este grupo se encuentran:
•
•
El lenguaje maquina: este lenguaje ordena a la máquina las operaciones fundamentales
para su funcionamiento. Cnsiste en la combinación de 0's y 1's para formar las ordenes
entendibles por el hardware de la maquina.
Este lenguaje es mucho más rápido que los lenguajes de alto nivel.
La desventaja es que son bastantes difíciles de manejar y usar, además de tener
códigos fuente enormes donde encontrar un fallo es casi imposible.
El lenguaje ensamblador es un derivado del lenguaje maquina y esta formado por
abreviaturas de letras y números llamadas mnemotécnicos. Con la aparición de este
lenguaje se crearon los programas traductores para poder pasar los programas escritos
en lenguaje ensamblador a lenguaje máquina. Como ventaja con respecto al código
máquina es que los códigos fuentes eran más cortos y los programas creados ocupaban
menos memoria. Las desventajas de este lenguaje siguen siendo prácticamente las
mismas que las del lenguaje ensamblador, ñadiendo la dificultad de tener que aprender
un nuevo lenguaje difícil de probar y mantener.
Lenguajes de alto nivel
Son aquellos que se encuentran más cercanos al lenguaje natural que al lenguaje máquina.
Están dirigidos a solucionar problemas mediante el uso de EDD's.
Nota: EDD's son las abreviaturas de Estructuras Dinamicas de Datos, algo muy utilizado en todos los
lenguajes de programación. Son estructuras que pueden cambiar de tamaño durante la ejecución del
programa. Nos permiten crear estructuras de datos que se adapten a las necesidades reales de un
programa.
Se tratan de lenguajes independientes de la arquitectura del ordenador. Por lo que, en
principio, un programa escrito en un lenguaje de alto nivel, lo puedes migrar de una máquina a
otra sin ningún tipo de problema.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
3
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Estos lenguajes permiten al programador olvidarse por completo del funcionamiento interno de
la maquina/s para la que están diseñando el programa. Tan solo necesitan un traductor que
entiendan el código fuente como las características de la maquina.
Suelen usar tipos de datos para la programación y hay lenguajes de propósito general
(cualquier tipo de aplicación) y de propósito especifico (como FORTRAN para trabajos
científicos).
Lenguajes de Medio nivel
Se trata de un termino no aceptado por todos, pero q seguramente habrás oído. Estos
lenguajes se encuentran en un punto medio entre los dos anteriores. Dentro de estos
lenguajes podría situarse C ya que puede acceder a los registros del sistema, trabajar con
direcciones de memoria, todas ellas características de lenguajes de bajo nivel y a la vez
realizar operaciones de alto nivel.
Generaciones
La evolución de los lenguajes de programación se puede dividir en 5 etapas o generaciones.
•
•
•
•
•
Primera generación: lenguaje maquina.
Segunda generación: se crearon los primeros lenguajes ensambladores.
Tercera generación: se crean los primeros lenguajes de alto nivel. Ej. C, Pascal, Cobol…
Cuarta generación. Son los lenguajes capaces de generar código por si solos, son los
llamados RAD, con lo cuales se pueden realizar aplicaciones sin ser un experto en el
lenguaje. Aquí también se encuentran los lenguajes orientados a objetos, haciendo
posible la reutilización d partes del código para otros programas. Ej. Visual, Natural
Adabes…
Quinta generación: aquí se encuentran los lenguajes orientados a la inteligencia
artificial. Estos lenguajes todavía están poco desarrollados. Ej. LISP
Artículo por Sara Alvarez
Proceso de traducción de los lenguajes de programación
Cuando programamos en lenguajes de alto nivel, lo que estamos haciendo en realidad es el
código fuente de ese programa.
Este código fuente debe ser traducido a binario para que las instrucciones que contienen
puedan ser entendidas y ejecutadas por la máquina.
Para esto existe un programa encargado de realizar la traducción, llamado traductor del
lenguaje.
Estos traductores pueden ser de dos tipos:
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
4
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Ensambladores
Son los encargados de traducir los programas escritos en lenguaje ensamblador a lenguaje
máquina.
Compiladores
Son programas que leen el código fuente y lo traducen o convierten a otro lenguaje. Estos
programas te muestran los errores existentes en el código fuente.
Etapas del proceso de compilación:
1. Edición. Esta fase consiste en escribir el programa empleando algún lenguaje y un
editor. Como resultado nos dará el código fuente de nuestro programa.
2. Compilación. En esta fase se traduce el código fuente obtenido en la fase anterior a
código máquina. Si no se produce ningún error se obtiene el código objeto.
En caso de errores el compilador los mostraría para ayudarnos a corregirlos y se
procedería a su compilación de nuevo, una vez corregidos.
3. Linkado. Esta fase consiste en unir el archivo generado en la fase dos con
determinadas rutinas internas del lenguaje, obteniendo el programa ejecutable.
Existen dos tipos de linkados:
•
•
linkado estático: Los binarios de las librerías se añaden a nuestros binarios
compilados generando el archivo ejecutable.
Linkado dinámico: no se añaden las librerías a nuestro binario sino que hará que
se carguen en memoria las librerías que en ese momento se necesiten.
Una vez traducido, compilado y linkado el archivo esta listo para su ejecución donde también
podrán surgir problemas y fallos, para los cuales tendríamos que volver a realizar todo el
proceso anteriormente citado, de modo que puedan ser corregidos.
Por este motivo es importante realizar numerosas pruebas en tiempo de ejecución antes de
presentar el programa al cliente.
Otro sistema para la ejecución de nuestro código fuente es mediante el uso de intérpretes
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
5
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
(estos no se encontrarían dentro de los traductores).
Intérpretes
Los intérpretes realizan la traducción y ejecución de forma simultanea, es decir, un intérprete
lee el código fuente y lo va ejecutando al mismo tiempo.
Las diferencias entre un compilador y un intérprete básicamente son:
•
•
•
Un programa compilado puede funcionar por si solo mientras que un código traducido
por un intérprete no puede funcionar sin éste.
Un programa traducido por un intérprete puede ser ejecutado en cualquier máquina ya
que, cada vez que se ejecuta el intérprete, tiene que compilarlo.
Un archivo compilado es mucho más rápido que uno interpretado.
Artículo por Sara Alvarez
Manejando bits
Como bien es conocido un Byte es la agrupación de 8 bits respectivamente, cada bit forma
parte del sistema de numeración Binario a quien debe su nombre, es decir de base 2 en otras
palabras puede almacenar valores comprendidos entre 0 y 1.
Si bien recordamos que un sistema de numeración se conforma de un conjunto de reglas y
principios que permite expresar o definir un número valido dentro del mismo, podemos afirmar
que la mayoría de ellos (Sistemas: binarios, octanos, decimales hexadecimales, etc..) se
pueden representar mediante un polinomio sencillo que nos permitirá entender su lógica:
Número = N*basen + N*basen-1+ N*basen-2 hasta que base quede elevado a la 0 siempre y
cuando no contenga decimales el "Número"
Donde Número es el valor expresado dentro del sistema, base como su nombre lo indica la
base del sistema (si es binario : 2 , octano: 8, decimal: 10, hexadecimal : 16, etc…) y n la
posición que ocupa el digito "N" dentro del Número.
Ejemplos en sistema decimal (base:10):
18598 1*10
4
+ 8*10
3
+ 5*10 2 + 9*10 1 + 8*10
0
Hemos descompuesto el valor expresado "18598" multiplicándolo por la base del sistema (10)
elevada a la posición del digito en la expresión.
El número 1 se encuentra iniciando la expresión y guarda en su interior 10 000 (Para
comprobarlo: si eliminamos el 1 el resultado será (18598-10 000)) por lo tanto 10 000 es igual
a 10 4 (1*104)=10 000 + (8*103)= 8 000…
En el sistema de numeración binario la misma formula es aplicable:
10 (número binario) = 1*2
1
+ 0*2 0
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
6
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Lo que indica que 10, en el sistema decimal es igual 2, en realidad en el sistema de
numeración binario se puede definir cualquier número entero mayor o igual a 0, sin embargo
la estructura de almacenamiento Byte solo fue diseñada desde su origen para almacenar hasta
256 porque incluye como máximo 8 bits (28 = 256) (recordemos que se toma en cuenta el 0
por lo cual 255 equivaldrá a 256) y se escogió este valor como máximo porque es la totalidad
de caracteres disponibles en la tabla ASCII, que incluye todos los caracteres validos dentro de
un computador, para comprobar esto podemos guardar un carácter en un archivo sin formato y
como resultado tendremos que siempre ocupará 1 byte, si colocamos 2 caracteres el tamaño
del archivo será igual a 2 bytes. Lo que justifica que 1 byte = 8 bits = puede almacenar hasta
256. y 1 bit es la mínima unidad en la que se puede almacenar información, Ejemplo: el tipo
booleano (bool) ocupa en memoria 1 bit, por tanto TRUE = 1 FALSE=0.
Por esta razón la mayoría de los hardwares con capacidad de almacenamiento tales como
Discos duros, memorias, y otros dispositivos; su capacidad siempre será divisible entre 2 , al
igual que las demás estructuras de almacenamiento ( Kb, Mb, Gb, Tb, etc)
Como refería anteriormente, la tabla ASCII incluye todos los caracteres validos dentro del
computador, desde todas las letras en minúsculas y mayúsculas, números y otros especiales,
estos últimos utilizados en su mayoría como delimitadores o separadores guía dentro de un
formato de archivo de contenido binario (PDF, DOC, EXE, DLL, OCX, ENTRE OTROS) Ejemplo
de delimitadores: La dirección IP incluye 4 pares de cuyo valor máximo es 255 para poder
representarlo en decimal se hace más que necesario, obligatorio el uso de delimitadores por lo
cual se emplea un ". (Punto)" de modo tal que 255.255.255.255, para reducir esta información
a 4 bytes podremos acudir a la tabla ASCII.
Por ejemplo el carácter "A" dentro de la tabla ASCII en el sistema decimal ocupa 64, podemos
ejecutar una función ampliamente reconocida por lenguajes de programación entre ellos
(Delphi, C++, VB, Php, etc) llamada ORD que producirá como resultado de ord(64) "A" si por
el contrario ejecutamos chr('A') es resultado será 64 en decimal, el cual representado en
binario equivaldría a "1000000" , auque 64 no ocupe físicamente los 255 (1 byte completo) su
tamaño en disco siempre será 1 byte, porque la mayoría de sistemas operativos y hardware
desde su ensamblaje esta orientados para reservar un mínimo de espacio en memoria y en
disco tomando en cuenta que ese valor puede ser modificado a 255 (máximo) ó 0 (mínimo) en
cualquier momento.
Por tanto podemos decir que un bit tiene un valor de acuerdo a su posición ó ubicación y para
hallar ese valor solo tenemos que descomponer 255.
128 62 32 16 8 4 2 1
1
2
3
4
5 6 7 8(bits)
Como comentábamos anteriormente el bit se conforma de 0 y 1 respectivamente por tanto
afirmaremos a partir de ahora que 0 ES IGUAL A FALSO (false) Y 1 ES IGUAL A VERDADERO
(true) si tenemos un conjunto de 8 bits lo sumaremos según su posición, siempre y cuando el
bit sea VERDADERO es decir su contenido sea igual a 1, ejemplo: dado los bits "10111011"
para convertirlo a decimal aplicamos la tabla:
128 62 32 16 8 4 2 1
1
0
1
1
1 0 1 1
Y posteriormente sumamos solo los valores que son "VERDADEROS" entonces:
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
7
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
128+32+16+8+2+1=187 ¡Enhorabuena 10111011=187!, entonces podemos decir que para
almacenar 256 necesitaremos que los 8 bits sean verdaderos es decir 8 bits y ya tendemos
nuestro byte.
Para hacer el proceso contrario es decir de decimales a binario, solo tenemos que descomponer
el decimal dividiéndolo siempre entre 2 hasta que el valor sea igual a 1, la agrupación de los
residuos obtenidos será nuestro valor binario; obviamente los residuos siempre serán (0 ó 1).
Los bits son ampliamente utilizados para codificar datos, comprimir información, etc. Por
ejemplo el formato de imágenes diseñado por Microsoft (.BMP) calcula el área de la imagen es
decir base por altura ó lo que es igual a ancho por alto la cual asume como la cantidad de
puntos disponibles, estos puntos a su vez almacenan un color hexadecimal de 3 pares
conocido como RGB que almacena los colores ROJOS, VERDE Y AZUL, por lo cual para el
almacenamiento del color emplea 3 bytes (255,255,255) y los escribe con ASCII , por cada
punto , lo que indica si una imagen es de 10 px x 10 px empleará 300 bytes para almacenar
los puntos y otros adicionales que guardan información de propiedades y características de
esencial importancia. Utilizando bytes delimitadores o separadores en caso de no conocer el
final del valor, es decir si la cantidad de bytes a emplear por la cabecera del formato (que
contiene información) se desconoce ó puede variar dependiendo de factores, se hace
indispensable el uso de delimitadores (ASCII DEFINIDOS COMO DELIMITADORES), si por el
contrario siempre se situará entre los bytes 10 y 20 por ejemplo (no será necesario). Por tal
motivo cuando leemos un archivo (con un programa desarrollado por nosotros) debemos
especificar cuantos bytes leeremos por cada secuencia, en el caso de los colores del formato
(BMP) bastara con leer de 3 en 3, cabe destacar que un archivo se puede leer hasta 1024 es
decir 1 KB de secuencia que equivale a una línea de información, a partir de esa base se han
diseñado mecanismos de comprensión que agrupa los bits repetido en matrices o arrays.
Para hacer posible este manejo existen algunos operadores similares a los de lógica ( OR, AND,
NOT, XOR, ETC…) mejor conocidos como operadores bit a bit.
Desplazando bits:
Podemos definirlo como la acción de transportar bytes de un extremo de la expresión a otro,
como la expresión esta conformada por 2 solo puede hacerse en dos sentidos, izquierda y
derecha.
a. Desplazando bits a la izquierda (<<)
Consiste en mover la cantidad de bit indicada en la expresión, de la izquierda a la
derecha, esta operación equivale a multiplicar por 2.
Por ejemplo:
16 <<2 desplazaremos 2 bits de la izquierda a la derecha
16 en binario equivale a 00010000 por lo cual moveremos los dos primeros bits a la
parte de atrás del numero (derecha) de tal modo que quedará 01000000 lo cual
equivale a 64.
Por tanto si multiplicamos
(16*2)=32 (32*2)=64
1 bit
2 bits
b. Desplazando bits a la derecha (>>)
Consiste en mover la cantidad de bit indicada en la expresión, de la derecha a la
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
8
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
izquierda, esta operación equivale a dividir por 2.
Por ejemplo:
128 >>4 desplazaremos 4 bits de la derecha a la izquierda.
128 en binario es igual a: 10000000, moveremos los últimos 4 bits a la parte inicial ( de
derecha a izquierda) , el resultado será 00001000 cuyo valor es igual a 8
por tanto si dividimos
(128 / 2)=64 (64/2)=32 (32/2)=16 (16/2)=8
1 bit
2 bits
3 bits
4 bits
Se emplea 2 por ser la base del sistema de numeración binario.
Operador de lógica OR |
Recordemos que llamaremos 0 en binario False y 1 True, entonces el operador OR
Evaluara las expresiones y producirá TRUE es decir 1 solo si el uno de los 2 bits a comparar es
igual a 1. Ejemplo:
Expresión: 5 | 12
5 en binario es igual a 00000101
12 en binario = 00001100
Resultado : 00001101 = 13
Solo si un par de los bits a comparar es 1 el resultado será 1, se comporta exactamente igual a
una condición: (true || false) es igual a true; (false || false) es igual a false, su razón se debe
a que la condición de dos o más argumentos se transforma siempre a binarios para realizar la
comparación utilizando el procesador y la memoria de computador.
Operador de lógica AND &
Solo si el par de bits a comparar es igual a 1 el resultado será 1.
Expresión: 5 & 12
5 en binario es igual a 00000101
12 en binario = 00001100
Resultado : 00000100 = 4
Es similar a (TRUE && TRUE) es igual a true, (False && True) es igual a false.
Operador XOR ^
Solo si el par de bits a comparar es diferente será igual a 1.
Expresión: 5 ^ 12
5 en binario es igual a 00000101
12 en binario = 00001100
Resultado : 00001001 = 9
Similar a (TRUE XOR FALSE) es igual a true, ( TRUE XOR TRUE) es igual a false.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
9
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Operador Not ~
Solo si el bit a comparar es igual a 0 (False) será igual a 1.
Expresión: ~5
5 en binario es igual a 00000101
Resultado : 00000010 = 2
Similar a (!FALSE) es igual a true
Importancia del manejo de los bits
Como programador daré una opinión muy personal, se hace indispensable en la construcción
de aplicaciones a gran escala el desarrollo formatos personales basados en esquemas que
almacenan la información empleada de modo comprimido para la utilización de un o unos
recursos de nuestra aplicación, permitiéndole al usuario final mayor comodidad y seguridad
durante el transporte de la información y ofreciéndole la capacidad de hacerlas compatibles
con otras aplicaciones, y dejar a un lado (dependiendo del objetivo) el típico uso de bases de
datos que requieren recursos adicionales del computador además de interpretadores, etc.
Considero que la información redactada contribuye considerablemente a encaminar vuestros
esfuerzos en esa dirección.
Concuclusión:
Podemos decir que el computador sin software solo tiene capacidades para hacer operaciones
aritméticas simples (sumas, restas, multiplicación, etc…)
Y es el software que valiéndose se esas simples operaciones con procesos como los antes
explicados puede crear la interfaz como de la que hoy disfrutamos en materia de Sistemas
Operativos, todos los lenguajes desde los más altos como Php hasta los más bajos como
Assembler pasan por binario, cada vez que movemos el Mouse eso esta produciendo un
procesamiento de datos binarios, en fin, orienta tus esfuerzos como programador a reducir al
máximo el consumo de recursos, seguro lograras una suma consumiendo menor cantidad de
recursos que lo habitual.
Artículo por Emmanuel García De Caro
Tipos de programación
Los tipos o técnicas de programación son bastante variados, aunque puede que muchos de los
lectores sólo conozcan una metodología para realizar programas. En la mayoría de los casos,
las técnicas se centran en programación modular y programación estructurada, pero existen
otros tipos de programación. Los explicaremos a lo largo del artículo.
Programación estructurada (PE)
La programación estructurada esta compuesta por un conjunto de técnicas que han ido
evolucionando aumentando considerablemente la productividad del programa reduciendo el
tiempo de depuración y mantenimiento del mismo.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
10
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Esta programación estructurada utiliza un número limitado de estructuras de control,
reduciendo así considerablemente los errores.
Esta técnica incorpora:
•
•
•
Diseño descendente (top-dow): el problema se descompone en etapas o estructuras
jerárquicas.
Recursos abstractos (simplicidad): consiste en descompones las acciones complejas en
otras más simples capaces de ser resueltas con mayor facilidad.
Estructuras básicas: existen tres tipos de estructuras básicas:
• Estructuras secuénciales: cada acción sigue a otra acción secuencialmente. La
salida de una acción es la entrada de otra.
• Estructuras selectivas: en estas estructuras se evalúan las condiciones y en
función del resultado de las mismas se realizan unas acciones u otras. Se utilizan
expresiones lógicas.
• Estructuras repetitivas: son secuencias de instrucciones que se repiten un
número determinado de veces.
Las principales ventajas de la programación estructurada son:
•
•
•
•
Los programas son mas fáciles de entender
Se reduce la complejidad de las pruebas
Aumenta la productividad del programador
Los programas queden mejor documentados internamente.
Un programa esta estructurado si posee un único punto de entrada y sólo uno de salida,
existen de "1 a n" caminos desde el principio hasta el fin del programa y por último, que todas
las instrucciones son ejecutables sin que aparezcan bucles infinitos.
Programación modular
En la programación modular consta de varias secciones dividas de forma que interactúan a
través de llamadas a procedimientos, que integran el programa en su totalidad.
En la programación modular, el programa principal coordina las llamadas a los módulos
secundarios y pasa los datos necesarios en forma de parámetros.
A su vez cada modulo puede contener sus propios datos y llamar a otros módulos o funciones.
Programación orientada a objetos (POO)
Se trata de una técnica que aumenta considerablemente la velocidad de desarrollo de los
programas gracias a la reutilización de los objetos.
El elemento principal de la programación orientada a objetos es el objeto.
El objeto es un conjunto complejo de datos y programas que poseen estructura y forman parte
de una organización.
Un objeto contiene varios datos bien estructurados y pueden ser visibles o no dependiendo del
programador y las acciones del programa en ese momento.
El polimorfismo y la herencia son unas de sus principales características y por ello dedicaremos
más adelante un artículo exclusivamente a tratar estos dos términos.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
11
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
En DesarrolloWeb.com hemos publicado anteriormente una explicación de lo que es la
programación orientada a objetos.
Programación concurrente
Este tipo de programación se utiliza cuando tenemos que realizar varias acciones a la vez.
Se suele utilizar para controlar los accesos de usuarios y programas a un recurso de forma
simultanea.
Se trata de una programación más lenta y laboriosa, obteniendo unos resultados lentos en las
acciones.
Programación funcional
Se caracteriza principalmente por permitir declarar y llamar a funciones dentro de otras
funciones.
Programación lógica
Se suele utilizar en la inteligencia artificial y pequeños programas infantiles. Se trata de una
programación basada en el cálculo de predicados (una teoría matemática que permite lograr
que un ordenador basándose en hecho y reglas lógicas, pueda dar soluciones inteligentes).
Artículo por Sara Alvarez
Importancia de la documentación
La documentación de los programas es un aspecto sumamente importante, tanto en el
desarrollo de la aplicación como en el mantenimiento de la misma. Mucha gente no hace este
parte del desarrollo y no se da cuenta de que pierde la posibilidad de la reutilización de parte
del programa en otras aplicaciones, sin necesidad de conocerse el código al dedillo.
La documentación de un programa empieza a la vez que la construcción del mismo y finaliza
justo antes de la entrega del programa o aplicación al cliente. Así mismo, la documentación
que se entrega al cliente tendrá que coincidir con la versión final de los programas que
componen la aplicación.
Una vez concluido el programa, los documentos que se deben entregar son una guía técnica,
una guía de uso y de instalación.
Tipos de documentación
La documentación que se entrega al cliente se divide claramente en dos categorías, interna y
externa:
•
•
Interna: Es aquella que se crea en el mismo código, ya puede ser en forma de
comentarios o de archivos de información dentro de la aplicación.
Externa: Es aquella que se escribe en cuadernos o libros, totalmente ajena a la
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
12
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
aplicación en si. Dentro de esta categoría también se encuentra la ayuda electrónica.
La guía técnica
En la guía técnica o manual técnico se reflejan el diseño del proyecto, la codificación de la
aplicación y las pruebas realizadas para su correcto funcionamiento. Generalmente este
documento esta diseñado para personas con conocimientos de informática, generalmente
programadores.
El principal objetivo es el de facilitar el desarrollo, corrección y futuro mantenimiento de la
aplicación de una forma rápida y fácil.
Esta guía esta compuesta por tres apartados claramente diferenciados:
•
•
•
Cuaderno de carga: Es donde queda reflejada la solución o diseño de la aplicación.
Esta parte de la guía es únicamente destinada a los programadores. Debe estar
realizado de tal forma que permita la división del trabajo
Programa fuente: Es donde se incluye la codificación realizada por los programadores.
Este documento puede tener, a su vez, otra documentación para su mejor comprensión
y puede ser de gran ayuda para el mantenimiento o desarrollo mejorado de la
aplicación. Este documento debe tener una gran claridad en su escritura para su fácil
comprensión.
Pruebas: es el documento donde se especifican el tipo de pruebas realizadas a lo largo
de todo el proyecto y los resultados obtenidos.
La guía de uso
Es lo que comúnmente llamamos el manual del usuario. Contiene la información necesaria para
que los usuarios utilicen correctamente la aplicación.
Este documento se hace desde la guía técnica pero se suprimen los tecnicismos y se presenta
de forma que sea entendible para el usuario que no sea experto en informática.
Un punto a tener en cuenta en su creación es que no debe hacer referencia a ningún apartado
de la guía técnica y en el caso de que se haga uso de algún tecnicismo debe ir acompañado de
un glosario al final de la misma para su fácil comprensión.
La guía de instalación
Es la guía que contiene la información necesaria para implementar dicha aplicación.
Dentro de este documento se encuentran las instrucciones para la puesta en marcha del
sistema y las normas de utilización del mismo.
Dentro de las normas de utilización se incluyen también las normas de seguridad, tanto las
físicas como las referentes al acceso a la información.
Artículo por Sara Alvarez
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
13
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Metodología de la programación
Estructuras de un programa
Un programa se va a dividir en 3 partes claramente diferenciadas:
•
•
•
procesos de entrada
proceso de datos
procesos de salida
Todo programa esta constituido por un conjunto de instrucciones capaces de gestionar un
conjunto de datos.
Algoritmos
Un algoritmo es la descripción abstracta de todas las acciones que debe realizar un ordenador,
que nos conduce a la solución del problema.
Debe ser conciso y detallado, así como finito, pero sobre todo tiene que ser claro y lo más
sencillo posible.
Herramientas y técnicas para el diseño de algoritmos
Para el diseño de algoritmos lo que más se utiliza son los diagramas de flujos.
Diagramas de flujo
Los diagramas de flujo son representaciones gráficas que mediante el uso de símbolos unidos
mediante líneas de flujo, muestran la secuencia lógica que se debe suceder para la solución del
problema.
Los diagramas de flujo deber ser independientes del lenguaje de programación empleado,
deben ser flexibles y sencillos.
Por otro lado tienen que estar normalizados con algún estándar como puede ser el ISO (a nivel
mundial), ANSI (a nivel americano) o el IEEE ( a nivel europeo)
Existen 3 tipos de diagramas de flujos:
•
•
•
Organigramas: Representación gráfica sencilla con los elementos que representas las
entradas y salida de datos del programa
Ordinograma: Representación gráfica con secuencias lógicas y detalladas de todos los
pasos a seguir para la resolución del algoritmo.
Pseudocódigo: Lenguaje intermedio entre el natural y el de programación que
representa mediante la palabra la solución del algoritmo.
Dentro de estos tres los más utilizados son los ordinogramas o pseudocódigos, ya que son los
que más ayudan a los programadores a la hora de pasar esos algoritmos a los distintos
lenguajes de programación.
En los siguientes artículos profundizaremos más en cada uno de ellos y aprenderemos a
construirlos y leerlos para su posterior paso al lenguaje de programación requerido.
Artículo por Sara Alvarez
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
14
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Diagrama de flujos
Un diagrama de flujos es una representación gráfica que presenta las entradas y salidas de
datos al programa.
Los diagramas de flujos se dividen en tres partes claramente diferenciadas:
•
•
•
Entradas: que debe aparecer en la parte superior de la representación grafica
Proceso: que debe aparecer en la parte central de la representación grafica
Salidas: que debe aparecer en la parte inferior
Símbolos para los dispositivos de entrada/salida
Dibujo
Dispositivo
Tipo
teclado
entrada
pantalla
salida
disquette
Entrada/Salida
Impresora
Salida
Discos magnéticos entrada/salida
Símbolos para los dispositivos de procesos
Símbolo
Proceso
Cualquier proceso u operación que realicemos, salvo que operemos con
ficheros.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
15
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Clasificación de datos en un fichero
Extracción de datos de un fichero
Unión de varios ficheros en uno solo
Fechas utilizadas en los flujos de datos
Flechas
Función
Lineas de teleproceso
Dirección del flujo de datos
Para entender mejor el diagrama tenemos estos tres ejemplos:
Diagrama que refleja la suma de 3 numeros leidos por teclado, el resultado aparece por
pantalla
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
16
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Diagrama que refleja la actualización de un fichero de datos (nominas por ejemplo)
Diagrama que refleja la unión de varios ficheros en uno solo.
Artículo por Sara Alvarez
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
17
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Ordinogramas
Se trata de otro diagrama de flujos que muestra la secuencia lógica y detallada de las
operaciones que necesitamos para la realización de un programa.
Al igual que el organigrama, este también debe ser independiente del lenguaje de
programación que utilicemos.
Estructura de un ordinograma
Todo ordinograma debe estar compuesto de:
•
Un símbolo de inicio de ejecución del programa
•
La secuencia de operaciones necesarias para el correcto funcionamiento del programa.
Las operaciones seguirán un orden (de arriba abajo y de izquierda a derecha).
Un símbolo que indique el final del programa.
•
Símbolos utilizados
Simbolo
Descripción
Para inicio/fin
o para una
parada
indeterminada
Símbolo de
entrada/salida
genérico
Representa
una operación
o proceso
general con
datos de
memoria.
Símbolo de
subprograma
o subrutina.
Se utiliza para
realizar una
llamada a un
modulo del
programa.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
18
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Símbolo de
decisión para
realizar una
pregunta con
dos posibles
respuestas. Es
lo que
llamamos
símbolo de
selección
simple.
Símbolo de
selección
múltiple
Símbolo de
bucle definido.
Conector. Se
utiliza para
agrupar varias
líneas de flujo
que salen del
mismo origen.
Símbolo para
poner
comentarios
Reglas a la hora de hacer ordinogramas
Todos los símbolos utilizados deben estar unidos por líneas de flujo.
No se pueden cruzar las líneas de flujo
A un símbolo de proceso pueden llegarle varias líneas de flujo pero solo puede salir una de él.
Al símbolo de inicio no puede llegarle ninguna línea de flujo
De un símbolo de fin no puede salir ninguna línea de flujo pero si le pueden llegar varias.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
19
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Ejemplos
Este primer ejemplo te dice el mayor de dos números.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
20
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Este segundo te devuelve los grados introducidos en Kelvin y Fahrenheit.
Artículo por Sara Alvarez
Pseudocódigo
El principal objetivo del pseudocódigo es el de representar la solución a un algoritmo de la
forma más detallada posible, y a su vez lo más parecida posible al lenguaje que
posteriormente se utilizara para la codificación del mismo.
Las principales características de este lenguaje son:
•
•
•
•
•
Se puede ejecutar en un ordenador
Es una forma de representación sencilla de utilizar y de manipular.
Facilita el paso del programa al lenguaje de programación.
Es independiente del lenguaje de programación que se vaya a utilizar.
Es un método que facilita la programación y solución al algoritmo del programa.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
21
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Todo documento en pseudocódigo debe permitir la descripción de:
•
•
•
•
•
Instrucciones
Instrucciones
Instrucciones
Instrucciones
Instrucciones
primitivas
de proceso
de control
compuestas
de descripción
Estructura a seguir en su realización:
Cabecera:
•
•
•
•
•
Programa:
Modulo:
Tipos de datos:
Constantes:
Variables:
Cuerpo:
•
•
•
Inicio
Instrucciones
Fin
Para comentar en pseudocódigo se le antepone al comentario dos asteriscos (*)
Ejemplos
* Programa que calcula el área de un cuadrado a partir de un lado dado por teclado.
Programa: area_cuadrado
Modulo: main **( también se puede llamar principal)
Variables:
lado: natural
area: natural
Inicio
Visualizar "Introduce el lado del cuadrado"
Leer lado
Area<- lado * lado
Visualizar "El área del cuadrado es", area
Fin
* Programa que visualice la tabla de multiplicar del numero introducido por teclado
Programa: Tabla multiplicar
Modulo: main
Variables:
t: entero
num : entero
Inicio
Visualizar "Introduce un número"
Leer num
Desde t=1 hasta t=10 repetir
Visualizar num, " X", t, "=", num*t
Fin desde
Fin
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
22
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Una vez que tenemos preparado un diagrama de flujos (ordinograma u organigrama) y un
pseudocódigo ya podemos comenzar con la codificación del programa en nuestro ordenador. A
partir de aquí todo varía dependiendo del lenguaje de programación que utilicemos, pero en
todos los programas tendremos que definir los tipos de datos que utilizaremos. De todo esto
hablaré en el siguiente artículo.
Artículo por Sara Alvarez
Tipos de datos
Antes de meternos de lleno en los diferentes tipos de datos os paso la descripción de dato para
que todo quede claro desde el principio.
Dato
Elemento que no manejamos o almacenamos en un sistema informático. Los datos manejados
en un algoritmo deben llevar asociado un identificador, un tipo de dato y su valor.
Datos básicos
Dentro de los datos básicos nos podemos encontrar con los datos estáticos, derivados y
estructurados.
Los datos estáticos son los siguientes:
•
•
•
•
•
entero, real y natural para los números
carácter
cadena
lógico
enumerado
Cómo dato derivado nos encontramos con los punteros que hoy en día no se utilizan casi, a no
ser que se programe en C.
Los más complejos son los estructurados y los principales son:
•
•
•
•
•
•
array
Estructuras
Listas, pilas, colas y árboles ( muy utilizados en C)
Clases y objetos
Ficheros
Base de datos
Los cuatro primeros son los internos mientras que los dos ultimos correspondes a tipos de
datos externos.
Constantes y variables
Se define como variable a una posición de memoria referenciada por un identificador donde se
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
23
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
puede almacenar un valor determinado (Tipo de dato).
Se define como constante a un valor que no se modifica a lo largo de toda la ejecución del
programa.
Artículo por Sara Alvarez
Operadores
Los operadores se clasifican en aritméticos, alfanuméricos, relacionales, lógicos y por último un
pequeño grupo de operadores especiales que dependerá de los diferentes lenguajes utilizados.
Operadores aritméticos:
•
•
•
Para la suma y la resta se utilizan respectivamente los símbolos; "+" "-"
Para la división y hallar el resto de la misma se utilizan respectivamente los símbolos;
"/" "%"
Para multiplicar y elevar potencias se utilizan respectivamente los siguientes símbolos;
"*" "**"
Operadores alfanuméricos:
Son los utilizados para trabajar con cadenas.
Principalmente utilizamos el símbolo "+" para concatenar cadenas. Luego dependiendo de el
lenguaje puede funcionar o no el símbolo "-" para concatenar cadenas eliminando los espacios
en blanco.
Operadores relacionales:
•
•
•
El símbolo "==" nos compara dos valores
El símbolo "!=" significa distinto y nos devuelve verdadero si los valores comparados
son distintos.
Luego tenemos lo demás signos como son; "<", ">", "<>", "<=", ">="
Operadores lógicos:
Como operadores lógicos nos encontramos con el símbolo "!" o "not" para la negación y el
símbolo "&&" o "and" para la conjunción.
Ejemplos
Aritméticos.
A=3
B=2
X=a**2 donde x valdría 9
X=a/2 donde x valdría 1.5
X= a*2 donde x valdría 6
X= a%b donde x valdría 1
Alfanuméricos:
A="Hola"
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
24
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
B=" Que tal"
X=a+b donde x valdría "Hola Que tal"
Relacionales:
Si x==a entonces
Instrucciones
Sino
Instrucciones
Fin si
Lógicas
Si !a entonces
La variable esta vacía
Fin si
Si a==3 and b==3 entonces
A y b son iguales
Fin si
Artículo por Sara Alvarez
Expresiones e instrucciones
Expresiones
Como definición de expresiones entendemos que es un conjunto de operandos y operadores,
que después de ser evaluados devuelven un determinado resultado.
En función del resultado obtenido las podemos clasificar en:
•
•
•
Expresiones numéricas
Expresiones alfanuméricas
Expresiones lógicas booleanas
Instrucciones
Como definición de instrucciones entendemos que es un hecho o suceso de duración limitada
que genera unos cambios en la ejecución del programa.
Existen varios tipos de instrucciones:
•
•
•
•
Instrucciones de definición de datos
X: entero
Instrucciones primitivas
• de entrada (leer x)
• de asignación (x<-3)
• de salida (visualizar x)
Instrucciones compuestas:
Son aquellas instrucciones que son ejecutadas directamente por el procesador y están
constituidas por un conjunto de acciones agrupadas en módulos.
Instrucciones de control:
Son utilizadas para controlar la secuencia de ejecución del programa. Dentro de este
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
25
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
tipo de instrucciones se encuentran las instrucciones de salto que son aquellas que
alteran o rompen la secuencia de ejecución de un programa. Este tipo de instrucciones
no se utilizan en la programación estructurada.
A su vez tenemos las instrucciones alternativas que controlan la ejecución o no de una
o más instrucciones en función de la condición. Están las instrucciones de alternativa
simple, doble y múltiple.
Por ultimo dentro de este grupo de instrucciones de control están las instrucciones
repetitivas que son aquellas que nos permiten alterar la secuencia normal de la
ejecución de un programa haciendo posible que un grupo de instrucciones se puedan
repetir mas de una vez.
Todo bucle esta compuesto de tres partes claramente diferenciadas:
• A: Parte de la condición, puede ser cualquier expresión.
• B: Cuerpo del bucle. Son el conjunto de instrucciones que se repetirán.
• C Parte final del bucle. Es el ultimo en ejecutarse cuando no se cumple la
condición.
Los elementos que intervienen en la expresión que conforma la condición deben estar
siempre reflejados en el cuerpo del bucle de tal forma que siempre exista la posibilidad
de salir del mismo.
Existen dos tipos principales de bucles:
•
•
Bucle mientras (do, while) Se repiten las instrucciones hasta que no se cumpla la
condición
Mientras <<condición>> hacer
Instrucciones
Fin mientras
Bucle para (for) se repiten las instrucciones un número determinado de veces.
Para v<-0 hasta vf[con i de incremento] hacer
Instrucciones
Fin para
Con esto ya tendríamos vistos los conceptos básicos para poder empezar a programar en
cualquier lenguaje de programación sabiendo eso si su sintaxis y los posibles cambios respecto
a otros lenguajes de programación. Ahora ya toca aprender algún lenguaje en concreto y
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
26
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
empezar a practicar todo lo aprendido en este manual.
Artículo por Sara Alvarez
Funciones recursivas. Recursividad
Dentro del manual de iniciación a la programación que venimos publicando en
DesarrolloWeb.com, vamos a ver una de las primeras cosas que enseñan en la creación de
algoritmos: la recursividad.
Como definición general, podemos decir que una función recursiva es aquella que se llama a si
misma para resolverse. Dicho de otra manera, una función recursiva se resuelve con una
llamada a si misma, cambiando el valor de un parámetro en la llamada a la función. A través
de las sucesivas llamadas recursivas a la función se van obteniendo valores que, computados,
sirven para obtener el valor de la función llamada originalmente.
El proceso de llamadas recursivas siempre tiene que acabar en una llamada a la función que se
resuelve de manera directa, sin necesidad de invocar de nuevo la función. Esto será siempre
necesario, para que llegue un momento que se corten las llamadas reiterativas a la función y
no se entre en un bucle infinito de invocaciones.
Quizás en la teoría cueste más ver lo que es una función recursiva que por la práctica. Un
ejemplo típico de recursividad sería la función factorial. El factorial es una función matemática
que se resuelve multiplicando ese número por todos los números naturales que hay entre él y
1.
Por ejemplo, factorial de 4 es igual a 4 * 3 * 2 * 1. Si nos fijamos, para el ejemplo de factorial
de 4 (factorial se expresa matemáticamente con un signo de admiración hacia abajo, como
4!), se puede resolver como 4 * 3! (4 * factorial de 3). Es decir, podemos calcular el factorial
de un número multiplicando ese número por factorial de ese número menos 1.
n! = n * (n-1)!
En el caso de la función factorial, tenemos el caso básico que factorial de 1 es igual a 1. Así
que lo podremos utilizar como punto de ruptura de las llamadas recursivas.
Así pues, vamos a realizar la codificación de la función recursiva factorial. Primero veamos un
pseudocódigo:
funcion factorial(n)
si n=1 entonces
factorial = 1
sino
factorial = n * factorial(n-1)
fin funcion
Ahora veamos cómo se implementaría esta función con el lenguaje de programación
Javascript:
function factorial(n){
if(n==1)
return 1
else
return n * factorial(n-1)
}
Como se puede ver, la recursividad no representa ninguna dificultad y de hecho es una
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
27
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
herramienta muy útil para programación de algoritmos. En desarrollo web .com hemos
publicado en diversos lugares funciones que trabajan de forma recursiva. Entiendo que en un
principio puede resultar dificil de entender o de saber cuando utilizar, pero cuando dominemos
el concepto veremos que es una manera excelente de resolver problemas con cualquier
lenguaje de programación.
Hay muchos algoritmos que sólo se resuelven con recursividad, o al menos cuya resolución
más directa y elegante está basada en realizar funciones recursivas, que se llamen a si mismas
para obtener el resultado final. Por ejemplo el recorrido de diversas estructuras de datos, como
las de tipo árbol, siempre se acostumbran a realizar de manera recursiva, para poder estar
seguros de que pasamos por todas las ramas del árbol.
Referencia: Doy algunas direcciones de artículos de DesarrolloWeb.com que resuelven problemas creando
funciones recursivas:
•
Listar directorios y subdirectorios con PHP
•
Crea tu propio buscador con ASP
Artículo por Miguel Angel Alvarez
Introducción a las bases de datos
Las bases de datos se ingeniaron gracias a la necesidad de las grandes empresas de almacenar
ingentes cantidades de información de una forma rápida, sencilla y fiable, y que a su vez
pudieran acceder a ella en cualquier momento sin necesidad de desplazarse a salas dedicadas
a archivar documentación, como hasta hace poco se venia haciendo.
Cuando comenzó el despegue de los programas informáticos se empezaron a almacenar datos
en los archivos de los programas, lo cual era más cómodo pero aun así tenían grandes
dificultades a la hora de querer modificar registros, estructuras o simplemente buscar
información.
A finales de los años sesenta nacen las bases de datos. En estas bases de datos se guardan los
datos utilizados por los usuarios, empresas, etc. Y los programas que los utilizan no se tienen
que preocupar de su mantenimiento ni almacenaje por lo que un cambio en la base de datos
no tiene porque afectar en principio a los programas que la utilizan.
Como definición de base de datos entendemos que se trata de un conjunto de datos
interrelacionados y almacenados sin redundancias innecesarias, los cuales sirven a las
aplicaciones sin estar relacionados de una manera directa entre ellos.
Una base de datos puede ser utilizada por varias aplicaciones y usuarios. Toda base de datos
debe permitir insertar, modificar y borrar datos por lo que en las bases de datos se guarda
información de dos tipos:
•
•
Los datos de usuarios (datos usados por las aplicaciones)
Los datos de sistema (datos que la base de datos utiliza para su gestión. Ej. Datos de
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
28
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
los usuarios que tienen acceso a la base de datos)
Organización de una base de datos
Para considerar a una base de datos organizada debe cumplir los siguientes objetivos:
•
•
•
•
•
•
•
Tiene que ser versátil: esto quiere decir que, dependiendo de los usuarios o las
aplicaciones, puedan hacer diferentes cosas o traten a los datos de formas distintas.
Tiene que atender con la rapidez adecuada a cada aplicación o empresa, atendiendo a
lo que se la requiera.
Tiene que tener un índice de redundancia lo más bajo posible.
Tener una alta capacidad de acceso para ganar el mayor tiempo posible en la realización
de consultas.
Tener un alto índice de integridad, esto significa que al tener muchos usuarios atacando
a una misma base de datos no puede haber fallos en la inserción de datos, errores por
redundancia o lenta actualización.
Por supuesto tienen que tener un nivel altísimo de seguridad y privacidad ya que los
datos que se pueden almacenar en una base de datos pueden ser altamente
confidenciales o importantes. En este punto también entran los medios físicos de
protección contra fuego, robo, etc.
Por ultimo tiene que ser posible su constante actualización para no dejar a la base de
datos anticuada e inservible. Cuando hacemos un cambio en la organización física de
los datos no debe afectar a los programas por lo que también tiene que tener una
independencia física de los datos. Al igual que tiene que tener total independencia
lógica con los datos, esto quiere decir que si hacemos cambios en la estructura lógica
de los datos (agregar nuevos campos a una tabla) no deben afectar a las aplicaciones
que utilicen esos datos.
Artículo por Sara Alvarez
Arquitectura de las bases de datos
Los usuarios no tienen porque conocer como están organizados y almacenados los datos.
Por este motivo una base de datos debe presentar los datos de forma que el usuario pueda
interpretarlos y modificarlos. Evidentemente esto no lo podemos aplicar a un informático que
necesite saber donde se encuentran físicamente los datos para poder tratarlos.
Podemos destacar tres niveles principales según la visión y la función que realice el usuario
sobre la base de datos:
•
•
•
Nivel Interno: es el nivel más cercano al almacenamiento físico de los datos. Permite
escribirlos tal y como están almacenados en el ordenador. En este nivel se diseñan los
archivos que contienen la información, la ubicación de los mismos y su organización, es
decir se crean los archivos de configuración.
Nivel conceptual: En este nivel se representan los datos que se van a utilizar sin tener
en cuenta aspectos como lo que representamos en el nivel interno.
Nivel externo: es el más cercano al usuario. En este nivel se describen los datos o parte
de los datos que más interesan a los usuarios.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
29
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Estos tres niveles de visión de usuarios los proporcionan los sistemas gestores de base de
datos (ya veremos más adelante que significa esto).
Una base de datos especifica tiene un único nivel interno y un único nivel conceptual pero
puede tener varios niveles externos.
Artículo por Sara Alvarez
Sistemas gestores de bases de datos
Un sistema gestor de base de datos se define como el conjunto de programas que administran
y gestionan la información contenida en una base de datos. Ayuda a realizar las siguientes
acciones:
•
•
•
•
Definición de los datos
Mantenimiento de la integridad de los datos dentro de la base de datos
Control de la seguridad y privacidad de los datos
Manipulación de los datos
Un sistema gestor de base de datos está compuesto de:
El gestor de la base de datos
Se trata de un conjunto de programas no visibles al usuario final que se encargan de la
privacidad, la integridad, la seguridad de los datos y la interacción con el sistema operativo.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
30
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Proporciona una interfaz entre los datos, los programas que los manejan y los usuarios finales.
Cualquier operación que el usuario hace contra la base de datos está controlada por el gestor.
El gestor almacena una descripción de datos en lo que llamamos diccionario de datos, así como
los usuarios permitidos y los permisos.
Tiene que haber un usuario administrador encargado de centralizar todas estas tareas.
Diccionario de datos
Es una base de datos donde se guardan todas las propiedades de la base de datos, descripción
de la estructura, relaciones entre los datos, etc.
El diccionario debe contener:
•
•
•
•
•
•
La descripción externa, conceptual e interna de la base de datos
Las restricciones sobre los datos
El acceso a los datos
Las descripciones de las cuentas de usuario
Los permisos de los usuarios
Los esquemas externos de cada programa
El administrador de la base de datos
Es una persona o grupo de personas responsables del control del sistema gestor de base de
datos.
Las principales tareas de un administrador son:
•
•
•
•
•
La definición del esquema lógico y físico de la base de datos
La definición de las vistas de usuario
La asignación y edición de permisos para los usuarios
Mantenimiento y seguimiento de la seguridad en la base de datos
Mantenimiento general del sistema gestor de base de datos
Los lenguajes
Un sistema gestor de base de datos debe proporcionar una serie de lenguajes para la
definición y manipulación de la base de datos. Estos lenguajes son los siguientes:
•
•
•
Lenguaje de definición de datos (DDL). Para definir los esquemas de la base de datos
Lenguaje de manipulación de datos (DML). Para manipular los datos de la base de datos
Lenguaje de control de datos(DCL). Para la administración de usuarios y seguridad en la
base de datos.
Artículo por Sara Alvarez
Modelos de bases de datos
Los modelos más conocidos y utilizados son:
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
31
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Modelo de datos jerárquico
Este modelo utiliza árboles para la representación lógica de los datos. Este árbol esta
compuesto de unos elementos llamados nodos. El nivel más alto del árbol se denomina raíz.
Cada nodo representa un registro con sus correspondientes campos.
La representación gráfica de este modelo se realiza mediante la creación de un árbol invertido,
los diferentes niveles quedan unidos mediante relaciones.
En este modelo solo se pueden representar relaciones 1:M, por lo que presenta varios
inconvenientes:
•
•
•
•
•
No se admiten relaciones N:M
Un segmento hijo no puede tener más de un padre.
No se permiten más de una relación entre dos segmentos.
Para acceder a cualquier segmento es necesario comenzar por el segmento raíz
El árbol se debe de recorrer en el orden designado.
Modelo de datos en red
En este modelo las entidades se representan como nodos y sus relaciones son las líneas que
los unen. En esta estructura cualquier componente puede relacionarse con cualquier otro.
A diferencia del modelo jerárquico, en este modelo, un hijo puede tener varios padres.
Los conceptos básicos en el modelo en red son:
•
•
•
El tipo de registro, que representa un nodo.
Elemento, que es un campo de datos.
Agregado de datos, que define un conjunto de datos con nombre.
Este modelo de datos permite representar relaciones N:M
Modelo de datos relacional
Este modelo es el más utilizado actualmente ya que utiliza tablas bidimensionales para la
representación lógica de los datos y sus relaciones.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
32
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Algunas de sus principales caracteristicas son:
•
•
•
Puede ser entendido y usado por cualquier usuario.
Permite ampliar el esquema conceptual sin modificar las aplicaciones de gestión.
Los usuarios no necesitan saber donde se encuentran los datos físicamente.
El elemento principal de este modelo es la relación que se representa mediante una tabla.
Artículo por Sara Alvarez
Arquitectura cliente-servidor
Esta arquitectura se divide en dos partes claramente diferenciadas, la primera es la parte del
servidor y la segunda la de un conjunto de clientes.
Normalmente el servidor es una máquina bastante potente que actúa de depósito de datos y
funciona como un sistema gestor de base de datos (SGBD).
Por otro lado los clientes suelen ser estaciones de trabajo que solicitan varios servicios al
servidor.
Ambas partes deben estar conectadas entre sí mediante una red.
Una representación gráfica de este tipo de arquitectura sería la siguiente.
Este tipo de arquitectura es la más utilizada en la actualidad, debido a que es la más avanzada
y la que mejor ha evolucionado en estos últimos años.
Podemos decir que esta arquitectura necesita tres tipos de software para su correcto
funcionamiento:
•
•
Software de gestión de datos: Este software se encarga de la manipulación y gestión de
los datos almacenados y requeridos por las diferentes aplicaciones. Normalmente este
software se aloja en el servidor.
Software de desarrollo: este tipo de software se aloja en los clientes y solo en aquellos
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
33
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
•
que se dedique al desarrollo de aplicaciones.
Software de interacción con los usuarios: También reside en los clientes y es la
aplicación gráfica de usuario para la manipulación de datos, siempre claro a nivel
usuario (consultas principalmente).
A parte de estos existen más aplicaciones software para el correcto funcionamiento de esta
arquitectura pero ya están condicionados por el tipo de sistema operativo instalado, el tipo de
red en la que se encuentra, etc.
Artículo por Sara Alvarez
Modelo entidad-relación
Este modelo se obtiene en tiempo de diseño de la base de datos. Fue propuesto por Peter
Chen en 1976 y desde entonces se viene utilizando de una forma muy global.
Se caracteriza por utilizar una serie de símbolos y reglas para representar los datos y sus
relaciones.
Con este modelo conseguimos representar de manera grafica la estructura lógica de una base
de datos.
Los principales elementos del modelo entidad-relación son las entidades con sus atributos y las
relaciones entre entidades.
Elementos del modelo entidad-relación
Entidad
Se trata de un objeto del que se recoge información de interés de cara a la base de datos.
Gráficamente se representan mediante un rectángulo. Un ejemplo seria la entidad banco,
donde se recogerían los datos relativos a ese banco, como puede ser el nombre, el número de
sucursal, la dirección, etc.
Dentro de las entidades pueden ser fuertes o débiles. Las fuertes son las que no dependen de
otras entidades para existir, mientras que las entidades débiles siempre dependen de otra
entidad sino no tienen sentido por ellas mismas.
Relación
Podemos definir la relación como una asociación de dos o más entidades. A cada relación se le
asigna un nombre para poder distinguirla de las demás y saber su función dentro del modelo
entidad-relación. Otra característica es el grado de relación, siendo las de grado 1 relaciones
que solo relacionan una entidad consigo misma. Las de grado 2 son relaciones que asocian dos
entidades distintas, y las de grado n que se tratan de relaciones que unen mas de dos
entidades.
Las relaciones se representas gráficamente con rombos, dentro de ellas se coloca el nombre de
la relación.
Otra característica es el tipo de correspondencia entre dos relaciones;
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
34
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
•
•
•
1:1. Uno a uno, a cada ocurrencia de una entidad le corresponde como máximo una
ocurrencia de la otra entidad relacionada.
1:N. Uno a Mucho, a cada ocurrencia de la entidad A le pueden corresponder varias de
la entidad B.
N:M. Muchos a muchos, cada ocurrencia de una entidad puede contener varias de la
otra entidad relacionada y viceversa.
Para finalizar las características de la relación tenemos la cardinalidad que define el número
máximo y mínimo de ocurrencias de cada tipo de entidad. Se representa con los valores
máximo coma mínimo encerrados entre paréntesis encima de la relación. (máximo, mínimo)
Atributo
Se define como cada una de las propiedades de una entidad o relación. Cada atributo tiene un
nombre y todos los posibles valores que puede tener. Dentro de una entidad tiene que haber
un atributo principal que identifica a la entidad y su valor tiene que ser único. Un ejemplo de
atributo principal seria el dni dentro de la entidad persona.
Ponemos un ejemplo de lo que seria un esquema del modelo entidad-relacion.
Artículo por Sara Alvarez
Estructura del modelo relacional
Se trata de un modelo bastante potente y a la vez bastante simple , que nos representas
problemas. El elemento principal de este modelo es la relación. Por lo que podemos decir que
una base de datos relacional está compuesta por un conjunto de relaciones.
Relación
La relación se representa mediante una tabla, esta tabla representa a lo que en el modelo
entidad-relación llamábamos entidad. Esta tabla contiene los atributos (columnas) y las tuplas
(filas).
•
•
Atributo: se trata de cada una de las columnas de la tabla. Vienen definidas por un
nombre y pueden contener un conjunto de valores.
Tupla: se trata de cada una de las filas de la tabla. Es importante señalar que no se
pueden tener tuplas duplicadas en una tabla.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
35
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Dominios
El dominio dentro de la estructura del modelo relacional es el conjunto de valores que puede
tomar un atributo. Existen dos tipos de dominios:
•
•
dominios generales: son aquellos que están comprendidos entre un máximo y un
mínimo.
dominios restringidos: son los que pertenecen a un conjunto de valores específicos.
Claves
Cada tupla de una tabla tiene que estar asociada a una clave única que permita identificarla.
Una clave puede estar compuesta por uno o más atributos.
Una clave tiene que ser única dentro de su tabla y no se puede descartar ningún atributo de la
misma para identificar una fila.
Existen dos tipos de claves:
•
•
Clave prmaria (Primary Key): es el valor o conjunto de valores que identifican una fila
dentro de una tabla. Nunca puede ser NULL. Un ejemplo claro de clave primaria seria el
DNI, que es único para cada persona y no puede ser NULL.
Clave ajena (Foreign Key): es el valor o valores de una tabla que corresponde con el
valor de una clave primaria en otra tabla. Esta clave es la que representa las relaciones
entre las tablas.
Vistas
Se trata de una tabla ficticia la cual muestra atributos de otras tablas relacionadas. De esta
forma obtenemos los datos que nos interesan de una o varias tablas. Es importante señalar
que no se pueden realizar operaciones sobre vistas.
Artículo por Sara Alvarez
Paso del modelo E/R al modelo relacional
Para pasar a tablas todos los datos sin dejarnos nada y que las tablas tengan sentido por si
solas tenemos que seguir unos pasos:
•
•
•
•
•
•
Toda entidad se transforma en una tabla
todo atributo se transforma en una columna dentro de la tabla a la que pertenece
El identificador de la entidad se convierte en la clave primaria de la tabla
Toda relación N:M se convierte en una tabla que tendrá como clave primaria las dos
claves primarias de las entidades que se asocian
En las relaciones 1:N la clave primaria de la entidad con cardinalidad 1 pasa a la tabla
de la entidad cuya cardinalidad es N
en las relaciones N:M existen tres posibilidades: Si la cardinalidad es (0,1) en ambas
entidades, se crea tabla. Mientras que si la cardinalidad de una es (0,1) y de la otra es
(1,1) se suele pasar la clave primaria de (1,1) a la de (0,1). Si la cardinalidad de ambas
es (1,1) se pasa la clave de cualquiera de ellas a la otra.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
36
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Para este modelo de entidad-relación el paso a tablas quedaría de la siguiente forma:
Os recomiendo que practiqueis el paso a tablas, ya que es un factor sumamente importante de
cara a la construcción de tu base de datos para la web.
Artículo por Sara Alvarez
Operaciones básicas sobre tablas
Las operaciones que vamos a ver están basadas en el algebra relacional. Los operandos de de
cada operación lo constituyen una o varias tablas y el resultado es una nueva tabla.
Dentro de las operaciones básicas tenemos las operaciones unarias (se utiliza una sola tabla) y
las operaciones binarias (se utilizan dos tablas).
Operaciones unarias
Selección: Mediante esta operación se obtiene un conjunto de filas con todas las columnas de
la tabla. Se seleccionan determinadas filas incluyendo una condición. Se utilizan los operadores
booleanos "and" (Y)," or" (O), "not" (NO).
La representación sería la siguiente:
Ejemplo de selección.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
37
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Partimos de la siguiente tabla de empleados:
Realizamos la siguiente operación de selección:
La tabla resultante sería la siguiente:
Proyección: esta operación nos devuelve una nueva tabla con las columnas seleccionadas de
otra.
La representación sería la siguiente:
Ejemplo de proyección:
Sobre la tabla anterior proyectamos la columna salario y nombre
quedando como resultado la siguiente tabla
Operaciones binarias
Unión: Esta operación solo se puede hacer si las tablas tienes las mismas columnas, es decir,
por ejemplo si tuviéramos una tabla llamada empleados2 con las mismas columnas tan solo
tendríamos que añadir las filas de ambas tablas en una única tabla.
Su representación sería la siguiente: Tabla1
u Tabla2
Diferencia: de la misma forma que la unión la diferencia tan solo se puede realizar si las dos
tablas tienen las mismas columnas. Su representación sería la siguiente: Tabla1 - Tabla2
Con las siguientes tablas:
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
38
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
El resultado sería el siguiente:
Producto cartesiano: se realiza con dos tablas distintas pero relacionadas por alguna columna,
siempre y cuando el nombre de la columna no sea el mismo.
Su representación sería la siguiente: Tabla1
x Tabla2
Ejemplo de producto cartesiano: partimos de las dos tablas siguientes:
Como resultado del producto cartesiano tendríamos la siguiente tabla:
Artículo por Sara Alvarez
Características de un sistema gestor de base de datos
relacional
Antes de poner las reglas recordamos lo que era un sistema gestor de base de datos:
Un sistema gestor de base de datos se define como el conjunto de programas que administran
y gestionan la información contenida en una base de datos.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
39
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Se establecen 12 reglas por las cuales la base de datos es relacional:
•
•
•
•
•
•
•
•
•
•
•
•
Regla de información: Toda la información está representada lógicamente en tablas.
Tratamiento sistemático de valores nulos: debe soportar valores nulos de forma
automática independientemente del tipo de dato.
Regla de acceso garantizado: Se tiene que poder acceder a cada dato mediante la
combinación del nombre de la tabla, la columna que lo contiene y la clave primaria de la
fila.
Regla de sublenguaje completo: Debe permitir un lenguaje cuya sintaxis este bien
definida para la manipulación de la base de datos.
Catalogo on-line: Un usuario tiene que poder acceder a dicho catalogo con su usuario y
contraseña.
Inserción, modificación y borrado de alto nivel: Debe ser posible realizar dichas
operaciones sin alterar los demás datos.
Actualización de vista: Se debe poder actualizar las vistas por el sistema gestor.
Independencia física de los datos: la forma de almacenar los datos no influye en la
manipulación de los mismos.
Independencia lógica de los datos: los cambios sobre los objetos de la base de datos no
tienen porque afectar a los usuarios y programas.
Independencia de distribución: los programas no se tienen porque alterar al redistribuir
los datos.
Independencia de integridad: las restricciones de integridad se almacenan y crean en el
sistema gestor y no en los programas.
Regla de no subversión: Si un sistema gestor de base de datos tiene un lenguaje de
bajo nivel, este lenguaje no se puede utilizar para destruir o evitar las reglas de
integridad o las restricciones expresadas en el lenguaje relacional de alto nivel.
Si tu sistema gestor de base de datos cumple con estas doce reglas puedes afirmar que se
trata de un sistema gestor de base de datos relacional o lo que es lo mismo SGBDR
Artículo por Sara Alvarez
Tipos de sentencias SQL y sus componentes sintácticos
En SQL tenemos bastantes sentencias que se pueden utilizar para realizar diversas tareas.
Dependiendo de las tareas, estas sentencias se pueden clasificar en tres grupos principales
(DML, DDL,DCL), aunque nos quedaría otro grupo que a mi entender no está dentro del
lenguaje SQL sino del PLSQL.
DML
SENTENCIA
DESCRIPCIÓN
Manipulación de datos
SELECT
INSERT
DELETE
UPDATE
Recupera datos de la base de datos.
Añade nuevas filas de datos a la base de datos.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
40
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Suprime filas de datos de la base de datos.
Modifica datos existentes en la base de datos.
DDL
Definición de datos
CREATE TABLE
DROP TABLE
ALTER TABLE
CREATE VIEW
DROP VIEW
CREATE INDEX
DROP INDEX
CREATE SYNOYM
DROP SYNONYM
Añade una nueva tabla a la base de datos.
Suprime una tabla de la base de datos.
Modifica la estructura de una tabla existente.
Añade una nueva vista a la base de datos.
Suprime una vista de la base de datos.
Construye un índice para una columna.
Suprime el índice para una columna.
Define un alias para un nombre de tabla.
Suprime un alias para un nombre de tabla.
DCL
Control de acceso
GRANT
REVOKE
Control de transacciones
COMMIT
ROLLBACK
Concede privilegios de acceso a usuarios.
Suprime privilegios de acceso a usuarios
Finaliza la transacción actual.
Aborata la transacción actual.
PLSQL
SQL Programático
DECLARE
OPEN
FETCH
CLOSE
Define un cursor para una consulta.
Abre un cursor para recuperar resultados de consulta.
Recupera una fila de resultados de consulta.
Cierra un cursor.
Componentes sintácticos
La mayoría de sentencias SQL tienen la misma estructura.
Todas comienzan por un verbo (select, insert, update, create), a continuación le sigue una o
más clausulas que nos dicen los datos con los que vamos a operar (from, where), algunas de
estas son opcionales y otras obligatorias como es el caso del from.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
41
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Artículo por Sara Alvarez
Tipos de datos en SQL
En sql tenemos varios tipos de datos. Cuando creamos una tabla con la instrucción create
table, tenemos que especificar el tipo de dato de cada columna.
En la siguiente tabla mostramos los diferentes tipos de datos y sus principales caracteristicas:
e caracteres de una longitud variable. La longitud máxima son 4000 caracteres.
con una longitud fija. Siendo 2000 caracteres el máximo
éricos, tanto enteros como decimales, con o sin signo. Precisión, indica el número máximo de digitos que va a tener el
a derecha del punto decimal.
e caracteres de longitud variable. Puede almacenar hasta 2 gigas de información
rios. Se emplea para el almacenamiento de gráficos, sonidos, etc. Su tamaño máximo es de 2 gigas
n de fechas y horas. De forma predeterminada almacena un dato con el siguiente formato: siglo/año/mes/dia/hora/mi
rámetros.
rios. Puede almacenar como mucho 2000 bytes.
o que representa una cadena hexadecimal que indica la dirección de una fila en su tabla
2 pero el tamaño de un carácter depende de la eleccion del juego de caracteres. El tamaño máximo es 2000 bytes.
las mismas caracteristicas que el nvarchar2
usua para objectos carácter
que el tamaño del carácter depende del juego de caracteres utilizado
W. Este se usa para objetos binarios.
Como procesa un SGBD una sentencia
El sistema gestos de base de datos (SGBD) realiza una serie de pasos para ejecutar una
sentencia:
1. Lo primero que hace es analizar la sentencia y comprueba que esta bien escrita.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
42
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
2. Valida la sentencia. Comprueba la sentencia semánticamente. Comprobando que tanto
las tablas, columnas y datos existen.
3. Después optimiza la sentencia, buscando la forma más rápida de ejecutar dicha
sentencia.
4. Genera un plan de aplicación de la sentencia. Genera el código necesario para ejecutar
dicha sentencia.
5. Y por último ejecuta el plan de aplicación.
El análisis de la sentencia no requiere que se acceda a la base de datos por lo que se realiza
rápidamente mientras que la optimización si que lo requiere por lo que requiere más tiempo y
más trabajo por parte de la CPU.
Artículo por Sara Alvarez
Consulta de datos
Para recuperar información de las base de datos, utilizamos la sentencia select, que tiene la
siguiente sintaxis:
select [ALL|DISTINCT]
[expre_column1, expre_colum2, ..., expre_column | *]
FROM [nombre_tabla1, nombre_tabla2, ..., nombre_tablan]
[WHERE condicion]
[ORDER BY expre_colum [DESC|ASC] [,expre_colum [DESC|ASC]]...];
Donde expre_colum puede ser una columna de una tabla, una constante, una o varias
funciones, incluso expresiones aritméticas.
La única cláusula obligatoria es la cláusula FROM, las demás son opcionales todas.
FROM
Nos indica la tabla o lista de tablas de las que vamos a recuperar la información.
Si un usuario de la base de datos no es el propietario de la tabla, tendrá que especificar el
nombre de usuario delante de la tabla, como se ve en el siguiente ejemplo.
select * from profesor.alumnos;
Donde profesor seria el nombre de usuario y alumnos el nombre de la tabla.
También podemos darles nombres distintos o más cortos a las tablas mediante lo que se
donomina alias.
select a.nombre, a.edad from alumnos a;
La tabla alumnos toma el alias a.
WHERE
Nos devuelve las filas que cumplen la condición expresada. El formato de la condición es el
siguiente:
expresión operador expresión.
Podemos construir condiciones múltiples usando los operadores lógicos AND OR y NOT, así
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
43
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
mismo podemos utilizar los parentesis para forzar el orden de ejecución de las expresiones.
Un ejemplo de utilizacion del where muy simple es la siguiente:
select nombre from alumno where nota>7 and edad<7;
Esta sentencia solo nos mostraría el nombre de los alumnos que cumplieran las dos
condiciones expresadas.
ALL
Con esta cláusula recuperamos todas las filas aunque tengamos repetidas, es la cláusula por
defecto.
DISTINCT
Es la contraria que la anterior, solo nos recupera las filas que no están repetidas.
ORDER BY
Esta cláusula nos especifica el criterio de ordenación del resultado obtenido en la consulta. ASC
nos especifica una ordenación ascendente y DES descendente.
Podemos anidar criterios siendo el situado más a la izquierda el principal. Ponemos un ejemplo
para verlo más claro:
select * from alumnos oder by nombre, curso desc;
Esta sentencia nos mostraria todos los datos de los alumnos ordenados primero por nombre
ascendente y por curso descendente.
Artículo por Sara Alvarez
Operadores en la consulta select
Operadores aritméticos
Los operadores aritméticos sirven para formar expresiones con constantes, funciones de
valores de columnas.
Operador aritmético
Operación
+
suma
-
resta
*
multiplicación
/
división
Operadores de comparación y lógicos
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
44
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Operadores lógicos
Operador
Función
and
Devuelve el valor TRUE cuando los dos condiciones son verdaderas
or
Devuelve el valor TRUE cuando una de las dos condiciones es verdadera
not
Devuelve el valor TRUE si la condición es falsa.
Operadores de comparación
Operador
Función
=
Igual a
>
Mayor que
>=
Mayor o igual que
<
Menor que
<=
Menor o igual que
¡= <>
Distinto de
Operadores de comparación de cadenas de caracteres
Para comparar cadenas de caracteres utilizamos el símbolo =. Ponemos un ejemplo.
Select * from emple where oficion='analista'
Este operador no nos sirve si queremos hacer una consulta del tipo de: "sacar los datos del
empleado cuyo oficio empiece por P"
Para especificar este tipo de consultas, en SQL usamos el operador LIKE que permite utilizar
los siguientes caracteres especiales en las cadenas de comparación:
% Comodín: Representa cualquier cadena de 0 o más caracteres
'_' Marcador de posición: representa un carácter cualquiera.
Ponemos un ejemplo para que quede algo más claro:
Select * from emple where nombre LIKE 'P%'
Esta consulta nos mostraría todos los datos de los empleados cuyo nombre empezará por P
Artículo por Sara Alvarez
Operadores en la consulta select II
Null y Not Null
Se dice que una columna de una fila es NULL si está completamente vacía.
Podemos utilizar estos términos a la hora de hacer consultas si queremos saber si una columna
esta vacía o no.
Por ejemplo, A partir de una tabla de empleados consultamos los apellidos de aquellos que no
tengan comisión, que es lo mismo que decir, aquellos que su comisión sea nula.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
45
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Select apellido from empleado where comisión IS NULL;
De esta misma forma podemos preguntar por los que tengan comisión.
Select apellido from empleado where comisión IS NOT NULL;
Operador IN
Hasta ahora todas las comprobaciones lógicas que hemos visto comparan una columna o
expresión con valor, pero también podemos comparar conjunto de valores.
El operador IN nos permite comprobar si una expresión pertenece a un conjunto de valores. Su
sintaxis es la siguiente:
IN (lista de valores separados por comas)
De la misma forma utilizamos el NOT IN para saber si no están dentro de ese conjunto de
valores.
Un ejemplo de utilización de IN y NOT IN:
Queremos mostrar los apellidos de la tabla empleado cuyo número de departamento sea el 10
o el 30
Select apellido from empleado where departamento IN (10,30);
Queremos mostrar los apellidos de la tabla empleado cuyo número de departamento no sea ni
el 10 ni el 30
Select apellido from empleado where departamento NOT IN (10,30);
También lo podemos aplicar a lista de valores con cadenas:
Queremos mostrar los apellidos de la tabla empleado cuyo oficio sea peón o capataz
Select apellidos from empleado where oficio IN ('peon','capataz');
Operador between
Este operador comprueba si un valor está comprendido o no dentro de un rango de valores. Su
sintaxis es la siguiente:
<expresión> [NOT] between valor_inicial AND valor_final
Ponemos un ejemplo:
Queremos mostrar el apellido y el salario de los empleados cuyo salario este comprendido
entre 2000 y 2500 euros
Select apellido,salario from empleado where salario between 2000 and 2500
Operadores AND y OR combinados
Estos operadores se pueden combinar para sacar resultados más complicados en nuestras
sentencias selects, pero siempre con cuidado y utilizando los paréntesis para agrupar las
expresiones que se desean evaluar.
El orden de prioridad de los operadores lógicos es el siguiente, primero NOT, luego AND y por
último OR.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
46
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Ejemplo de uso:
Queremos obtener el apellido, salario y departamento de los empleados cuyo salario sea
mayor de 1000 euros en los departamentos 10 o 30
Select apellido,salario, departamento from empleado where salario>1000 and
(departamento=10 or departamento=30);
Artículo por Sara Alvarez
Subconsultas
Una subconsulta no es más que un select dentro de otro select. Las subconsultas son aquellas
sentencias select que forman parte de la clausula where de otra sentencia select. El formato es
el siguiente:
SELECT …
FROM ….
WHERE columna operador_comparativo (SELECT….. FROM… WHERE…);
Cuando se ejecuta esta sentencia primero se realiza la subconsulta y luego el resto de
sentencia.
Condiciones de búsqueda en subconsultas
Las subconsultas normalmente aparecen como parte de la condición de una búsqueda dentro
del where o having.
Condiciones de búsqueda que puede haber dentro de una subconsulta:
Comparación de subconsultas: Comparan el valor de la expresión con un valor único obtenido
en la subconsulta. Son los simbolos típicos de comparación (<,>,=,<=,>=).
Select * from empleado where oficio=(select oficio from empleado where apellido='Lopez');
Pertenencia a un conjunto de valores devueltos por la subconsulta: Comprueba si el valor esta
dentro del conjunto de valores devuelto por la subconsulta.
Select * from empleado where oficio IN (select oficio from empleado where departamento=20);
Existencia: nos dice si la subconsulta devuelve alguna fila o no. Para ello utilizamos las
palabras EXISTS o NOT EXITS.
Select * from departamento where EXISTS (select * from empleado where empleado.id_departamento =
departamento.id_departamento);
Comparación cuantificada: Para esto también utilizamos los comparadores basicos unidos a
ANY o ALL.
ANY compara el valor de una expresión con cada uno del conjunto de valores obtenidos en la
subconsulta. Con que una de las comparaciones de TRUE la consulta da TRUE
Select * from empleado where salario = ANY (select salario from empleado where id_departamento=30);
ALL compara el valor de una expresión con cada uno del conjunto de valores obtenidos en la
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
47
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
subconsulta. Tienen que ser todos TRUE para que la subconsulta devuelva TRUE
Select * from empleado where salario < ALL (select salario from emple where id_departamento=20);
Subconsultas que generan valores simple
Son las subconsultas que obtienen un solo registro. Para ello utilizamos los operadores de
comparación básicos. Si la subconsutla devuelve más de un registro nos sale un mensaje de
error.
Subconsultas que generan listas de valores
Son las subconsultas que nos devuelven más de un registro. Para estas subconsultas
utilizamos el operador IN.
Subconsultas correlacionadas
Estas subconsultas hacen referencia a una columna o varias de la consulta principal. Para verlo
mejor ponemos un ejemplo.
Queremos obtener los datos de los empleados cuyo salario sea el máximo salario del
departamento.
Select * from empleado E where salario = (select max(salario) form empleado where id_empleado=E.id_empleado);
Esta sentencia devuelve para cada fila que se obtiene el máximo salario del departamento que
se está obteniendo en la consulta principal.
Artículo por Sara Alvarez
Funciones aritméticas en SQL
Este tipo de funciones trabajan únicamente con datos númericos del tipo number, y se pueden
dividir en tres grupos principales.
Funciones de valores simples
Estas funciones son las más sencillas y trabajan con un único numero, variable o columna de la
tabla.
Función
Propósito
ABS(n)
Nos devuelve el valor absoluto de n
CEIL(n)
Nos devuelve el valor entero igual o inmediatamente superior a n
FLOOR(n)
Nos devuelve el valor entero igual o inmediatamente inferior a n
MOD(m,n)
Nos devuelve el resto de la división de m entre n
POWER(m,
Calcula la potencia de m elevado a exponente
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
48
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
exponente)
SIGN(valor)
NVL(valor, expresión)
Nos devuelve el signo de valor
Función que nos sustituye valor por expresión siempre que valor sea
NULL
ROUND(número[, m]) Nos redondea numero a m decimales
SQRT(n)
Nos devuelve la raíz cuadrada de n
TRUNC(número[,m ]) Trunca los números para que tengan m decimales.
Pasamos a poner algunos ejemplos para que os quede más claro como se utilizan:
Select
ceil(2.3) from tabla; (esta consulta nos devolvería 3)
Select mod (11,4) from tabla; ( nos devolvería 3)
Select round(22.38,1) from tabla; (nos devolvería 22.4)
Funciones de grupos de valores
Este tipo de funciones se utilizan principalmente para realizar estadísticas, por lo que los
valores nulos no se toman en cuenta.
Dentro de este grupo se encuentran las siguientes funciones:
Función
Propósito
AVG(n)
Nos devuelve la media de n
COUNT(*|expresión) Nos devuelve el número de veces que aparece expresión.
MAX(expresión)
Nos devuelve el valor máximo de expresión
MIN (expresión)
Nos devuelve el valor mínimo de expresión
VARIANCE(expresión
Nos devuelve la varianza de expresión
)
SUM(expresión)
Nos devuelve la suma de valores de expresión.
Pasamos a poner algunos ejemplos:
Select avg(salario) from empleado; (nos devolvería el salario medio de todos los empleados)
Select count(*)from empleado; (nos devuelve el numero de empleados que tenemos)
Select min(salario) from empleado; (nos devuelve el menor salario encontrado en la tabla empleado)
Funciones de listas
Estas funciones trabajan con grupos de columnas dentro de una misma fila.
Dentro de este grupo de funciones se encuentran las siguientes :
Función
Propósito
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
49
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
GREATEST(valor1, valor2,…) Obtiene el mayor valor de la lista
LEAST(valor1, valor2,...)
Obtiene el menor valor de la lista
Para explicar estas funciones vamos a poner un ejemplo un poco más complicado, donde el
enunciado sería el siguiente:
Queremos mostrar por cada alumno su mayor nota de todas las que tiene.
Select alumno, greatest(nota1,nota2,nota2,nota4,nota5) "nota" from alumnos;
Artículo por Sara Alvarez
Funciones de cadena en SQL
Las funciones de cadena trabajan con campos char y varchar por lo que los literales que
escribamos se deben encerrar entre comillas simples.
Estas funciones que vamos a explicar a continuación pueden manipular cadenas de letras u
otros caracteres por lo que las vamos a dividir en dos grupos:
Funciones que devuelven caracteres
Este tipo de funciones devuelven un carácter o varios caracteres.
Función
Propósito
CHR(n)
Nos devuelve
el carácter
cuyo valor en
binario es n
Nos devuelve
CONCAT(cad cad1
1, cad2)
concatenada
con cad2
UPPER(cad)
Convierte cad
a mayúsculas
LOWER(cad)
Convierte cad
a minúsculas
LPAD(cad1,n Con esta
[,cad2])
función
añadimos
caracteres a
cad1 por la
izquierda
hasta una
longitud
máxima dada
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
50
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
por n
Convierte la
INITCAP(cad primera letra
)
de cad a
mayúscula
LTRIM(cad
[,set])
Elimina un
conjunto de
caracteres a
la izquierda
de cad,
siendo set el
conjunto de
caracteres a
eliminar
Con esta
función
añadimos
caracteres de
la misma
RPAD(cad1,
forma que
n[,cad2])
con la función
LPAD pero
esta vez los
añadimos a la
derecha
Hace lo
mismo que
RTRIM(cad[,
LTRIM pero
set])
por la
derecha
Sustituye un
conjunto de
caracteres de
0 o más
REPLACE(ca caracteres,
d,cadena_bu devuelve cad
scada
con cada
[,cadena_su ocurrencia de
stitucion] ) cadena_busc
ada sustituida
por
cadena_sustit
ucion
Devuelve la
subcadena de
SUBSTR(cad cad que
, m[,n])
abarca desde
m hasta el
numero de
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
51
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
caracteres
dados por n.
Convierte
caracteres de
una cadena
en caracteres
diferentes.
Devuelve
TRANSLATE(
cad1 con los
cad1,cad2,c
caracteres
ad3)
encontrados
en cad2 y
sustituidos
por los
caracteres de
cad3
Ponemos algunos ejemplos de utilización de estas funciones:
Sentencia sql que nos devuelve las letras cuyo valor asccii es el 45 y el 23
select CHR(45), CHR(23) FROM TABLA;
Sentencia sql que obtiene el nombre de los alumnos sacando por pantalla la siguiente frase: el
nombre del alumno es (nombre que esta almacenado en la tabla)
select CONCAT ('el nombre de alumno es', nombre) from alumno;
Sentencia sql que me devuelve los nombres de los alumnos en mayúsculas
select UPPER(nombre) from alumno;
Sentencia sql que obtiene de un campo nombre, las 3 primeras letras
select SUBSTR(nombre,0,3) from alumno;
Y asi con el resto de funciones…
Funciones que devuelven valores numéricos
Estas funciones nos devuelven números a modo de información.
Propósito
Devuelve el valor ASCII de la primera letra de cad
Función que busca un conjunto de caracteres dentro de una cadena. Nos devuelve la posición de cad2 en cad1 em
Devuelve en número de caracteres de cad
Como con las funciones anteriores dejamos unos ejemplos para que veáis su funcionamiento.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
52
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Sentencia sql que nos devuelve el valor ASCII de la letra ('s')
select ASCII('s') from tabla;
Sentencia que nos devuelve la posición de la ocurrencia 'pe' dentro de la cadena 'Los perros
están bien' a partir de la posición 2
select INSTR('Los perros están bien','pe',2) from tabla;
Sentencia sql que nos devuelve el numero de caracteres de los nombres de los alumnos
select LENGTH(nombre) from alumnos;
Artículo por Sara Alvarez
Funciones para fechas en SQL
Dentro de SQL tenemos un tipo de dato denominado DATE. Este campo tiene el siguiente
formato predeterminado:
'dd/mm/yy'
Este formato lo podemos modificar con la función TO_CHAR de la cual hablaremos más
adelante en el siguiente artículo.
Cabe señalar que el tipo de dato DATE también almacena la siguiente información en el
siguiente orden:
Siglo/Año/Mes/Día/Hora/Minutos/Segundos
A continuación mostramos una tabla con las funciones para el manejo de fechas en SQL:
Propósito
e la fecha del sistema
e la fecha incrementada en n meses
e la fecha del último día del mes que contiene fecha
e la diferencia en meses entre la fecha1 y la fecha2
e la fecha del primer día de la semana indicado por cad después de la fecha indicada por fecha. Cad será siempre un d
Monday.
Ahora pasamos a poner algún ejemplo práctico para que os hagáis una idea de cómo es. De la
primera función no hace falta ya que es bastante sencilla, tan solo tenéis que poner la función
y os devuelve la fecha actual del sistema.
Ejemplo1: vamos a sumar 2 meses a la fecha de alta de los usuarios
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
53
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Select fecha_alta, add_months(fecha_alta,2) from usuarios;
Ejemplo2: vamos a obtener el último día del mes para cada una de las fechas de alta de cada
usuario
Select fecha_alta, last_day(fecha_alta) from usuarios;
Ejemplo3: vamos a obtener el día que será el próximo lunes
Select next_day(sysdate, 'Monday') "siguiente dia" from tabla;
Artículo por Sara Alvarez
Otras funciones Sql
Vamos a comenzar con las funciones de conversión que pasamos a mostrar en la siguiente
tabla:
Función
O_CHAR(fecha,'formato')
O_CHAR(numero,'formato')
Propósito
Esta función nos convierte una fecha de tipo date a una fecha de tipo varchar2
Nos convierte un dato de tipo number a un tipo varchar2
TO_DATE(cad,'formato')
Convierte un tipo de dato varchar2 o char a un valor de tipo date con el formato especific
TO_NUMBER(cadena,
['formato'])
Convierte una cadena a tipo de dato number, y si se le pasa, con el formato especificado
Ponemos algún ejemplo para que quede todo mas claro.
Ejemplo 1:
Select TO_CHAR(fecha,'mon aaa y yyy') "fecha nueva" from emple;
Esta sentencia nos devolvería una fecha con este aspecto: jun 160 1 991 Donde lo jun seria el
nombre del mes, 160 el número del año, 1 el ultimo digito del año y 991 los últimos tres
dígitos del año.
Ejemplo 2:
Select TO_CHAR(TO_DATE('01012007','ddmmyyyy'),'Month') "mes" from fechas;
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
54
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Esta sentencia nos devolvería algo como esto: Enero. Para llegar a este resultado lo primero
que hacemos es convertir la cadena a tipo fecha y después el tipo fecha a cadena con el
formato de mes.
Ahora pasamos a describir 5 funciones más que nos podemos encontrar pero que se suelen
utilizar poco…
ión
Proposito
R
Nos devuelve el nombre del usuario actual
presión)
Nos devuelve el número de bytes que ocupa la expresión.
D
Nos devuelve el identificador del usuario actual
cod2…,valor-por-defecto) Función que sustituye un valor por otro. Si var es igual a cualquier val de la lista lo sustituye
comienzo[,longitud]]])
Visualiza el valor de cadena desde el comienzo hasta longitud, con el formato especificado.
Pasamos a poner algunos ejemplos.
Ejemplo 1:
Mostramos el nombre de los alumnos y si su asignatura es lengua le ponemos un código 1, si
es matemáticas un código 2 y si no es ninguna de esas un 3.
Select alumnos, DECODE (asignatura, 'lenguaje',1, 'matemáticas', 2, 3) "código" from alumnos;
Ejemplo 2:
Mostramos el usuario que está conectado.
Show USER;
Ejemplo 3:
Mostramos el número de bytes que tiene la columna nombre de la tabla usuarios.
Selec t VSIZE(nombre) "tamaño", nombre from usuarios;
Artículo por Sara Alvarez
Agrupación de elementos en SQL
Con estas clausulas vamos a poder hacer consultas más complejas y avanzadas que nos
permitiran filtrar mejor la información o sacar conjuntos de informaciones ordenadas de una
determinada forma.
La sentencia select nos deja agrupar uno o más conjuntos de filas si utilizamos la cláusula
gruop by por las columnas especificas y el orden especificado, siendo el formato el siguiente:
select ...
from ...
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
55
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
group by columna1, columna2, columnaN....
having condicion
order by....
Los datos seleccionados en la sentencia que lleva el group by deben ser o una constante, o una
funcion de grupo o una columna que aparezca en el group by también.
En general group by lo utilizamos para calcular propiedades de uno o más conjuntos de filas.
La cláusula having es muy parecida a where pero funciona para grupos de filas y controla cúal
de los conjuntos de filas se visualiza.
Os pongo un ejemplo para que se entienda mejor:
Visualizar el número de alumnos por cada asignatura si el departamento tiene mas de 4
alumnos.
select asignatura, count(*) from alumno group by asignatura having count(*) > 4;
También podriamos ordenar dicha consulta añadiendo un order by al final, por ejemplo por
asignatura, quedando asi la consulta:
select asignatura, count(*) from alumno group by asignatura having count(*) > 4 order by
asignatura;
Podemos realizar consultas un poco más complicadas utilizando también funciones de grupo.
Por ejemplo:
Visualizar el número de departamento, la suma de los salarios, el salario máximo y el salario
mínimo de cada departamento.
select departamento, sum(salario) as suma, max(salario) as maximo, min(salario) as minimo
from empleado group by departamento;
Con esta sentencia nos saldrian 4 columnas, en la primera nos saldria el departamento, en la
segunda la suma de todos los salarios de ese departamento, en la siguiente el salario más alto
y el la última el salario más bajo del departamento.
Con estas cláusulas ya puedes realizar casi cualquier consulta, por lo que viene en próximos
artículos ya es algo más complicado, pero nada imposible.
Artículo por Sara Alvarez
Clausulas avanzadas de selección
Para comenzar os comento un poco que en artículos anteriores hemos hablado de la
combinación de tablas, concepto que vamos a necesitar tener bastante claro para poder
entender el resto de clausulas avanzadas de selección.
Combinación externa (outer join)
Esta clausula nos permite seleccionar filas de una tabla aunque no tengan correspondencia con
flas de la otra tabla con la que se la combina.
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
56
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Su formato es el siguiente:
select tabla1.columna1, tabla1.columna2, tabla2.columna2
from tabla1, tabla2
where tabla1.columna1=tabla2.columna1;
Como veis es bastante fácil y no crea mayor duda. Los registros que no tengan
correspondencia con la otra tabla no aparecerán. Para que aparezcan tendremos que colocar el
símbolo (+) al final del where y la columna que queremos que aparezca.
Un ejemplo de select seria el siguiente:
select departamento.num, departamento.nombre, emple.nombre
from departamento, nombre
where departamento.num=emple.num;
Aquí agrupamos por el num del departamento que se encuentra en las dos tablas.
Operador unión
Este operador combina los resultados de dos columnas. Si existe alguna fila duplicada solo
aparece una en el resultado.
Su formato es el siguiente:
select col1, col2, ... from tabla1 where condición
union
select col1, col2, ... from tabla2 where condición;
Si queremos que nos aparezcan también las filas duplicadas tenemos que utilizar el operador
unión all
Por ejemplo si quisiéramos mostrar todos los trabajadores de una empresa, tanto los nuevos
como los dados de baja tendríamos que hacer una sentencia como esta:
select nombre from trabajadores_nuevos
union
select nombre from trabajadores_viejos;
Operador intersect
Este operador nos devuelve las filas que son iguales en ambas consultas. Como en el anterior
por defecto las filas duplicadas se eliminan y no se muestran en el resultado.
Su formato es el siguiente:
select col1, col2, ... from tabla1 where condición
intersect
select col1, col2, ... from tabla2 where condición;
Un ejemplo muy sencillo seria mostrar los alumnos que todavía están estudiando.
select nombre from alumnos_activos
intersect
select nombre from alumnos;
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
57
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Operador minus
El operador minus nos devuelve las flas que están en la primera select y no en la segunda.
Como en los casos anteriores las filas duplicadas no se muestran en el resultado.
Su formato es:
select col1, col2, ... from tabla1 where condición
minus
select col1, col2, ... from tabla2 where condición;
Un ejemplo para este operador seria mostrar los alumnos que no están en actives
select nombre from alumnos
minus
select nombre from alumnos_activos;
Para finalizar os comento que estos tres últimos operadores los podemos encadenar, teniendo
en cuenta que siempre se evalúan de izquierda a derecha.
Además es importante saber que si vas a realizar este tipo de consultas siempre tiene que
haber el mismo número de columnas en las dos select y que los tipos de datos deben coincidir.
Artículo por Sara Alvarez
Manipulación de datos I. Orden Insert
Para insertar datos en una tabla utilizaremos la orden insert con el siguiente formato:
Insert into nombre_tabla [(columna [, columna]...)] values (valor [,valor]...);
Donde el nombre_tabla es el nombre de la tabla donde queremos insertar los nuevos datos.
[(columna [, columna]…)] representas las columnas donde vamos a insertar los datos. Si no
las especificamos por defecto se entiende que vamos a introducir datos en todas las columnas
de la tabla.
(valor [,valor]…) representan los valores que vamos a insertar en dichas columnas. Estos
valores deben estar colocados en las mismas posiciones que las columnas a las que
pertenecen.
Cualquier columna que no aparezca en el insert se rellenara con NULL siempre y cuando dicha
columna no esté definida como NOT NULL. Si la columna es NOT NULL y no aparece en el
insert la orden nos devolverá error.
Ejemplo: Damos de alta un nuevo alumno en la tabla alumno
Insert into alumno (nombre, dni, apellidos) values ('PEPE','47334562T','SANCHEZ');
Ejemplo 2: Damos de alta una asignatura nueva
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
58
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Insert into asignatura (nombre, horas, dept_no) values ('Lengua',4,10);
También podemos añadir valores directamente desde una consulta select.
Para ello realizamos una consulta select en la que añadimos un insert y como resultado
tendremos tantas nuevas filas como resultados tenemos en el select. El formato de estas
inserciones es el siguiente:
Insert into nombre_tabla1 [(columna[,columna]...)]
Select {columna [,columna?|*}
From nombretabla2 [claúsulas de select];
Para que se vea mejor os dejo un ejemplo donde se ve bastante bien.
Ejemplo: Insertamos los datos de los empleados del departamento 10 (tabla emple10) en la
tabla de emple.
Insert into emple
Select *
from emple10
Where
Departamento=10;
Como veis es bastante sencillo insertar datos en una tabla, lo único que tenemos que tener en
cuenta es que necesitamos conocer las columnas de la tabla donde queremos insertar dichos
datos.
En el siguiente artículo pasaremos a actualizar datos ya existentes en las tablas con la orden
UPDATE, y a borrar datos con la orden DELETE.
Artículo por Sara Alvarez
Update con select y orden delete
Update con select
Muy a menudo tenemos la necesidad de actualizar ciertos campos que requieren de una
consulta previa, para estos casos podemos realizar todo en una misma sentencia.
Para realizar dicha sentencia utilizaremos un update y dentro del where o el set colocaremos el
select con la consulta que necesitemos.
Tenemos que tener en cuenta que cuando la consulta forma parte del set debemos seleccionar
una única fila y el mismo número de columnas que hay entre paréntesis al lado del set.
La sintaxis es la siguiente:
update <nombre tabla>
set columna1=valor1, columna1=valor2, ..
where columna3=(select ...);
Si utilizamos el set seria esta otra:
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
59
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
update <nombre tabla>
set (columna1,columna2, ?)=(select col1, col2,..)
where condición;
Y podríamos mezclar los dos casos sin ningún tipo de problema.
Os dejo un ejemplo para que veáis como funciona:
Tenemos que cambiar el salario a la mitad y la comisión ponerla a 0 a todos los empleados que
pertenezcan al departamento con mayor número de empleados.
Update empleado set salario=salario/2, comision=0 where departamento=(select departamento from empleado group
by departamento having count(*)=(select max(count(*)) from empleado group by departamento));
Como veis la sentencia puede asustar un poco es sencilla de comprender. Actualizamos los
datos que nos piden y hacemos en el where la búsqueda de aquellos empleados que cumplen
esos criterios.
Delete
Esta orden nos permite borrar una o varias filas de una tabla. En esta orden la cláusula where
es esencial ya que si no la ponemos adecuadamente corremos el riesgo de eliminar registros
no deseados. Si no ponemos un where en la sentencia, esta nos borrará todos los registros de
la tabla.
Hay que recordar que al igual que el update esta sentencia también puede llevar una
subconsulta añadida.
La sintaxis general es bastante sencilla:
delete from nombretabla where condición;
Os pongo dos ejemplos de utilización de la orden delete:
Borra los empleados del departamento 20
delete from empleado where departamento=20;
Borra los departamentos con menos de cuatro empleados
delete from depart where departamento in (select departamento from empleado group by departamento having
count(*)<4);
Referencia: Tenemos un tutorial de SQL para aprender a utilizar el estándar utilizado para la consulta de
bases de datos.
Artículo por Sara Alvarez
Manual de iniciación a la programación: http://www.desarrolloweb.com/manuales/74/
© Los manuales de DesarrolloWeb.com tienen el copyright de sus autores. No reproducir sin autorización.
60

Documentos relacionados