Skip to content

Commit 24d7d6d

Browse files
[ADD] Solution to task related to data separation
1 parent 5d1abac commit 24d7d6d

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

tasks/05-data-separation.sql

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
-- Tarea con countryLanguage
2+
SELECT *
3+
FROM countrylanguage;
4+
5+
-- Crear la tabla de language
6+
SELECT *
7+
FROM language;
8+
9+
-- Sequence and defined type
10+
CREATE SEQUENCE IF NOT EXISTS language_code_seq;
11+
12+
ALTER SEQUENCE language_code_seq RESTART WITH 1;
13+
14+
-- Table Definition
15+
CREATE TABLE "public"."language" (
16+
"code" int4 NOT NULL DEFAULT nextval('language_code_seq'::regclass),
17+
"name" text NOT NULL,
18+
PRIMARY KEY ("code")
19+
);
20+
21+
-- Crear una columna en countrylanguage
22+
ALTER TABLE countrylanguage
23+
ADD COLUMN languagecode varchar(3);
24+
25+
-- Insertar los idiomas en la tabla language
26+
SELECT DISTINCT(language)
27+
FROM countrylanguage
28+
ORDER BY language ASC;
29+
30+
INSERT INTO language (name)
31+
SELECT DISTINCT(language)
32+
FROM countrylanguage
33+
ORDER BY language ASC;
34+
35+
-- Empezar con el select para confirmar lo que vamos a actualizar
36+
SELECT
37+
cl.language,
38+
cl.languagecode,
39+
(
40+
SELECT l.name
41+
FROM language AS l
42+
WHERE l.name = cl.language
43+
)
44+
FROM countrylanguage AS cl;
45+
46+
-- Actualizar todos los registros
47+
UPDATE countrylanguage AS cl
48+
SET languagecode = (
49+
SELECT l.code
50+
FROM language AS l
51+
WHERE l.name = cl.language
52+
);
53+
54+
-- Cambiar tipo de dato en countrylanguage - languagecode por int4
55+
ALTER TABLE countrylanguage
56+
ALTER COLUMN languagecode TYPE INT4
57+
USING languagecode::INTEGER;
58+
59+
-- Crear el foreign key y constraints de no nulo el language_code
60+
ALTER TABLE countrylanguage
61+
ALTER COLUMN languagecode SET NOT NULL;
62+
63+
ALTER TABLE countrylanguage
64+
ADD CONSTRAINT fk_language_code
65+
FOREIGN KEY (languagecode)
66+
REFERENCES language (code);
67+
68+
-- Revisar lo creado
69+
SELECT *
70+
FROM countrylanguage;
71+
72+
SELECT *
73+
FROM language;
74+
75+
SELECT
76+
cl.language,
77+
cl.languagecode,
78+
(
79+
SELECT l.name
80+
FROM language AS l
81+
WHERE l.code = cl.languagecode
82+
)
83+
FROM countrylanguage AS cl;

0 commit comments

Comments
 (0)