Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Curso Práctico de SQL

Curso Práctico de SQL

Israel Vázquez Morales

Israel Vázquez Morales

Qué es una proyección (SELECT)

4/29
Recursos

Aportes 55

Preguntas 16

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Proyección significa elegir QUE columnas (o expresiones) la consulta debe retornar.
Selección significa CUALES SON las columnas retornadas.

Supongamos la siguiente consulta:  

select *Columna1, Columna2, Columna3* from *table_1* where ***n=3***;

La proyección sería: Columna1, Columna2 y Columna3 y la parte de Selección es n*=3,* debido a esto es que denominamos a la clausula SELECT como la proyección y los filtros aplicados en la clausula WHERE como Selección.

La Consulta más Básica sería

SELECT * FROM Tabla1;

El astrisco (*) es un comodín que indica que queremos traer una proyección completa (Todos los campos o columnas existentes en la tabla)

Alias

Un alias (..AS…), es otra forma de llamar a una tabla o a una columna, y se utiliza para simplificar las sentencias SQL cuando los nombres de tablas o columnas son largos o complicados.

SELECT Columna1 AS Alias1 FROM Tabla1; (Para referirnos a la Columna1, podremos denominarla como Alias1)


.

Funciones de agregación

Las funciones de agregación en SQL nos permiten efectuar operaciones sobre un conjunto de resultados, pero devolviendo un único valor agregado para todos ellos.
Es decir, nos permiten obtener medias, máximos, etc… sobre un conjunto de valores.

Las funciones de agregación básicas que soportan todos los gestores de datos son las siguientes:

  • COUNT: devuelve el número total de filas seleccionadas por la consulta, como particularidad se puede usar COUNT()* donde contará todos los registros de la tabla incluyendo nulos.
  • MIN: devuelve el valor mínimo del campo que especifiquemos.
  • MAX: devuelve el valor máximo del campo que especifiquemos.
  • SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
  • AVG: devuelve el valor promedio del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
    .

Función IF()

Función que evalúa una sola expresión y retorna lo que se le especifica en el caso que sea Verdadera o Falsa

IF (expresion, resultado_true, resultado_else)

Función CASE()

Sirve para evaluar una lista de condiciones y retornar uno o múltiples posibles resultados.

Comienza con la sentencia CASE, luego evalua expresiones comenzando con WHEN y en caso que sea verdadera, devolverá el resultado especificado para esa condición luego del THEN
.
La sentencia ELSE es opcional y devolverá este valor en caso que todas las condiciones WHEN anteriores sean Falsas.

Si todas las condiciones son falsas, y no existe la clausula ELSE, se devolverá NULL.

CASE 
   WHEN eval_1 THEN resultado_1
   WHEN eval_2 THEN resultado_2
      ...
   WHEN value_n THEN resultado_n
   ELSE resultado
END AS ValorResultado;

Pueden ir probando algunos comandos con el script que ya tenemos. Aquí les dejo mi ejemplo. 😄

Que bien explicado. Aunque faltó la explicación de la función DISTINCT que sirve para dar valóres únicos y que no se repitan nada más porque sí.

Mis notas personales sobre SELECT:

Peque resumen: 😉

Puedes asignar alias con “AS” (Muy potente)

COUNT() Cuenta el número de elementos que existen en todas las tuplas de la base de datos

SUM() Toma la columna que le digas y suma sus valores de forma consecutiva

AVE() (De AVErage) Saca el valor promerdio de toda la columna

Al igual que otros lenguajes puedes hacer “IF” con un montón de posibilidades.

Todos los registros

SELECT *
  FROM PRUEBAS.ALUMNOS;

Alias

SELECT nombre as "name",
	   apellido as "last name"
  FROM PRUEBAS.ALUMNOS;

Conteo

SELECT COUNT(id)
  FROM PRUEBAS.ALUMNOS;

Sumatoria

SELECT SUM(colegiatura)
  FROM PRUEBAS.ALUMNOS;

Promedio

SELECT AVG(colegiatura)
  FROM PRUEBAS.ALUMNOS;

Minimo

SELECT MIN(colegiatura)
  FROM PRUEBAS.ALUMNOS;

Maximo

SELECT MAX(colegiatura)
  FROM PRUEBAS.ALUMNOS;

Case

SELECT nombre,
	   apellido,
	   colegiatura,
  CASE
  	WHEN (colegiatura > 4000) THEN 'Mayor a 4000'
  	WHEN (colegiatura = 2000) THEN 'Igual a 2000'
  	ELSE 'Mayor a 2000 y menor que 4000'
  END costo
FROM pruebas.alumnos;

Dice curso practico y nada de ejemplo en SQL solo pantallas y con bases de datos imaginarias.

Sufrí con este profesos en el curso básico y ahora empezamos mal con clases largas que a velocidad 2x incluso se hacen eternas.

Aparte de las licencias, cual es la diferencia aplicable en el dia a dia entre PostreSQL y SQL server?

Una proyección es elegir las columnas o expresiones que la consulta debe retornar. Con SELECT indicas cuáles son en SQL.

SELECT *; 

La anterior expresión es un select all. Quiere decir que estás selecciondo toda tu base de datos. Algunas formas de usar SELECT son:

SELECT field AS alias;
SELECT COUNT(id), SUM(quantity), AVG(age);
SELECT MIN(date), MAX(quantity);

Y también podemos usar condicionales para hacer filtros.

SELECT IF(500 < 1000, 'YES', 'NOPE');

SELECT OrderID, Quantity,
CASE 
	WHEN Quantity > 30 THEN 'Over 30'
	WHEN Quantity = 30 THEN 'Equal 30'
	ELSE 'Under 30'
END AS QuantityText

Las funciones de agregación básicas que soportan todos los gestores de datos son las siguientes:

COUNT: devuelve el número total de filas seleccionadas por la consulta, como particularidad se puede usar COUNT()* donde contará todos los registros de la tabla incluyendo nulos.
MIN: devuelve el valor mínimo del campo que especifiquemos.
MAX: devuelve el valor máximo del campo que especifiquemos.
SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.
AVG: devuelve el valor promedio del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.

RECUERDA: se debe usar al final el GROUP BY para que tenga validez y sentido el query a implementar

se puede probar todo lo que menciona el profesor con los archivos que se descargo antes, sin embargo aun se me complica usar la funcion if, si alguien màs experimentado llega a realizar un ejemplo con esa función me gustaría que lo compartiera como es que lo llego a usar. Acá les dejo una muestra de lo que probé.

Proyección (SELECT)

  • Se le llama así porque toma la información de la base de datos y la proyecta en una manera más visual
  • Se pueden utilizar alias y agregaciones
  • También estructuras de control como IF y CASE

para los que usan SQL Server

el Alias es con AS, pero igual puedes dejar un espacio y asignarle un nombre la diferencia es, que tan estricto es el lenguaje.
EX
SELECT file AS Alias; o SELECT file Alias.

si usas un alias con espacios, asegurate de ponerlo entre []
el AVE() es AVG()
SUM() es igual asi como COUNT(), MAX(),MIN()

si estas operando con una columno con nulos puedes usar ISNULL(<Columna Referencia>,<ValorDado>)

ex
ISNULL(Descuento,0)

SELECT *;
-- Selecciona todas las columnas de tu entidad.

SELECT fielda AS alias;
-- Puedes cambiarle el nombre a tu entidad.

SELECT COUNT(id);
-- Cuenta todo los campos de tu entidad

SELECT SUM (quantity);
-- Suma la colunma que le digas de tu base de datos o entidad

SELECT AVG(age); 
-- Saca el promedio average.

SELECT MIN(date);
-- Da el minimo de un elemento.

SELECT MAX(quantity);
-- Da el maximo de un elemento.

SELECT IF (500<1000, "YES", "NO");
-- Tambien SQL tiene condiciones.

SELECT OrderID Quantity,
CASE
	WHEN Quantity > 30 THEN "Over 30"
	WHEN Quantity = 30 THEN "Equal 30"
	Else "Under 30"
END AS QuantityText
-- Tambien se puede escribir asi la condicion.


--Nota: Dentro de los parentesis es donde van el nombre de la columna.

💡Agrega un formato tus consultas SQL en 2 simples pasos

.
pgAdmin permite formatear tus consultas SQL de forma rápida de la siguiente manera permitiéndote visualizar un formato más agradable para tus consultas y evitarte estar cambiando de minúsculas a mayúsculas todo el tiempo, un simple clic y todo arreglado.
.

.

✅ Ejercicios Prácticos realizados

-- Obtener todos los registros de la tabla carreras
SELECT *
FROM PLATZI.CARRERAS;

-- Cuenta el total de registros que tiene la columna carreras
SELECT COUNT(CARRERAS) AS "Total Number of Records"
FROM PLATZI.CARRERAS;

-- Suma todos los indeitficadores y retorna una columna llamada Sum of identifiers
SELECT SUM(ID) AS "Sum of identifiers"
FROM PLATZI.CARRERAS;

-- Obten el rpomedio de la columna Id
SELECT AVG(ID) AS "Average ID"
FROM PLATZI.CARRERAS;

-- Obten del valor minimo de la columna id
SELECT MIN(ID) AS "Lower ID"
FROM PLATZI.CARRERAS;

-- Obten del valor maximo de la columna fecha_alta
SELECT MAX(FECHA_ALTA) AS "Maximum Date"
FROM PLATZI.CARRERAS;

Se puede ir practicando mucho con ideas sencillas como esta, Aquí un ejemplo:

SELECT nombre, colegiatura,
CASE
	WHEN colegiatura > 3000 THEN 'Alto'
	WHEN colegiatura <= 3000 THEN 'Bajo'
END AS Precio
FROM platzi.alumnos

![]()

Aquí un pequeño aporte usando CASE:

<SELECT nombre, apellido, fecha_incorporacion,
CASE
	WHEN fecha_incorporacion >= '2020-01-01' then 'NUEVO'
	ELSE 'ANTIGUO'
END AS ANTIGUEDAD
FROM platzi.alumnos> 

estructuras de control

```js SELECT nombre, apellido FROM platzi.alumnos; SELECT DISTINCT colegiatura FROM platzi.alumnos; ```
El curso es bueno. Sin embargo, para mí que tenía bases cero en SQL, se me estaba dificultando mucho entender sin ejemplos. Me sirvió mucho primero revisar este tutorial y luego volver al curso [Tutorial SQL en Español interactivo con intérprete SQL (sql-easy.com)](https://www.sql-easy.com/es/tutorial/#!nested)
Alguien sabe por qué no me funcion el SELECT field AS alias No me marca errror, pero no hace el cambio de nombre

La proyección en el contexto de SQL se realiza a través de la cláusula SELECT. La proyección es una operación que te permite seleccionar columnas específicas de una tabla, mostrando únicamente la información que es relevante para tu consulta.

H

IF(Condicion, opcion 1 , opcion 2) o se puede ocupar Case When Condicion THEN opcion 1 When Condicion THEN opcion 2 ELSE opcion 3 END

4. Qué es una proyección (SELECT)

  • Para seleccionar que queremos que se muestre
SELECT *; -- Select mas sencillo

SELECT field AS alias;

SELECT COUNT(id), SUM(quantity),
AVG(age);

SELECT MIN(date), MAX(quantity);

SELECT IF(500<1000, 'YES', 'NO');

SELECT OrderID, Quantity,
CASE
		WHEN Quantity > 30 THEN 'Over 30'
		WHEN Quantity = 30 THEN 'Equal30'
		ELSE 'Under 30'
END AS QUantityText
  1. Selecting all columns from a table:
-- This query selects all columns and all rows from a table called 'products'.
SELECT * FROM products;

  1. Selecting a specific column and aliasing it:
-- This query selects the 'name' column from the 'products' table and aliases it as 'Product Name'.
SELECT name AS "Product Name" FROM products;

  1. Selecting aggregate functions:
-- This query selects the total number of IDs, sum of quantities and average age from a table called 'purchases'.
SELECT COUNT(id) AS TotalIDs, SUM(quantity) AS TotalQuantity, AVG(age) AS AverageAge FROM purchases;

  1. Selecting minimum and maximum values:
-- This query selects the earliest date and the highest quantity from a table called 'purchases'.
SELECT MIN(date) AS EarliestDate, MAX(quantity) AS HighestQuantity FROM purchases;

  1. Using the IF function (MySQL-specific syntax):
-- This query will evaluate whether 500 is less than 1000 and return "YES" because the condition is true.
SELECT IF(500<1000, "YES", "NO") AS IsLessThan;

  1. Using the CASE statement in a SELECT query:
-- This query selects OrderID and Quantity, and categorizes the quantity into different text labels.
SELECT OrderID, Quantity,
CASE 
    WHEN Quantity > 30 THEN 'Over 30'
    WHEN Quantity = 30 THEN 'Equal 30'
    ELSE 'Under 30'
END AS quantityText
FROM orders;

Este se me ocurrio usando las estructuras de control, no se si haya una mejor forma de hacerlo, pero me parecio interesante.

SELECT carreras.carrera, COUNT(alumnos.id) AS quantity,
CASE 
	WHEN COUNT(alumnos.id) > 25 THEN 'Over 25'
	WHEN COUNT(alumnos.id) = 25 THEN 'Equal 25'
	ELSE 'under 25'
END AS quantity_text
FROM platzi.alumnos AS alumnos
JOIN platzi.carreras  AS carreras ON alumnos.carrera_id = carreras.id 
GROUP BY carreras.carrera
ORDER BY quantity DESC
;

algunos ejemplos de Queries:

SELECT *
FROM platzi.alumnos
WHERE apellido ILIKE 'l%'
ORDER BY id DESC
limit 10;


SELECT COUNT(*) AS all_values, SUM(carrera_id) AS sum_carrera_id, AVG(id) as average_id
FROM platzi.alumnos;

SELECT MIN(id) AS minimum_id, MAX(id) AS maximum_id, AVG(id) AS mean_id
FROM platzi.carreras;

SELECT * FROM platzi.carreras;

SELECT carreras.carrera, count(alumnos.id) AS students_quantity
FROM platzi.alumnos AS alumnos
JOIN platzi.carreras  AS carreras ON alumnos.carrera_id = carreras.id 
GROUP BY carreras.carrera
ORDER BY students_quantity DESC
LIMIT 10;


A continuación comparto los ejercicios que puede hacer con lo visto en clase, espero les sirva de algo

 SELECT * FROM platzi.alumnos;
 SELECT * FROM platzi.carreras;

-- Esta consulta nos permite ver a todos los estudiante con las carreras que han elegido a traves del uso del INNER
SELECT a.id AS id_estudiante, a.nombre AS nombre_estudiante, a.apellido AS apellido_estudiante, c.carrera AS carrera_elegida 
FROM platzi.alumnos AS a
INNER JOIN platzi.carreras AS c ON a.carrera_id = c.id;


-- A continuacion una consulta que nos permita ver el primer estudiante que se incorporo 
SELECT nombre, apellido, fecha_incorporacion AS "Primer estudiante en incorporarse"
FROM platzi.alumnos
WHERE fecha_incorporacion = (
    SELECT MIN(fecha_incorporacion)
    FROM platzi.alumnos
);

-- A continuacion una consulta que nos permita ver el ultimo estudiante que se incorporo 
SELECT nombre, apellido, fecha_incorporacion AS "Ultimo estudiante en incorporarse"
FROM platzi.alumnos
WHERE fecha_incorporacion = (
    SELECT MAX(fecha_incorporacion)
    FROM platzi.alumnos
);

-- En la siguiente consulta podemos ver que etapa o valor tiene cada matricula de acuerdo con el valor
SELECT
    id,
    colegiatura AS valor_semestre,
    CASE
        WHEN colegiatura <= 3000 THEN 'Matricula Basica'
        WHEN colegiatura <= 4000 THEN 'Matricula Media'
        WHEN colegiatura <= 5000 THEN 'Matricula Alta'
        ELSE 'Matricula fuera del rango'
    END AS etapas_matricula
FROM platzi.alumnos;```

me parece pésimo que no vaya haciendo el ejercicio en simultaneo, estoy tratando de adivinar como se corre los códigos que está hablando porque en la clase pasada solo explicaron como instalar el programa

SOLECT field AS alias;
SELECT COUNT(id), sum(quantity) – suma los valores , AVG(age) da el valor promedio;
estas sentencias trabajan con group by
SELECT MIN(date), MAX(quantity); – nos dan los valores máximos y mínimos

SELECT IF(500<100, “Yes”, “NO”);

SELECT OrderID, Quantity,
CASE
WHEN Quantity > 30 THEN 'Over 30’
WHEN Quantity = 30 THEN 'Equal 30’
ELSE "Under 30"
End AS QnatityText

Este es un excelente profesor. Me gusta mucho como va disificando las clases para tener conclusiones rápidas pero sustanciosas.

Super

Esta muuuuy bueno esto jeje!!

Veo que hay más clases en comentarios de Estudiantes que la propia clase de Platzi. Mejor dicho Platzi me ha defraudado y creo que he pedido mi dinero.

Practicando me di cuenta que dos cosas:

  • PostgreSQL solo toma los strings aquellos textos que estén entre comillas simples
"Esto NO lo toma como texto"
'Esto SÍ es texto para PostgreSQL'
  • Antes del CASE se debe poner una coma (,) tal como se lo haría con cualquier otra columna.
SELECT columna1, columna2, CASE ...

Les dejo mi aporte xD

Ejemplo de case :

–Clase de —> Case

Select carrera_id ,
CASE
when carrera_id = 30 then 'medio’
when carrera_id > 31 then 'caro’
when carrera_id < 29 then 'barato’
else 'barato’
end as precios
from platzi.alumnos ;

Ejemplo de operaciones matematicas :

Select
sum (carrera_id) as carrera,
avg (tutor_id) as tutor,
count (nombre) as nombre
from platzi.alumnos

Notas 😄

Qué es una proyección (SELECT)

  • La proyección es el equivalente a SELECT de SQL. Nos ayuda a seleccionar que queremos que se muestre en términos de columnas 🥸

  • El mas sencillo es SELECT *; que está seleccionando todo. Pero se puede ir haciendo mas complejo:

    # Selecciona una columna y la renombra
    SELECT field AS alias FROM tabla;
    
    # Podemos aplicar funciones a columnas y seleccionarlas
    SELECT COUNT(id), SUM(quantity), AVG(age) FROM tabla;
    
    # Seleccionar minimo y máximo
    SELECT MIN(date), MAX(quantity) FROM tabla;
    
  • Unos cuantos ejemplos:

# Condicionales dentro de SQL - Condición, if, else
SELECT IF(500<1000, "YES" ,"NO") FROM tabla;

# Si tienes mas optiones, puedes usar un CASE
SELECT OrderID, Quantity,
CASE
	WHEN Quantity > 30 THEN "Over 30"
	WHEN Quantity = 30 THEN "Equal 30"
	ELSE "Under 30"
END AS QuantityText
FROM tabla;
# Este ejemplo tiene las columnas OrderID, Quantity, QuantityText

Estoy amando este curso. Yo lo haré desde mysql

Excelentes ejemplos y aplicabilidad

Mi aporte:

SELECT CONCAT_WS(" ", nombre, apellido) AS 'Nombre Completo', email,
CASE 
WHEN colegiatura = 2000 THEN 'Barato'
WHEN colegiatura BETWEEN 3000 AND 4500 THEN 'Precio Promedio'
ELSE 'Caro'
END AS 'Pago Mensual'
FROM alumnos;

Resultado:

muy buena explicacion

Mi query para ver si tiene beca o el estudiante.

SELECT colegiatura,
CASE 
    WHEN (colegiatura < 3000) THEN 'BECA' 
    WHEN (colegiatura > 3000) THEN 'SIN BECA' 
    ELSE 'MUCHA BECA'
END BecaInfo
FROM platzi.alumnos;

desde el curso de Postgresql no tuvimos que usar un schema, siempre nos ibamos por el public, y por ello al momento de hacer SELECT nunca lo teniamos que especificar.

Ahora que estamos sobre otro schema, necesariamente tenemos que poner el nombre del schema y la tabla para correr un query. Si quieres correr los queries sin tener que poner el schema, pueden correr lo siguiente:

set search_path to platzi;

PERO ANTES, noten que el valor de search_path es <"$user", public>. Esto lo hacen con el comando:

SHOW search_path;

Tomenlo como referencia. Hasta el momento me funcionó pero ignoro si esto cause algún problema en el futuro. Solo se aplica en el schema donde estemos.

SELECT

SELECT se encarga de proyectar o mostrar datos.

  • El nombre de las columnas o campos que estamos consultando puede ser cambiado utilizando AS después del nombre del campo y poniendo el nuevo que queremos tener:
SELECT titulo AS encabezado
FROM posts;
  • Existe una función de SELECT para poder contar la cantidad de registros. Esa información (un número) será el resultado del query:
SELECT COUNT(*)
FROM posts;

Aparte de la función COUNT, podemos encontrar las siguientes funciones de agregado:

  • AVG Calcula el promedio
  • COUNT Cuenta los registros de un campo
  • SUM Suma los valores de un campo
  • MAX Devuelve el maximo de un campo
  • MIN Devuelve el mínimo de un campo

count = contar
sum = sumar
avg = promedio

Ejemplos de SELECT

COMANDOS:

- SELECT *; Selecciona todas las columnas (atributos) que tiene la tabla
- SELECT  field  AS  alias; Puedes renombrar una columna para hacerla más identificable.

1. OPERACIONES MATEMATICAS:

- SELECT COUNT (id); Cuenta el número de elementos (instancias) que existen
- SELECT SUM (quantity); Suma los elementos (instancias) de la columna indicada
- SELECT AVG (age); Promedio de los elementos (instancias) de la columna indicada
- SELECT MIN (date); Toma el valor mínimo de acuerdo a los elementos que se selecciones con el comando GROUP BY
- SELECT MAX (quantity); Toma el valor máximo de acuerdo a los elementos que se selecciones con el comando GROUP BY

2. ESTRUCTURAS DE CONTROL:

- SELECT IF (500<100,"YES","NO")
- SELECT OrderID, Quantity,

CASE
WHEN Quantity > 30 THEN "Over 30"
WHEN Quantity = 30 THEN "Equal 30"
ELSE "Under 30"
END AS QuantityText

Genial lo de las condicionales