SlideShare una empresa de Scribd logo
Laboratorio de Sistemas de Información Administrativos                       Página 1


2.4. El Lenguaje SQL
Como en el caso de los más modernos lenguajes relacionales, SQL está basado en elcálculo
relacional de tuplas. Como resultado, toda consulta formulada utilizando elcálculo
relacional de tuplas (o su equivalente, el álgebra relacional) se pude formulartambién
utilizando SQL. Hay, sin embargo, capacidades que van más allá del cálculo odel álgebra
relaciona. Aquí tenemos una lista de algunas características proporcionadaspor SQL que no
forman parte del álgebra y del cálculo relacional:
• Comandos para inserción, borrado o modificación de datos.
• Capacidades aritméticas: En SQL es posible incluir operaciones aritméticas asícomo
comparaciones, por ejemplo A < B + 3. Nótese que ni + ni otros operadoresaritméticos
aparecían en el álgebra relacional ni en cálculo relacional.
• Asignación y comandos de impresión: es posible imprimir una relación construidapor una
consulta y asignar una relación calculada a un nombre de relación.
• Funciones agregadas: Operaciones tales como promedio (average), suma (sum),máximo
(max), etc. se pueden aplicar a las columnas de una relación para obteneruna cantidad
única.

2.4.1. Select
El comando más usado en SQL es la instrucción SELECT, que se utiliza para
recuperardatos. La sintaxis es:

               SELECT [ALL|DISTINCT]
               { * | expr_1 [AS c_alias_1] [, ...
               [, expr_k [AS c_alias_k]]]}
               FROM table_name_1 [t_alias_1]
               [, ... [, table_name_n [t_alias_n]]]
               [WHERE condition]
               [GROUP BY name_of_attr_i
               [,... [, name_of_attr_j]] [HAVING condition]]
               [{UNION [ALL] | INTERSECT | EXCEPT} SELECT ...]
               [ORDER BY name_of_attr_i [ASC|DESC]
               [, ... [, name_of_attr_j [ASC|DESC]]]];

Ilustraremos ahora la compleja sintaxis de la instrucción SELECT con varios ejemplos.
Las tablas utilizadas para los ejemplos se definen en: La Base de Datos de Proveedoresy
Artículos.

2.4.1.1. Select sencillas

Aquí tenemos algunos ejemplos sencillos utilizando la instrucción SELECT:

Ejemplo 2-4. Query sencilla con cualificación

Para recuperar todas las tuplas de la tabla PART donde el atributo PRICE es mayor que
10, formularemos la siguiente consulta:
              SELECT * FROM PART
              WHERE PRICE > 10;
Ing. Mary Ruelas Llerena                                             Segunda Unidad
Laboratorio de Sistemas de Información Administrativos                     Página 2


y obtenemos la siguiente tabla:

               PNO | PNAME | PRICE
               ---+---------+-----
               3 | Cerrojos | 15
               4 | Levas | 25

Utilizando "*" en la instrucción SELECT solicitaremos todos los atributos de la tabla.
Si queremos recuperar sólo los atributos PNAME y PRICE de la tabla PARTutilizaremos la
instrucción:
              SELECT PNAME, PRICE
              FROM PART
              WHERE PRICE > 10;

En este caso el resultado es:

               PNAME | PRICE
               --------+-----
               Cerrojos | 15
               Levas | 25

Las cualificaciones en la clausula WHERE pueden                  también    conectarse
lógicamenteutilizando las palabras claves OR, AND, y NOT:

               SELECT PNAME, PRICE
               FROM PART
               WHERE PNAME = ’Cerrojos’ AND
               (PRICE = 0 OR PRICE < 15);

dará como resultado:
              PNAME | PRICE
              --------+-----
              Cerrojos | 15

Las operaciones aritméticas se pueden utilizar en la lista de objetivos y en la
clausulaWHERE. Por ejemplo, si queremos conocer cuánto cuestan si tomamos dos piezas
deun artículo, podríamos utilizar la siguiente consulta:
               SELECT PNAME, PRICE * 2 AS DOUBLE
               FROM PART
               WHERE PRICE * 2 < 50;

y obtenemos:
               PNAME | DOUBLE
               --------+------
               Tornillos | 20
               Tuercas | 16
               Cerrojos | 30
Ing. Mary Ruelas Llerena                                           Segunda Unidad
Laboratorio de Sistemas de Información Administrativos                        Página 3


Nótese que la palabra DOBLE tras la palabra clave AS es el nuevo título de la
segundacolumna. Esta técnica puede utilizarse para cada elemento de la lista objetivo
paraasignar un nuevo título a la columna resultante. Este nuevo título recibe el
calificativode "un alias". El alias no puede utilizarse en todo el resto de la consulta.

2.4.1.2. Joins (Cruces)

El siguiente ejemplo muestra como las joins (cruces) se realizan en SQL.
Para cruzar tres tablas SUPPLIER, PART y SELLS a través de sus atributos
comunes,formularemos la siguiente instrucción:
               SELECT S.SNAME, P.PNAME
               FROM SUPPLIER S, PART P, SELLS SE
               WHERE S.SNO = SE.SNO AND
               P.PNO = SE.PNO;

y obtendremos la siguiente tabla como resultado:
             SNAME | PNAME
             -----+-----
             Smith | Tornillos
             Smith | Tuercas
             Jones | Levas
             Adams | Tornillos
             Adams | Cerrojos
             Blake | Tuercas
             Blake | Cerrojos
             Blake | Levas

En la clausula FROM hemos introducido un alias al nombre para cada relación porquehay
atributos con nombre común (SNO y PNO) en las relaciones. Ahora podemosdistinguir
entre los atributos con nombre común simplificando la adicción de un prefijoal nombre del
atributo con el nombre del alias seguido de un punto. La join se calculade la misma forma,
tal como se muestra en Una Inner Join (Una Join Interna). Primeroel producto cartesiano:
SUPPLIER _ PART _ SELLS Ahora seleccionamosúnicamente aquellas tuplas que
satisfagan las condiciones dadas en la clausulaWHERE (es decir, los atributos con nombre
común deben ser iguales). Finalmenteeliminamos las columnas repetidas (S.SNAME,
P.PNAME).

2.4.1.3. Operadores Agregados
SQL proporciona operadores agregados (como son AVG, COUNT, SUM, MIN, MAX)que
toman el nombre de un atributo como argumento. El valor del operador agregadose calcula
sobre todos los valores de la columna especificada en la tabla completa. Si seespecifican
grupos en la consulta, el cálculo se hace sólo sobre los valores de cadagrupo (vean la
siguiente sección).

Ejemplo 2-5. Aggregates
Si queremos conocer el coste promedio de todos los artículos de la tabla PART,utilizaremos
la siguiente consulta:
Ing. Mary Ruelas Llerena                                              Segunda Unidad
Laboratorio de Sistemas de Información Administrativos                       Página 4


              SELECT AVG(PRICE) AS AVG_PRICE
              FROM PART;

El resultado es:
               AVG_PRICE
               -------
               14.5

Si queremos conocer cuántos artículos se recogen en la tabla PART, utilizaremos
lainstrucción:
               SELECT COUNT(PNO)
               FROM PART;

y obtendremos:
             COUNT
             -----
             4

2.4.1.4. Agregación por Grupos

SQL nos permite particionar las tuplas de una tabla en grupos. En estas condiciones,los
operadores agregados descritos antes pueden aplicarse a los grupos (es decir, elvalor del
operador agregado no se calculan sobre todos los valores de la columnaespecificada, sino
sobre todos los valores de un grupo. El operador agregado se calculaindividualmente para
cada grupo).
El particionamiento de las tuplas en grupos se hace utilizando las palabras claveGROUP
BY seguidas de una lista de atributos que definen los grupos. Si tenemosGROUP BY A1,
..., Ak habremos particionado la relación en grupos, de tal modo quedos tuplas son del
mismo grupo si y sólo si tienen el mismo valor en sus atributos A1,..., Ak.

Ejemplo 2-6. Agregados
Si queremos conocer cuántos artículos han sido vendidos por cada proveedor
formularemos la consulta:
             SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
             FROM SUPPLIER S, SELLS SE
             WHERE S.SNO = SE.SNO
             GROUP BY S.SNO, S.SNAME;

y obtendremos:
             SNO | SNAME | COUNT
             ---+-----+-----
             1 | Smith | 2
             2 | Jones | 1
             3 | Adams | 2
             4 | Blake | 3



Ing. Mary Ruelas Llerena                                             Segunda Unidad
Laboratorio de Sistemas de Información Administrativos                        Página 5


Demos ahora una mirada a lo que está ocurriendo aquí. Primero, la join de las
tablasSUPPLIER y SELLS:
            S.SNO | S.SNAME | SE.PNO
            -----+------+-----
            1 | Smith | 1
            1 | Smith | 2
            2 | Jones | 4
            3 | Adams | 1
            3 | Adams | 3
            4 | Blake | 2
            4 | Blake | 3
            4 | Blake | 4

Ahora particionamos las tuplas en grupos reuniendo todas las tuplas que tiene el
mismoatributo en S.SNO y S.SNAME:
              S.SNO | S.SNAME | SE.PNO
              -----+------+-----
1 | Smith | 1
|2
              -----------------
              2 | Jones | 4
              -----------------
              3 | Adams | 1
              |3
              -----------------
              4 | Blake | 2
                                |3
              |4

En nuestro ejemplo, obtenemos cuatro grupos y ahora podemos aplicar el operadoragregado
COUNT para cada grupo, obteniendo el resultado total de la consulta dadaanteriormente.
Nótese que para el resultado de una consulta utilizando GROUP BY y operadoresagregados
para dar sentido a los atributos agrupados, debemos primero obtener la listaobjetivo. Los
demás atributos que no aparecen en la clausula GROUP BY seseleccionarán utilizando una
función agregada. Por otro lado, no se pueden utilizarfunciones agregadas en atributos que
aparecen en la clausula GROUP BY.

2.4.1.5. Having

La clausula HAVING trabaja de forma muy parecida a la clausula WHERE, y se utilizapara
considerar sólo aquellos grupos que satisfagan la cualificación dada en la misma.
Las expresiones permitidas en la clausula HAVING deben involucrar funcionenagregadas.
Cada expresión que utilice sólo atributos planos deberá recogerse en laclausula WHERE.
Por otro lado, toda expresión que involucre funciones agregadasdebe aparecer en la
clausula HAVING.

Ejemplo 2-7. Having
Ing. Mary Ruelas Llerena                                              Segunda Unidad
Laboratorio de Sistemas de Información Administrativos                         Página 6


Si queremos solamente los proveedores que venden más de un artículo, utilizaremos
laconsulta:
            SELECT S.SNO, S.SNAME, COUNT(SE.PNO)
            FROM SUPPLIER S, SELLS SE
            WHERE S.SNO = SE.SNO
            GROUP BY S.SNO, S.SNAME
            HAVING COUNT(SE.PNO) > 1;

y obtendremos:
             SNO | SNAME | COUNT
             ---+-----+-----
             1 | Smith | 2
             3 | Adams | 2
             4 | Blake | 3

2.4.1.6. Subconsultas

En las clausulas WHERE y HAVING se permite el uso de subconsultas (subselects)
encualquier lugar donde se espere un valor. En este caso, el valor debe derivar de
laevaluación previa de la subconsulta. El uso de subconsultas amplía el poder expresivode
SQL.

Ejemplo 2-8. Subselect

Si queremos conocer los artículos que tienen mayor precio que el artículo llamado
’Tornillos’, utilizaremos la consulta:
                SELECT *
                FROM PART
                WHERE PRICE > (SELECT PRICE FROM PART
                WHERE PNAME=’Tornillos’);

El resultado será:
               PNO | PNAME | PRICE
               ---+---------+-----
               3 | Cerrojos | 15
               4 | Levas | 25

Cuando revisamos la consulta anterior, podemos ver la palabra clave SELECT dosveces. La
primera al principio de la consulta - a la que nos referiremos como laSELECT externa - y la
segunda en la clausula WHERE, donde empieza una consultaanidada - nos referiremos a
ella como la SELECT interna. Para cada tupla de laSELECT externa, la SELECT interna
deberá ser evaluada. Tras cada evaluación,conoceremos el precio de la tupla llamada
’Tornillos’, y podremos chequear si el preciode la tupla actual es mayor.
Si queremos conocer todos los proveedores que no venden ningún artículo (porejemplo,
para poderlos eliminar de la base de datos), utilizaremos:

              SELECT *
Ing. Mary Ruelas Llerena                                               Segunda Unidad
Laboratorio de Sistemas de Información Administrativos                           Página 7


              FROM SUPPLIER S
              WHERE NOT EXISTS
              (SELECT * FROM SELLS SE
              WHERE SE.SNO = S.SNO);

En nuestro ejemplo, obtendremos un resultado vacío, porque cada proveedor vende
almenos un artículo. Nótese que utilizamos S.SNO de la SELECT externa en la
clausulaWHERE de la SELECT interna. Como hemos descrito antes, la subconsulta se
evalúapara cada tupla de la consulta externa, es decir, el valor de S.SNO se toma siempre
dela tupla actual de la SELECT externa.

2.4.1.7. Unión, Intersección, Excepción

Estas operaciones calculan la unión, la intersección y la diferencia de la teoría deconjuntos
de las tuplas derivadas de dos subconsultas.

Ejemplo 2-9. Union, Intersect, Except

La siguiente consulta es un ejemplo de UNION:
               SELECT S.SNO, S.SNAME, S.CITY
               FROM SUPPLIER S
               WHERE S.SNAME = ’Jones’
               UNION
               SELECT S.SNO, S.SNAME, S.CITY
               FROM SUPPLIER S
               WHERE S.SNAME = ’Adams’;

Dará el resultado:
               SNO | SNAME | CITY
               ---+-----+-----
               2 | Jones | Paris
               3 | Adams | Vienna

Aquí tenemos un ejemplo para INTERSECT:
             SELECT S.SNO, S.SNAME, S.CITY
             FROM SUPPLIER S
             WHERE S.SNO > 1
             INTERSECT
             SELECT S.SNO, S.SNAME, S.CITY
             FROM SUPPLIER S
             WHERE S.SNO > 2;

que dará como resultado:
               SNO | SNAME | CITY
               ---+-----+-----
               2 | Jones | Paris
La única tupla devuelta por ambas partes de la consulta es la únicaque tiene $SNO=2$.
Ing. Mary Ruelas Llerena                                                Segunda Unidad
Laboratorio de Sistemas de Información Administrativos                         Página 8


Finalmente, un ejemplo de EXCEPT:
              SELECT S.SNO, S.SNAME, S.CITY
              FROM SUPPLIER S
              WHERE S.SNO > 1
              EXCEPT
              SELECT S.SNO, S.SNAME, S.CITY
              FROM SUPPLIER S
              WHERE S.SNO > 3;

que dará como resultado:
             SNO | SNAME | CITY
             ---+-----+-----
             2 | Jones | Paris
             3 | Adams | Vienna

2.4.2. Definición de Datos

El lenguaje SQL incluye un conjunto de comandos para definición de datos.

2.4.2.1. Create Table

El comando fundamental para definir datos es el que crea una nueva relación (unanueva
tabla). La sintaxis del comando CREATE TABLE es:
                CREATE TABLE table_name
                (name_of_attr_1 type_of_attr_1
                [, name_of_attr_2 type_of_attr_2
                [, ...]]);

Ejemplo 2-10. Creación de una tabla
Para crear las tablas definidas en La Base de Datos de Proveedores y Artículos seutilizaron
las siguientes instrucciones de SQL:
                CREATE TABLE SUPPLIER
                (SNO INTEGER,
                SNAME VARCHAR(20),
                CITY VARCHAR(20));
                CREATE TABLE PART
                (PNO INTEGER,
                PNAME VARCHAR(20),
                PRICE DECIMAL(4 , 2));
                CREATE TABLE SELLS
                (SNO INTEGER,
                PNO INTEGER);

2.4.3. Manipulación de Datos

2.4.3.1. Insert Into


Ing. Mary Ruelas Llerena                                               Segunda Unidad
Laboratorio de Sistemas de Información Administrativos                         Página 9


Una vez que se crea una tabla (vea Create Table), puede ser llenada con tuplasmediante el
comando INSERT INTO. La sintaxis es:
             INSERT INTO table_name (name_of_attr_1
             [, name_of_attr_2 [,...]])
             VALUES (val_attr_1
             [, val_attr_2 [, ...]]);

Para insertar la primera tupla en la relación SUPPLIER (de La Base de Datos
deProveedores y Artículos) utilizamos la siguiente instrucción:
              INSERT INTO SUPPLIER (SNO, SNAME, CITY)
              VALUES (1, ’Smith’, ’London’);

Para insertar la primera tupla en la relación SELLS, utilizamos:
                INSERT INTO SELLS (SNO, PNO)
                VALUES (1, 1);

2.4.3.2. Update

Para cambiar uno o más valores de atributos de tuplas en una relación, se utiliza elcomando
UPDATE. La sintaxis es:
              UPDATE table_name
              SET name_of_attr_1 = value_1
              [, ... [, name_of_attr_k = value_k]]
              WHERE condition;

Para cambiar el valor del atributo PRICE en el artículo ’Tornillos’ de la relación
PART,utilizamos:
             UPDATE PART
             SET PRICE = 15
             WHERE PNAME = ’Tornillos’;

El nuevo valor del atributo PRICE de la tupla cuyo nombre es ’Tornillos’ es ahora 15.

2.4.3.3. Delete

Para borrar una tupla de una tabla particular, utilizamos el comando DELETE FROM.
La sintaxis es:
                DELETE FROM table_name
                WHERE condition;

Para borrar el proveedor llamado ’Smith’ de la tabla SUPPLIER, utilizamos lasiguiente
instrucción:
              DELETE FROM SUPPLIER
              WHERE SNAME = ’Smith’;




Ing. Mary Ruelas Llerena                                               Segunda Unidad

Más contenido relacionado

PDF
Comandos y funciones sql postgres
DOCX
Elaborar una presentación que describa las siguientes temáticas:(1)
PPTX
Seleccion de datos_sql_2005
PPTX
Seleccion de datos_sql_2005
PDF
Guia de ejercicio sql
PDF
Resumen sql-oracle
PDF
82 Php. Ver Y Modificar Estructuras
PDF
Tablas latex
Comandos y funciones sql postgres
Elaborar una presentación que describa las siguientes temáticas:(1)
Seleccion de datos_sql_2005
Seleccion de datos_sql_2005
Guia de ejercicio sql
Resumen sql-oracle
82 Php. Ver Y Modificar Estructuras
Tablas latex

La actualidad más candente (15)

PDF
Manejo de Tablas en Latex
DOCX
Sesion06a - Manipulacion de datos (Oracle)
PPT
Consultas en sql básico
PPT
Como realizar consultas en sql (Unidad 3)
PPT
Unidad vi vii dml select
PPT
Actualización de bases de datos en MySQL
PPTX
Consultas sql 2014
PPT
Sql Consultas MáS Complejas
PDF
Comandos mysql
PDF
Consultas básicas en sql server
PPT
Sql 2010
PPT
Fundamentos sql
PPT
Consultas base de datos en SQL
PDF
Funciones basicas
PPTX
Combinacion de consultas y consultas multitablas
Manejo de Tablas en Latex
Sesion06a - Manipulacion de datos (Oracle)
Consultas en sql básico
Como realizar consultas en sql (Unidad 3)
Unidad vi vii dml select
Actualización de bases de datos en MySQL
Consultas sql 2014
Sql Consultas MáS Complejas
Comandos mysql
Consultas básicas en sql server
Sql 2010
Fundamentos sql
Consultas base de datos en SQL
Funciones basicas
Combinacion de consultas y consultas multitablas
Publicidad

Destacado (15)

DOCX
Lab 04 06
PPT
Sql Lenguaje Estructurado de Consulta
DOCX
Informe laboratorio 8
PDF
Cuellos botella en PostgreSQL
DOCX
Lenguaje de consulta de datos
PPTX
LENGUAJE DE CONSULTA ESTRUCTURADO
DOCX
Ejercicio sql tienda informatica (1)
PDF
Base de datos laboratorio
PDF
Ejercicios sql
DOC
Ejercicios De Sql (actualizado)
PDF
Ejercicios resueltos de sql
PDF
MANUAL COMPLETO DE SQL
PDF
Manual sql server parte 1
PDF
Basesde datos
PPT
Lenguaje de Manipulación de Datos
Lab 04 06
Sql Lenguaje Estructurado de Consulta
Informe laboratorio 8
Cuellos botella en PostgreSQL
Lenguaje de consulta de datos
LENGUAJE DE CONSULTA ESTRUCTURADO
Ejercicio sql tienda informatica (1)
Base de datos laboratorio
Ejercicios sql
Ejercicios De Sql (actualizado)
Ejercicios resueltos de sql
MANUAL COMPLETO DE SQL
Manual sql server parte 1
Basesde datos
Lenguaje de Manipulación de Datos
Publicidad

Similar a Sql postgres (20)

DOCX
Sentencias my sql
PPTX
Sql Sentencias
PDF
Tarea 8 consultas
PPTX
Consultas sql 2014
PPTX
MANEJO DE SENTENCIAS DE RECUPERACIÓN
PDF
Operaciones basicas de sql
DOCX
Sesion05 - Manipulacion de datos (Oracle)
PPTX
MANEJO DE SENTENCIAS DE RECUPERACIÓN
PPTX
Sentencia select
PDF
Práctica sql server [fbdr]
PDF
Consultas basicas en sql server
PPTX
Consulta sql alexandra mayorga
PPTX
14 structure query language
DOCX
Consultas select
DOCX
Consultas select
PPTX
Consultas sql
PDF
Objeto De Aprendizaje
PDF
Consultas condicionales en sq server
DOC
Anon manual sql
Sentencias my sql
Sql Sentencias
Tarea 8 consultas
Consultas sql 2014
MANEJO DE SENTENCIAS DE RECUPERACIÓN
Operaciones basicas de sql
Sesion05 - Manipulacion de datos (Oracle)
MANEJO DE SENTENCIAS DE RECUPERACIÓN
Sentencia select
Práctica sql server [fbdr]
Consultas basicas en sql server
Consulta sql alexandra mayorga
14 structure query language
Consultas select
Consultas select
Consultas sql
Objeto De Aprendizaje
Consultas condicionales en sq server
Anon manual sql

Último (20)

PDF
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
PDF
Escuela Sabática 6. A través del Mar Rojo.pdf
DOCX
Tarea De El Colegio Coding For Kids 1 y 2
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
PDF
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PDF
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
PDF
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PDF
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
PDF
Híper Mega Repaso Histológico Bloque 3.pdf
PDF
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
Escuela Sabática 6. A través del Mar Rojo.pdf
Tarea De El Colegio Coding For Kids 1 y 2
Tomo 1 de biologia gratis ultra plusenmas
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
Salcedo, J. et al. - Recomendaciones para la utilización del lenguaje inclusi...
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
ACERTIJO Súper Círculo y la clave contra el Malvado Señor de las Formas. Por ...
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
2 GRADO UNIDAD 5 - 2025.docx para primaria
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
Conecta con la Motivacion - Brian Tracy Ccesa007.pdf
Híper Mega Repaso Histológico Bloque 3.pdf
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf

Sql postgres

  • 1. Laboratorio de Sistemas de Información Administrativos Página 1 2.4. El Lenguaje SQL Como en el caso de los más modernos lenguajes relacionales, SQL está basado en elcálculo relacional de tuplas. Como resultado, toda consulta formulada utilizando elcálculo relacional de tuplas (o su equivalente, el álgebra relacional) se pude formulartambién utilizando SQL. Hay, sin embargo, capacidades que van más allá del cálculo odel álgebra relaciona. Aquí tenemos una lista de algunas características proporcionadaspor SQL que no forman parte del álgebra y del cálculo relacional: • Comandos para inserción, borrado o modificación de datos. • Capacidades aritméticas: En SQL es posible incluir operaciones aritméticas asícomo comparaciones, por ejemplo A < B + 3. Nótese que ni + ni otros operadoresaritméticos aparecían en el álgebra relacional ni en cálculo relacional. • Asignación y comandos de impresión: es posible imprimir una relación construidapor una consulta y asignar una relación calculada a un nombre de relación. • Funciones agregadas: Operaciones tales como promedio (average), suma (sum),máximo (max), etc. se pueden aplicar a las columnas de una relación para obteneruna cantidad única. 2.4.1. Select El comando más usado en SQL es la instrucción SELECT, que se utiliza para recuperardatos. La sintaxis es: SELECT [ALL|DISTINCT] { * | expr_1 [AS c_alias_1] [, ... [, expr_k [AS c_alias_k]]]} FROM table_name_1 [t_alias_1] [, ... [, table_name_n [t_alias_n]]] [WHERE condition] [GROUP BY name_of_attr_i [,... [, name_of_attr_j]] [HAVING condition]] [{UNION [ALL] | INTERSECT | EXCEPT} SELECT ...] [ORDER BY name_of_attr_i [ASC|DESC] [, ... [, name_of_attr_j [ASC|DESC]]]]; Ilustraremos ahora la compleja sintaxis de la instrucción SELECT con varios ejemplos. Las tablas utilizadas para los ejemplos se definen en: La Base de Datos de Proveedoresy Artículos. 2.4.1.1. Select sencillas Aquí tenemos algunos ejemplos sencillos utilizando la instrucción SELECT: Ejemplo 2-4. Query sencilla con cualificación Para recuperar todas las tuplas de la tabla PART donde el atributo PRICE es mayor que 10, formularemos la siguiente consulta: SELECT * FROM PART WHERE PRICE > 10; Ing. Mary Ruelas Llerena Segunda Unidad
  • 2. Laboratorio de Sistemas de Información Administrativos Página 2 y obtenemos la siguiente tabla: PNO | PNAME | PRICE ---+---------+----- 3 | Cerrojos | 15 4 | Levas | 25 Utilizando "*" en la instrucción SELECT solicitaremos todos los atributos de la tabla. Si queremos recuperar sólo los atributos PNAME y PRICE de la tabla PARTutilizaremos la instrucción: SELECT PNAME, PRICE FROM PART WHERE PRICE > 10; En este caso el resultado es: PNAME | PRICE --------+----- Cerrojos | 15 Levas | 25 Las cualificaciones en la clausula WHERE pueden también conectarse lógicamenteutilizando las palabras claves OR, AND, y NOT: SELECT PNAME, PRICE FROM PART WHERE PNAME = ’Cerrojos’ AND (PRICE = 0 OR PRICE < 15); dará como resultado: PNAME | PRICE --------+----- Cerrojos | 15 Las operaciones aritméticas se pueden utilizar en la lista de objetivos y en la clausulaWHERE. Por ejemplo, si queremos conocer cuánto cuestan si tomamos dos piezas deun artículo, podríamos utilizar la siguiente consulta: SELECT PNAME, PRICE * 2 AS DOUBLE FROM PART WHERE PRICE * 2 < 50; y obtenemos: PNAME | DOUBLE --------+------ Tornillos | 20 Tuercas | 16 Cerrojos | 30 Ing. Mary Ruelas Llerena Segunda Unidad
  • 3. Laboratorio de Sistemas de Información Administrativos Página 3 Nótese que la palabra DOBLE tras la palabra clave AS es el nuevo título de la segundacolumna. Esta técnica puede utilizarse para cada elemento de la lista objetivo paraasignar un nuevo título a la columna resultante. Este nuevo título recibe el calificativode "un alias". El alias no puede utilizarse en todo el resto de la consulta. 2.4.1.2. Joins (Cruces) El siguiente ejemplo muestra como las joins (cruces) se realizan en SQL. Para cruzar tres tablas SUPPLIER, PART y SELLS a través de sus atributos comunes,formularemos la siguiente instrucción: SELECT S.SNAME, P.PNAME FROM SUPPLIER S, PART P, SELLS SE WHERE S.SNO = SE.SNO AND P.PNO = SE.PNO; y obtendremos la siguiente tabla como resultado: SNAME | PNAME -----+----- Smith | Tornillos Smith | Tuercas Jones | Levas Adams | Tornillos Adams | Cerrojos Blake | Tuercas Blake | Cerrojos Blake | Levas En la clausula FROM hemos introducido un alias al nombre para cada relación porquehay atributos con nombre común (SNO y PNO) en las relaciones. Ahora podemosdistinguir entre los atributos con nombre común simplificando la adicción de un prefijoal nombre del atributo con el nombre del alias seguido de un punto. La join se calculade la misma forma, tal como se muestra en Una Inner Join (Una Join Interna). Primeroel producto cartesiano: SUPPLIER _ PART _ SELLS Ahora seleccionamosúnicamente aquellas tuplas que satisfagan las condiciones dadas en la clausulaWHERE (es decir, los atributos con nombre común deben ser iguales). Finalmenteeliminamos las columnas repetidas (S.SNAME, P.PNAME). 2.4.1.3. Operadores Agregados SQL proporciona operadores agregados (como son AVG, COUNT, SUM, MIN, MAX)que toman el nombre de un atributo como argumento. El valor del operador agregadose calcula sobre todos los valores de la columna especificada en la tabla completa. Si seespecifican grupos en la consulta, el cálculo se hace sólo sobre los valores de cadagrupo (vean la siguiente sección). Ejemplo 2-5. Aggregates Si queremos conocer el coste promedio de todos los artículos de la tabla PART,utilizaremos la siguiente consulta: Ing. Mary Ruelas Llerena Segunda Unidad
  • 4. Laboratorio de Sistemas de Información Administrativos Página 4 SELECT AVG(PRICE) AS AVG_PRICE FROM PART; El resultado es: AVG_PRICE ------- 14.5 Si queremos conocer cuántos artículos se recogen en la tabla PART, utilizaremos lainstrucción: SELECT COUNT(PNO) FROM PART; y obtendremos: COUNT ----- 4 2.4.1.4. Agregación por Grupos SQL nos permite particionar las tuplas de una tabla en grupos. En estas condiciones,los operadores agregados descritos antes pueden aplicarse a los grupos (es decir, elvalor del operador agregado no se calculan sobre todos los valores de la columnaespecificada, sino sobre todos los valores de un grupo. El operador agregado se calculaindividualmente para cada grupo). El particionamiento de las tuplas en grupos se hace utilizando las palabras claveGROUP BY seguidas de una lista de atributos que definen los grupos. Si tenemosGROUP BY A1, ..., Ak habremos particionado la relación en grupos, de tal modo quedos tuplas son del mismo grupo si y sólo si tienen el mismo valor en sus atributos A1,..., Ak. Ejemplo 2-6. Agregados Si queremos conocer cuántos artículos han sido vendidos por cada proveedor formularemos la consulta: SELECT S.SNO, S.SNAME, COUNT(SE.PNO) FROM SUPPLIER S, SELLS SE WHERE S.SNO = SE.SNO GROUP BY S.SNO, S.SNAME; y obtendremos: SNO | SNAME | COUNT ---+-----+----- 1 | Smith | 2 2 | Jones | 1 3 | Adams | 2 4 | Blake | 3 Ing. Mary Ruelas Llerena Segunda Unidad
  • 5. Laboratorio de Sistemas de Información Administrativos Página 5 Demos ahora una mirada a lo que está ocurriendo aquí. Primero, la join de las tablasSUPPLIER y SELLS: S.SNO | S.SNAME | SE.PNO -----+------+----- 1 | Smith | 1 1 | Smith | 2 2 | Jones | 4 3 | Adams | 1 3 | Adams | 3 4 | Blake | 2 4 | Blake | 3 4 | Blake | 4 Ahora particionamos las tuplas en grupos reuniendo todas las tuplas que tiene el mismoatributo en S.SNO y S.SNAME: S.SNO | S.SNAME | SE.PNO -----+------+----- 1 | Smith | 1 |2 ----------------- 2 | Jones | 4 ----------------- 3 | Adams | 1 |3 ----------------- 4 | Blake | 2 |3 |4 En nuestro ejemplo, obtenemos cuatro grupos y ahora podemos aplicar el operadoragregado COUNT para cada grupo, obteniendo el resultado total de la consulta dadaanteriormente. Nótese que para el resultado de una consulta utilizando GROUP BY y operadoresagregados para dar sentido a los atributos agrupados, debemos primero obtener la listaobjetivo. Los demás atributos que no aparecen en la clausula GROUP BY seseleccionarán utilizando una función agregada. Por otro lado, no se pueden utilizarfunciones agregadas en atributos que aparecen en la clausula GROUP BY. 2.4.1.5. Having La clausula HAVING trabaja de forma muy parecida a la clausula WHERE, y se utilizapara considerar sólo aquellos grupos que satisfagan la cualificación dada en la misma. Las expresiones permitidas en la clausula HAVING deben involucrar funcionenagregadas. Cada expresión que utilice sólo atributos planos deberá recogerse en laclausula WHERE. Por otro lado, toda expresión que involucre funciones agregadasdebe aparecer en la clausula HAVING. Ejemplo 2-7. Having Ing. Mary Ruelas Llerena Segunda Unidad
  • 6. Laboratorio de Sistemas de Información Administrativos Página 6 Si queremos solamente los proveedores que venden más de un artículo, utilizaremos laconsulta: SELECT S.SNO, S.SNAME, COUNT(SE.PNO) FROM SUPPLIER S, SELLS SE WHERE S.SNO = SE.SNO GROUP BY S.SNO, S.SNAME HAVING COUNT(SE.PNO) > 1; y obtendremos: SNO | SNAME | COUNT ---+-----+----- 1 | Smith | 2 3 | Adams | 2 4 | Blake | 3 2.4.1.6. Subconsultas En las clausulas WHERE y HAVING se permite el uso de subconsultas (subselects) encualquier lugar donde se espere un valor. En este caso, el valor debe derivar de laevaluación previa de la subconsulta. El uso de subconsultas amplía el poder expresivode SQL. Ejemplo 2-8. Subselect Si queremos conocer los artículos que tienen mayor precio que el artículo llamado ’Tornillos’, utilizaremos la consulta: SELECT * FROM PART WHERE PRICE > (SELECT PRICE FROM PART WHERE PNAME=’Tornillos’); El resultado será: PNO | PNAME | PRICE ---+---------+----- 3 | Cerrojos | 15 4 | Levas | 25 Cuando revisamos la consulta anterior, podemos ver la palabra clave SELECT dosveces. La primera al principio de la consulta - a la que nos referiremos como laSELECT externa - y la segunda en la clausula WHERE, donde empieza una consultaanidada - nos referiremos a ella como la SELECT interna. Para cada tupla de laSELECT externa, la SELECT interna deberá ser evaluada. Tras cada evaluación,conoceremos el precio de la tupla llamada ’Tornillos’, y podremos chequear si el preciode la tupla actual es mayor. Si queremos conocer todos los proveedores que no venden ningún artículo (porejemplo, para poderlos eliminar de la base de datos), utilizaremos: SELECT * Ing. Mary Ruelas Llerena Segunda Unidad
  • 7. Laboratorio de Sistemas de Información Administrativos Página 7 FROM SUPPLIER S WHERE NOT EXISTS (SELECT * FROM SELLS SE WHERE SE.SNO = S.SNO); En nuestro ejemplo, obtendremos un resultado vacío, porque cada proveedor vende almenos un artículo. Nótese que utilizamos S.SNO de la SELECT externa en la clausulaWHERE de la SELECT interna. Como hemos descrito antes, la subconsulta se evalúapara cada tupla de la consulta externa, es decir, el valor de S.SNO se toma siempre dela tupla actual de la SELECT externa. 2.4.1.7. Unión, Intersección, Excepción Estas operaciones calculan la unión, la intersección y la diferencia de la teoría deconjuntos de las tuplas derivadas de dos subconsultas. Ejemplo 2-9. Union, Intersect, Except La siguiente consulta es un ejemplo de UNION: SELECT S.SNO, S.SNAME, S.CITY FROM SUPPLIER S WHERE S.SNAME = ’Jones’ UNION SELECT S.SNO, S.SNAME, S.CITY FROM SUPPLIER S WHERE S.SNAME = ’Adams’; Dará el resultado: SNO | SNAME | CITY ---+-----+----- 2 | Jones | Paris 3 | Adams | Vienna Aquí tenemos un ejemplo para INTERSECT: SELECT S.SNO, S.SNAME, S.CITY FROM SUPPLIER S WHERE S.SNO > 1 INTERSECT SELECT S.SNO, S.SNAME, S.CITY FROM SUPPLIER S WHERE S.SNO > 2; que dará como resultado: SNO | SNAME | CITY ---+-----+----- 2 | Jones | Paris La única tupla devuelta por ambas partes de la consulta es la únicaque tiene $SNO=2$. Ing. Mary Ruelas Llerena Segunda Unidad
  • 8. Laboratorio de Sistemas de Información Administrativos Página 8 Finalmente, un ejemplo de EXCEPT: SELECT S.SNO, S.SNAME, S.CITY FROM SUPPLIER S WHERE S.SNO > 1 EXCEPT SELECT S.SNO, S.SNAME, S.CITY FROM SUPPLIER S WHERE S.SNO > 3; que dará como resultado: SNO | SNAME | CITY ---+-----+----- 2 | Jones | Paris 3 | Adams | Vienna 2.4.2. Definición de Datos El lenguaje SQL incluye un conjunto de comandos para definición de datos. 2.4.2.1. Create Table El comando fundamental para definir datos es el que crea una nueva relación (unanueva tabla). La sintaxis del comando CREATE TABLE es: CREATE TABLE table_name (name_of_attr_1 type_of_attr_1 [, name_of_attr_2 type_of_attr_2 [, ...]]); Ejemplo 2-10. Creación de una tabla Para crear las tablas definidas en La Base de Datos de Proveedores y Artículos seutilizaron las siguientes instrucciones de SQL: CREATE TABLE SUPPLIER (SNO INTEGER, SNAME VARCHAR(20), CITY VARCHAR(20)); CREATE TABLE PART (PNO INTEGER, PNAME VARCHAR(20), PRICE DECIMAL(4 , 2)); CREATE TABLE SELLS (SNO INTEGER, PNO INTEGER); 2.4.3. Manipulación de Datos 2.4.3.1. Insert Into Ing. Mary Ruelas Llerena Segunda Unidad
  • 9. Laboratorio de Sistemas de Información Administrativos Página 9 Una vez que se crea una tabla (vea Create Table), puede ser llenada con tuplasmediante el comando INSERT INTO. La sintaxis es: INSERT INTO table_name (name_of_attr_1 [, name_of_attr_2 [,...]]) VALUES (val_attr_1 [, val_attr_2 [, ...]]); Para insertar la primera tupla en la relación SUPPLIER (de La Base de Datos deProveedores y Artículos) utilizamos la siguiente instrucción: INSERT INTO SUPPLIER (SNO, SNAME, CITY) VALUES (1, ’Smith’, ’London’); Para insertar la primera tupla en la relación SELLS, utilizamos: INSERT INTO SELLS (SNO, PNO) VALUES (1, 1); 2.4.3.2. Update Para cambiar uno o más valores de atributos de tuplas en una relación, se utiliza elcomando UPDATE. La sintaxis es: UPDATE table_name SET name_of_attr_1 = value_1 [, ... [, name_of_attr_k = value_k]] WHERE condition; Para cambiar el valor del atributo PRICE en el artículo ’Tornillos’ de la relación PART,utilizamos: UPDATE PART SET PRICE = 15 WHERE PNAME = ’Tornillos’; El nuevo valor del atributo PRICE de la tupla cuyo nombre es ’Tornillos’ es ahora 15. 2.4.3.3. Delete Para borrar una tupla de una tabla particular, utilizamos el comando DELETE FROM. La sintaxis es: DELETE FROM table_name WHERE condition; Para borrar el proveedor llamado ’Smith’ de la tabla SUPPLIER, utilizamos lasiguiente instrucción: DELETE FROM SUPPLIER WHERE SNAME = ’Smith’; Ing. Mary Ruelas Llerena Segunda Unidad