---
# System prepended metadata

title: IMDB search

---

# IMDB search


## 表格創建
```sql=
-- ===========================================================================
-- name_basics - Contains the following information for names:
-- ===========================================================================
--     nconst (string) - alphanumeric unique identifier of the name/person
--     primaryName (string)– name by which the person is most often credited
--     birthYear – in YYYY format
--     deathYear – in YYYY format if applicable, else '\N'
--     primaryProfession (array of strings)– the top-3 professions of the person
--     knownForTitles (array of tconsts) – titles the person is known for
CREATE TABLE IF NOT EXISTS name_basics (
    nconst	            VARCHAR(10) CONSTRAINT PK_NAME_BASICS PRIMARY KEY,
    primaryName	        VARCHAR(110),
    birthYear           INTEGER,
    deathYear	        INTEGER,
    primaryProfession   VARCHAR(200),
    knownForTitles      VARCHAR(100)
);

-- ===========================================================================
-- title_basics - Contains the following information for titles
-- ===========================================================================
--   tconst (string) - alphanumeric unique identifier of the title
--   titleType (string) – the type/format of the title (e.g. movie, short, tvseries, tvepisode, video, etc)
--   primaryTitle (string) – the more popular title / the title used by the filmmakers on promotional materials at the point of release
--   originalTitle (string) - original title, in the original language
--   isAdult (boolean) - false: non-adult title; true: adult title
--   startYear (YYYY) – represents the release year of a title. In the case of TV Series, it is the series start year
--   endYear (YYYY) – TV Series end year.
--   runtimeMinutes – primary runtime of the title, in minutes
--   genres (string array) – includes up to three genres associated with the title
CREATE TABLE IF NOT EXISTS title_basics (
    tconst          VARCHAR(10) CONSTRAINT PK_TITLE_BASICS PRIMARY KEY,
    titleType       VARCHAR(20),
    primaryTitle    VARCHAR(500),
    originalTitle   VARCHAR(500),
    isAdult         BOOLEAN,
    startYear       INTEGER,
    endYear         INTEGER,
    runtimeMinutes  INTEGER,
    genres          VARCHAR(200)
);

-- ===========================================================================
-- title_ratings – Contains the IMDb rating and votes information for titles
-- ===========================================================================
--   tconst (string) - alphanumeric unique identifier of the title
--   averageRating – weighted average of all the individual user ratings
--   numVotes - number of votes the title has received
CREATE TABLE IF NOT EXISTS title_ratings (
    tconst          VARCHAR(10) CONSTRAINT PK_TITLE_RATINGS PRIMARY KEY,
    averageRating   DOUBLE PRECISION,
    numVotes        INTEGER,
    FOREIGN KEY (tconst) REFERENCES title_basics(tconst)
);

-- ===========================================================================
-- title_principals - Contains the principal cast/crew for titles
-- ===========================================================================
--   tconst (string) - alphanumeric unique identifier of the title
--   ordering (integer) – a number to uniquely identify rows for a given titleId
--   nconst (string) - alphanumeric unique identifier of the name/person
--   category (string) - the category of job that person was in
--   job (string) - the specific job title if applicable
--   characters (string) - the name of the character played if applicable
CREATE TABLE IF NOT EXISTS title_principals (
    tconst          VARCHAR(10),
    ordering        INTEGER,
    nconst          VARCHAR(10),
    category        VARCHAR(100),
    job             VARCHAR(300),
    characters      VARCHAR(500),
    PRIMARY KEY (tconst, ordering, nconst),
    FOREIGN KEY (tconst) REFERENCES title_basics(tconst),
    FOREIGN KEY (nconst) REFERENCES name_basics(nconst)
);

-- ===========================================================================
-- title_basics - Contains the director and writer information for all the titles in IMDb
-- ===========================================================================
--   tconst (string) - alphanumeric unique identifier of the title
--   directors (array of nconsts) - director(s) of the given title
--   writers (array of nconsts) – writer(s) of the given title
CREATE TABLE IF NOT EXISTS title_crew (
    tconst      VARCHAR(10) CONSTRAINT PK_TITLE_CREW PRIMARY KEY,
    directors   VARCHAR(500),
    writers     VARCHAR(500),
    FOREIGN KEY (tconst) REFERENCES title_basics(tconst)
);

```

## 查找

```sql=
-- Find by Title
SELECT tb.tconst, tb.primarytitle, tb.originaltitle, tb.titletype, tp.nconst, tp.category, nb.primaryname, tc.writers, tc.directors
FROM title_basics tb, title_principals tp, name_basics nb, title_crew tc
WHERE tb.primarytitle LIKE concat('%', :input, '%') and 
	tb.tconst = tp.tconst and
	tp.nconst = nb.nconst and
	tb.tconst = tc.tconst
;

--Find top rating
SELECT tb.tconst, tb.primarytitle, tb.originaltitle,tb.runtimeminutes, tb.genres, 
	tr.averagerating, tr.numvotes
FROM title_basics tb, title_ratings tr
WHERE upper(tb.genres) like concat(concat(upper(:input)),'%') and
	tb.tconst = tr.tconst
ORDER BY tr.averagerating DESC
LIMIT 100 #沒規定上限是否要自定義
;


```