Está en la página 1de 6

CHAPTER 1

INNER JOIN
-SELECT *
FROM cities
INNER JOIN countries
ON cities.country_code = countries.code;
Devuelve todos los datos de la unión de las tablas cities y countries por me dio de la columna
country_code de la tabla cities y de code de la columna countrie.
-SELECT cities.name AS city, countries.name AS country,region
FROM cities
INNER JOIN countries
ON cities.country_code = countries.code;
Al ver que la columna “name” se repite en dos tablas que queremos unir, si no especificamos
la tabla a la que pertenece la columna SQL no dira que es ambiguo por lo que colocamos
cities.name y countries.name. El presente código devuelve la ciudad el país y la región de la
unión de la tabla country y cities.
----Unión interna (2)
En lugar de escribir el nombre completo de la tabla, puede usar el alias de la tabla como acceso
directo. Para las tablas, también AS puede agregar el alias inmediatamente después del
nombre de la tabla con un espacio. Echa un vistazo al alias de cities y a countries continuación.
-SELECT c1.name AS city, c2.name AS country
FROM cities AS c1
INNER JOIN countries AS c2
ON c1.country_code = c2.code;
Tenga en cuenta que para seleccionar un campo en su consulta que aparezca en varias tablas,
necesitará identificar a qué tabla / alias de tabla se refiere utilizando “.” en su SELECT
declaración.
Ahora explorará una forma de obtener datos de las tablas countries y economies para
examinar la tasa de inflación tanto para 2010 como para 2015.
EJERCICIO: Unir las tablas countries(izquierda) y economies(derecha) alias countries AS c y
economies AS e. Especifique el campo para que coincida con las tablas ON.
De esta unión SELECT: c.code, alias como country_code. name, year Y inflation_rate, no un
alias.
- SELECT c.code AS country_code, name, year, inflation_rate
FROM countries AS c
INNER JOIN economies AS e
ON c.code = e.code
------ Unión interna (3)
La capacidad de combinar múltiples combinaciones en una sola consulta es una característica
poderosa de SQL, por ejemplo:

SELECT *
FROM left_table
INNER JOIN right_table
ON left_table.id = right_table.id
INNER JOIN another_table
ON left_table.id = another_table.id;
Como puede ver aquí, resulta tedioso escribir continuamente nombres largos de tablas en
combinaciones. ¡Esto es cuando se vuelve útil alias cada tabla usando la primera letra de su
nombre (por ejemplo countries AS c)! Es una práctica estándar alias de esta manera y, si elige
alias tablas o se le pide específicamente para un ejercicio en este curso, debe seguir este
protocolo
Ahora, para cada país, desea obtener el nombre del país, su región, y la tasa de fertilidad y la
tasa de desempleo para 2010 y 2015.
Tenga en cuenta que los resultados deberían funcionar a lo largo de este curso con o sin alias
de tabla a menos que se especifique de manera diferente.
1.
a) Unión interna countries(izquierda) y populations(derecha) en los campos codey
country_coderespectivamente.
b) Alias countries AS cy populations AS p.
c) Seleccione code, namey regiondesde countriesy también seleccione yeary
fertility_ratedesde populations(5 campos en total).
-SELECT c.code, c.name, c.region, p.year, p.fertility_rate
FROM countries AS c
INNER JOIN populations AS p
ON c.code = p.country_code
2.
a) Agregue una combinación interna adicional economiesa su consulta anterior
uniéndose a code.
b) Incluya la unemployment_ratecolumna que estuvo disponible al unirse con
economies.
c) Tenga yearen cuenta que aparece en ambos populationsy economies, por lo que debe
usar explícitamente en e.yearlugar de yearcomo lo hizo antes.
-SELECT c.code, c.name, c.region, e.year, p.fertility_rate,e.unemployment_rate
FROM countries AS c
INNER JOIN populations AS p
ON c.code = p.country_code
INNER JOIN economies AS e
ON c.code = e.code
3.
a) Desplácese hacia abajo por el resultado de la consulta y eche un vistazo a los
resultados de Albania de su consulta anterior. ¿Te parece algo raro?
b) El problema con hacer su última unión c.code = e.codey no incluirlo yeares que, por
ejemplo, el valor de 2010 fertility_ratetambién se combina con el valor de 2015 para
unemployment_rate.
c) Arregle su consulta anterior: en su última ONcláusula, use ANDpara agregar una
condición de unión adicional. Además de unirse codeen cy e, también unirse yearen ey
p.
SELECT c.code, c.name, c.region, e.year, p.fertility_rate,e.unemployment_rate
FROM countries AS c
INNER JOIN populations AS p
ON c.code = p.country_code
INNER JOIN economies AS e
ON c.code = e.code
AND e.year = p.year
USING for INNER JOIN
Unión interna con el uso
Al unir tablas con un nombre de campo común, p. Ej.
-SELECT *
FROM countries
INNER JOIN economies
ON countries.code = economies.code

Puedes usar USING como atajo:


SELECT *
FROM countries
INNER JOIN economies
USING(code)
Ahora explorará cómo se puede hacer esto con las tablas countries y languages.
Ejercicio:
Inner join countries on the left and languages on the right with USING(code).
Select the fields corresponding to:
country name AS country,
continent name,
language name AS language, and
whether or not the language is official.
Remember to alias your tables using the first letter of their names
-SELECT c.name AS country, continent, l.name AS language, official
FROM countries AS c
INNER JOIN languages AS l
USING(code)

SELF-JOIN
En este ejercicio, usará la populations tabla para realizar una autounión y calcular el aumento
porcentual de la población de 2010 a 2015 para cada código de país.
Como unirá la populations tabla a sí mismo, puede usar alias populations como p1y también
populations como p2. Esta es una buena práctica siempre que tenga un alias y sus tablas
tengan la misma primera letra. Tenga en cuenta que es necesario que coloque alias en las
tablas con autouniones.
Ejercicio:
1.
a) Join populations with itself ON country_code.
b) Select the country_code from p1 and the size field from both p1 and p2. SQL won't
allow same-named fields, so alias p1.size as size2010 and p2.size as size2015.
-SELECT p1.country_code, p1.size as size2010, p2.size as size2015
FROM populations AS p1
INNER JOIN populations AS p2
ON p1.country_code = p2.country_code
2. Notice from the result that for each country_code you have four entries laying out all
combinations of 2010 and 2015.
a) Extend the ON in your query to include only those records where the p1.year (2010)
matches with p2.year - 5 (2015 - 5 = 2010). This will omit the three entries
per country_code that you aren't interested in.
-SELECT p1.country_code, p1.size as size2010, p2.size as size2015
FROM populations AS p1
INNER JOIN populations AS p2
ON p1.country_code = p2.country_code
AND p1.year = p2.year – 5

3. As you just saw, you can also use SQL to calculate values like p2.year - 5 for you. With
two fields like size2010 and size2015, you may want to determine the percentage
increase from one field to the next:
With two numeric fields AA and BB, the percentage growth from AA to BB can be calculated
as (B−A)/A∗100.0(B−A)/A∗100.0.
Add a new field to SELECT, aliased as growth_perc, that calculates the percentage
population growth from 2010 to 2015 for each country, using p2.size and p1.size.
-SELECT p1.country_code,
p1.size AS size2010,
p2.size AS size2015,
((p2.size - p1.size)/p1.size * 100.0) AS growth_perc
FROM populations AS p1
INNER JOIN populations AS p2
ON p1.country_code = p2.country_code
AND p1.year = p2.year – 5;
“WHEN AND THEN” CASE
A menudo es útil mirar un campo numérico no como datos sin procesar, sino como
pertenecientes a diferentes categorías o grupos. Se puede
utilizar CASEcon WHEN, THEN, ELSE, y END para definir un nuevo campo de agrupamiento.

Using the countries table, create a new field AS geosize_group that groups the


countries into three groups:

 If surface_area is greater than 2 million, geosize_group is 'large'.


 If surface_area is greater than 350 thousand but not larger than 2
million, geosize_group is 'medium'.
 Otherwise, geosize_group is 'small'.

-SELECT name, continent, code, surface_area,


CASE WHEN surface_area > 2000000 THEN 'large'
WHEN surface_area > 350000 THEN 'medium'
ELSE 'small' END
AS geosize_group
FROM countries;

INTO:
La tabla que creó con el geosize_groupcampo agregado se ha cargado aquí con el
nombre countries_plus. Observe el uso (y la ubicación de) el INTOcomando para crear
esta countries_plustabla:

SELECT name, continent, code, surface_area,


CASE WHEN surface_area > 2000000
THEN 'large'
WHEN surface_area > 350000
THEN 'medium'
ELSE 'small' END
AS geosize_group
INTO countries_plus
FROM countries;

Ahora explorará la relación entre el tamaño de un país en términos de superficie y en términos


de población utilizando campos de agrupación creados con CASE.

Using the populations table focused only for the year 2015, create a new field AS


popsize_group to organize population size into

 'large' (> 50 million),
 'medium' (> 1 million), and
 'small' groups.

Select only the country code, population size, and this new popsize_group as fields.

-SELECT country_code, size,


CASE WHEN size > 50000000 THEN 'large'
WHEN size > 1000000 THEN 'medium'
ELSE 'small' END
AS popsize_group
FROM populations
WHERE year = 2015 ;

 Use INTO to save the result of the previous query as pop_plus. You can
see an example of this in the countries_plus code in the assignment
text. Make sure to include a ; at the end of your WHERE clause!
 Then, include another query below your first query to display all the
records in pop_plus using SELECT * FROM pop_plus; so that you
generate results and this will display pop_plus in query result.
-SELECT country_code, size,
CASE WHEN size > 50000000 THEN 'large'
WHEN size > 1000000 THEN 'medium'
ELSE 'small' END
AS popsize_group
INTO pop_plus
FROM populations
WHERE year = 2015;
SELECT *
FROM pop_plus;
 Keep the first query intact that creates pop_plus using INTO.
 Write a query to join countries_plus AS c on the left with pop_plus AS p on
the right matching on the country code fields.
 Sort the data based on geosize_group, in ascending order so that large appears
on top.
 Select the name, continent, geosize_group, and popsize_group fields.

-SELECT country_code, size,


CASE WHEN size > 50000000
THEN 'large'
WHEN size > 1000000
THEN 'medium'
ELSE 'small' END
AS popsize_group
INTO pop_plus
FROM populations
WHERE year = 2015;

SELECT name, continent, geosize_group, popsize_group


FROM countries_plus as c
inner join pop_plus as p
ON c.code = p.country_code
ORDER BY geosize_group;

También podría gustarte