Environnement - Packages¶
In [27]:
# activation de l'environnement
using Pkg
Pkg.activate("./env_julia_sql")
Activating project at `c:\Users\ricco\Desktop\demo\env_julia_sql`
In [28]:
# lister les packages installés
Pkg.status()
Status `C:\Users\ricco\Desktop\demo\env_julia_sql\Project.toml` [a93c6f00] DataFrames v1.8.2 [d2f5444f] DuckDB v1.5.1 [7073ff75] IJulia v1.34.4 [fdbf4ff8] XLSX v0.11.3
Requêtes sur une table (Fournisseurs)¶
Dataframe => Table (en mémoire)¶
In [29]:
# chargement des données (DataFrame)
import DataFrames as DFR
import XLSX
# lecture -> DataFrame
dfFour = DFR.DataFrame(XLSX.readtable("./fournisseurs.xlsx"))
println(dfFour)
29×5 DataFrame Row │ Num_fournisseur Societe Adresse Ville Pays │ Int64 String String String String ─────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ 1 Exotic Liquids 49 Gilbert St. London Royaume-Uni 2 │ 2 Nouvelle-Orléans Cajun Delights P.O. Box 78934 Nouvelle-Orléans Etats-Unis 3 │ 3 Grandma Kelly's Homestead 707 Oxford Rd. Ann Arbor Etats-Unis 4 │ 4 Tokyo Traders 9-8 Sekimai Musashino-shi Tokyo Japon 5 │ 5 Cooperativa de Quesos 'Las Cabra… Calle del Rosal 4 Oviedo Espagne 6 │ 6 Mayumi's 92 Setsuko Chuo-ku Osaka Japon 7 │ 7 Pavlova, Ltd. 74 Rose St. Moonie Ponds Melbourne Australie 8 │ 8 Specialty Biscuits, Ltd. 29 King's Way Manchester Royaume-Uni 9 │ 9 PB Knäckebröd AB Kaloadagatan 13 Göteborg Suède 10 │ 10 Refrescos Americanas LTDA Av. das Americanas 12.890 São Paulo Brésil 11 │ 11 Heli Süßwaren GmbH & Co. KG Tiergartenstraße 5 Berlin Allemagne 12 │ 12 Plutzer Lebensmittelgroßmärkte AG Bogenallee 51 Frankfurt Allemagne 13 │ 13 Nord-Ost-Fisch Handelsgesellscha… Frahmredder 112a Cuxhaven Allemagne 14 │ 14 Formaggi Fortini s.r.l. Viale Dante, 75 Ravenna Italie 15 │ 15 Norske Meierier Hatlevegen 5 Sandvika Norvège 16 │ 16 Bigfoot Breweries 3400 - 8th Avenue Suite 210 Bend Etats-Unis 17 │ 17 Svensk Sjöföda AB Brovallavägen 231 Stockholm Suède 18 │ 18 Aux joyeux ecclésiastiques 203, Rue des Francs-Bourgeois Paris France 19 │ 19 New England Seafood Cannery Order Processing Dept. Boston Etats-Unis 20 │ 20 Leka Trading 471 Serangoon Loop, Suite Singapore Singapour 21 │ 21 Lyngbysild Lyngbysild Fiskebakken 10 Lyngby Danemark 22 │ 22 Zaanse Snoepfabriek Verkoop Rijnweg 22 Zaandam Pays-Bas 23 │ 23 Karkki Oy Valtakatu 12 Lappeenranta Finlande 24 │ 24 G'day, Mate 170 Prince Edward Parade Hunter'… Sydney Australie 25 │ 25 Ma Maison 2960 Rue St. Laurent Montréal Canada 26 │ 26 Pasta Buttini s.r.l. Via dei Gelsomini, 153 Salerno Italie 27 │ 27 Escargots Nouveaux 22, rue H. Voiron Montceau France 28 │ 28 Gai pâturage Bat. B - 3, rue des Alpes Annecy France 29 │ 29 Forêts d'érables 148 rue Chasseur Ste-Hyacinthe Canada
In [30]:
# création d'une interface en mémoire via DuckDB
import DuckDB
con = DuckDB.DBInterface.connect(DuckDB.DB)
# créer un alias qui permet d'accéder au dataframe
DuckDB.register_data_frame(con,dfFour,"tab_Four")
In [33]:
# lancer une première requête pour vérifier
# le résultat est typé en DataFrame pour être facile à visualiser
result = DuckDB.DBInterface.execute(con,"SELECT * FROM tab_Four") |> DFR.DataFrame
println(result)
29×5 DataFrame Row │ Num_fournisseur Societe Adresse Ville Pays │ Int64 String String String String ─────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ 1 Exotic Liquids 49 Gilbert St. London Royaume-Uni 2 │ 2 Nouvelle-Orléans Cajun Delights P.O. Box 78934 Nouvelle-Orléans Etats-Unis 3 │ 3 Grandma Kelly's Homestead 707 Oxford Rd. Ann Arbor Etats-Unis 4 │ 4 Tokyo Traders 9-8 Sekimai Musashino-shi Tokyo Japon 5 │ 5 Cooperativa de Quesos 'Las Cabra… Calle del Rosal 4 Oviedo Espagne 6 │ 6 Mayumi's 92 Setsuko Chuo-ku Osaka Japon 7 │ 7 Pavlova, Ltd. 74 Rose St. Moonie Ponds Melbourne Australie 8 │ 8 Specialty Biscuits, Ltd. 29 King's Way Manchester Royaume-Uni 9 │ 9 PB Knäckebröd AB Kaloadagatan 13 Göteborg Suède 10 │ 10 Refrescos Americanas LTDA Av. das Americanas 12.890 São Paulo Brésil 11 │ 11 Heli Süßwaren GmbH & Co. KG Tiergartenstraße 5 Berlin Allemagne 12 │ 12 Plutzer Lebensmittelgroßmärkte AG Bogenallee 51 Frankfurt Allemagne 13 │ 13 Nord-Ost-Fisch Handelsgesellscha… Frahmredder 112a Cuxhaven Allemagne 14 │ 14 Formaggi Fortini s.r.l. Viale Dante, 75 Ravenna Italie 15 │ 15 Norske Meierier Hatlevegen 5 Sandvika Norvège 16 │ 16 Bigfoot Breweries 3400 - 8th Avenue Suite 210 Bend Etats-Unis 17 │ 17 Svensk Sjöföda AB Brovallavägen 231 Stockholm Suède 18 │ 18 Aux joyeux ecclésiastiques 203, Rue des Francs-Bourgeois Paris France 19 │ 19 New England Seafood Cannery Order Processing Dept. Boston Etats-Unis 20 │ 20 Leka Trading 471 Serangoon Loop, Suite Singapore Singapour 21 │ 21 Lyngbysild Lyngbysild Fiskebakken 10 Lyngby Danemark 22 │ 22 Zaanse Snoepfabriek Verkoop Rijnweg 22 Zaandam Pays-Bas 23 │ 23 Karkki Oy Valtakatu 12 Lappeenranta Finlande 24 │ 24 G'day, Mate 170 Prince Edward Parade Hunter'… Sydney Australie 25 │ 25 Ma Maison 2960 Rue St. Laurent Montréal Canada 26 │ 26 Pasta Buttini s.r.l. Via dei Gelsomini, 153 Salerno Italie 27 │ 27 Escargots Nouveaux 22, rue H. Voiron Montceau France 28 │ 28 Gai pâturage Bat. B - 3, rue des Alpes Annecy France 29 │ 29 Forêts d'érables 148 rue Chasseur Ste-Hyacinthe Canada
Quelques requêtes¶
In [34]:
# liste des fournisseurs français
result = DuckDB.DBInterface.execute(con,
"""SELECT *
FROM tab_Four
WHERE Pays LIKE 'France'""") |> DFR.DataFrame
println(result)
3×5 DataFrame Row │ Num_fournisseur Societe Adresse Ville Pays │ Int64 String String String String ─────┼────────────────────────────────────────────────────────────────────────────────────────────── 1 │ 18 Aux joyeux ecclésiastiques 203, Rue des Francs-Bourgeois Paris France 2 │ 27 Escargots Nouveaux 22, rue H. Voiron Montceau France 3 │ 28 Gai pâturage Bat. B - 3, rue des Alpes Annecy France
In [35]:
# liste des Pays
result = DuckDB.DBInterface.execute(con,
"""SELECT DISTINCT(Pays)
FROM tab_Four""") |> DFR.DataFrame
println(result)
16×1 DataFrame Row │ Pays │ String ─────┼───────────── 1 │ Royaume-Uni 2 │ Etats-Unis 3 │ Japon 4 │ Espagne 5 │ Australie 6 │ Suède 7 │ Brésil 8 │ Allemagne 9 │ Italie 10 │ Norvège 11 │ France 12 │ Singapour 13 │ Danemark 14 │ Pays-Bas 15 │ Finlande 16 │ Canada
In [36]:
# pays qui apparaissent plus d'une fois
# dans la tables de fournisseurs
result = DuckDB.DBInterface.execute(con,
"""SELECT Pays,COUNT(Pays) as NbPays
FROM tab_Four
GROUP BY Pays
HAVING NbPays > 1""") |> DFR.DataFrame
println(result)
9×2 DataFrame Row │ Pays NbPays │ String Int64 ─────┼───────────────────── 1 │ Royaume-Uni 2 2 │ Etats-Unis 4 3 │ Japon 2 4 │ Australie 2 5 │ Suède 2 6 │ Allemagne 3 7 │ Italie 2 8 │ France 3 9 │ Canada 2
Requêtes avec jointures (+ Produits)¶
In [37]:
# Chargement et connexion avec la table Produits
# lecture -> DataFrame
dfProd = DFR.DataFrame(XLSX.readtable("./produits.xlsx"))
println(dfProd)
# alias en mémoire
DuckDB.register_data_frame(con,dfProd,"tab_Prod")
# vérification
println(DuckDB.DBInterface.execute(con,"SELECT * FROM tab_prod") |> DFR.DataFrame)
77×5 DataFrame Row │ Ref_produit Nom_produit Num_fournisseur Quantite_par_unite Prix_unitaire │ Int64 String Int64 String Float64 ─────┼────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ 1 Chai 1 10 boîtes x 20 sacs 18.0 2 │ 2 Chang 1 24 bouteilles (1 litre) 19.0 3 │ 3 Aniseed Syrup 1 12 bouteilles (550 ml) 10.0 4 │ 4 Chef Anton's Cajun Seasoning 2 48 pots (6 onces) 22.0 5 │ 5 Chef Anton's Gumbo Mix 2 36 boîtes 21.35 6 │ 6 Grandma's Boysenberry Spread 3 12 pots (8 onces) 25.0 7 │ 7 Uncle Bob's Organic Dried Pears 3 12 cartons (1 kg) 30.0 8 │ 8 Northwoods Cranberry Sauce 3 12 pots (12 onces) 40.0 9 │ 9 Mishi Kobe Niku 4 18 cartons (500 g) 97.0 10 │ 10 Ikura 4 12 pots (200 g) 31.0 11 │ 11 Queso Cabrales 5 1 carton (1 kg) 21.0 12 │ 12 Queso Manchego La Pastora 5 10 cartons (500 g) 38.0 13 │ 13 Konbu 6 1 boîtes (2 kg) 6.0 14 │ 14 Tofu 6 40 cartons (100 g) 23.25 15 │ 15 Genen Shouyu 6 24 bouteilles (250 ml) 15.5 16 │ 16 Pavlova 7 32 boîtes (500 g) 17.45 17 │ 17 Alice Mutton 7 20 boîtes (1 kg) 39.0 18 │ 18 Carnarvon Tigers 7 1 carton (16 kg) 62.5 19 │ 19 Teatime Chocolate Biscuits 8 10 boîtes x 12 pièces 9.2 20 │ 20 Sir Rodney's Marmalade 8 30 boîtes 81.0 21 │ 21 Sir Rodney's Scones 8 24 cartons x 4 pièces 10.0 22 │ 22 Gustaf's Knäckebröd 9 24 cartons (500 g) 21.0 23 │ 23 Tunnbröd 9 12 cartons (250 g) 9.0 24 │ 24 Guaraná Fantástica 10 12 canettes (355 ml) 4.5 25 │ 25 NuNuCa Nuß-Nougat-Creme 11 20 verres (450 g) 14.0 26 │ 26 Gumbär Gummibärchen 11 100 sacs (250 g) 31.23 27 │ 27 Schoggi Schokolade 11 100 pièces (100 g) 43.9 28 │ 28 Rössle Sauerkraut 12 25 canettes (825 g) 45.6 29 │ 29 Thüringer Rostbratwurst 12 50 sacs x 30 saucisses 123.79 30 │ 30 Nord-Ost Matjeshering 13 10 verres (200 g) 25.89 31 │ 31 Gorgonzola Telino 14 12 cartons (100 g) 12.5 32 │ 32 Mascarpone Fabioli 14 24 cartons (200 g) 32.0 33 │ 33 Geitost 15 1 carton (500 g) 2.5 34 │ 34 Sasquatch Ale 16 24 bouteilles (70 cl) 14.0 35 │ 35 Steeleye Stout 16 24 bouteilles (1 litre) 18.0 36 │ 36 Inlagd Sill 17 24 pots (250 g) 19.0 37 │ 37 Gravad lax 17 12 cartons (500 g) 26.0 38 │ 38 Côte de Blaye 18 12 bouteilles (75 cl) 263.5 39 │ 39 Chartreuse verte 18 1 bouteille (750 cc) 18.0 40 │ 40 Boston Crab Meat 19 24 boîtes (4 onces) 18.4 41 │ 41 Jack's New England Clam Chowder 19 12 canettes (330 ml) 9.65 42 │ 42 Singaporean Hokkien Fried Mee 20 32 cartons (1 kg) 14.0 43 │ 43 Ipoh Coffee 20 16 boîtes (500 g) 46.0 44 │ 44 Gula Malacca 20 20 cartons (2 kg) 19.45 45 │ 45 Røgede sild 21 1 carton (1kg) 9.5 46 │ 46 Spegesild 21 4 boîtes (250 g) 12.0 47 │ 47 Zaanse koeken 22 10 boîtes (4 onces) 9.5 48 │ 48 Chocolade 22 10 cartons 12.75 49 │ 49 Maxilaku 23 24 cartons (50 g) 20.0 50 │ 50 Valkoinen suklaa 23 12 plaquettes (100 g) 16.25 51 │ 51 Manjimup Dried Apples 24 50 cartons (300 g) 53.0 52 │ 52 Filo Mix 24 16 boîtes (2 kg) 7.0 53 │ 53 Perth Pasties 24 48 pièces 32.8 54 │ 54 Tourtière 25 16 tartes 7.45 55 │ 55 Pâté chinois 25 24 boîtes x 2 tartes 24.0 56 │ 56 Gnocchi di nonna Alice 26 24 cartons (250 g) 38.0 57 │ 57 Ravioli Angelo 26 24 cartons (250 g) 19.5 58 │ 58 Escargots de Bourgogne 27 24 pièces 13.25 59 │ 59 Raclette Courdavault 28 1 carton (5 kg) 55.0 60 │ 60 Camembert Pierrot 28 15 unités (300 g) 34.0 61 │ 61 Sirop d'érable 29 24 bouteilles (500 ml) 28.5 62 │ 62 Tarte au sucre 29 48 tartes 49.3 63 │ 63 Vegie-spread 7 15 pots (625 g) 43.9 64 │ 64 Wimmers gute Semmelknödel 12 20 sacs x 4 pièces 33.25 65 │ 65 Louisiana Fiery Hot Pepper Sauce 2 32 bouteilles (8 onces) 21.05 66 │ 66 Louisiana Hot Spiced Okra 2 24 pots (8 onces) 17.0 67 │ 67 Laughing Lumberjack Lager 16 24 bouteilles (12 onces) 14.0 68 │ 68 Scottish Longbreads 8 10 sacs x 8 pièces 12.5 69 │ 69 Gudbrandsdalsost 15 1 carton (10 kg) 36.0 70 │ 70 Outback Lager 7 24 bouteilles (355 ml) 15.0 71 │ 71 Fløtemysost 15 10 cartons (500 g) 21.5 72 │ 72 Mozzarella di Giovanni 14 24 cartons (200 g) 34.8 73 │ 73 Röd Kaviar 17 24 pots (150 g) 15.0 74 │ 74 Longlife Tofu 4 1 carton (5 kg) 10.0 75 │ 75 Rhönbräu Klosterbier 12 24 bouteilles (0,5 litre) 7.75 76 │ 76 Lakkalikööri 23 1 bouteille (500 ml) 18.0 77 │ 77 Original Frankfurter grüne Soße 12 12 boîtes 13.0 77×5 DataFrame Row │ Ref_produit Nom_produit Num_fournisseur Quantite_par_unite Prix_unitaire │ Int64 String Int64 String Float64 ─────┼────────────────────────────────────────────────────────────────────────────────────────────────────────── 1 │ 1 Chai 1 10 boîtes x 20 sacs 18.0 2 │ 2 Chang 1 24 bouteilles (1 litre) 19.0 3 │ 3 Aniseed Syrup 1 12 bouteilles (550 ml) 10.0 4 │ 4 Chef Anton's Cajun Seasoning 2 48 pots (6 onces) 22.0 5 │ 5 Chef Anton's Gumbo Mix 2 36 boîtes 21.35 6 │ 6 Grandma's Boysenberry Spread 3 12 pots (8 onces) 25.0 7 │ 7 Uncle Bob's Organic Dried Pears 3 12 cartons (1 kg) 30.0 8 │ 8 Northwoods Cranberry Sauce 3 12 pots (12 onces) 40.0 9 │ 9 Mishi Kobe Niku 4 18 cartons (500 g) 97.0 10 │ 10 Ikura 4 12 pots (200 g) 31.0 11 │ 11 Queso Cabrales 5 1 carton (1 kg) 21.0 12 │ 12 Queso Manchego La Pastora 5 10 cartons (500 g) 38.0 13 │ 13 Konbu 6 1 boîtes (2 kg) 6.0 14 │ 14 Tofu 6 40 cartons (100 g) 23.25 15 │ 15 Genen Shouyu 6 24 bouteilles (250 ml) 15.5 16 │ 16 Pavlova 7 32 boîtes (500 g) 17.45 17 │ 17 Alice Mutton 7 20 boîtes (1 kg) 39.0 18 │ 18 Carnarvon Tigers 7 1 carton (16 kg) 62.5 19 │ 19 Teatime Chocolate Biscuits 8 10 boîtes x 12 pièces 9.2 20 │ 20 Sir Rodney's Marmalade 8 30 boîtes 81.0 21 │ 21 Sir Rodney's Scones 8 24 cartons x 4 pièces 10.0 22 │ 22 Gustaf's Knäckebröd 9 24 cartons (500 g) 21.0 23 │ 23 Tunnbröd 9 12 cartons (250 g) 9.0 24 │ 24 Guaraná Fantástica 10 12 canettes (355 ml) 4.5 25 │ 25 NuNuCa Nuß-Nougat-Creme 11 20 verres (450 g) 14.0 26 │ 26 Gumbär Gummibärchen 11 100 sacs (250 g) 31.23 27 │ 27 Schoggi Schokolade 11 100 pièces (100 g) 43.9 28 │ 28 Rössle Sauerkraut 12 25 canettes (825 g) 45.6 29 │ 29 Thüringer Rostbratwurst 12 50 sacs x 30 saucisses 123.79 30 │ 30 Nord-Ost Matjeshering 13 10 verres (200 g) 25.89 31 │ 31 Gorgonzola Telino 14 12 cartons (100 g) 12.5 32 │ 32 Mascarpone Fabioli 14 24 cartons (200 g) 32.0 33 │ 33 Geitost 15 1 carton (500 g) 2.5 34 │ 34 Sasquatch Ale 16 24 bouteilles (70 cl) 14.0 35 │ 35 Steeleye Stout 16 24 bouteilles (1 litre) 18.0 36 │ 36 Inlagd Sill 17 24 pots (250 g) 19.0 37 │ 37 Gravad lax 17 12 cartons (500 g) 26.0 38 │ 38 Côte de Blaye 18 12 bouteilles (75 cl) 263.5 39 │ 39 Chartreuse verte 18 1 bouteille (750 cc) 18.0 40 │ 40 Boston Crab Meat 19 24 boîtes (4 onces) 18.4 41 │ 41 Jack's New England Clam Chowder 19 12 canettes (330 ml) 9.65 42 │ 42 Singaporean Hokkien Fried Mee 20 32 cartons (1 kg) 14.0 43 │ 43 Ipoh Coffee 20 16 boîtes (500 g) 46.0 44 │ 44 Gula Malacca 20 20 cartons (2 kg) 19.45 45 │ 45 Røgede sild 21 1 carton (1kg) 9.5 46 │ 46 Spegesild 21 4 boîtes (250 g) 12.0 47 │ 47 Zaanse koeken 22 10 boîtes (4 onces) 9.5 48 │ 48 Chocolade 22 10 cartons 12.75 49 │ 49 Maxilaku 23 24 cartons (50 g) 20.0 50 │ 50 Valkoinen suklaa 23 12 plaquettes (100 g) 16.25 51 │ 51 Manjimup Dried Apples 24 50 cartons (300 g) 53.0 52 │ 52 Filo Mix 24 16 boîtes (2 kg) 7.0 53 │ 53 Perth Pasties 24 48 pièces 32.8 54 │ 54 Tourtière 25 16 tartes 7.45 55 │ 55 Pâté chinois 25 24 boîtes x 2 tartes 24.0 56 │ 56 Gnocchi di nonna Alice 26 24 cartons (250 g) 38.0 57 │ 57 Ravioli Angelo 26 24 cartons (250 g) 19.5 58 │ 58 Escargots de Bourgogne 27 24 pièces 13.25 59 │ 59 Raclette Courdavault 28 1 carton (5 kg) 55.0 60 │ 60 Camembert Pierrot 28 15 unités (300 g) 34.0 61 │ 61 Sirop d'érable 29 24 bouteilles (500 ml) 28.5 62 │ 62 Tarte au sucre 29 48 tartes 49.3 63 │ 63 Vegie-spread 7 15 pots (625 g) 43.9 64 │ 64 Wimmers gute Semmelknödel 12 20 sacs x 4 pièces 33.25 65 │ 65 Louisiana Fiery Hot Pepper Sauce 2 32 bouteilles (8 onces) 21.05 66 │ 66 Louisiana Hot Spiced Okra 2 24 pots (8 onces) 17.0 67 │ 67 Laughing Lumberjack Lager 16 24 bouteilles (12 onces) 14.0 68 │ 68 Scottish Longbreads 8 10 sacs x 8 pièces 12.5 69 │ 69 Gudbrandsdalsost 15 1 carton (10 kg) 36.0 70 │ 70 Outback Lager 7 24 bouteilles (355 ml) 15.0 71 │ 71 Fløtemysost 15 10 cartons (500 g) 21.5 72 │ 72 Mozzarella di Giovanni 14 24 cartons (200 g) 34.8 73 │ 73 Röd Kaviar 17 24 pots (150 g) 15.0 74 │ 74 Longlife Tofu 4 1 carton (5 kg) 10.0 75 │ 75 Rhönbräu Klosterbier 12 24 bouteilles (0,5 litre) 7.75 76 │ 76 Lakkalikööri 23 1 bouteille (500 ml) 18.0 77 │ 77 Original Frankfurter grüne Soße 12 12 boîtes 13.0
In [38]:
# liste des produits, dont le prix est > 50, et leurs fournisseurs
result = DuckDB.DBInterface.execute(con,
"""SELECT A.Nom_produit, B.Societe, A.Prix_unitaire
FROM tab_Prod A
LEFT JOIN tab_Four B
ON A.Num_fournisseur = B.Num_fournisseur
WHERE A.Prix_unitaire > 50""") |> DFR.DataFrame
println(result)
7×3 DataFrame Row │ Nom_produit Societe Prix_unitaire │ String String Float64 ─────┼─────────────────────────────────────────────────────────────────────────── 1 │ Mishi Kobe Niku Tokyo Traders 97.0 2 │ Carnarvon Tigers Pavlova, Ltd. 62.5 3 │ Sir Rodney's Marmalade Specialty Biscuits, Ltd. 81.0 4 │ Thüringer Rostbratwurst Plutzer Lebensmittelgroßmärkte AG 123.79 5 │ Côte de Blaye Aux joyeux ecclésiastiques 263.5 6 │ Manjimup Dried Apples G'day, Mate 53.0 7 │ Raclette Courdavault Gai pâturage 55.0
In [39]:
# sachant que les DataFrame de Julia - à l'instar de Pandas/Python
# dispose des fonctionnalités de jointure -- ex. leftjoin
result = DFR.leftjoin(dfProd,dfFour,on = :Num_fournisseur)
println(result[result.Prix_unitaire .> 50,[:Nom_produit,:Societe,:Prix_unitaire]])
7×3 DataFrame Row │ Nom_produit Societe Prix_unitaire │ String String? Float64 ─────┼─────────────────────────────────────────────────────────────────────────── 1 │ Mishi Kobe Niku Tokyo Traders 97.0 2 │ Carnarvon Tigers Pavlova, Ltd. 62.5 3 │ Sir Rodney's Marmalade Specialty Biscuits, Ltd. 81.0 4 │ Thüringer Rostbratwurst Plutzer Lebensmittelgroßmärkte AG 123.79 5 │ Côte de Blaye Aux joyeux ecclésiastiques 263.5 6 │ Manjimup Dried Apples G'day, Mate 53.0 7 │ Raclette Courdavault Gai pâturage 55.0