What is Web±à³Ì Readers Blog?

    Web±à³Ì Readers Blog¼¯ÖÐÁËWeb×ÊÉî³ÌÐòÔ±µÄ¼¼ÇɺÍʵս¾­Ñ飬º­¸ÇÁËWeb±à³ÌµÄÈ«²¿·¶Î§: 3P(ASP, JSP, PHP) web±à³Ì¼¼Êõ£¬MySQLÊý¾Ý¿â¿ª·¢£¬·þÎñÆ÷ÍøÂ簲ȫºÍDIV+CSS²¼¾ÖµÈ£¬ÌṩһЩÓÅÐãµÄ±à³ÌÔ´Â룬ʹÄúµÄWeb±à³Ìѧϰ֮·¸ü¼Óƽ̹¡£

ä¯ÀÀģʽ: ±ê×¼ | Áбí

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_table


table_factor:

tbl_name
[[AS] alias] [index_hint)]
| ( table_references )
| { OJ
table_reference
LEFT OUTER JOIN table_reference
ON conditional_expr }


//Êý¾Ý±ítable_factor£¬×¢ÒâÆäµÝ¹é¶¨ÒåµÄtable_references



join_table:
table_reference [INNER | CROSS] JOIN
table_factor [join_condition]
| table_reference STRAIGHT_JOIN
table_factor

| table_reference STRAIGHT_JOIN table_factor ON condition
|
table_reference LEFT [OUTER] JOIN table_reference
join_condition

|
table_reference
NATURAL [LEFT [OUTER]] JOIN table_factor
| table_reference RIGHT [OUTER] JOIN
table_reference
join_condition
| table_reference NATURAL [RIGHT [OUTER]] JOIN table_factor


//Êý¾Ý±íµÄÁ¬½Ó±í´ïʽjoin_table

join_condition:
ON conditional_expr

| USING (column_list)

//Á¬½Ó±í´ïʽµÄÁ¬½ÓÌõ¼þ¶¨ÒåʹÓÃON»òÕßUSING


index_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)





·Ã¿Í ÆÀÂÛ





·¢±íÆÀÂÛ

êÇ¡¡³Æ (±ØÌî)

ÓÊ¡¡Ïä (±ØÌî)

Íø Õ¾

ÑéÖ¤Âë: (±ØÌî)