Otra forma de aplicar IF ELSE:
SELECT
ST_Distance_Sphere(station_one, station_two) / IF(meters, 1, 1000) AS distance;
Introducción
¿Cuál es la diferencia entre MySQL y MariaDB?
Proyecto del curso: metro de CDMX
Diagramas Entidad Relación
Diagramas conceptuales vs. diagramas físicos
Diagrama conceptual: estableciendo relaciones
Diagrama físico: detalles en las tablas
Reto: relaciones en el diagrama físico
Instalando nuestras herramientas
Instalación de MariaDB en Windows
Instalación de MariaDB en Linux
Instalación de MariaDB en macOS
Sentencias básicas
Archivos SQL: CREATE DATABASE
Manejo de usuarios para la base de datos
CREATE TABLE
Modificando tablas con ALTER TABLE
Playground: Manejo de Tablas con SQL
Insertando información en la base de datos
Actualizando información: UPDATE
Borrando datos: DELETE
Playground: INSERT, UPDATE y DELETE en SQL
Listando datos: SELECT
Playground: Metro de CDMX en SQL
Consultas anidadas
¿Qué son las consultas anidadas?
Creando nuestra primer consulta anidada
Playground: Metro de Bogotá en SQL
Geolocalización
¿Cómo funciona la geolocalización?
Creando nuestras consultas de geolocalización
Reto: geolocalización con consultas anidadas
Stored Procedures
¿Qué son los Stored Procedures?
Crea tus primeras Stored Procedures
Prepared statements
Triggers
¿Qué son los triggers?
Crea tus primeros triggers
Triggers compuestos
Bonus
Confesión personal: phpMyAdmin es superior
Próximos pasos
Cómo seguir aprendiendo SQL
You don't have access to this class
Keep learning! Join and start boosting your career
Contributions 11
Questions 0
SELECT
ST_Distance_Sphere(station_one, station_two) / IF(meters, 1, 1000) AS distance;
Cálculo de distancia por nombre de las estaciones, optimizado la lógica requerida
USE metro_cdmx;
DELIMITER //
CREATE PROCEDURE TEST(IN stationName1 VARCHAR(50), IN stationName2 VARCHAR(50), IN itsInKilometers BOOLEAN)
BEGIN
DECLARE response FLOAT;
SET response = (
SELECT ST_Distance_Sphere(
(
SELECT `locations`.`location`
FROM `locations`
INNER JOIN `stations`
ON `stations`.`id` = `locations`.`station_id`
WHERE `stations`.`name` COLLATE utf8mb4_unicode_ci = stationName1
),
(
SELECT `locations`.`location`
FROM `locations`
INNER JOIN `stations`
ON `stations`.`id` = `locations`.`station_id`
WHERE `stations`.`name` COLLATE utf8mb4_unicode_ci = stationName2
)
) AS distances
);
IF itsInKilometers THEN
SET response = (response/1000);
END IF;
SELECT response;
END //
Y para invocar en la cónsola
CALL TEST('Eugenia', 'Tepito', 0);
Calcula la distancia ingresando el NOMBRE DE LAS ESTACIONES en metros o en kilómetros.
Variables y Parámetros tipo In, Out e INOUT
Me anime a hacer el procedure asi con la consulta de la clase pasada, les muestro como queda
enamorao de las bases de datos c:
Aparecio un error de collate pero se soluciono con esa linea extra despues de where
La palabra reservada DELIMITER de mysql se utiliza para cambiar el símbolo que el motor de mysql utilizará para interpretar el final de una sentencia SQL. Por defecto se utiliza el símbolo “;” sin embargo, en la definición de un bloque de código de SQL, por ejemplo para crear procedimientos almacenados, conviene cambiar este delimitador a cualquer otro símbolo como puede ser “//” . Esto sirve para indicarle a mysql que debe compilar todo el bloque de código comprendido entre “DELIMITER //” y “//”. Luego podemos volver a cambiar el delimitador a “;” simplemente utilizando “DELIMITER ;” para seguir con sentencias normales.
USE metro_cdmx;
DELIMITER //
CREATE PROCEDURE calculate_distance_between_lines(
IN station_one POINT,
IN station_two POINT
)
BEGIN
SELECT
ST_Distance_Sphere(station_one, station_two) AS distance;
END //
DELIMITER ;
Si alguien le da un error al mometo de poner : DELIMITER // , pueden probar otra manera que es: DELIMITER $$
Want to see more contributions, questions and answers from the community?