Sie sind auf Seite 1von 27

Tutorial pgAdmin III Este es un manual instructivo bsico (paso a paso) en espaol (castellano) para usuarios principiantes que

deseen conocer la herramienta pgAdmin III. Cubre las principales caractersticas, pero no abarca las uncionalidades avan!adas (para ello se recomienda instalar el programa " consultar la documentaci#n en linea). $ara ingresar a pgAdmin III%

En &indo's% men( Inicio, Programas, PostgreSQL, pgAdmin 3 En )inu*% men( Programas, Programacin, pgAdmin III

Ventana Principal +na ve! abierto pgAdmin III, la Ventana Principal muestra la estructura de la base de datos%

Consta de%

,arra de men( con las distintas uncionalidades de la herramienta ,arra de herramientas (que actuarn sobre los ob-etos seleccionados) E*plorador de ob-etos% rbol con las bases de datos de inidas " su contenido $anel de detalle% solapa de $ropiedades, Estadsticas, .ependencias " .ependientes del ob-eto seleccionado $anel /0)% sentencias /0) generadas mediante ingeniera inversa sobre el ob-eto seleccionado

$ara abrir una cone*i#n con un servidor de base de datos $ostgre/0), debe ubicarlo en el Explorador de objetos " hacer doble clic1 o presionar la tecla Enter. /i no tiene registrado el servidor, deber agregarlo. Agregar Servidor $ara conectarse a un servidor, se debe agregar los datos del mismo mediante el bot#n Aadir una conexin a un servidor (cono simil enchu e en la barra de herramientas), o la opci#n de men( Arc ivo, Aadir Servidor, con lo que aparecer la pantalla de !ueva "egistracin de Servidor%

Completar%

2ombre% denominaci#n de antasa de la base de datos /ervidor% direcci#n I$ o nombre de host $uerto% n(mero de puerto (usualmente 3456) //)% modo de encriptaci#n de la cone*i#n (requerir, pre erir, permitir, desactivar, veri icar de autoridad certi icante, veri icar completo) ,ase de datos de 7antenimiento% cone*i#n inicial, contiene adminpac1 " esquema pgAgent 2ombre de usuario% rol de postrges para la cone*i#n Contrasea% clave del rol de postgres para la cone*i#n Almacenar contrasea (para pr#*imas sesiones). Importante% la contrasea se graba en un archivo de te*to8 9estaurar env% almacenar " recuperar el entorno de navegaci#n de pgAdmin 9estricci#n .,% limitar las bases de datos " esquemas que se muestran en pgAdmin /ervicio% parmetros para controlar el servicio (depende del /.:.) Conectar ahora: intenta la conexin inmediatamente

Crear una base de datos $ara poder agregar tablas, es necesario crear primero una base de datos. $ara ello, ubicar el item #ases de datos en el Explorador de $bjetos, hacer clic1 derecho " seleccionar ;2ueva ,ase de .atos; del men( conte*tual o ir al men( principal% Editar, !uevo $bjeto, !ueva #ase de datos, aparecer la pantalla de 2ueva ,ase de .atos%

Completar los campos principales%


2ombre% denominaci#n de la base de datos (por simplicidad, evitar espacios, ma"(sculas " acentos, separar con gui#n ba-o ;<;) $ropietario% usuario (rol) que tendr derechos especiales sobre la base de datos Codi icado% esquema de codi icaci#n (+=>?, )A=I2@, &I2@636). Aer $reguntas>recuentes para ma"or in ormaci#n.

Presionar OK y se crear la base de datos. Agregar una tabla $ara agregar una tabla, ubicar en el Explorador de $bjetos, el esquema (schema) al cual pertenecer (por de ecto en Es%uemas, public), " sobre el item &ablas hacer clic1 derecho " seleccionar ;2ueva =abla; del men( conte*tual o ir al men( principal% Editar, !uevo $bjeto, !ueva &abla, aparecer la pantalla de 2ueva =abla%

.e esta solapa propiedades, completar%


2ombre% denominaci#n de la tabla (por simplicidad, evitar espacios, ma"(sculas " acentos, separar con gui#n ba-o ;<;) $ropietario% usuario (rol) que tendr derechos especiales sobre la tabla

)uego, seleccionar la solapa Columnas%

$or cada columna a agregar presionar el bot#n Aadir

Completar%

2ombre% denominaci#n de la columna (por simplicidad, evitar espacios, ma"(sculas " acentos, separar con gui#n ba-o ;<;) =ipo de datos% seleccionar el tipo de datos (serial para autonumBricos, integer para enteros, character varing para te*tos variables, te*t para te*tos tipo memo, double precision para punto lotante, numeric para n(meros con decimales precisos, etc.) )ongitud% para los tipos de datos de longitud variable (character, character varing, numeric, etc.) la cantidad de dgitos o caracteres totales. $recisi#n% para los tipos de datos numBricos de precisi#n i-a (numeric), la cantidad de dgitos decimales. Aalor por de ecto% un dato predeterminado que se usar si al ingresar un registro no se especi ica ning(n valor para la columna.

)uego de agregar las columnas, agregar las clave primaria " orneas mediante la solapa "estricciones%

/eleccionar 'lave Primaria (primar" 1e") " presionar Aadir, aparecer la pantalla para de inir la clave primaria%

Completar% 2ombre% denominaci#n de la restricci#n (e-. mi<tabla<p1) /eleccionar solapa columnas, elegir la columna que orma parte de la clave primaria " presionar Aadir%

+na ve! de inida la clave primaria, en la solapa "estricciones, seleccionar 'lave Ajena ( oreing 1e") " presionar Aadir, aparecer la pantalla para de inir una clave ornea%

Completar% 2ombre% denominaci#n de la restricci#n (e-. mi<tabla< 1<otra<tabla) 9e erencia% elegir la tabla ornea (la cual posee la clave primaria a veri icar) /eleccionar solapa columnas, elegir la columna que orma parte de la clave ornea " presionar Aadir%

Herramienta de edicin de datos )a grilla de edici#n permite ver " editar los datos seleccionados en una tabla o vista. $ara ello, seleccionar la tabla o vista en el Explorador de $bjetos " luego presionar el bot#n Ver los datos del objeto seleccionado (cono barra de herramientas o por el men( (erramientas, Ver )atos% simil grilla) de la

$ara editar, hacer doble clic1 en la celda a modi icar. )os tems principales de la barra de herramienta son% Cuardar (cono simil disquete)% almacena los datos modi icados Eliminar (cono simil basurero)% borra la ila seleccionada 9e rescar (cono simil reciclado)% actuali!a la grilla con datos recientes (por e-emplo, n(mero de secuencia) Importante: solo se puede actualizar datos (modificar y borrar) si la tabla cuenta con una clave primaria.

Herramienta de Consulta SQL Al seleccionar una base de datos, se habilita la herramienta de consulta, que permite e-ecutar consultas /0) arbitrarias. $ara ingresar a dicha herramienta, presionar el bot#n Ejecutar consultas SQL arbritrarias (cono de la barra de herramientas o dirigirse al men( (erramientas, (erramienta de consulta *'trl+E,. simil ho-a, sql, lapi!)

>uncionalidades importantes%

E-ecutar consulta (cono simil $la") E*portar datos consulta (cono simil $la" con .isquete)% para guardar las ilas resultantes (ver siguiente) Anali!ar consulta (cono simil rbol)% para mostrar un EXPLAIN gr ico (e*plicaci#n visual de los nodos del plan de e-ecuci#n de la consulta)

Constructor Gr ico de Consultas A su ve!, la herramienta de consulta posee una solapa para disear consultas visualmente (similar a Access " otras herramientas), llamado 'onstructor -r./ico de 'onsultas%

1. En el panel superior i!quierdo aparecern la base de datos, con sus esquemas, los cuales una ve! abierto (por e-. public) mostrar un arbol de las tablas disponibles. 6. Al hacer doble clic1 en la tabla, aparecer en el panel superior derecho, con la posibilidad de arrastrar " unir sus campos con los de otra tabla, para construir las -untas (-oins). =ambiBn se debe seleccionar la columna a mostrar como resultado de la consulta. 5. En el panel in erior, se encuentran las solapas de 'olumnas (para detallar las columnas de salida del SELECT), 'ritero (para incluir condiciones WHERE), $rdenamiento (ORDER), " 0untas (para especi icar los tipos de JOIN)

Herramienta de !"portacin )a herramienta de e*portaci#n permite e*portar datos de la herramienta de consulta. $ara ello, en la herramienta de consulta, presionar el bot#n Ejecute consulta1 escriba resultado en arc vio (cono simil pla" con disquete) de la barra de herramientas o mediante el men( 'onsulta, Ejecutar a un arc ivo%

/e debe completar el nombre del archivo " dems datos, " una ve! generado dicho archivo, se puede abrir con cualquier planilla de clculo (Cnumeric, :pen: iceD, E*cel). Herramienta de #esguardo )a herramienta de resguardo (bac1up) llama a la herramienta de volcado de $ostgre/0) para crear copias de seguridad de los datos. $ara utili!arla, seleccionar la base de datos del Explorador de objetos, presionar bot#n derecho " elegir

"esguardar (o men( (erramientas, "esguardo)% Completar los campos principales%


2ombre de archivo% >ormato% C:7$9E// (binario comprimido), $)AI2 (te*tual sin comprimir), =A9 (archivador) :pciones% o ,lobs% incluir ob-etos grandes o Comandos I2/E9=s% generar sentencias I2/E9= en ve! de C:$E

$resionar $2 " se generar el archivo con la copia de seguridad (bac1up) de los datos seleccionados.

Herramienta de #estauracin )a herramienta de restauraci#n (restore) llama a la herramienta hom#nima de $ostgre/0) para restaurar los datos desde copias de seguridad (archivos de bac1up) $ara utili!arla, crear una base de datos en blanco (ver arriba), seleccionarla en el ;E*plorador de ob-etos1 presionar botn derec o 3 elegir 9estaurar *o men4 Ferramientas1 9estaurar,5

Completar los campos principales%


2ombre de archivo% ubicaci#n de la copia de seguridad /olo datos% si solo se desea restaurar los datos, no el esquema de tablas :b-eto individual% si se quiere restaurar solo una tabla espec ica (ver solapa 'ontenido)

$resionar $2 " leer el archivo con la copia de seguridad (bac1up) restaurando los datos. En caso de B*ito, el bot#n cambiar a (ec o, en caso de all# permanecer en $6 para volver a restaurar (algunos de los allos son triviales " pueden ser ignorados, por e-., al crear un lengua-e que "a e*iste.) $ota% con esta herramienta solo se pueden restaurar copias de seguridad comprimidas ( ormato C:7$9E//) Herramienta de %antenimiento Esta herramienta de mantenimiento (maintance) e-ecuta la tarea de reconstruir las estadsticas sobre la base de datos " tablas, limpiar los datos no utili!ados " reorgani!ar los ndices. $ara utili!arla, seleccionar la base de datos del Explorador de objetos, presionar bot#n derecho " elegir 7antenimiento (o men( (erramientas, 7antenimiento)%

:pciones de mantenimiento%

AAC++7% limpie!a de las tuplas muertas A2A)EGE% anali!ar los datos para calcular estadsticas 9EI2.EH% reorgani!ar los ndices

:pciones de AAC++7%

>+))% compactar la tabla . Cuidado% esta operaci#n bloquea la tabla, no es recomendada en producci#n. >9EEGE% IcongelamientoI agresivo de las tuplas A2A)EGE% anali!ar los datos para calcular estadsticas

$ara ms in ormaci#n ver comandos AAC++7 " A2A)EGE Herramienta de !stado del Servidor )a ventana Estado del Servidor mostrar los usuarios actualmente conectados, bloqueos, transacciones preparadas " el archivo de bitcora (logs) del servidor de base de datos seleccionado. $ara utili!arla, seleccionar el servidor en el Explorador de objetos, ir al men( (erramientas, Estado del Servidor)%

>uncionalidad%

Cancelar consulta (cono )% enva la seal para cancelar la consulta seleccionada =erminar bac1end (cono )% enva la seal para inali!ar el proceso servidor seleccionado

9E>E9E2CIA/ http%JJ'''.arpug.com.arJtracJ'i1iJ$gAdmin +)=I7A C:2/+)=A 6@ .IC.6K@@ http%JJ'''.postgresql"a.com.arJinde*.phpDinicioL3K +)=I7A C:2/+)=A 6@ .IC.6K@@

C&$'IG(#ACI)$ *!L S!#VI*&#+ ,P&STG#!S-

9e erencia% http%JJtranslate.google.co.veJtranslateDhlLesMlangpairLenN esMuLhttp%JJ'''6.artsman.comJ/o t'areJAersionOJ$ostCres/etupInstructions$C4.html http%JJtranslate.google.co.veJtranslateDhlLesMlangpairLenN esMuLhttp%JJsqlmanager.netJenJproductsJpostgresqlJmanagerJdocumentationJhs@K6@K.html +ltima consulta 66 dic 6K@@. Cuando usted es capa! de conectarse a la base de datos mediante el Administrador de =eatro, es el momento de a-ustar algunos de los parmetros para $ostgre/0) que son espec icos de su mquina " con iguraci#n. Inicie el administrador de base de datos $C III aplicaci#n de gesti#n. Esto se encuentra utili!ando el men( InicioPQ $rogramasPQ $ostgre/0)PQ Administraci#n $C III.

/i usted recibe algunos conse-os (tiles, haga clic en ICerrarI para deshacerse de ellos. 6. Faga clic en el servidor de la mquina " el inicio de sesi#n. +tilice la contrasea que cre# al instalar el servidor de base de datos Faga doble clic en el nombre del servidor seg(n el diagrama de la derecha

Escriba la misma contrasea que ha sido utili!ado en otras partes de las instrucciones de instalaci#n. $ara la base de datos de demostraci#n, la sugerencia ue ImaestroI. $ara bases de datos de producci#n, esto 'll ser di erente. A continuaci#n, haga clic en ;Aceptar;

+sted debe ver una lista de ob-etos en el servidor. En la lnea I,ases de datos, debe haber (6) si ha importado la base de datos o crear su propia base de datos.

5. Faga clic en la lnea de bases de datos para iniciar el siguiente paso de con iguraci#n. 4. editar el archivo pg<hba.con . Aa"a al men( Ferramientas " seleccione Con iguraci#n del servidorPQ pg<hba.con archivo .

Editar el pg<hba.con para que su con iguraci#n inal, son similares a la siguiente lista a continuaci#n (vBase RRR +nas lneas ms aba-o). El procedimiento para la edici#n se reali!a haciendo doble clic sobre una lnea en blanco " escribiendo en los valores adecuados para su sede P una lnea a la ve!. Aseg(rese de que%

Activado est seleccionada El tipo es Ide acogidaI ,ase de datos es ;todo; +suario es ;todo; .irecci#n I$ A continuaci#n se describe. +sted necesitar por lo menos cuatro de la subred local de la red. Este e-emplo muestra la entrada para la subred @S6.@T?.K 7Btodo es md3 P este es el esquema de protocolo de enlace J ci rado utili!ado por los clientes para comunicarse con el servidor. $&TA. para la opcin de /01+2+2+/3405 establecer el protocolo de enlace 6ue 7aber con ian8a para permitir 6ue las copias de seguridad para uncionar sin a9uda+ $&TA. en :indo;s Vista 9 3 o si la m6uina utili8a IPv< ,la nueva IP de Internet de establecimiento de normas-5 es posible 6ue tenga 6ue con igurar.. / 3 /0= 6ue tambi>n T#(ST

/ume las lneas de%


)a red local P como en @S6.@T?.S.KJ64 :tras subredes que necesitan acceder a los datos P como en @K.@.3.KJ64 Cualquier mquinas individuales que deben tener acceso P al igual que en 33.TT.OO.??J56 (va A$2)

Al inal de la subred, el J 64 se re iere a una subred completa cuando se desea cualquier mquina en la red para acceder a la base de datos. Esto es lo que se utili!a con ms recuencia. El J 56 se re iere a una mquina en particular. /i utili!a esta opci#n, tendr que proporcionar la I$ del equipo e*acto que desea permitir el acceso a la base de datos.

RRR Al inal, el (ltimo archivo F,A debe ser similar a la lista de la i!quierda. /e puede tener ms lneas en Bl para grandes recintos con varias subredes o para acceso remoto al ordenador.

+na ve! reali!ados los cambios, haga clic en Cuardar seleccione ArchivoQQ Actuali!ar servidor.

icono para guardar los cambios. En el men( principal,

/e le solicitar que con irme los cambios. Faga clic en /

3. Faga clic en el bot#n de cierre " se le preguntar si desea guardar los cambios. Faga clic en /. Editar el archivo postgesql.con Aa"a al men( Ferramientas " seleccione Con iguraci#n del servidorPQ postgresql.con archivo

A continuaci#n, aparecer una lista de propiedades del servidor de base de datos que pueden ser con igiured. $or desgracia, no estn en orden al abBtico, por lo que puede que tenga que despla!arse hacia arriba " hacia aba-o para encontrar los que estn en la lista de aba-o. Femos tratado de ponerlos en el orden que usted los encontrar en el archivo de con iguraci#n. (Aer RRRRR) 2o cambie los parmetros distintos a los sugeridos, o que se le ha aconse-ado a hacerlo por un e*perto en bases de datos $ostgre/0). $ara cualquier a-uste que se trata de espacio en disco o la memoria, puede escribir @ C,, @KKK 7,, @KKKKKKU, " son el equivalente. 2o de-e un espacio entre el n(mero " la cantidad de memoria en el C,, 7, o U, otra postgres no se iniciar.

$ara modi icar cualquiera de las lneas, va"a a encontrar " haga doble clic en Bl. )a ma"ora de los parmetros le dir algo al respecto. )os valores para editar son%

El ;Activado; bandera. /i desea activar un parmetro en, haga clic en habilitada Aalor P es lo que desea establecer el parmetro. Fa" valores espec icos para algunos de los parmetros como se describe en la tabla de aba-o Comentario P esto puede e*istir como una descripci#n de lo que es el parmetro.

????? @uscar 9 editar los parmetros de la lista a la derec7a 9 cambiar a los valores sugeridos5 si no 9a se establece en ese valor+ 2ota% el me-or lugar para obtener los valores de la memoria del ;7onitor de actividad Ien elI Administrador de tareas;. Aea un e-emplo a continuaci#n de lo que esta pantalla se parece. $ara encontrarlo, haga clic derecho sobre la barra de tareas " IAdministrador de tareas ;pic1. listenAaddresses% Este valor siempre debe L ;R; e ectiveAcac7eAsi8e Este valor debe ser apro*imadamente la cantidad de IdisponiblesI de la memoria (siempre redondeando hacia aba-o con una precisi#n de 3K 7,) como se ve en el Administrador de tareas o el 7onitor de Actividad sin $ostgre/0) corriendo. Es bueno tomar la lectura antes de instalar $ostgre/0). maintenanceA;orBAmem Este valor debe ser de 3K 7, para equipos con @ C, de 9A7 o ms " 6K 7, para los que tienen menos. Introdu!ca los valores como ** 7,. s7aredAbu ers Este valor debe ser un 6KP63V de la 9A7 total del sistema total. Encontrar este valor en el administrador de tareas como la memoria ph"iscal total. Introdu!ca los valores como ** 7,. 2ota% si est utili!ando el servidor de T4 bits, el m*imo actual de este parmetro parece ser @K64. /i lo haces ms que eso, por avor veri ique que $ostgres se pondr en marcha cuando se reinicia el servidor. /i no es as, a-ustar este parmetro para que sea @K64 o menos. tempAbu ers Este valor debe ser de 3K 7, para equipos con 6 C, de 9A7 o ms " 6K 7, para los que tienen menos. Introdu!ca los valores como ** 7,. ;orBAmem Este valor debe ser de 3K 7, para equipos con @ C, de 9A7 o ms " 6K 7, para los que tienen menos. Introdu!ca los valores como ** 7,. +na ve! reali!ados los cambios, va"a al men( IArchivoI " seleccionar IActuali!ar servidoresI (otra alternativa es utili!ar la lecha verde en la barra de herramientas que es el icono de la tercera desde la derecha). /e le pedir que con irme los cambios

I$*IC! *! ($A TA@LA+ ,Por Consola-

$ara acilitar la obtenci#n de in ormaci#n de una tabla se utili!an ndices. El indice de una tabla desempea la misma unci#n que el ndice de un libro% permite encontrar datos rpidamenteW en el caso de las tablas, locali!a registros. +na tabla se inde*a por un campo (o varios). El ndice es un tipo de archivo con 6 entradas% un dato (un valor de alg(n campo de la tabla) " un puntero. +n ndice posibilita el acceso directo " rpido haciendo ms e iciente las b(squedas. /in ndice, se debe recorrer secuencialmente toda la tabla para encontrar un registro. El ob-etivo de un indice es acelerar la recuperaci#n de in ormaci#n. )a desventa-a es que consume espacio en el disco " las inserciones " borrados de registros son ms lentas. )a inde*aci#n es una tBcnica que optimi!a el acceso a los datos, me-ora el rendimiento acelerando las consultas " otras operaciones. Es (til cuando la tabla contiene miles de registros. )os ndices se usan para varias operaciones% P para buscar registros rpidamente. P para recuperar registros de otras tablas empleando I-oinI. Es importante identi icar el o los campos por los que sera (til crear un indice, aquellos campos por los cuales se reali!an operaciones de b(squeda con recuencia. Fa" distintos tipos de ndices, a saber% @) Iprimar" 1e"I% es el que de inimos como clave primaria. )os valores inde*ados deben ser (nicos " adems no pueden ser nulos. $ostgre/0) le da el nombre I$9I7A9EI. +na tabla solamente puede tener una clave primaria. 6) Iinde*I% crea un indice com(n, los valores no necesariamente son (nicos " aceptan valores InullI. $odemos darle un nombre, si no se lo damos, se coloca uno por de ecto. I1e"I es sin#nimo de Iinde*I. $uede haber varios por tabla. 5) IuniqueI% crea un indice para los cuales los valores deben ser (nicos " di erentes, aparece un mensa-e de error si intentamos agregar un registro con un valor "a e*istente. $ermite valores nulos " pueden de inirse varios por tabla. $odemos darle un nombre, si no se lo damos, se coloca uno por de ecto. =odos los ndices pueden ser multicolumna, es decir, pueden estar ormados por ms de @ campo. En las siguientes lecciones aprenderemos sobre cada uno de ellos. )os nombres de ndices aceptan todos los caracteres. +na tabla puede ser inde*ada por campos de tipo numBrico o de tipo caracter. =ambiBn se puede inde*ar por un campo que contenga valores 2+)), e*cepto los $9I7A9E.

TCP&S *! C$*IC!S ,C#!AT! D *#&P-

.i-imos que ha" 5 tipos de ndices% El ndice llamado primar" se crea automticamente cuando establecemos un campo como clave primaria. )os valores inde*ados deben ser (nicos " adems no pueden ser nulos. +na tabla solamente puede tener una clave primaria. $uede ser multicolumna, es decir, pueden estar ormados por ms de un campo. Aamos a otro tipo de ndice com(n. +n ndice com(n se crea con Icreate inde*I, los valores no necesariamente son (nicos " aceptan valores InullI. $uede haber varios por tabla. Aamos a traba-ar con nuestra tabla IlibrosI.
create table libros( codigo int not null, titulo varchar(40), autor varchar(30), editorial varchar(15), precio decimal(6,2) );

+n campo por el cual reali!amos consultas recuentemente es IeditorialI, inde*ar la tabla por ese campo sera (til. Creamos un ndice%
create index !libros!editorial on libros(editorial);

.ebemos de inir un nombre para el ndice (en este caso utili!amos como nomenclatura el carater I, luego el nombre de la tabla " inalmente el o los nombres del campo por el cual creamos el ndice. )uego de la palabra clave on indicamos el nombre de la tabla " entre parBntesis el nombre del campo o los campos por el cual se inde*a. Aeamos otro tipo de ndice llamado I(nicoI. +n ndice (nico se crea con Icreate unique inde*I, los valores deben ser (nicos " di erentes, aparece un mensa-e de error si intentamos agregar un registro con un valor "a e*istente. $ermite valores nulos " pueden de inirse varios por tabla. Crearemos un ndice (nico por los campos titulo " editorial%
create uni"ue index !libros!tituloeditorial on libros(titulo,editorial);

$ara eliminar un ndice usamos Idrop inde*I. E-emplo%


drop index drop index !libros!editorial; !libros!tituloeditorial;

/e elimina un ndice con Idrop inde*I seguido de su nombre. $odemos eliminar los ndices creados, pero no el creado automticamente con la clave primaria.

C&$S(LTA P&# CA%P&S+ ,Por Consola-

Se coloca el comando EselectF5 luego el campo 6ue se desea consultar E romF 9 el nombre de la tabla+ Sinta"is simple% select (2ombre del Campo(s)) rom (nombre del la =abla) !Gemplo. select titulo,autor,editorial,precio rom libros. Consultas con Predicados. select R rom librosW PPmuestra todos los registros. PPselect titulo rom librosW PP muestra los registros del campo asignado. PPselect distinct on (titulo, autor) precio,editorial rom librosW PP muestra solo los campos distintos a los que estan entre el parentesis. PPselect R rom libros 'here precio Q(select avg(precio) rom libros )WPP utili!ando avg &rdenar registros PPselect titulo,autor,editorial,precio rom libros order b" titulo,autor,editorial,precio descW S(@C&$S(LTAS

+na subconsulta (subquer") es una sentencia IselectI anidada en otra sentencia IselectI, IinsertI, IupdateI o IdeleteI (o en otra subconsulta). )as subconsultas se emplean cuando una consulta es mu" comple-a, entonces se la divide en varios pasos l#gicos " se obtiene el resultado con una (nica instrucci#n " cuando la consulta depende de los resultados de otra consulta. Ceneralmente, una subconsulta se puede reempla!ar por combinaciones " estas (ltimas son ms e icientes. )as subconsultas se .E,E2 incluir entre parBntesis. $uede haber subconsultas dentro de subconsultas. /e pueden emplear subconsultas% P en lugar de una e*presi#n, siempre que devuelvan un solo valor o una lista de valores. P que retornen un con-unto de registros de varios campos en lugar de una tabla o para obtener el mismo resultado que una combinaci#n (-oin). Fa" tres tipos bsicos de subconsultas% @. las que retornan un solo valor escalar que se utili!a con un operador de comparaci#n o en lugar de una e*presi#n. 6. las que retornan una lista de valores, se combinan con IinI, o los operadores Ian"I, IsomeI " IallI. 5. los que testean la e*istencia con Ie*istsI. 9eglas a tener en cuenta al emplear subconsultas% P la lista de selecci#n de una subconsulta que va luego de un operador de comparaci#n puede incluir s#lo una e*presi#n o campo (e*cepto si se emplea Ie*istsI " IinI).

P si el I'hereI de la consulta e*terior inclu"e un campo, este debe ser compatible con el campo en la lista de selecci#n de la subconsulta. P las subconsultas luego de un operador de comparaci#n (que no es seguido por Ian"I o IallI) no pueden incluir clusulas Igroup b"I ni IhavingI. P IdistinctI no puede usarse con subconsultas que inclu"an Igroup b"I. P una subconsulta puede estar anidada dentro del I'hereI o IhavingI de una consulta e*terna o dentro de otra subconsulta. P si una tabla se nombra solamente en un subconsulta " no en la consulta e*terna, los campos no sern incluidos en la salida (en la lista de selecci#n de la consulta e*terna). S(@C&$S(LTAS C&%& !HP#!SI)$

+na subconsulta puede reempla!ar una e*presi#n. .icha subconsulta debe devolver un valor escalar (o una lista de valores de un campo). )as subconsultas que retornan un solo valor escalar se utili!a con un operador de comparaci#n o en lugar de una e*presi#n%
select #$%&'( )rom *$+,$ -here #$%&' '&./$0'/ ((1+#'2(1,*$); select #$%&' '&./$0'/ ((1+#'2(1,*$) )rom *$+,$;

/i queremos saber el precio de un determinado libro " la di erencia con el precio del libro ms costoso, anteriormente debamos averiguar en una consulta el precio del libro ms costoso " luego, en otra consulta, calcular la di erencia con el valor del libro que solicitamos. $odemos conseguirlo en una sola sentencia combinando dos consultas%
select titulo,precio, precio3(select max(precio) )rom libros) as di)erencia )rom libros -here titulo451no5;

En el e-emplo anterior se muestra el ttulo, el precio de un libro " la di erencia entre el precio del libro " el m*imo valor de precio. 0ueremos saber el ttulo, autor " precio del libro ms costoso%
select titulo,autor, precio )rom libros -here precio4 (select max(precio) )rom libros);

2ote que el campo del I'hereI de la consulta e*terior es compatible con el valor retornado por la e*presi#n de la subconsulta. /e pueden emplear en IselectI, IinsertI, IupdateI " IdeleteI. $ara actuali!ar un registro empleando subconsulta la sinta*is bsica es la siguiente%
update *$+,$ set #$%&'421.6'6$,'/ -here #$%&'4 ((1+#'2(1,*$);

$ara eliminar registros empleando subconsulta empleamos la siguiente sinta*is bsica%

delete )rom *$+,$ -here #$%&'4((1+#'2(1,*$);

9ecuerde que la lista de selecci#n de una subconsulta que va luego de un operador de comparaci#n puede incluir s#lo una e*presi#n o campo (e*cepto si se emplea Ie*istsI o IinI). 2o olvide que las subconsultas luego de un operador de comparaci#n (que no es seguido por Ian"I o IallI) no pueden incluir clusulas Igroup b"I. S(@C&$S(LTAS C&%& !HP#!SI)$

+na subconsulta puede reempla!ar una e*presi#n. .icha subconsulta debe devolver un valor escalar (o una lista de valores de un campo). )as subconsultas que retornan un solo valor escalar se utili!a con un operador de comparaci#n o en lugar de una e*presi#n%
select #$%&'( )rom *$+,$ -here #$%&' '&./$0'/ ((1+#'2(1,*$); select #$%&' '&./$0'/ ((1+#'2(1,*$) )rom *$+,$;

/i queremos saber el precio de un determinado libro " la di erencia con el precio del libro ms costoso, anteriormente debamos averiguar en una consulta el precio del libro ms costoso " luego, en otra consulta, calcular la di erencia con el valor del libro que solicitamos. $odemos conseguirlo en una sola sentencia combinando dos consultas%
select titulo,precio, precio3(select max(precio) )rom libros) as di)erencia )rom libros -here titulo451no5;

En el e-emplo anterior se muestra el ttulo, el precio de un libro " la di erencia entre el precio del libro " el m*imo valor de precio. 0ueremos saber el ttulo, autor " precio del libro ms costoso%
select titulo,autor, precio )rom libros -here precio4 (select max(precio) )rom libros);

2ote que el campo del I'hereI de la consulta e*terior es compatible con el valor retornado por la e*presi#n de la subconsulta. /e pueden emplear en IselectI, IinsertI, IupdateI " IdeleteI. $ara actuali!ar un registro empleando subconsulta la sinta*is bsica es la siguiente%
update *$+,$ set #$%&'421.6'6$,'/ -here #$%&'4 ((1+#'2(1,*$);

$ara eliminar registros empleando subconsulta empleamos la siguiente sinta*is bsica%


delete )rom *$+,$ -here #$%&'4((1+#'2(1,*$);

9ecuerde que la lista de selecci#n de una subconsulta que va luego de un operador de comparaci#n puede incluir s#lo una e*presi#n o campo (e*cepto si se emplea Ie*istsI o IinI).

2o olvide que las subconsultas luego de un operador de comparaci#n (que no es seguido por Ian"I o IallI) no pueden incluir clusulas Igroup b"I. S(@C&$S(LTAS A$D I S&%! I ALL

Ian"I " IsomeI son sin#nimos. Chequean si alguna ila de la lista resultado de una subconsulta se encuentra el valor especi icado en la condici#n. Compara un valor escalar con los valores de un campo " devuelven ItrueI si la comparaci#n con cada valor de la lista de la subconsulta es verdadera, sino I alseI. El tipo de datos que se comparan deben ser compatibles. )a sinta*is bsica es%
7776$,'/.(#$,$/ '&./$0'/0.#'%&$/$# '2 $28 ((1+#'2(1,*$);

0ueremos saber los ttulos de los libros de I,orgesI que pertenecen a editoriales que han publicado tambiBn libros de I9ichard ,achI, es decir, si los libros de I,orgesI coinciden con A)C+2A de las editoriales que public# libros de I9ichard ,achI%
select titulo )rom libros -here autor45+orges5 and codigoeditorial 4 an9 (select e7codigo )rom editoriales as e :oin libros as l on codigoeditorial4e7codigo -here l7autor45/ichard +ach5);

)a consulta interna (subconsulta) retorna una lista de valores de un solo campo (puede e-ecutar la subconsulta como una consulta para probarla), luego, la consulta e*terna compara cada valor de IcodigoeditorialI con cada valor de la lista devolviendo los ttulos de I,orgesI que coinciden. IallI tambiBn compara un valor escalar con una serie de valores. Chequea si =:.:/ los valores de la lista de la consulta e*terna se encuentran en la lista de valores devuelta por la consulta interna. Sinta"is.
6$,'/.(#$,$/ '&./$0'/0.#'%&$/$# '2 all ((1+#'2(1,*$);

0ueremos saber si =:.A/ las editoriales que publicaron libros de I,orgesI coinciden con =:.A/ las editoriales que publicaron libros de I9ichard ,achI%
select titulo )rom libros -here autor45+orges5 and codigoeditorial 4 all (select e7codigo )rom editoriales as e :oin libros as l on codigoeditorial4e7codigo -here l7autor45/ichard +ach5);

)a consulta interna (subconsulta) retorna una lista de valores de un solo campo (puede e-ecutar la subconsulta como una consulta para probarla), luego, la consulta e*terna compara cada valor de IcodigoeditorialI con cada valor de la lista, si =:.:/ coinciden, devuelve los ttulos. Aeamos otro e-emplo con un operador de comparaci#n di erente%

0ueremos saber si A)C+2 precio de los libros de I,orgesI es ma"or a A)C+2 precio de los libros de I9ichard ,achI%
select titulo,precio )rom libros -here autor45+orges5 and precio ; an9 (select precio )rom libros -here autor45+ach5);

El precio de cada libro de I,orgesI es comparado con cada valor de la lista de valores retornada por la subconsultaW si A)C+2: cumple la condici#n, es decir, es ma"or a A)C+2 precio de I9ichard ,achI, se lista. Aeamos la di erencia si empleamos IallI en lugar de Ian"I%
select titulo,precio )rom libros -here autor45borges5 and precio ; all (select precio )rom libros -here autor45bach5);

El precio de cada libro de I,orgesI es comparado con cada valor de la lista de valores retornada por la subconsultaW si cumple la condici#n, es decir, si es ma"or a =:.:/ los precios de I9ichard ,achI (o al ma"or), se lista. Emplear IL an"I es lo mismo que emplear IinI. Emplear IXQ allI es lo mismo que emplear Inot inI. 9ecuerde que solamente las subconsultas luego de un operador de comparaci#n al cual es seguido por Ian"I o IallI) pueden incluir clusulas Igroup b"I. S(@C&$S(LTAS C&##!LACI&$A*AS

+n almacBn almacena la in ormaci#n de sus ventas en una tabla llamada I acturasI en la cual guarda el n(mero de actura, la echa " el nombre del cliente " una tabla denominada IdetallesI en la cual se almacenan los distintos items correspondientes a cada actura% el nombre del artculo, el precio (unitario) " la cantidad. /e necesita una lista de todas las acturas que inclu"a el n(mero, la echa, el cliente, la cantidad de artculos comprados " el total%
select )7<, (select count(d7numeroitem) )rom 0etalles as d -here )7numero4d7numero)actura) as cantidad, (select sum(d7preciounitario<cantidad) )rom 0etalles as d -here )7numero4d7numero)actura) as total )rom )acturas as );

El segundo IselectI retorna una lista de valores de una sola columna con la cantidad de items por actura (el n(mero de actura lo toma del IselectI e*terior)W el tercer IselectI retorna una lista de valores de una sola columna con el total por actura (el n(mero de actura lo toma del IselectI e*terior)W el primer IselectI (e*terno) devuelve todos los datos de cada actura. A este tipo de subconsulta se la denomina consulta correlacionada. )a consulta interna se eval(a tantas veces como registros tiene la consulta e*terna, se reali!a la subconsulta para cada registro de la consulta e*terna. El campo de la tabla dentro de la subconsulta ( .numero) se compara con el campo de la tabla e*terna.

En este caso, espec icamente, la consulta e*terna pasa un valor de InumeroI a la consulta interna. )a consulta interna toma ese valor " determina si e*iste en IdetallesI, si e*iste, la consulta interna devuelve la suma. El proceso se repite para el registro de la consulta e*terna, la consulta e*terna pasa otro InumeroI a la consulta interna " $ostgre/0) repite la evaluaci#n. )os operadores Ie*istsI " Inot e*istsI se emplean para determinar si ha" o no datos en una lista de valores. Estos operadores pueden emplearse con subconsultas correlacionadas para restringir el resultado de una consulta e*terior a los registros que cumplen la subconsulta (consulta interior). Estos operadores retornan ItrueI (si las subconsultas retornan registros) o I alseI (si las subconsultas no retornan registros). Cuando se coloca en una subconsulta el operador Ie*istsI, $ostgre/0) anali!a si ha" datos que coinciden con la subconsulta, no se devuelve ning(n registro, es como un test de e*istenciaW $ostgre/0) termina la recuperaci#n de registros cuando por lo menos un registro cumple la condici#n I'hereI de la subconsulta. )a sinta*is bsica es la siguiente%
... -here exists ((1+#'2(1,*$);

En este e-emplo se usa una subconsulta correlacionada con un operador Ie*istsI en la clusula I'hereI para devolver una lista de clientes que compraron el artculo Ilapi!I%
select cliente,numero )rom )acturas as ) -here exists (select <)rom 0etalles as d -here )7numero4d7numero)actura and d7articulo45lapi=5);

$uede obtener el mismo resultado empleando una combinaci#n. $odemos buscar los clientes que no han adquirido el artculo Ilapi!I empleando Ii not e*istsI%
select cliente,numero )rom )acturas as ) -here not exists (select <)rom 0etalles as d -here )7numero4d7numero)actura and d7articulo45lapi=5);

S(@C&$S(LTA SI%IL A(T&C&%@I$ACI)$

Algunas sentencias en las cuales la consulta interna " la e*terna emplean la misma tabla pueden reempla!arse por una autocombinaci#n. $or e-emplo, queremos una lista de los libros que han sido publicados por distintas editoriales.
select distinct l17titulo )rom libros as l1 -here l17titulo in (select l27titulo )rom libros as l2 -here l17editorial >; l27editorial);

En el e-emplo anterior empleamos una subconsulta correlacionada " las consultas interna " e*terna emplean la misma tabla. )a subconsulta devuelve una lista de valores por ello se emplea IinI " sustitu"e una e*presi#n en una clusula I'hereI.

Con el siguiente I-oinI se obtiene el mismo resultado%


select distinct l17titulo )rom libros as l1 :oin libros as l2 on l17titulo4l17titulo and l17autor4l27autor -here l17editorial>;l27editorial;

:tro e-emplo% ,uscamos todos los libros que tienen el mismo precio que IEl alephI empleando subconsulta%
select titulo )rom libros -here titulo>;5.l aleph5 and precio 4 (select precio )rom libros -here titulo45.l aleph5);

)a subconsulta retorna un solo valor. ,uscamos los libros cu"o precio supere el precio promedio de los libros por editorial%
select l17titulo,l17editorial,l17precio )rom libros as l1 -here l17precio ; (select avg(l27precio) )rom libros as l2 -here l17editorial4 l27editorial);

$or cada valor de l@, se eval(a la subconsulta, si el precio es ma"or que el promedio.

S(@C&$S(LTA !$ L(GA# *! ($A TA@LA

/e pueden emplear subconsultas que retornen un con-unto de registros de varios campos en lugar de una tabla. /e la denomina tabla derivada " se coloca en la clusula I romI para que la use un IselectI e*terno. )a tabla derivada debe ir entre parBntesis " tener un alias para poder re erenciarla. )a sinta*is bsica es la siguiente%
select $, $(de*$+,$0./ 6$0$7#$%&' )rom (*$+,$0./ 6$0$) as $, $(;

)a tabla derivada es una subsonsulta. $odemos probar la consulta que retorna la tabla derivada " luego agregar el IselectI e*terno%
select )7<, (select sum(d7precio<cantidad) )rom 0etalles as d -here )7numero4d7numero)actura) as total )rom )acturas as );

)a consulta anterior contiene una subconsulta correlacionadaW retorna todos los datos de I acturasI " el monto total por actura de IdetallesI. Esta consulta retorna varios registros " varios campos " ser la tabla derivada que emplearemos en la siguiente consulta%
select td7numero,c7nombre,td7total )rom clientes as c :oin (select )7<,

(select sum(d7precio<cantidad) )rom 0etalles as d -here )7numero4d7numero)actura) as total )rom )acturas as )) as td on td7codigocliente4c7codigo;

)a consulta anterior retorna, de la tabla derivada (re erenciada con ItdI) el n(mero de actura " el monto total, " de la tabla IclientesI, el nombre del cliente. 2ote que este I-oinI no emplea 6 tablas, sino una tabla propiamente dicha " una tabla derivada, que es en realidad una subconsulta S(@C&$S(LTA ,(P*AT! I *!L!T!-

.i-imos que podemos emplear subconsultas en sentencias IinsertI, IupdateI, IdeleteI, adems de IselectI. )a sinta*is bsica para reali!ar actuali!aciones con subconsulta es la siguiente%
update *$+,$ set #$%&'421.6'6$,'/ -here #$%&'4 ((1+#'2(1,*$);

Actuali!amos el precio de todos los libros de editorial IEmeceI%


update libros set precio4precio?(precio<071) -here codigoeditorial4 (select codigo )rom editoriales -here nombre45.mece5);

)a subconsulta retorna un (nico valor. =ambiBn podemos hacerlo con un -oin. )a sinta*is bsica para reali!ar eliminaciones con subconsulta es la siguiente%
delete )rom *$+,$ -here #$%&' in ((1+#'2(1,*$);

Eliminamos todos los libros de las editoriales que tiene publicados libros de IYuan $ere!I%
delete )rom libros -here codigoeditorial in (select e7codigo )rom editoriales as e :oin libros on codigoeditorial4e7codigo -here autor45@uan &ere=5);

)a subconsulta es una combinaci#n que retorna una lista de valores que la consulta e*terna emplea al seleccionar los registros para la eliminaci#n. S(@C&$S(LTA ,I$S!#T-

Aprendimos que una subconsulta puede estar dentro de un IselectI, IupdateI " IdeleteIW tambiBn puede estar dentro de un IinsertI. $odemos ingresar registros en una tabla empleando un IselectI. )a sinta*is bsica es la siguiente%
insert into *$+,$.2A1.(. 2B/.($ (#$%&'(*$+,$1) select (#$%&'(*$+,$#'2(1,*$0$) )rom *$+,$#'2(1,*$0$;

+n pro esor almacena las notas de sus alumnos en una tabla llamada IalumnosI. =iene otra tabla llamada IaprobadosI, con algunos campos iguales a la tabla IalumnosI pero en ella solamente almacenar los alumnos que han aprobado el ciclo. Ingresamos registros en la tabla IaprobadosI seleccionando registros de la tabla IalumnosI%
insert into aprobados (documento,nota) select (documento,nota) )rom alumnos;

Entonces, se puede insertar registros en una tabla con la salida devuelta por una consulta a otra tablaW para ello escribimos la consulta " le anteponemos Iinsert intoI -unto al nombre de la tabla en la cual ingresaremos los registros " los campos que se cargarn (si se ingresan todos los campos no es necesario listarlos). )a cantidad de columnas devueltas en la consulta debe ser la misma que la cantidad de campos a cargar en el IinsertI. /e pueden insertar valores en una tabla con el resultado de una consulta que inclu"a cualquier tipo de I-oinI. 9e erencia% http%JJ'''.postgresql"a.com.arJinde*.phpDinicioL3K +ltima consulta 65 dic 6K@@.

Das könnte Ihnen auch gefallen