La battaglia di Guandu si svolse nel 200 sul Fiume Giallo. Yuan Shao marciò con 100.000 uomini; per difendersi dall'invasione Cáo Cāo radunò 200.000 soldati a Guandu. Cao Cao riuscì a disorientare le truppe di Yuan Shao e uccidere due dei generali più capaci di Yuan Shao, Yan Liang e Wen Shou, uccisi entrambi da Guan Yu, che a quel tempo serviva sotto Cao Cao.
Il morale delle truppe di Yuan Shao subì un ulteriore colpo quando Cao Cao incendiò le riserve di grano di Yuan Shao a Wu Chao (difese dai generali Lu Wei Kuang e Chynqui Yong, dei quali il primo troverà la morte a Wu Chao, il secondo verrà ucciso da un furioso Yuan Shao quando scoprì che non aveva difeso Wu Chao perché era ubriaco). Fu una cruciale vittoria per il leader Cao Cao in cui egli guidò una ribellione contro Yuan Shao. Molti degli uomini di Yuan Shao morirono, disertarono (tra i disertori ricordiamo Zhang He, che cambiò fronte a causa di false accuse mosse contro di lui da Guo Tu) o morirono nella battaglia successiva.
La battaglia di Guandu spostò l'equilibrio di forze nella Cina del Nord. Yuan Shao morì subito dopo il suo ritorno ed i suoi tre figli Yuan Shang, Yuan Tan e Yuan Xi vennero sconfitti in breve tempo. Cao Cao divenne il dominatore militare del nord della Cina.