Guia Postgres I
Guia Postgres I
Postgres
Nivel I
UNEWEB
Índice
Conceptos básicos de bases de datos. 3
Base de datos 3
Tabla 3
Modelo Entidad-Relación 4
SQL Estándar 6
Introducción a postgresql. 7
Características y Ventajas 7
CRUD-CREATE 22
UNEWEB Página 1
Insertar datos en una tabla 24
CRUD-READ 27
CRUD- UPDATE 29
DELETE-CRUD 31
TRUNCATE TABLE 32
Integridad referencial. 33
Clave Primaria 33
Funciones de agrupamiento. 39
Operadores Relacionales 40
Operadores lógicos 41
UNEWEB Página 2
Conceptos básicos de bases de datos.
Para asegurar la mayor retención de los contenidos que en este curso se verán a
continuación, es importante tener conocimientos básicos en teoría de bases de datos, he
aquí un breve repaso.
Base de Datos:
Una base de datos es un “almacén” que nos permite guardar grandes cantidades de
información de forma organizada para que luego podamos encontrarla y utilizarla fácilmente.
Tabla:
Se refiere al tipo de modelado de datos, donde se guardan los datos recogidos por un
programa. Su estructura general se asemeja a la vista general de un programa de Hoja de
cálculo.
Registro: es cada una de las filas en que se divide la tabla. Cada registro contiene
datos de los mismos tipos que los demás registros. Ejemplo: en una tabla de
nombres y direcciones, cada fila contendrá un nombre y una dirección.
Campo: es cada una de las columnas que forman la tabla. Contienen datos de tipo
diferente a los de otros campos. En el ejemplo anterior, un campo contendrá un
tipo de datos único, como una dirección, o un número de teléfono, un nombre, etc.
UNEWEB Página 3
Diferencias entre registro y campo
Los campos y los registros son dos componentes básicos de una base de datos, que es una
colección organizada de información, o datos. El término "campos" se refiere a columnas, o
categorías verticales de datos. El término "registros" se refiere a las filas, o agrupaciones
horizontales de datos de campo.
Los diagramas o modelos entidad-relación (denominado por su siglas, ERD “Diagram Entity
relationship”) son una herramienta para el modelado de datos de un sistema de información.
Estos modelos expresan entidades relevantes para un sistema de información, sus inter-
relaciones y propiedades.
Una Entidad es un objeto del mundo real sobre el que se quiere almacenar
información (Ej: una persona). Las entidades están compuestas de atributos que son
los datos que definen el objeto (para la entidad persona serían ci, nombre, apellidos,
dirección,...). Entre los atributos habrá uno o un conjunto de ellos que no se repite; a
este atributo o conjunto de atributos se le llama clave de la entidad, (para la entidad
persona una clave seria CI).
Un Atributo es aquel que define las propiedades de una entidad (Ej: los atributos de
una persona son: nombre, apellido, edad, estatura, peso, etc).
Una Relación es una asociación entre entidades. Las relaciones pueden ser de tres
tipos:
UNEWEB Página 4
relación MATRIMONIO).
Relaciones uno a muchos (1:N): Una ocurrencia de una entidad está asociada
con muchas (n) de otra (Ej: la entidad EMPRESA, la entidad TRABAJADOR y entre
ellos la relación TRABAJAR-EN).
Relaciones muchos a muchos (N:N).-Cada ocurrencia, en cualquiera de las dos
entidades de la relación, puede estar asociada con muchas (N) de la otra y
viceversa (Ej: la entidad ALUMNO, la entidad ASIGNATURA y entre ellos la
relación MATRÍCULA).
Símbolo Significado
Entidad
Relación
UNEWEB Página 5
(1:1) (1:N) Relación uno a muchos
Atributo
Atributo Clave
SQL Estándar
Como en el caso de los más modernos lenguajes relacionales, SQL está basado en el
cálculo relacional de tuplas. Como resultado, toda consulta formulada utilizando el cálculo
relacional de tuplas (o su equivalente, el álgebra relacional) se pude formular también
utilizando SQL.
En resumen, SQL nos permite realizar consultas a nuestras bases de datos para
mostrar, insertar, actualizar y borrar datos.
UNEWEB Página 6
Introducción a postgreSQL
Características y Ventajas
Clases
Herencia
Tipos
Funciones
Restricciones (Constraints)
Disparadores (triggers)
Reglas (rules)
Integridad transaccional
UNEWEB Página 7
Estas características colocan a Postgres en la categoría de las Bases de Datos
identificadas como objeto-relacionales.
Los tipos internos han sido mejorados, incluyendo nuevos tipos de fecha/hora de
rango amplio y soporte para tipos geométricos adicionales.
UNEWEB Página 8
Otros Sistemas de Gestión de Bases de Datos
SGBD libres
Firebird
SQLite ([Link] Licencia Dominio Público
DB2 Express-C ([Link]
Apache Derby ([Link]
MariaDB ([Link]
MySQL ([Link]
SGBD no libres
UNEWEB Página 9
SGBD no libres y gratuitos
Los pasos para instalar PostgreSql en Linux o Windows son los siguientes:
Como el programa se grabó sin permisos de ejecución en Linux hay que definir
este permiso antes de arrancar el programa, esto se hace de la siguiente manera:
chmod +x [Link]
sudo ./[Link]
UNEWEB Página 10
Para el caso de Windows:
En el siguiente paso tendremos que definir el directorio donde se van a instalar todos
los programas que vienen con esta versión de PostgreSQL. En nuestro caso,
utilizaremos el valor por defecto que el programa nos sugiere. /opt/PostgreSQL/9.x en
Linux y c:\\Program Files\PostgreSQL\9.x en Windows.
UNEWEB Página 11
En este paso tenemos que definir el directorio de datos en donde se crearán las bases
de datos. De nuevo, en nuestro caso utilizaremos el valor por defecto que el programa
nos sugiere. /opt/PostgreSQL/9.x/data en linux y c:\\Program
Files\PostgreSQL\9.x\data en Windows.
En este paso hay que definir una clave de acceso para el usuario administrador de
nuestra base de datos PostgreSQL.
UNEWEB Página 12
Ahora hay que especificar el puerto que PostgreSQL utilizará para escuchar por
conexiones. En nuestro caso dejamos el valor por defecto, 5432.
Una vez que hemos terminado con los pasos básicos, el programa entra en la sección
de opciones avanzadas. En este paso tenemos que decidir la 'Configuración Regional'
que queremos utilizar:
UNEWEB Página 13
Pulsamos por última vez "Siguiente" y esperamos a que el programa termine de
instalar todo:
Una vez terminada la instalación, podremos salir del instalador pulsando "Terminar".
En este último paso el instalador nos da la opción de arrancar automáticamente un
programa llamado "Stack Builder". En nuestro caso no vamos a ver nada relacionado
con "Stack Builder" y por eso borramos la elección de arrancarlo automáticamente
antes de pulsar "Terminar".
UNEWEB Página 14
Acceder a la consola de postgres (psql shell).
Caso Windows:
Si hicimos la instalación por defecto estará dentro de la carpeta de nuestro disco duro
en archivos de programa (Program Files x86).
Una vez dentro de la carpeta scripts, le damos doble clic al archivo runpsql, y ya
estaremos en la consola de comandos de postgres.
Allí ingresaremos los datos que hemos configurado, en el caso de solo haber puesto
una clave al momento de la instalación, no ingresar datos en las secciones
especificadas a continuación, solo debemos pulsar la tecla enter:
o server [localhost],
o Database [postgres],
o port [5432],
o username [postgres].
UNEWEB Página 15
Caso Linux:
Si hicimos la instalación por defecto, solo tenemos el usuario postgres por lo tanto
escribiríamos lo siguiente: psql –U postgres –W –h localhost presionamos enter y
colocamos la contraseña que definimos al momento de la instalación.
\d ----> Te muestra las relaciones (tablas, secuencias, etc.) existentes en la base de datos.
\d [nombre_tabla] ---> Para ver la descripción (nombre de columnas, tipo de datos, etc.) de
una tabla.
UNEWEB Página 16
SHOW search_path; ---> Para ver la ruta de búsqueda actual.
Ejemplo:
Podemos eliminar una o muchas bases de datos con el comando DROP DATABASE
utilizándolo de esta manera:
NOTA: Es importante el uso del parámetro IF EXISTS a la hora de ejecutar las consultas, ya
que cuando intentas borrar una base de datos que no existe ocurrirá un error.
UNEWEB Página 17
Para evitar este error podemos agregar este parámetro a la sentencia DROP y así hacer que
la sentencia no conlleve a errores si existen o no las bases de datos que queremos borrar.
Ejemplo:
En este caso si la tabla existe la borra y si no existe el sistema te advierte que no existe la
tabla, pero la consulta no arroja un error.
Ejemplo:
Para poder usar o crear tablas dentro de una base de datos, primero debemos seleccionarla
o conectarnos con ella usando el comando:
\c nombreBD;
Ejemplo:
\c curso_pg;
UNEWEB Página 18
Tipos de datos soportados por postgresql.
UNEWEB Página 19
simple (4 bytes)
smallint int2 entero con signo de dos bytes
serial serial4 entero autoincremental de cuatro bytes
text cadena de caracteres de longitud variable
time [ (p) ] [ without time zone hora del día (sin zona horaria)
]
time [ (p) ] with time zone timetz hora del día, incluyendo zona horaria
timestamp [ (p) ] [ without time fecha y hora (sin zona horaria)
zone ]
timestamp [ (p) ] with time timestamptz fecha y hora, incluyendo zona horaria
zone
tsquery consulta de búsqueda de texto
tsvector documento de búsqueda de texto
txid_snapshot instantánea de ID de transacción a nivel de
usuario
uuid identificador universalmente único
xml datos XML
nombre_campo1 tipo_de_dato,
...
nombre_campoN tipo_de_dato
);
UNEWEB Página 20
Describir la estructura de una tabla:
\d nombre_tabla;
La sintaxis básica de ALTER TABLE para añadir una nueva columna en una tabla existente
es la siguiente:
La sintaxis básica de ALTER TABLE para DROP COLUMNA en una tabla existente es la
siguiente:
La sintaxis básica de ALTER TABLE para cambiar el TIPO DE DATOS de una columna de
una tabla es la siguiente:
La sintaxis básica de ALTER TABLE para añadir un NOT NULL restricción a una columna
de una tabla es la siguiente:
UNEWEB Página 21
Operaciones elementales en las bases de datos (CRUD).
CRUD-CREATE
CREATE es la sentencia utilizada para la creación de tablas dentro de una base de datos,
corresponde a la primera de las acciones elementales de las bases de datos siendo la letra C
la que la identifica dentro de la palabra CRUD.
nombre_campo1 tipo_de_dato,
...
nombre_campoN tipo_de_dato
);
Ejemplo:
nombre varchar(50),
apellido varchar(50),
direccion varchar(100)
);
UNEWEB Página 22
Consideraciones:
Cada campo con su tipo debe separarse con comas, excepto el último.
Cuando se crea una tabla debemos indicar su nombre y definir al menos un campo
con su tipo de dato.
Si intentamos crear una tabla con cuyo nombre ya existe mostrará un mensaje
indicando que ya hay una tabla con ese nombre en la base de datos.
NOTA:
Cuando tenemos que crear una tabla debemos pensar en sus campos y en el tipo de datos
que los representará.
Podemos crear una tabla de prueba para poner en práctica algunos de los tipos de datos
más utilizados en la actualidad.
campoBool bool,
campoChar char(5),
campoMoney money,
campoDate date,
campoTime time,
campoTimestamp timestamp,
campoReal real,
campoText text
);
UNEWEB Página 23
En el caso de crear una tabla para empleados:
cedula INT,
nombre VARCHAR(30),
apellido VARCHAR(30),
cargo VARCHAR(30),
tiempo_servicio INT
);
Permite agregar una o más filas a una tabla en una base de datos relacional. La sintaxis
básica es la siguiente:
UNEWEB Página 24
Veamos por partes que quiere decir cada una de las partes que conforman la
sentencia:
Significado
INSERT Palabra clave que indica que la sentencia de SQL que se quiere insertar datos
en la Base de Datos.
INTO Indica la tabla en la que se quiere insertar los datos, señalando cada uno de
los campos de la tabla.
VALUES Indica los valores que se van a insertar para cada campo.
Notas:
Un registro es una fila de la tabla que contiene los datos propiamente dichos. Cada registro
tiene un dato por cada columna.
Al ingresar los datos de cada registro debe tenerse en cuenta la cantidad y el orden de los
campos.
UNEWEB Página 25
También podemos insertar varios registros en una sola sentencia como vemos a
continuación:
(12345632,„Maria‟,‟Ortiz‟,‟Computista‟,14),
(9345728,„Juana‟,‟Cabrera‟,‟Contadora‟,8)
Usamos “INSERT INTO”. Especificamos los nombres de los campos entre paréntesis y
separados por comas y luego los valores para cada campo, también entre paréntesis y
separados por comas.
Es importante ingresar los valores en el mismo orden en que se nombran los campos, si
ingresamos los datos en otro orden, nos aparece un mensaje de error y los datos se guardan
de modo incorrecto o simplemente no llegan a guardarse.
Note que los datos ingresados, como corresponden a campos de cadenas de caracteres se
colocan entre comillas simples. Las comillas simples son OBLIGATORIAS, mientras que los
datos numéricos podemos escribirlos sin o con comillas.
Con la sentencia SELECT podemos seleccionar los datos de una tabla, esta sentencia se
explicara con más detalle en la sección siguiente.
UNEWEB Página 26
CRUD-READ
En este tema hablaremos de la sintaxis de la sentencia Select y uso básico de la misma, que
nos permite seleccionar registros que cumplan con algunas características que
especifiquemos en dicha sentencia. Corresponde a la segunda sigla (la R) de la abreviatura
CRUD cuyo significado es READ.
Veamos por partes que quiere decir cada una de las partes que conforman la
sentencia:
Significado
SELECT Palabra clave que indica que la sentencia de SQL que se quiere ejecutar es
de selección.
FROM Indica la tabla (o tablas) desde la que queremos recuperar los datos.
Notas:
UNEWEB Página 27
Podemos especificar el nombre de los campos de la tabla empleados que queremos ver
separándolos por comas:
Como podemos ver podemos decidir incluso el orden en que se mostrarán los campos
solicitados.
Hemos aprendido cómo ver todos los registros de una tabla. Pero podemos aplicar ciertas
condiciones para realizar una búsqueda más específica.
Existe una cláusula, "WHERE" que es opcional, con ella podemos especificar condiciones
para la consulta "SELECT". Es decir, podemos recuperar algunos registros, sólo los que
cumplan con ciertas condiciones indicadas con la cláusula "WHERE". Por ejemplo, queremos
ver el usuario cuyo nombre es "Mario", para ello utilizamos "WHERE" y luego de ella, la
condición:
Para las condiciones se utilizan operadores relacionales. El signo igual (=) es un operador
relacional. Para la siguiente selección de registros especificamos una condición que solicita
los usuarios cuya cedula es igual a 17675823:
UNEWEB Página 28
CRUD- UPDATE
En este tema explicaremos el uso de la sentencia Update que nos permite actualizar datos
de uno o más registros en tablas, esta sentencia que modifica datos existentes es usada con
mucha frecuencia y suele combinarse con otras palabras reservadas para lograr su objetivo.
Representa la letra U de la palabra CRUD.
Veamos por partes que quiere decir cada una de las partes que conforman la
sentencia:
Significado
UPDATE Palabra clave que indica que la sentencia de SQL que se quiere ejecutar es
de actualizar.
Para modificar uno o varios datos de uno o varios registros utilizamos "UPDATE" (actualizar).
Por ejemplo, en nuestra tabla "empleados", queremos cambiar los valores de todos los años
de servicio, por "6":
UNEWEB Página 29
UPDATE empleados SET tiempo_servicio=6;
Utilizamos "UPDATE" junto al nombre de la tabla y "set" junto con el campo a modificar y su
nuevo valor.
El cambio afectará a todos los registros.
Podemos modificar algunos registros, para ello debemos establecer condiciones de selección
con "WHERE".
Por ejemplo, queremos cambiar el valor correspondiente al tiempo de servicio del empleado
llamado 'Mario', queremos como nuevo tiempo de servicio “4”, necesitamos una condición
"WHERE" que afecte solamente a este registro:
Si no encuentra registros que cumplan con la condición del "WHERE", ningún registro es
afectado.
Las condiciones no son obligatorias, pero si omitimos la cláusula "WHERE", la actualización
afectará a todos los registros.
También se puede actualizar varios campos en una sola Instrucción:
Para ello colocamos "UPDATE", el nombre de la tabla, "SET" junto al nombre del campo y el
nuevo valor y separado por coma, el otro nombre del campo con su nuevo valor.
UNEWEB Página 30
DELETE-CRUD
El uso de la sentencia Delete que nos permite borrar filas de uno o más registros en tablas,
esta sentencia que borra datos existentes es usada con mucha frecuencia y suele
combinarse con otras palabras reservadas para lograr su objetivo. Explicaremos la diferencia
en el uso de sentencias similares como DROP y TRNCATE Esta sentencia representa la letra
D de la palabra CRUD.
Borra uno o más registros existentes en una tabla.. La sintaxis básica es la siguiente:
Veamos por partes que quiere decir cada una de las partes que conforman la
sentencia:
Significado
DELETE Palabra clave que indica que la sentencia de SQL que se quiere ejecutar es
de borrar.
FROM Indica la tabla (o tablas) desde la que queremos borrar los datos.
Nota:
UNEWEB Página 31
Notas:
TRUNCATE TABLE
Aprendimos que para borrar todos los registro de una tabla se usa "DELETE" sin condición
"WHERE".
También podemos eliminar todos los registros de una tabla con "TRUNCATE TABLE". Por
ejemplo, queremos vaciar la tabla "proveedores", usamos:
La sentencia "TRUNCATE TABLE" vacía la tabla (elimina todos los registros) y vuelve
a crear la tabla con la misma estructura.
La diferencia con "DROP TABLE" es que esta sentencia borra la tabla, "TRUNCATE
TABLE" la vacía.
La diferencia con "DELETE" es la velocidad, es más rápido "TRUNCATE TABLE" que
"DELETE" (se nota cuando la cantidad de registros es muy grande) ya que éste borra los
registros uno a uno.
Otra diferencia es la siguiente: cuando la tabla tiene un campo "AUTO_INCREMENT",
si borramos todos los registros con "DELETE" y luego ingresamos un registro, al cargarse el
valor en el campo autoincrementable, continúa con la secuencia teniendo en cuenta el valor
mayor que se había guardado; si usamos "TRUNCATE TABLE" para borrar todos los
registros, al ingresar otra vez un registro, la secuencia del campo autoincrementable vuelve a
iniciarse en 1.
Por ejemplo, tenemos la tabla "cuadernos" con el campo "codigo" definido "serial", y el
valor más alto de ese campo es "5", si borramos todos los registros con "DELETE" y luego
ingresamos un registro sin valor de código, se guardará el valor "6"; si en cambio, vaciamos
la tabla con "TRUNCATE TABLE", al ingresar un nuevo registro sin valor para el código,
iniciará la secuencia en 1 nuevamente.
UNEWEB Página 32
Integridad referencial
Es un conjunto de reglas que utilizan las Bases de Datos para asegurar que las filas
(registros) de las tablas relacionadas son válidos y que no se borren o cambien datos
relacionados de forma accidental produciendo errores. Gracias a la integridad referencial se
garantiza que un registro siempre se relacione con otras entidades válidas, es decir, que
existen en la base de datos.
Clave Primaria
Una clave primaria es una clave que ha sido diseñada para identificar de manera única
a los registros de una tabla. La selección de una clave primaria es muy importante en el
diseño de una base de datos, ya que es un elemento clave de los datos que facilita la unión
de tablas y el concepto total de una base de datos relacional. Las claves primarias deben ser
únicas y no nulas.
Si tenemos por ejemplo la tabla 'Libros' cuyos atributos son: código, titulo, autor y precio;
vemos que puede establecerse el código como clave primaria, ya que, su valor no se repite.
);
UNEWEB Página 33
CREATE TABLE libros(
codigo varchar(10),
titulo varchar(40),
autor varchar(20),
precio decimal(4,2),
primary key(codigo)
);
Como vemos, lo que se hace para definir una clave primaria es agregar 'primary key' y
entre paréntesis el nombre del campo que será la clave. Una tabla sólo puede tener una
clave primaria. Cualquier campo (de cualquier tipo) puede ser clave primaria, debe cumplir
como requisito, que sus valores no se repitan ni sean nulos.
Por eso se debe tener mucho cuidado a la hora de insertar datos en una clave primaria.
Esta característica la posee de manera implícita el tipo de dato SERIAL el cual es muy usado
como tipo de dato para las claves primarias
UNEWEB Página 34
En este ejemplo vamos a crear una tabla con una clave primaria así como también haremos
una inserción en la misma.
codigo serial,
titulo varchar(40),
autor varchar(20),
precio money,
primary key(codigo)
);
A la hora de insertar datos en esta tabla no debemos preocuparnos por insertar datos en el
campo de código porque corresponde al tipo de dato serial.
Si seleccionamos los datos de la tabla cuentos nos daremos cuenta que el sistema
automáticamente colocó un valor automático al campo código que es una clave primaria sin
necesidad de nosotros insertarlo.
UNEWEB Página 35
Clave Foránea o referenciada
Una clave foránea es simplemente un campo en una tabla que se corresponde con la
clave primaria de otra tabla.
Por ejemplo: Si al ejemplo de la tabla 'Libros' le agregamos las editoriales de los libros
cuyos campos son: código y nombre; pudieramos decir que la tabla 'Libros' puede tener una
clave foránea llamada 'codEditorial' para enlazar los libros con las editoriales. Gráficamente
sería así:
1:1 0:N
LIBRO pertenece EDITORIAL
UNEWEB Página 36
foreign key(nombre_campo) references tabla (campo)
);
Por ejemplo: Tomando en cuenta la tabla 'Libros' con sus atributos y la tabla 'Editorial'
con sus atributos, definiríamos en Postgres9.x la relación de la siguiente manera:
); precio numeric(4,2),
codEditorial varchar(10),
primary key(codigo),
);
Las claves foráneas y las claves primarias deben ser del mismo tipo para poder
enlazarse. En conclusión, una clave foránea es un campo empleado para enlazar datos de 2
tablas.
UNEWEB Página 37
Uso de la Acción CASCADE
Esta acción borra o actualiza automáticamente todas las referencias activas. Para
borrar o actualizar los registros se requiere que la tabla que utilice esta acción cuente con
claves foráneas. Por ejemplo:
codigo serial,
titulo varchar(40),
autor varchar(20),
precio numeric(4,2),
codEditorial serial,
primary key(codigo),
);
¿Cómo identificar las claves foráneas?¿En qué tabla se define una clave foránea?
Para cada entidad del esquema se creará una tabla con tantos campos como atributos
tenga la entidad. Un atributo será clave foránea cuando se requiera tener información
asociada de otra tabla.
UNEWEB Página 38
Relación 1-1 se pueden reflejar incluyendo en una de las dos tablas un campo en el
que poder colocar la clave del elemento de la otra tabla con el que se está
relacionado. Ese nuevo campo sería una clave foránea.
Relación 1-N se representan de forma muy parecida a como se ha explicado para las
relaciones 1-1. La diferencia está en que ahora no es indiferente donde se coloque la
clave foránea, esta debe estar obligatoriamente en la tabla de 'uno' (1); y además,
para este caso si se permitirá que haya valores repetidos en dicho campo.
Para representar la Relación N-N en tablas lo que se hace es crear una nueva tabla
solamente para la relación. Esta nueva tabla tendrá dos claves foráneas y su propia
clave estará formada por la unión de las claves foráneas.
Funciones de agrupamiento
Son funciones que se utilizan para determinar estadísticas relacionas con un conjunto
de valores. Dentro de las más utilizadas se pueden nombrar:
UNEWEB Página 39
SUM (Sumas o Totales)
COUNT
Devuelve el número de filas que cumplen con una consulta. La sintaxis es la siguiente:
AVG
Retorna el valor promedio de un campo especificado.
Operadores lógicos
Los operadores lógicos son aquellos que permiten establecer una combinación de
condiciones en una consulta a la Base de Datos. Dentro de los utilizados en Postgres9.1 se
pueden nombrar:
Por ejemplo: Si queremos mostrar todos los libros cuyo autor sea igual a "Borges" y
cuyo precio no supere los 20 bolívares, necesitamos 2 condiciones:
UNEWEB Página 40
Operadores Relacionales
Los operadores relacionales (o de comparación) permiten comparar dos expresiones,
que pueden ser valores de campos. Hemos utilizado condiciones de igualdad para
seleccionar registros de una tabla, por ejemplo:
Operador Significado
= igual
<> distinto
> mayor
< menor
Se pueden seleccionar también, por ejemplo, los registros cuyo autor sea diferente de
"Borges", para ello usamos la condición:
Se pueden comparar valores numéricos. Por ejemplo, si se quieren mostrar los títulos
y precios de los libros cuyo precio sea mayor a 20 bolívares:
UNEWEB Página 41