Web±à³Ì Readers Blog
create the blog for Web±à³Ì scholars
MySQL ¶à±íÁªºÏ²éѯÖеĸ÷ÖÖJOIN·½·¨
Submitted by ×÷Õß: admin
2008-04-24 11:48:38
1. µÑ¿¨¶û»ý(½»²æÁ¬½Ó)
ÔÚMySQLÖпÉÒÔΪCROSS JOIN»òÕßÊ¡ÂÔCROSS¼´JOIN£¬»òÕßʹÓÃ','
Èç
SELECT * FROM table1 CROSS JOIN table2
SELECT * FROM table1 JOIN table2
SELECT * FROM table1,table2
ÓÉÓÚÆä·µ»ØµÄ½á¹ûΪ±»Á¬½ÓµÄÁ½¸öÊý¾Ý±íµÄ³Ë»ý£¬Òò´Ëµ±ÓÐWHERE, ON»òUSINGÌõ¼þµÄʱºòÒ»°ã²»½¨ÒéʹÓã¬ÒòΪµ±Êý¾Ý±íÏîĿ̫¶àµÄʱºò£¬»á·Ç³£Âý¡£
Ò»°ãʹÓÃLEFT [OUTER] JOIN»òÕßRIGHT [OUTER] JOIN
2. ÄÚÁ¬½ÓINNER JOIN
ÔÚMySQLÖаÑINNER JOIN½Ð×öµÈÖµÁ¬½Ó£¬¼´ÐèÒªÖ¸¶¨µÈÖµÁ¬½ÓÌõ¼þ
ÔÚMySQLÖÐCROSSºÍINNER JOIN±»»®·ÖÔÚÒ»Æð¡£
join_table:
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
3. MySQLÖеÄÍâÁ¬½Ó£¬·ÖΪ×óÍâÁ¬½ÓºÍÓÒÁ¬½Ó£¬
¼´³ýÁË·µ»Ø·ûºÏÁ¬½ÓÌõ¼þµÄ½á¹ûÖ®Í⣬»¹Òª·µ»Ø×ó±í(×óÁ¬½Ó)»òÕßÓÒ±í(ÓÒÁ¬½Ó)Öв»·ûºÏÁ¬½ÓÌõ¼þµÄ½á¹û£¬Ïà¶ÔÓ¦µÄʹÓÃNULL¶ÔÓ¦¡£
a. LEFT [OUTER] JOIN
SELECT column_name FROM table1 LEFT [OUTER] JOIN table2 ON table1.column=table2.column
³ýÁË·µ»Ø·ûºÏÁ¬½ÓÌõ¼þµÄ½á¹ûÖ®Í⣬»¹ÐèÒªÏÔʾ×ó±íÖв»·ûºÏÁ¬½ÓÌõ¼þµÄÊý¾ÝÁУ¬Ïà¶ÔӦʹÓÃNULL¶ÔÓ¦
b. RIGHT [OUTER] JOIN
SELECT column_name FROM table1 RIGHT [OUTER] JOIN table2 ON table1.column=table2.column
RIGHTÓëLEFT JOINÏàËÆ²»Í¬µÄ½ö½öÊdzýÁËÏÔʾ·ûºÏÁ¬½ÓÌõ¼þµÄ½á¹ûÖ®Í⣬»¹ÐèÒªÏÔʾÓÒ±íÖв»·ûºÏÁ¬½ÓÌõ¼þµÄÊý¾ÝÁУ¬ÏàӦʹÓÃNULL¶ÔÓ¦
--------------------------------------------
Ìí¼ÓÏÔʾÌõ¼þWHERE, ON, USING
1. WHERE×Ó¾ä
2. ON
3. USING×Ӿ䣬Èç¹ûÁ¬½ÓµÄÁ½¸ö±íÁ¬½ÓÌõ¼þµÄÁ½¸öÁоßÓÐÏàͬµÄÃû×ֵϰ¿ÉÒÔʹÓÃUSING
ÀýÈç
SELECT <column_name> FROM <table1> LEFT JOIN <table2> USING (<column_name>)
Á¬½Ó¶àÓàÁ½¸ö±íµÄÇé¿ö
¾ÙÀý£º
mysql> SELECT artists.Artist, cds.title, genres.genre
-> FROM cds
-> LEFT JOIN genres
-> ON cds.genreID = genres.genreID
-> LEFT JOIN artists
-> ON cds.artistID = artists.artistID;
»òÕß
mysql> SELECT artists.Artist, cds.title, genres.genre
-> FROM cds
-> LEFT JOIN genres
-> ON cds.genreID = genres.genreID
-> LEFT JOIN artists
-> ON cds.artistID = artists.artistID
-> WHERE (genres.genre = 'Pop');
--------------------------------------------
ÁíÍâÐèҪעÒâµÄµØ·½
ÔÚMySQLÖÐÉæ¼°µ½¶à±í²éѯµÄʱºò£¬ÐèÒª¸ù¾Ý²éѯµÄÇé¿ö£¬ÏëºÃʹÓÃÄÄÖÖÁ¬½Ó·½Ê½Ð§Âʸü¸ß¡£
1. ½»²æÁ¬½Ó(µÑ¿¨¶û»ý)»òÕßÄÚÁ¬½Ó
[INNER | CROSS] JOIN
2. ×óÍâÁ¬½ÓLEFT [OUTER] JOIN»òÕßÓÒÍâÁ¬½ÓRIGHT [OUTER] JOIN
×¢ÒâÖ¸¶¨Á¬½ÓÌõ¼þWHERE, ON£¬USING.
--------------------------------------------
¿´¶®MySQLÊֲᶨÒåµÄMySQL¸÷ÖÖJOINµÄÓ÷¨£º
//¿´¶®ÈçÏµĶ¨Ò巽ʽ
table_references:
table_reference[,table_reference] ...
//²»Í¬µÄJOIN EXPRESSIONÖ®¼äʹÓÃ','·Ö¸î
A table reference is also known as a join expression.:
table_reference
table_factor
|join_table
//ÿ¸öJOIN EXPRESSIONÓÉÊý¾Ý±ítable_factorÒÔ¼°JOIN±í´ïʽ¹¹³Éjoin_tabletable_factor:
[[AS]
tbl_namealias] [index_hint)]
| (table_references)
| { OJtable_referenceLEFT OUTER JOINtable_reference
ONconditional_expr}
//Êý¾Ý±ítable_factor£¬×¢ÒâÆäµÝ¹é¶¨ÒåµÄtable_referencesjoin_table:
table_reference[INNER | CROSS] JOINtable_factor[join_condition]
|table_referenceSTRAIGHT_JOIN
table_factor
|table_referenceSTRAIGHT_JOINtable_factorONcondition
|table_referenceLEFT [OUTER] JOINtable_reference
join_condition
|table_referenceNATURAL [LEFT [OUTER]] JOINtable_factor
|table_referenceRIGHT [OUTER] JOINtable_referencejoin_condition
|table_referenceNATURAL [RIGHT [OUTER]] JOINtable_factor
//Êý¾Ý±íµÄÁ¬½Ó±í´ïʽjoin_tablejoin_condition:
ONconditional_expr
| USING (column_list)
//Á¬½Ó±í´ïʽµÄÁ¬½ÓÌõ¼þ¶¨ÒåʹÓÃON»òÕßUSINGindex_hint:
USE {INDEX|KEY} [FOR JOIN] (index_list
)
| IGNORE {INDEX|KEY} [FOR JOIN] (index_list)
| FORCE {INDEX|KEY} [FOR JOIN] (index_list)index_list:
index_name[,index_name] ...
MySQLÊÖ²áÖÐÌáµ½µÄJOINÐèҪעÒâµÄµØ·½£º
1.In MySQL,
CROSS JOIN is a syntactic equivalent to INNER JOIN (they can replace each other). In standard SQL, they are not equivalent.
INNER JOIN is used with an ON clause, CROSS JOIN is used otherwise.ÊÖ²áÖÐÌáµ½
±ê×¼SQLÖÐCROSS JOIN½»²æÁ¬½Ó(µÑ¿¨¶û»ý)ºÍÄÚÁ¬½ÓINNER JOIN²»Í¬£¬µ«ÊÇMySQLÖÐÁ½ÕßÊÇÏàͬµÄ£¬¼´ÓÐ[CROSS | INNER] JOIN£¬
Á½Õß¿ÉÒÔ»¥ÏàÌæ´ú£¬¶øÇÒ¿ÉÒÔֻʹÓÃJOIN
2. A table reference can be aliased using
tbl_name AS alias_name or tbl_name alias_name:
SELECT t1.name, t2.salary
FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name;
¿ÉÒÔ¶ÔÊý¾Ý±íʹÓñðÃû
3. ,ÔËËã·û
ÀýÈç
SELECT * FROM table1,table2
ÓÉÓÚÔÚMySQLÖÐINNER JOINÓëCROSS JOINÏàͬ£¬INNER JOINºÍ , ÔÚMySQLÒ²Ïàͬ£¬¶¼ÊÇ
²úÉúÁ½¸ö±íµÄµÑ¿¨¶û»ýCartesian Product(µÈÓÚÁ½¸ö±í¸ñµÄÐÐÊý³Ë»ý)
µ«ÊÇ,ºÅµÄÓÅÏȼ¶ÒªµÍÓÚINNER JOIN, CROSS JOIN, LEFT JOIN
Òò´Ë
If you mix comma joins with the other join types when there is a join condition, an error of the
form Unknown column 'col_name' in 'on clause' may occur.
4. ʲôʱºòʹÓÃON£¬Ê²Ã´Ê±ºòʹÓÃWHERE
ONÓ¦¸ÃÓû§Êý¾Ý±íÁ¬½ÓµÄʱºòÖ¸¶¨Á¬½ÓÌõ¼þ£»
WHEREÓÃÓÚÓû§ÏÞÖÆËùѡȡµÄÁÐ
ÀýÈçON a.column=b.column
WHERE a.column='hello'
5. ¿ÉÒÔʹÓÃLEFT JOIN²é¿´£¬Á½¸öÁ¬½ÓµÄ±íÖУ¬²»·ûºÏÁ¬½ÓÌõ¼þµÄ²¿·Ö£¬ÒòΪ²»·ûºÏÌõ¼þµÄ²¿·Ö
LEFT JOINÖ®ºó»áÏÔʾΪNULL
If there is no matching row for the right table in the ON or USING part in a LEFT JOIN, a row with
all columns set to NULL is used for the right table. You can use this fact to find rows in a table that
have no counterpart in another table:
SELECT left_tbl.*
FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id
WHERE right_tbl.id IS NULL;
This example finds all rows in left_tbl with an id value that is not present in right_tbl (that is, all
rows in left_tbl with no corresponding row in right_tbl). This assumes that right_tbl.id is declared
NOT NULL.
6.
µ±±ðÁ¬½ÓµÄ±íÖ¸¶¨Á¬½ÓÌõ¼þµÄÁоÙÓÐÏàͬµÄÃû³ÆµÄʱºò£¬²»ÐèÒª
ON a.column=b.column²»Í¬µÄʱºò²ÅʹÓÃON a.column_a=b.column_b
¿ÉÒÔʹÓÃUSING (column)
µ±È»Ò²¿ÉÒÔʹÓöà¸öUSING (c1,c2,c3)
The USING(column_list) clause names a list of columns that must exist in both tables. If tables
a and b both contain columns c1, c2, and c3, the following join compares corresponding
columns from the two tables:
a LEFT JOIN b USING (c1,c2,c3)
·ÖÀà:ÍøÕ¾|Êý¾Ý¿âÀà |
Read more
ÔĶÁ (359)
ÆÀÂÛ (0)
·Ã¿Í ÆÀÂÛ
·¢±íÆÀÂÛ
Óû§µÇ¼
ÈÕÖ¾·ÖÀà©®Category
- ÍøÕ¾|PHPѧϰ [66]
- ÍøÕ¾|ASP±¸Íü [6]
- ÍøÕ¾|JSP½ø½× [3]
- ÍøÕ¾|Êý¾Ý¿âÀà [11]
- С̸|ддÐÄÇé [13]
- ÍøÕ¾|xmlѧϰ [0]
- ÍøÕ¾|Javascriptѧϰ [5]
- ÍøÕ¾|ÃæÏò¶ÔÏó [1]
- ÍøÕ¾|AJAXѧϰ [2]
- ÍøÕ¾|ÔÓÆßÔÓ°Ë [11]
- ÍøÕ¾|½¨Õ¾ÖªÊ¶Í¨µÀ [6]
- ÖÐÇï½Ú|´óÔÓ»° [11]
ÈȵãÎÄÕ©®Articles
- ÔÚTomcatÏÂJSP¡¢Se...
- ²ÉÓÃutf8±àÂë³¹µ×½...
- ÎҵĴóѧͬѧ»ØÒäÂ...
- ¸Ðл×î½üÔÚѧϰÉϰ...
- mysqlÊý¾Ý¿âµÄµ¼Èë...