ÐÔÄÜϽµSQLÂý¡¢Ö´ÐÐʱ¼ä³¤¡¢µÈ´ýʱ¼ä³¤
- ²éѯÓï¾äдµÄÀÃ
- Ë÷ÒýʧЧ
- ¹ØÁª²éѯ̫¶àjoin£¨Éè¼ÆÈ±ÏÝ»ò²»µÃÒѵÄÐèÇ󣬳ý·ÇÄãÄܸɵĹýÄãµÄ²úÆ·¾Àí£©
- ·þÎñÆ÷µ÷Óż°¸÷¸ö²ÎÊýÉèÖ㨻º³å¡¢Ïß³ÌÊýµÈ£©
³£¼ûͨÓõÄJoin²éѯ
SQLÖ´ÐÐ˳Ðò
ÊÖд

ÊÖдSQL˳Ðò
SELECT DISTINCT
<select_list>
FROM
<left_table> <join_type>
JOIN <right_table> ON <join_condition>
WHERE
<where_condition>
GROUP BY
<group_by_list>
HAVING
<having_condition>
ORDER BY
<order_by_condition>
LIMIT <limit_number> |
»ú¶Á£¨MySQL¶Áȡ˳Ðò£©

»ú¶Á˳Ðò
FROM
<left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE
<where_condition>
GROUP BY
<group_by_list>
HAVING
<having_condition>
SELECT DISTINCT
<select_list>
ORDER BY
<order_by_condition>
LIMIT <limit_number> |
×ܽá-SQL½âÎö˳Ðò

SQL½âÎö

SQL JOINs
ÆßÖÖJOINͼ½â
ʵÑ飺
-- ½¨±íºÍÊý¾ÝSQL
CREATE TABLE `tbl_dept` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`deptName` VARCHAR(30) DEFAULT NULL,
`locAdd` VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
CREATE TABLE `tbl_emp` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT NULL,
`deptId` INT(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `fk_dept_id` (`deptId`)
#CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `tbl_dept` (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('HR',12);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MK',13);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MIS',14); |
Á·Ï°
1¡¢A¡¢BÁ½±í¹²ÓÐ
select * from tbl_emp a inner join tbl_dept b on a.deptId = b.id; |
2¡¢A¡¢BÁ½±í¹²ÓÐ+AµÄ¶ÀÓÐ
select * from tbl_emp a left join tbl_dept b on a.deptId = b.id |
3¡¢A¡¢BÁ½±í¹²ÓÐ+BµÄ¶ÀÓÐ
select * from tbl_emp a right join tbl_dept b on a.deptId = b.id; |
4¡¢AµÄ¶ÀÓÐ
select * from tbl_emp a left join tbl_dept b on a.deptId = b.id where b.id is null; |
5¡¢BµÄ¶ÀÓÐ
select * from tbl_emp a right join tbl_dept b on a.deptId = b.id where a.deptId is null; |
6¡¢ABÈ«ÓÐ
MySQL Full JoinµÄʵÏÖ ÒòΪMySQL²»Ö§³ÖFULL JOIN,ÏÂÃæÊÇÌæ´ú·½·¨
left join + union(¿ÉÈ¥³ýÖØ¸´Êý¾Ý)+ right join
ʵÏÖÈçÏÂÃæ´úÂë
7¡¢AµÄ¶ÀÓÐ + BµÄ¶ÀÓÐ
-- 6¡¢ABÈ«ÓÐ
SELECT *
FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id
UNION
SELECT *
FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptId = b.id;
-- 7¡¢AµÄ¶ÀÓÐ + BµÄ¶ÀÓÐ
SELECT *
FROM tbl_emp a LEFT JOIN tbl_dept b ON a.deptId = b.id
WHERE b.id IS NULL
UNION
SELECT *
FROM tbl_emp a RIGHT JOIN tbl_dept b ON a.deptId = b.id
WHERE a.`deptId` IS NULL; |
Ë÷Òý¼ò½é
ʲôÊÇË÷Òý
MySQL¹Ù·½¶ÔË÷ÒýµÄ¶¨ÒåΪ£ºË÷Òý£¨Index£©ÊǰïÖúMySQL¸ßЧ»ñÈ¡Êý¾ÝµÄÊý¾Ý½á¹¹¡£
- ¿ÉÒԵõ½Ë÷ÒýµÄ±¾ÖÊ£ºË÷ÒýÊÇÊý¾Ý½á¹¹¡£
- Ë÷ÒýµÄÄ¿µÄÔÚÓÚÌá¸ß²éѯЧÂÊ£¬¿ÉÒÔÀà±È×ֵ䣬
- Èç¹ûÒª²é¡°mysql¡±Õâ¸öµ¥´Ê£¬ÎÒÃǿ϶¨ÐèÒª¶¨Î»µ½m×Öĸ£¬È»ºó´ÓÏÂÍùÏÂÕÒµ½y×Öĸ£¬ÔÙÕÒµ½Ê£ÏµÄsql¡£
- Èç¹ûûÓÐË÷Òý£¬ÄÇôÄã¿ÉÄÜÐèÒªa----z£¬Èç¹ûÎÒÏëÕÒµ½Java¿ªÍ·µÄµ¥´ÊÄØ£¿»òÕßOracle¿ªÍ·µÄµ¥´ÊÄØ£¿
- ÊDz»ÊǾõµÃÈç¹ûûÓÐË÷Òý£¬Õâ¸öÊÂÇé¸ù±¾ÎÞ·¨Íê³É£¿
Äã¿ÉÒÔ¼òµ¥Àí½âΪ¡°ÅźÃÐòµÄ¿ìËÙ²éÕҽṹ¡±
- ÔÚÊý¾ÝÖ®Í⣬Êý¾Ý¿âϵͳ»¹Î¬»¤×ÅÂú×ãÌØ¶¨²éÕÒËã·¨µÄÊý¾Ý½á¹¹£¬ÕâЩÊý¾Ý½á¹¹ÒÔijÖÖ·½Ê½ÒýÓã¨Ö¸Ïò£©Êý¾Ý£¬ÕâÑù¾Í¿ÉÒÔÔÚÕâЩÊý¾Ý½á¹¹ÉÏʵÏָ߼¶²éÕÒËã·¨¡£ÕâÖÖÊý¾Ý½á¹¹£¬¾ÍÊÇË÷Òý¡£
- ÏÂͼ¾ÍÊÇÒ»ÖÖ¿ÉÄܵÄË÷Òý·½Ê½Ê¾Àý£º

- ΪÁ˼ӿìCol2µÄ²éÕÒ£¬¿ÉÒÔά»¤Ò»¸öÓÒ±ßËùʾµÄ¶þ²æ²éÕÒÊ÷£¬Ã¿¸ö½Úµã·Ö±ð°üº¬Ë÷Òý¼üÖµºÍÒ»¸öÖ¸Ïò¶ÔÓ¦Êý¾Ý¼Ç¼ÎïÀíµØÖ·µÄÖ¸Õ룬ÕâÑù¾Í¿ÉÒÔÔËÓöþ²æ²éÕÒÔÚÒ»¶¨µÄ¸´ÔÓ¶ÈÄÚ»ñÈ¡µ½ÏàÓ¦Êý¾Ý£¬´Ó¶ø¿ìËٵļìË÷³ö·ûºÏÌõ¼þµÄ¼Ç¼¡£
Ò»°ãÀ´ËµË÷Òý±¾ÉíÒ²ºÜ´ó£¬²»¿ÉÄÜÈ«²¿´æ´¢ÔÚÄÚ´æÖУ¬Òò´ËË÷ÒýÍùÍùÒÔË÷ÒýÎļþµÄÐÎʽ´æ´¢µÄ´ÅÅÌÉÏ
ÎÒÃÇÆ½³£Ëù˵µÄË÷Òý£¬Èç¹ûûÓÐÌØ±ðÖ¸Ã÷£¬¶¼ÊÇÖ¸B+Ê÷½á¹¹×éÖ¯µÄË÷Òý¡£ÆäÖоۼ¯Ë÷Òý£¬´ÎÒªË÷Òý£¬¸²¸ÇË÷Òý£¬¸´ºÏË÷Òý£¬Ç°×ºË÷Òý£¬Î¨Ò»Ë÷ÒýĬÈ϶¼ÊÇʹÓÃB+Ê÷Ë÷Òý£¬Í³³ÆË÷Òý¡£µ±È»£¬³ýÁËB+Ê÷ÕâÖÖÀàÐ͵ÄË÷ÒýÖ®Í⣬»¹ÓйþÏ¡Ë÷Òý(hash index)µÈ¡£
Ë÷ÒýµÄÓÅÊÆ
ÀàËÆ´óѧͼÊé¹Ý½¨ÊéÄ¿Ë÷Òý£¬Ìá¸ßÊý¾Ý¼ìË÷µÄЧÂÊ£¬½µµÍÊý¾Ý¿âµÄIO³É±¾
ͨ¹ýË÷ÒýÁжÔÊý¾Ý½øÐÐÅÅÐò£¬½µµÍÊý¾ÝÅÅÐòµÄ³É±¾£¬½µµÍÁËCPUµÄÏûºÄ
Ë÷ÒýµÄÁÓÊÆ
ʵ¼ÊÉÏË÷ÒýÒ²ÊÇÒ»ÕÅ±í£¬¸Ã±í±£´æÁËÖ÷¼üÓëË÷Òý×ֶΣ¬²¢Ö¸ÏòʵÌå±íµÄ¼Ç¼£¬ËùÒÔË÷ÒýÁÐÒ²ÊÇÒªÕ¼ÓÿռäµÄ
ËäÈ»Ë÷Òý´ó´óÌá¸ßÁ˲éѯËÙ¶È£¬Í¬Ê±È´»á½µµÍ¸üбíµÄËÙ¶È£¬Èç¶Ô±í½øÐÐINSERT¡¢UPDATEºÍDELETE¡£ÒòΪ¸üбíʱ£¬MySQL²»½öÒª±£´æÊý¾Ý£¬»¹Òª±£´æÒ»ÏÂË÷ÒýÎļþÿ´Î¸üÐÂÌí¼ÓÁËË÷ÒýÁеÄ×ֶΣ¬¶¼»áµ÷ÕûÒòΪ¸üÐÂËù´øÀ´µÄ¼üÖµ±ä»¯ºóµÄË÷ÒýÐÅÏ¢
Ë÷ÒýÖ»ÊÇÌá¸ßЧÂʵÄÒ»¸öÒòËØ£¬Èç¹ûÄãµÄMySQLÓдóÊý¾ÝÁ¿µÄ±í£¬¾ÍÐèÒª»¨Ê±¼äÑо¿½¨Á¢×îÓÅÐãµÄË÷Òý£¬»òÓÅ»¯²éѯÓï¾ä
MySQLË÷Òý·ÖÀà
µ¥ÖµË÷Òý
¼´Ò»¸öË÷ÒýÖ»°üº¬µ¥¸öÁУ¬Ò»¸ö±í¿ÉÒÔÓжà¸öµ¥ÁÐË÷Òý
ΨһË÷Òý
Ë÷ÒýÁеÄÖµ±ØÐëΨһ£¬µ«ÔÊÐíÓпÕÖµ
¸´ºÏË÷Òý
¼´Ò»¸öË÷°üº¬¶à¸öÁÐ
»ù±¾Óï·¨
´´½¨£¬Á½ÖÖ·½Ê½
CREATE [UNIQUE ] INDEX indexName ON mytable(columnname(length)); |
Èç¹ûÊÇCHAR£¬VARCHARÀàÐÍ£¬length ¿ÉÒÔСÓÚ×Ö¶Îʵ¼Ê³¤¶È£»
Èç¹ûÊÇ BLOB ºÍ TEXT ÀàÐÍ£¬±ØÐëÖ¸¶¨ length¡£
ALTER mytable ADD [UNIQUE ] INDEX [indexName] ON (columnname(length)) |
ɾ³ý
DROP INDEX [indexName] ON mytable; |
²é¿´
SHOW INDEX FROM table_name\G |
ʹÓÃAlter ÃüÁî
ÓÐËÄÖÖ·½Ê½À´Ìí¼ÓÊý¾Ý±íµÄË÷Òý£º
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list) |
¸ÃÓï¾äÌí¼ÓÒ»¸öÖ÷¼ü£¬ÕâÒâζ×ÅË÷ÒýÖµ±ØÐëÊÇΨһµÄ£¬ÇÒ²»ÄÜΪNULL¡£
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list) |
ÕâÌõÓï¾ä´´½¨Ë÷ÒýµÄÖµ±ØÐëÊÇΨһµÄ£¨³ýÁËNULLÍ⣬NULL¿ÉÄÜ»á³öÏÖ¶à´Î£©¡£
ALTER TABLE tbl_name ADD INDEX index_name (column_list) |
Ìí¼ÓÆÕͨË÷Òý£¬Ë÷ÒýÖµ¿É³öÏÖ¶à´Î¡£
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list) |
¸ÃÓï¾äÖ¸¶¨ÁËË÷ÒýΪ FULLTEXT £¬ÓÃÓÚÈ«ÎÄË÷Òý¡£
MySQLË÷Òý½á¹¹
BTreeË÷Òý
¼ìË÷ÔÀí

Ò»¿Åb+Ê÷£¬Ç³À¶É«µÄ¿éÎÒÃdzÆÖ®ÎªÒ»¸ö´ÅÅ̿飬¿ÉÒÔ¿´µ½Ã¿¸ö´ÅÅÌ¿é°üº¬¼¸¸öÊý¾ÝÏÉîÀ¶É«Ëùʾ£©ºÍÖ¸Õ루»ÆÉ«Ëùʾ£©£¬Èç´ÅÅÌ¿é1°üº¬Êý¾ÝÏî17ºÍ35£¬°üº¬Ö¸ÕëP1¡¢P2¡¢P3¡£ P1±íʾСÓÚ17µÄ´ÅÅ̿飬P2±íʾÔÚ17ºÍ35Ö®¼äµÄ´ÅÅ̿飬P3±íʾ´óÓÚ35µÄ´ÅÅ̿顣
ÕæÊµµÄÊý¾Ý´æÔÚÓÚÒ¶×ӽڵ㼴 3¡¢5¡¢9¡¢10¡¢13¡¢15¡¢28¡¢29¡¢36¡¢60¡¢75¡¢79¡¢90¡¢99¡£
·ÇÒ¶×Ó½ÚµãÖ»²»´æ´¢ÕæÊµµÄÊý¾Ý£¬Ö»´æ´¢Ö¸ÒýËÑË÷·½ÏòµÄÊý¾ÝÏÈç17¡¢35²¢²»ÕæÊµ´æÔÚÓÚÊý¾Ý±íÖС£
Èç¹ûÒª²éÕÒÊý¾ÝÏî29£¬ÄÇôÊ×ÏÈ»á°Ñ´ÅÅÌ¿é1ÓÉ´ÅÅ̼ÓÔØµ½Äڴ棬´Ëʱ·¢ÉúÒ»´ÎIO£¬ÔÚÄÚ´æÖÐÓöþ·Ö²éÕÒÈ·¶¨29ÔÚ17ºÍ35Ö®¼ä£¬Ëø¶¨´ÅÅÌ¿é1µÄP2Ö¸Õ룬ÄÚ´æÊ±¼äÒòΪ·Ç³£¶Ì£¨Ïà±È´ÅÅ̵ÄIO£©¿ÉÒÔºöÂÔ²»¼Æ£¬Í¨¹ý´ÅÅÌ¿é1µÄP2Ö¸ÕëµÄ´ÅÅ̵ØÖ·°Ñ´ÅÅÌ¿é3ÓÉ´ÅÅ̼ÓÔØµ½Äڴ棬·¢ÉúµÚ¶þ´ÎIO£¬29ÔÚ26ºÍ30Ö®¼ä£¬Ëø¶¨´ÅÅÌ¿é3µÄP2Ö¸Õ룬ͨ¹ýÖ¸Õë¼ÓÔØ´ÅÅÌ¿é8µ½Äڴ棬·¢ÉúµÚÈý´ÎIO£¬Í¬Ê±ÄÚ´æÖÐ×ö¶þ·Ö²éÕÒÕÒµ½29£¬½áÊø²éѯ£¬×ܼÆÈý´ÎIO¡£
ÕæÊµµÄÇé¿öÊÇ£¬3²ãµÄb+Ê÷¿ÉÒÔ±íʾÉϰÙÍòµÄÊý¾Ý£¬Èç¹ûÉϰÙÍòµÄÊý¾Ý²éÕÒÖ»ÐèÒªÈý´ÎIO£¬ÐÔÄÜÌá¸ß½«ÊǾ޴óµÄ£¬Èç¹ûûÓÐË÷Òý£¬Ã¿¸öÊý¾ÝÏî¶¼Òª·¢ÉúÒ»´ÎIO£¬ÄÇô×ܹ²ÐèÒª°ÙÍò´ÎµÄIO£¬ÏÔÈ»³É±¾·Ç³£·Ç³£¸ß¡£ |