MySQL Views: How to Create View from Tables
โก Tรณm tแบฏt thรดng minh
MySQL Views are virtual tables that store no data of their own and instead present the result of a stored SELECT query. This resource explains how to create, query, join, and drop views, with runnable examples from the myflixdb database.

Lฦฐแปฃt xem trong MySQL?
LฦฏแปขT XEM lร cรกc bแบฃng แบฃo khรดng lฦฐu trแปฏ bแบฅt kแปณ dแปฏ liแปu nร o cแปงa riรชng mรฌnh mร hiแปn thแป dแปฏ liแปu ฤฦฐแปฃc lฦฐu trแปฏ trong cรกc bแบฃng khรกc. Nรณi cรกch khรกc, XEM khรดng lร gรฌ ngoร i Truy vแบฅn SQL. Mแปt khung nhรฌn cรณ thแป chแปฉa tแบฅt cแบฃ hoแบทc mแปt vร i hร ng cแปงa mแปt bแบฃng. MแปT MySQL view cรณ thแป hiแปn thแป dแปฏ liแปu tแปซ mแปt bแบฃng hoแบทc nhiแปu bแบฃng.
MySQL Cรบ phรกp lฦฐแปฃt xem
Bรขy giแป chรบng ta hรฃy xem cรบ phรกp cฦก bแบฃn ฤฦฐแปฃc sแปญ dแปฅng ฤแป tแบกo chแบฟ ฤแป xem trong MySQL.
CREATE VIEW `view_name` AS SELECT statement;
แป ฤรU
- โTแบ O CHแบพ ฤแป XEM `view_name`โ nรณi MySQL mรกy chแปง ฤแป tแบกo mแปt ฤแปi tฦฐแปฃng xem trong cฦก sแป dแปฏ liแปu cรณ tรชn `view_name`
- โNHฦฏ cรขu lแปnh CHแปNโ cรกc cรขu lแปnh SQL cรณ ฤฦฐแปฃc ฤรณng gรณi trong MySQL Lฦฐแปฃt xem. Nรณ cรณ thแป lร cรขu lแปnh SELECT cรณ thแป chแปฉa dแปฏ liแปu tแปซ mแปt bแบฃng hoแบทc nhiแปu bแบฃng.
Tแบกi sao nรชn sแปญ dแปฅng lฦฐแปฃt xem?
Before building one, it helps to know what a view actually buys you.
Bแบกn cรณ thแป muแปn sแปญ dแปฅng chแบฟ ฤแป xem chแปง yแบฟu vรฌ 3 lรฝ do sau
- Ultimately, you will use your SQL knowledge, to create applications, which will use a database for data requirements. Itโs recommended that you use VIEWS of the original table structure in your application instead of using the tables themselves. This ensures that when you refactor your DB, your legacy code will see the original schema via the view without breaking the application.
- VIEWS tฤng khแบฃ nฤng tรกi sแปญ dแปฅng. Bแบกn sแบฝ khรดng phแบฃi tแบกo cรกc truy vแบฅn phแปฉc tแบกp liรชn quan ฤแบฟn cรกc phรฉp nแปi nhiแปu lแบงn. Tแบฅt cแบฃ sแปฑ phแปฉc tแบกp ฤฦฐแปฃc chuyแปn ฤแปi thร nh mแปt dรฒng truy vแบฅn duy nhแบฅt bแบฑng cรกch sแปญ dแปฅng VIEWS. Mรฃ cรด ฤแปng nhฦฐ vแบญy sแบฝ dแป tรญch hแปฃp hฦกn vร o แปฉng dแปฅng cแปงa bแบกn. ฤiแปu nร y sแบฝ loแบกi bแป khแบฃ nฤng xแบฃy ra lแปi ฤรกnh mรกy vร mรฃ cแปงa bแบกn sแบฝ dแป ฤแปc hฦกn.
- VIEWS giรบp bแบฃo mแบญt dแปฏ liแปu. Bแบกn cรณ thแป sแปญ dแปฅng chแบฟ ฤแป xem ฤแป chแป hiแปn thแป thรดng tin ฤฦฐแปฃc แปงy quyแปn cho ngฦฐแปi dรนng vร แบฉn dแปฏ liแปu nhแบกy cแบฃm nhฦฐ sแป thแบป tรญn dแปฅng.
Cรกch tแบกo chแบฟ ฤแป xem trong MySQL
With the syntax and the benefits established, the steps below build a working view end to end.
Sau ฤรขy lร quy trรฌnh tแปซng bฦฐแปc ฤแป tแบกo chแบฟ ฤแป xem trong MySQL:
Bฦฐแปc 1) Tแบกo chแบฟ ฤแป xem ฤแบงu tiรชn cแปงa chรบng tรดi bแบฑng cรกch sแปญ dแปฅng โmyflixdbโ
Bรขy giแป, hรฃy tแบกo chแบฟ ฤแป xem ฤแบงu tiรชn bแบฑng cรกch sแปญ dแปฅng โmyflixdbโ, chรบng tรดi sแบฝ tแบกo mแปt chแบฟ ฤแป xem ฤฦกn giแบฃn giแปi hแบกn cรกc cแปt ฤฦฐแปฃc nhรฌn thแบฅy trong bแบฃng thร nh viรชn.
Suppose authorization requirements state that the accounts department can only see memberโs number, name and gender from the memberโs table. To achieve this you can create a VIEW โ
CREATE VIEW `accounts_v_members` AS SELECT `membership_number`,`full_names`,`gender` FROM `members`;
Bฦฐแปc 2) Mแป rแปng nรบt lฦฐแปฃt xem
Thแปฑc thi ฤoแบกn script trรชn trong MySQL workbench so vแปi myflixdb vร mแป rแปng nรบt chแบฟ ฤแป xem trong trรฌnh khรกm phรก cฦก sแป dแปฏ liแปu mang lแบกi cho chรบng ta kแบฟt quแบฃ sau.
Lฦฐu รฝ ฤแปi tฦฐแปฃng Account_v_members hiแปn hiแปn thแป trong cรกc ฤแปi tฦฐแปฃng khung nhรฌn cฦก sแป dแปฏ liแปu.
Bฦฐแปc 3) Thแปฑc thi cรขu lแปnh SELECT
Bรขy giแป chรบng ta hรฃy thแปฑc hiแปn mแปt Cรขu lแปnh SELECT chแปn tแบฅt cแบฃ cรกc trฦฐแปng tแปซ chแบฟ ฤแป xem nhฦฐ hiแปn thแป bรชn dฦฐแปi MySQL tแบกo vรญ dแปฅ xem.
SELECT * FROM `accounts_v_members`;
Bฦฐแปc 4) Thแปฑc thi mแปt kแปch bแบฃn
Thแปฑc thi ฤoแบกn script trรชn trong MySQL workbench so vแปi myflixdb cung cแบฅp cho chรบng ta kแบฟt quแบฃ nhฦฐ hรฌnh dฦฐแปi ฤรขy.
| membership_number | full_names | gender |
|---|---|---|
| 1 | Janet Jones | Female |
| 2 | Janet Smith Jones | Female |
| 3 | Robert Phil | Male |
| 4 | Gloria Williams | Female |
| 5 | Leonard Hofstadter | Male |
| 6 | Sheldon Cooper | Male |
| 7 | Rajesh Koothrappali | Male |
| 8 | Leslie Winkle | Male |
| 9 | Howard Wolowitz | Male |
Only the authorized columns for accounts department have been returned. Other details found in the members table have been hidden.
Nแบฟu muแปn xem cรกc cรขu lแปnh SQL tแบกo nรชn mแปt chแบฟ ฤแป xem cแปฅ thแป, chรบng ta cรณ thแป sแปญ dแปฅng tแบญp lแปnh hiแปn thแป bรชn dฦฐแปi ฤแป thแปฑc hiแปn ฤiแปu ฤรณ.
SHOW CREATE VIEW `accounts_v_members`;
Viแปc thแปฑc thi ฤoแบกn mรฃ trรชn sแบฝ cung cแบฅp cho bแบกn tรชn dแบกng xem vร cรกc cรขu lแปnh SQL SELECT ฤฦฐแปฃc sแปญ dแปฅng ฤแป tแบกo dแบกng xem.
Tham gia vร xem trong MySQL
A single-table view is the simplest case. Views become far more valuable when they wrap a multi-table query.
Bรขy giแป chรบng ta hรฃy xem mแปt vรญ dแปฅ khรก phแปฉc tแบกp liรชn quan ฤแบฟn nhiแปu bแบฃng vร cรกch sแปญ dแปฅng tham gia.
Chรบng tรดi sแบฝ ฤรณng gรณi THAM GIA ฤฦฐแปฃc tแบกo ฤแป lแบฅy thรดng tin tแปซ ba (3) bแบฃng lร thร nh viรชn, phim vร phim cho thuรช. Dฦฐแปi ฤรขy lร kแปch bแบฃn giรบp chรบng tรดi ฤแบกt ฤฦฐแปฃc ฤiแปu ฤรณ.
CREATE VIEW `general_v_movie_rentals` AS SELECT mb.`membership_number`,mb.`full_names`,mo.`title`,mr.`transaction_date`,mr.`return_date` FROM `movierentals` AS mr INNER JOIN `members` AS mb ON mr.`membership_number` = mb.`membership_number` INNER JOIN `movies` AS mo ON mr.`movie_id` = mo.`movie_id`;
Viแปc thแปฑc thi cรกc tแบญp lแปnh trรชn sแบฝ tแบกo ra chแบฟ ฤแป xem cรณ tรชn General_v_movie_rentals trong myflixdb cแปงa chรบng tรดi
Bรขy giแป chรบng ta hรฃy chแปn tแบฅt cแบฃ cรกc trฦฐแปng tแปซ bแบฃng cรณ tรชn General_v_movie_rentals.
SELECT * FROM `general_v_movie_rentals`;
Thแปฑc thi ฤoแบกn script trรชn trong MySQL bร n lร m viแปc so vแปi myflixdb cung cแบฅp cho chรบng ta kแบฟt quแบฃ nhฦฐ bรชn dฦฐแปi.
| membership_number | full_names | title | transaction_date | return_date |
|---|---|---|---|---|
| 1 | Janet Jones | Pirates of the Caribean 4 | 20-06-2012 | 28-06-2012 |
| 1 | Janet Jones | Forgetting Sarah Marshal | 22-06-2012 | 25-06-2012 |
| 3 | Robert Phil | Forgetting Sarah Marshal | 22-06-2012 | 25-06-2012 |
| 2 | Janet Smith Jones | Forgetting Sarah Marshal | 21-06-2012 | 24-06-2012 |
| 3 | Robert Phil | X-Men | 23-06-2012 | 28-06-2012 |
Lฦฐu รฝ rแบฑng chรบng ta khรดng cแบงn phแบฃi viแบฟt truy vแบฅn JOIN phแปฉc tแบกp ฤแป lแบฅy thรดng tin vแป thร nh viรชn, phim vร chi tiแบฟt cho thuรช phim. Chรบng ta chแป cแบงn sแปญ dแปฅng chแบฟ ฤแป xem trong cรขu lแปnh SELECT thรดng thฦฐแปng nhฦฐ bแบฅt kแปณ bแบฃng thรดng thฦฐแปng nร o khรกc. Chแบฟ ฤแป xem cรณ thแป ฤฦฐแปฃc gแปi tแปซ bแบฅt kแปณ ฤรขu trong hแป thแปng แปฉng dแปฅng chแบกy trรชn myflixdb.
Rฦกiping Lฦฐแปฃt xem trong MySQL
Lแปnh DROP cรณ thแป ฤฦฐแปฃc sแปญ dแปฅng ฤแป xรณa mแปt khung nhรฌn khแปi cฦก sแป dแปฏ liแปu ฤiแปu ฤรณ khรดng cรฒn cแบงn thiแบฟt nแปฏa. Cรบ phรกp cฦก bแบฃn ฤแป loแบกi bแป chแบฟ ฤแป xem nhฦฐ sau.
DROP VIEW `general_v_movie_rentals`;
Rฦกiping a view removes only the stored query; the underlying tables and their data are untouched.

