23rd Jun 2022 8 Leseminuten SQL für eine Filmdatenbank verwenden, um zu entscheiden, was man sich ansehen soll Andrew Bone SQL lernen Inhaltsverzeichnis Fertigstellung des SQL-Filmdatenbank-Downloads SQL-Übungen mit einer Filmdatenbank Suche nach allen Filmen eines bestimmten Regisseurs Anwendung von SQL auf eine große bestehende Filmdatenbank Wir zeigen Ihnen, wie Sie mit SQL große Datensätze analysieren und wertvolle Erkenntnisse gewinnen können. In diesem Fall helfen wir Ihnen bei der Auswahl des nächsten Films, den Sie sich ansehen möchten, indem wir einen IMDb-Datensatz verwenden. In diesem Artikel werden wir ein Datensatzverzeichnis von IMDb herunterladen. Sie wissen nicht, was Sie sich heute Abend ansehen sollen? Durchstöbern Sie Netflix ohne Ende? Entscheiden Sie mit Hilfe von SQL, was Sie sehen wollen! Wir werden einen bestehenden IMDb-Datensatz in SQL laden. Wir werden die Daten auf verschiedene Arten analysieren, z. B. durch Sortieren der Filme nach ihrer Bewertung, nach den Schauspielern, die in dem Film mitspielen, oder nach anderen ähnlichen Kriterien. Wie in diesem Blog-Beitrag über das Üben von SQL erwähnt, kann man SQL am besten üben, indem man praktische Erfahrungen beim Lösen von realen Problemen sammelt, und genau das werden wir tun. Wenn Sie über Grundkenntnisse in SQL verfügen, sollten Sie diesem Artikel problemlos folgen können. Wenn Sie keinerlei IT-Erfahrung haben, sollten Sie mit diesem SQL von A bis Z beginnen, der sich an Personen richtet, die keine IT-Erfahrung haben und ihr Abenteuer mit SQL beginnen möchten. Fangen wir damit an, wie wir die Filmdaten in unsere SQL-Datenbank bekommen. Fertigstellung des SQL-Filmdatenbank-Downloads Gehen wir den Prozess des Herunterladens unserer Daten und des Ladens in ein Datenbankmanagementsystem (DBMS) Schritt für Schritt durch. Zu den gängigen DBMS gehören MySQL, Oracle DB, PostgreSQL und SQL Server. Obwohl sich dieser Artikel auf Filmdaten konzentriert, können Sie auch einen ganz anderen Datensatz wählen. Schauen Sie sich diese Liste kostenloser Online-Datensätze an, die Sie verwenden können, und finden Sie denjenigen, der Sie interessiert. Der Import dieser Datensätze ist unabhängig davon, welchen Datensatz Sie verwenden, ähnlich. Öffnen Sie die von Ihnen verwendete Variante von SQL. In diesem Beispiel verwende ich SQL Server Management Studio, aber die Schritte sollten für alle anderen SQL-Varianten ähnlich sein. Fangen wir an: Die Datensatzdateien können unter https://datasets.imdbws.com/ abgerufen und heruntergeladen werden . Die Daten werden täglich aufgefrischt. Laden Sie alle aufgeführten Dateien herunter: grundlagen.tsv.gz akas.tsv.gz grundlagen.tsv.gz Mannschaft.tsv.gz Folge.tsv.gz Direktoren.tsv.gz bewertungen.tsv.gz Entpacken Sie die heruntergeladenen Zip-Dateien. Das Endergebnis ist eine TSV-Datei (tabulatorgetrennt) für jede Tabelle. Bereinigen Sie diese Daten und konvertieren Sie sie in CSV, damit sie in einem besser verwertbaren Zustand sind: Öffnen Sie jede Datei in einer Tabellenkalkulationsanwendung wie Google Sheets oder Microsoft Excel. Suchen Sie alle Vorkommen von "\N" und ersetzen Sie sie durch eine leere Zelle. Speichern Sie die Datei als CSV-Datei. Dies erleichtert den Import in das DBMS Ihrer Wahl. Öffnen Sie Ihr DBMS. Erstellen Sie ein neues Schema oder eine neue Tabelle, indem Sie mit der rechten Maustaste auf den linken Bereich klicken und "Neue Datenbank" auswählen. Ich habe meine neue Datenbank "imdb" genannt. Klicken Sie mit der rechten Maustaste auf die Datenbank → Aufgaben → Flat File importieren und folgen Sie dem Importassistenten, um eine Tabelle für jede Datei zu erstellen: Legen Sie für jede Spalte, die Sie importieren, einen gültigen Datentyp fest. Ich empfehle die Verwendung von nvarchar(MAX) für Zeichenkettenspalten, da Sie nicht wissen, wie lang die Zeichenketten für jedes Feld sein werden. Sie können den Datentyp der Spalten später bei Bedarf ändern. Lassen Sie Nullwerte für alle Zeilen zu. Dadurch werden Probleme beim Import vermieden. Wiederholen Sie diesen Vorgang für alle Dateien, die Sie heruntergeladen haben. Wenn Sie diese Schritte abgeschlossen haben, ist Ihre SQL-Filmdatenbank fertig! Sie können nun mit der Analyse und Abfrage der Daten beginnen. SQL-Übungen mit einer Filmdatenbank Glücklicherweise wurde dieser Datensatz mit einer beschreibenden Dokumentation geliefert. Um einen noch besseren Überblick über die Daten zu erhalten, können Sie schnell die ersten 1000 Zeilen aus jeder Tabelle auswählen. Lassen Sie uns mit der Suche nach unserem ersten Film beginnen. Stellen Sie sich vor, Sie wollen einen Horrorfilm sehen. Wie können wir nur die Horrorfilme herausfiltern? Zum Glück ist diese Aufgabe erschreckend einfach. SELECT * FROM title_basics WHERE genres LIKE '%Horror%' Wenn diese Abfrage Verwirrung stiftet, öffnen Sie diesen SQL-Spickzettel, um Ihr Wissen aufzufrischen. Lassen Sie diesen Spickzettel auch für den Rest des Tutorials geöffnet, um Ihnen zu helfen! Was wäre, wenn wir die Liste der Horrorfilme noch weiter verfeinern wollten? Wir könnten die Ergebnisse auf Horrorfilme beschränken, die nach 1990 entstanden sind, eine Durchschnittsbewertung von über 9,0 haben und mindestens 10.000 Stimmen haben. Dazu müssen wir Daten aus mehreren Tabellen abrufen. Wenn wir jede Tabelle öffnen und einen Blick auf die Spaltenüberschriften werfen, sehen wir, dass die folgenden Tabellen betroffen sind: title_basics: behandelt das Genre des Films und das Erscheinungsjahr (dargestellt durch die Spalte startYear). title_ratingsBewertung (averageRating) und Stimmen (numVotes). Die beiden Tabellen können über die gemeinsame Spalte tconst verbunden werden. Wie in der IMDb-Dokumentation hier erläutert, ist tconst ein alphanumerischer eindeutiger Bezeichner des Titels. Lassen Sie uns unsere Abfrage schreiben: SELECT titleType, primaryTitle, startYear, genres, averageRating, numVotes FROM title_basics INNER JOIN title_ratings ON title_basics.tconst = title_ratings.tconst WHERE genres LIKE '%Horror%' AND startYear > 1989 AND averageRating > 9.0 AND numVotes > 10000 titleTypeprimaryTitlestartYeargenresaverageRatingnumVotes videoGameResident Evil 42005Action,Adventure,Horror9.211406 Die Ausführung dieser Abfrage liefert ein einziges Ergebnis, aber nicht das gewünschte Ergebnis! Bei näherer Betrachtung sehen wir, dass es sich bei diesem Titel um ein Videospiel und nicht um einen Film handelt. Ändern wir unsere Abfrage so ab, dass sie nur Filme enthält, und erweitern wir die Suche, indem wir die Mindestanzahl der erforderlichen Stimmen auf 1.000 und die Mindestbewertung auf 8,0 reduzieren. SELECT * FROM title_basics INNER JOIN title_ratings ON title_basics.tconst = title_ratings.tconst WHERE genres LIKE '%Horror%' AND startYear > 1989 AND averageRating > 8.0 AND numVotes > 1000 AND titleType = 'movie' titleTypeprimaryTitlestartYeargenresaverageRatingnumVotes movieManichitrathazhu1993Comedy,Horror,Music8.79468 Die Ausführung dieser Abfrage liefert ebenfalls ein einziges Ergebnis! Es sieht so aus, als müssten wir uns nicht mehr entscheiden, was wir uns ansehen wollen, da es nur eine Option gibt, die unseren Kriterien entspricht! Suche nach allen Filmen eines bestimmten Regisseurs Lassen Sie uns ein anderes Szenario durchspielen. Was, wenn wir alle Filme sehen wollen, bei denen Steven Spielberg Regie geführt hat? Wie würde das funktionieren? Wenn wir uns die Tabellen ansehen, können wir Folgendes feststellen: name_basics: Sie enthält die Namen aller Schauspieler, Autoren, Regisseure und anderer Personen, die an der Erstellung von Film- und Fernsehtiteln beteiligt waren. title_crew: Sie dient als Verknüpfungstabelle für Titel, Regisseure und Autoren. Wir werden diese Tabelle verwenden, um Steven Spielberg mit den Titeln zu verbinden, an denen er beteiligt ist. title_basics: Wir haben diese Tabelle bereits verwendet. Sie enthält Titelinformationen wie Name, Erscheinungsdatum, Bewertung usw. Machen wir uns an die Arbeit! Schreiben wir eine Abfrage für die Tabelle name_basics, um zu versuchen, den berühmten Regisseur Steven Spielberg zu finden. SELECT nconst, primaryName, birthYear, deathYear, primaryProfession, knownForTitles FROM name_basics WHERE primaryName LIKE 'steven spielberg' Die Ausführung dieser Abfrage führt zu einem einzigen Ergebnis: nconstprimaryNamebirthYeardeathYearprimaryProfessionknownForTitles nm0000229Steven Spielberg1946NULLproducer,writer,directortt0082971,tt0083866,tt0120815,tt0108052 Dies gibt uns den wichtigen Wert nconst. Aus der Dokumentation wissen wir, dass nconst der alphanumerische eindeutige Bezeichner des Namens/der Person ist. Diesen Wert können wir in die Tabelle title_crew füttern, die die Informationen zu Regisseur und Autor für alle Titel in IMDb enthält, und Steven Spielberg allen Titeln zuordnen, an denen er beteiligt war. SELECT * from title_crew where directors LIKE 'nm0000229' Die Ausführung dieser Abfrage führt zu einer Liste von 45 Titeln. Aus dem Wert der Spalte Regisseure können Sie ersehen, dass Steven Spielberg der Regisseur von allen war. Wir brauchen eine Möglichkeit, diese Liste von Titeln zusammen mit der title_basics Tabelle zu verwenden, um den Namen der Filme zu erhalten, anstatt nur den tconst. Verwenden wir dafür eine Subquery! SELECT titleType, primaryTitle, startYear, genres FROM title_basics WHERE titleType LIKE 'movie' AND tconst IN (SELECT tconst FROM title_crew WHERE directors LIKE 'nm0000229') Führen Sie diese Abfrage aus, um das Ergebnis zu sehen: titleTypeprimaryTitlestartYeargenres movieFirelight1964Sci-Fi,Thriller movieThe Sugarland Express1974Crime,Drama movieJaws1975Adventure,Thriller movieClose Encounters of the Third Kind1977Drama,Sci-Fi movie19411979Action,Comedy,War movieIndiana Jones and the Raiders of the Lost Ark1981Action,Adventure movieE.T. the Extra-Terrestrial1982Family,Sci-Fi movieIndiana Jones and the Temple of Doom1984Action,Adventure movieThe Color Purple1985Drama movieEmpire of the Sun1987Action,Drama,History movieAlways1989Drama,Fantasy,Romance movieIndiana Jones and the Last Crusade1989Action,Adventure movieHook1991Adventure,Comedy,Family movieJurassic Park1993Action,Adventure,Sci-Fi movieSchindler's List1993Biography,Drama,History movieAmistad1997Biography,Drama,History movieThe Lost World: Jurassic Park1997Action,Adventure,Sci-Fi movieSaving Private Ryan1998Drama,War movieMinority Report2002Action,Crime,Mystery movieA.I. Artificial Intelligence2001Drama,Sci-Fi movieCatch Me If You Can2002Biography,Crime,Drama movieThe Terminal2004Comedy,Drama,Romance movieIndiana Jones and the Kingdom of the Crystal Skull2008Action,Adventure movieWar of the Worlds2005Adventure,Sci-Fi,Thriller movieMunich2005Action,Drama,History movieLincoln2012Biography,Drama,History movieThe Adventures of Tintin2011Action,Adventure,Animation Da haben wir sie, alle Steven Spielberg-Filmtitel aus unserer Datenbank! Hören Sie hier nicht auf! Schreiben Sie Ihre eigenen benutzerdefinierten Abfragen, um weitere Erkenntnisse aus diesem großen Datensatz zu gewinnen. Es gibt viele Möglichkeiten, SQL zu üben. Wenn Sie genug von der Arbeit mit diesem Datensatz haben, finden Sie in diesem Beitrag über 12 Möglichkeiten, SQL online zu lernen, weitere hervorragende Lernressourcen. Anwendung von SQL auf eine große bestehende Filmdatenbank Sie haben gelernt, wie man große bestehende Datensätze in ein DBMS Ihrer Wahl importiert und analysiert und wie man SQL zur Analyse einer Filmdatenbank verwendet. Dies ist ein mächtiges Werkzeug in Ihrem SQL-Arsenal. Ganz zu schweigen davon, dass Sie sich nie wieder Sorgen machen müssen, dass Sie keinen Film auswählen können! Das Ausfüllen von SQL-Übungen zu Filmdatenbanken ist ein hilfreicher Weg, um zu lernen, aber wenn Sie mehr Struktur wünschen, sehen Sie sich diese SQL-Übungssatz von LearnSQL.com an. Tags: SQL lernen