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