No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷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

Triangulando

21/29
Recursos

Aportes 64

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Lpad: rellena por la izquierda.
P.e. lpad(鈥437鈥,5,鈥0鈥)
tendr铆a como resultado 00437.

RPad: rellena por la derecha.
P.e. rpad(鈥437鈥,5,鈥0鈥)
tendr铆a como resultado 43700.

Illuminati detected
No me sorprende que la clase sea la 21 =(3x(3+3+1)).

SELECT lpad(鈥榡i鈥,100,鈥榡i鈥);

Se podr铆a aplicar para presentar un 鈥渄iagrama de barras comparativas鈥 de una variable, por ejemplo la colegiatura, en el caso que en la capa superior no sea posible.

SELECT CONCAT(nombre, ' ', apellido) ,colegiatura, LPAD('|', CAST(colegiatura AS int)/100, '|') AS coleg_bar
FROM platzi.alumnos;

馃檧 OMG amigos, no sab铆a que tambi茅n se pod铆an usar emojis como relleno. Miren!

Investigando sobre rpad, consegu铆 que es b谩sicamente se rellenan igual, la diferencia radica en donde se coloca el 鈥渞elleno鈥 por ejemplo:

Queremos tenemos tres lideres pero los queremos convertir en 300 espartanos:

SELECT rpad('3', 3, '0');

Esto nos trae como resultado

300

Por otro lado para lpad tenemos un agente especial 7

SELECT lpad('7', 3, '0');

Con el lpad lo convertimos en un agente especial

007

Para finalizar el rpad lo agrega como un sufijo a la oraci贸n o texto que le hayamos dado y el lpad lo agrega como un prefijo.
Si quieren leer un poco m谩s ac谩 les dejo este link

Les quiero compartir una aplicaci贸n de lpad, cree un columna PROMEDIO en la tabla alumnos, le puse valores aleatorios del 1 al 10, y con lpad cree una columna adicional llamada PUNTAJE la cual muestra de manera grafica, con estrellas que tan bien va el alumno, si su promedio es de 10 o 9 tiene 5 estrellas , si tiene 8 o 7, 4 estrellas y as铆 sucesivamente

Les comparto lo que me aparece en PDAdmin

Si est谩n utilizando SQL Server:

Ya me quedo mucho mas claro como funcionan .

<
/* right Join todo de la tabla de alumnos */
SELECT 
a.[nombre]
,a.[apellido]
,a.[carrera_id]
,b.id
,b.carrera
FROM [HAHM].[dbo].[platzialumnos] a
right join platzicarreras b on a.carrera_id = b.id
where b.carrera is not null 
order by carrera desc


/* Left Join todo de la tabla de alumnos */
SELECT 
a.[nombre]
,a.[apellido]
,a.[carrera_id]
,b.id
,b.carrera
FROM [HAHM].[dbo].[platzialumnos] a
left join platzicarreras b on a.carrera_id = b.id
where b.id is not null 
order by carrera desc


/* inner Join todo lo que coincida en ambas tablas */
SELECT 
a.[nombre]
,a.[apellido]
,a.[carrera_id]
,b.id
,b.carrera
FROM [HAHM].[dbo].[platzialumnos] a
inner join platzicarreras b on a.carrera_id = b.id
order by carrera desc



/* Full Join */
SELECT 
a.[nombre]
,a.[apellido]
,a.[carrera_id]
,b.id
,b.carrera
FROM [HAHM].[dbo].[platzialumnos] a
full join platzicarreras b on a.carrera_id = b.id
order by carrera desc





>

Lpad is izquierda
Rpad para la derecha

Hola, creo que esta clase puede ser muy 煤til para tokenizar informaci贸n sensible de usuarios, comparto la query 馃槂

/* TOKENIZANDO */
SELECT rpad(SUBSTR(nombre, 1, 2),LENGTH(nombre),'*'), nombre,
       rpad(SUBSTR(apellido, 1, 2),LENGTH(apellido),'*'), apellido,
	   rpad(SUBSTR(email, 1, 2),LENGTH(email),'*'), email
FROM platzi.alumnos

21. Triangulado

SELECT lpad('sql',15,'+')

SELECT  lpad('*',id,'*')
FROM platzi.alumnos
WHERE id < 10
ORDER BY carrera_id

SELECT lpad('*',CAST(row_id AS int),'*')
FROM (
	SELECT ROW_NUMBER() OVER(ORDER BY carrera_id) AS row_id, *
	FROM platzi.alumnos
)AS alumnos_with_row_id
WHERE row_id <= 5
ORDER BY carrera_id

;

-- La funci贸n RPAD se utiliza para agregar caracteres a la derecha de una cadena. Si la cadena original es m谩s corta que la longitud especificada, se agregar谩n caracteres a la derecha hasta alcanzar esa longitud.
SELECT rpad('sql', 15, '*');

SELECT rpad('sql', id, '*')
FROM platzi.alumnos
WHERE id <= 10;

SELECT rpad('*', id, '*')
FROM platzi.alumnos
WHERE id <= 10;

SELECT rpad('*', id, '*')
FROM platzi.alumnos
WHERE id <= 10
ORDER BY carrera_id;

SELECT rpad('*', CAST(row_id AS int), '*')
FROM (
	SELECT ROW_NUMBER() OVER(ORDER BY carrera_id) AS row_id, *
	FROM platzi.alumnos
) AS alumnos_with_row_id
WHERE row_id <= 10
ORDER BY carrera_id;

SELECT
 	lpad('*|*', CAST(row_id AS int), 'Soy un relleno que va a la izquierda'),
	rpad('*|*', CAST(row_id AS int), 'Soy un relleno que va a la derecha')
FROM (
	SELECT ROW_NUMBER() OVER(ORDER BY carrera_id) AS row_id, *
	FROM platzi.alumnos
) AS alumnos_with_row_id
WHERE row_id <= 50
ORDER BY carrera_id;

Bueno,
rpad rellena por la derecha en este ejemplo toma el texto hola y lo va rellenando con * a la derecha

SELECT rpad('hola', id, '*')
FROM platzi.alumnos
where id <10```

Diferencia entre LPAD y RPAD

  • LPAD -> rellena a la izquierda de un car谩cter especial predeterminado y las veces que se requiera
    Ejemplo: SELECT LPAD(NAME,4,鈥.鈥 ) AS NAME FROM T1;
    Resultado: Noel, .Sol, 鈥u
  • RPAD -> rellena a la derecha de un car谩cter especial predeterminado y las veces que se requiera
    Ejemplo: SELECT RPAD(NAME,5,鈥.鈥 ) AS NAME FROM T1; Resultado: Diana, Ted鈥, Jeff.

Reto:
rpad sirve para hacer relleno a la derecha

es la misma funci贸n pero esta nos permite colocar ese n煤mero n de caracteres a la derecha mientras el que vimos nos permite colocarlos a la izquierda

Basicamente lpad, rellenar谩 los espacios sin caracteres empezando desde la izquierda. Mientras que rpad lo hace desde la derecha.

La funci贸n lpad pone todos los rellenos a la izquierda mientras que el rpad las pone a la derecha muy interesante lo aprendido

![](https://static.platzi.com/media/user_upload/image-6dd3be57-189c-493c-8efd-df0994d03c5e.jpg)Son lo mismo solo que invertido

INNER JOIN:

SELECT *
FROM platzi.alumnos
INNER JOIN platzi.carreras ON platzi.alumnos.carrera_id = platzi.carreras.id;
  • Esta consulta selecciona todas las columnas de ambas tablas donde hay coincidencias en las columnas carrera_id de la tabla alumnos e id de la tabla carreras.

LEFT JOIN:

SELECT *
FROM platzi.alumnos
LEFT JOIN platzi.carreras ON platzi.alumnos.carrera_id = platzi.carreras.id;
  • Esta consulta devuelve todas las filas de la tabla alumnos y las coincidencias correspondientes de la tabla carreras. Si no hay coincidencias, las columnas de la tabla carreras tendr谩n valores nulos.

RIGHT JOIN:

SELECT *
FROM platzi.alumnos
RIGHT JOIN platzi.carreras ON platzi.alumnos.carrera_id = platzi.carreras.id;
  • Esta consulta devuelve todas las filas de la tabla carreras y las coincidencias correspondientes de la tabla alumnos. Si no hay coincidencias, las columnas de la tabla alumnos tendr谩n valores nulos.

FULL OUTER JOIN:

SELECT *
FROM platzi.alumnos
FULL OUTER JOIN platzi.carreras ON platzi.alumnos.carrera_id = platzi.carreras.id;
  • Esta consulta devuelve todas las filas cuando hay una coincidencia en cualquiera de las tablas. Si no hay coincidencias, las columnas sin coincidencias tendr谩n valores nulos.
-- Ejercicio 11 / Mencione diferencia entre funci贸n ipad y rpad

SELECT lpad('sql', 15, '+');

SELECT rpad('sql', 15, '+');

SELECT lpad('*', id, '/'), carrera_id
FROM platzi.alumnos
WHERE id < 10

SELECT rpad('*', id, '/'), carrera_id
FROM platzi.alumnos
WHERE id < 10

-- La funci贸n rpad coloca la cadena al final mientras que la funci贸n lpad la coloca al inicio

Si se usa el rpad en vez de lpad, se obtendr铆a un patron de asteriscos hacia la derecha en vez de hacia la izquierda.

Yo cuando la soluci贸n requiere usar windows functions

LPAD: Esta funci贸n se utiliza para rellenar una cadena de texto con caracteres espec铆ficos desde la izquierda hasta alcanzar una longitud deseada.

RPAD: Similar a LPAD, pero en lugar de rellenar desde la izquierda, lo hace desde la derecha.

Con rpad sql va antes que los signos![](

![](

Reto: Jugar con la otra funcion llamada rpad e indicar la diferencias encontradas

Esta funcion hace lo contrario que lpad, rellena en este caso de derecha a izquierda

SELECT rpad('sql', 15, '*');

SELECT rpad('sql', id, '*')
FROM platzi.alumnos 
WHERE id < 10;

SELECT rpad('sql', id, '*')
FROM platzi.alumnos
WHERE id < 10
ORDER BY carrera_id;

SELECT rpad('sql', CAST(row_id AS int), '*')
FROM (
	SELECT ROW_NUMBER() OVER(ORDER BY carrera_id) AS row_id, * 
	FROM platzi.alumnos
)AS alumnos_with_row_id
WHERE row_id <= 10
ORDER BY carrera_id;

rpad, lo que hace es colocar el espacio en la derecha, mientras que la lpad lo coloca del lado izquierdo.

mi aporte al reto:

--- agregar (N) cantinad de cualquier caracter (en este ejemplo *) la izquierda de una palabra 
SELECT LPAD('sql',15,'*');

--- agregar (N) cantinad de cualquier caracter (en este ejemplo espacios) la izquierda de una palabra 
SELECT LPAD('sql',15,' ');

--- agregar (N) cantinad de cualquier caracter (en este ejemplo *) la derecha de una palabra 
SELECT RPAD('sql',15,'*');

--- agregar (N) cantinad de cualquier caracter (en este ejemplo espacios) la derecha de una palabra 
SELECT RPAD('sql',15,' ');

--- ejercicio de pading con una variable
SELECT LPAD ('*',id,'*')
FROM curso.alumnos
Where id < 10;

--- Ejercicio de pading con 1 variable y un ordenamiento especifico
SELECT LPAD ('*',id,'*'), carrera_id
FROM curso.alumnos
Where id < 10
ORDER BY carrera_id;

--- Ejercicio
SELECT LPAD ('+', CAST(row_id AS int), '+' )
FROM (
	SELECT ROW_NUMBER() OVER(ORDER BY carrera_id) AS row_id, *
	FROM curso.alumnos
) AS Alumnos_row_id
WHere row_id <= 7;

rpad coloca el relleno del lado derecho. En el ejemplo de la cadena sql la salida con rpad ser铆a: sql************
Observ茅 que cuando se usa rpad y lpad para obtener el relleno con puntos el resultado es el mismo

En rpad rellena por la derecha. Ejemplo:

SELECT rpad(鈥榮ql鈥,CAST(row_id AS int),鈥鈥)
FROM (
SELECT ROW_NUMBER() OVER(ORDER BY carrera_id) AS row_id,

FROM platzi.alumnos
)AS alumnos_with_row_id
WHERE row_id <=5
ORDER BY carrera_id;

En el valor 5 -> sql**

La principal diferencia es que ** lpad ** coloca la cadena principal a la izquiera y la subcadena a la derecha mientras que rpad es a la inversa.

RPAD agrega caracteres a la cadena a la derecha

Select rpad('sql', 10,'-')


SELECT RPAD('+',id,('+'))
FROM platzi.alumnos
WHERE id<8 

SELECT rpad (鈥鈥,CAST(row_id AS int) ,鈥鈥), carrera_id
FROM (
SELECT ROW_NUMBER () OVER () AS row_id, *
FROM platzi.alumnos
)AS alumnos_with_row_id
WHERE row_id <= 5;

**RPAD ** rellena al final.
LPAD rellena al inicio.

jugando con las funcione logre hacer un triangulo por ambos lados

SELECT CONCAT(
		LPAD(RPAD('*',id,'*'),11,'_'),
		LPAD('*',id,'*')
	)
FROM platzi.alumnos
WHERE id<10

De hecho, uno puede hacer lo siguiente y seguir铆a funcionando

SELECT lpad('', id, '*')
FROM students
LIMIT 10;

Resultado:
*
**









-- con estrellitas
select rpad('鉁', id, '鉁')
from alumnos
where id <20;

Chevere, lpad agrega lo que coloc贸 en el tercer par谩metro al lado izq.
Ejemplo:

SELECT lpad('suku',20,'--');
return: ----------------suku

y rpad al lado der.

SELECT rpad('suku',20,'--');
return: suku----------------

Desaf铆o:

SELECT rpad('sql',15,'+'); --right padding

-- Funci贸n que acolchona pero a la derecha en lugar de a la izquieda como lpad
select rpad('sql', 15, '-')

Realiza un relleno completo pero del lado derecho

Con rpad el relleno lo hace hacia la derecha a diferencia de lpad que es hacia la izquierda.

LPAD
Rellena a la izquierda

SELECT lpad('sql', 15, '*') 

Result: *******sql

LPAD
Rellena a la derecha

SELECT rpad('sql', 15, '*') 

Result: sql*******

select rpad(鈥3鈥,5, 鈥0鈥)

select lpad(鈥3鈥,5, 鈥0鈥)

como fuee鈥

Reto #12

-- Making two triangles
SELECT CONCAT(lpad('*', CAST(row_id AS int), '*'), '炉\_( 汀掳 蜏蕱 汀掳)_/炉', rpad('*', id, '*'))
FROM (
	SELECT ROW_NUMBER() OVER(ORDER BY id DESC) row_id, *
	FROM platzi.alumnos
	WHERE id < 10
) AS alumnos_row_number
WHERE id < 10;

He utilizado estas funciones en consultas donde los campos resultados estaban destinados a un archivo de texto formateado donde deb铆a respetar la longitud de cada campo completando a derecha o izquierda con espacios en blanco o con ceros, para campos alfanum茅ricos y num茅ricos respectivamente.

Triangulando

  • Existen funciones de padding (lpad, rpad) que permiten 鈥渞ellenar鈥 un string con un tama帽o especificado por par谩metro
  • Por ejemplo si ordenamos por id del 1 al 15 y damos la longitud del string por id nos queda un tri谩ngulo
SELECT lpad('*', id, '*')
FROM platzi.alumnos
LIMIT 15

La diferencia principal es que el espacio se llena esta vez a la derecha, si ponemos sql con 10 espacios el resultado es

sql*******

Para SQL Server:

-- GENERAR UNA CADENA DE CIERTO TAMA脩O
DECLARE @TEX VARCHAR(20) = 'SQL'
DECLARE @TAM INT = 6
SELECT RIGHT(REPLICATE('*',3) + @TEX, @TAM) 
SELECT LEFT(@TEX + REPLICATE('*', 3), @TAM)



-- CADENA CON LOS ID Y ASTERISCOS
USE [platzi]
DECLARE @TAM INT = 10
SELECT 
	RIGHT(REPLICATE('*',3) + CAST(id AS CHAR(4)), @TAM) AS derecha,
	LEFT(CAST(id AS VARCHAR(4)) + REPLICATE('*', 3), @TAM) AS izquierda
FROM platzi.alumnos
WHERE id < 101
GO


-- CADENA DE ASTERISTOS DEL TAMA脩O DEL ID
USE [platzi]
DECLARE @TAM INT = 10
SELECT REPLICATE('*',id) AS asteriscos	
FROM platzi.alumnos
WHERE id < 50
GO


-- CADENA DE ASTERISTOS DEL TAMA脩O DEL ID ORDENADO
USE [platzi]
SELECT REPLICATE('*',row_id) AS asteriscos
FROM
(	
	SELECT ROW_NUMBER() OVER(ORDER BY id) AS row_id, *
	FROM platzi.alumnos
) AS alumnos_with_row_id
WHERE row_id < 50
GO


rpad hace lo mismo que dpad, solo coloca la cadena del lado derecho ejemplo select lpad(鈥榟ola鈥, 3,鈥鈥); daria por resultado hola y rpad(鈥榟ola鈥, 3,鈥鈥); daria hola, esta funcion puede ser util al momento de censurar contrase帽as y correos

Les dejo por ac谩 una explicaci贸n corta y sencilla de LPAD y RPAD

https://docs.aws.amazon.com/es_es/redshift/latest/dg/r_LPAD.html

LPAD (string1, length, [ string2 ])
RPAD (string1, length, [ string2 ])```
SELECT RPAD('sql', id, '\*') FROM platzi.alumnos WHERE id <10; "s" "sq" "sql" "sql\*" "sql\*\*" "sql\*\*\*" "sql\*\*\*\*" "sql\*\*\*\*\*" "sql\*\*\*\*\*\*" SELECT LPAD('sql', id, '\*') FROM platzi.alumnos WHERE id <10; "s" "sq" "sql" "\*sql" "\*\*sql" "\*\*\*sql" "\*\*\*\*sql" "\*\*\*\*\*sql" "\*\*\*\*\*\*sql"
Select rpad('sql',15,'*');

Select rpad('sql',id,'*') 
from platzi.alumnos
Where id < 10;

Select rpad('*',id,'*') 
from platzi.alumnos
Where id < 10;

Select rpad('*',id,'*'), carrera_id
from platzi.alumnos
Where id < 10
order by carrera_id;

No te lo puedo creer

SET @base = 5;

SELECT CONCAT(LPAD("*", @base - id, " "), LPAD("", id -1, "*"))
FROM platzi.alumnos
WHERE id < @base;```

lpad rellena por la izquierda
**rpad **rellena por la derecha

SELECT lpad('sql',id,'*'),
	   rpad('sql',id,'*') 
FROM platzi.alumnos
WHERE id < 10;```

Estas funciones anteponen o anexan caracteres a una cadena, seg煤n una longitud especificada.

SELECT rpad('*', CAST(row_id AS int), '*')
FROM (
	SELECT ROW_NUMBER() OVER(ORDER BY carrera_id) AS row_id, *
	FROM platzi.alumnos
) AS alumnos_with_row_id
WHERE row_id <= 10
ORDER BY carrera_id;

RETO

SELECT LPAD(CONCAT(nombre, apellido), 20, '-'), RPAD(CONCAT(nombre, apellido), 20, '-')
FROM platzi.alumnos;

No encontr茅 su similar en sql de microsoft, la forma en la que lo resolv铆 es con replicate y extrayendo los datos con un right.

<SELECT  right((REPLICATE('+', 15) + 'sql'),15)  AS 'Line Code'  >