白馬の戦い
曹操は199年夏4月、暗殺された張楊の陣営を指導していた眭固が袁紹に味方しようとしたため、史渙・曹仁らの軍を派遣しこれを阻止し、張楊の旧臣でもある董昭を使い、張楊の勢力を取り込んだ。
199年秋8月、曹操は袁紹に備えるため黄河の畔の要地である黎陽に布陣するとともに、臧覇に命じて青州方面から袁紹を牽制した。于禁を備えとして置き、9月には許都に帰還した。
かつて(197年春正月)、宛城で曹操を破ったこともある張繡は、荊州の劉表と結びたびたび曹操を苦しめていたが、199年冬11月に軍勢を引き連れて降伏した。曹操は張繡を列侯に封じ、さらにその参謀の賈詡を重用した。
この間、袁紹との勢力の合流を図った揚州の袁術を牽制するため、揚州刺史に厳象を派遣し、さらに徐州には劉備を派遣した。199年6月(『後漢書』献帝紀)、孤立した袁術は失意のうちに病死する。
200年春正月、許都で董承の謀反が発覚し、ひそかに董承と呼応していた劉備も徐州で刺史の車冑を殺害し反乱を起こした。曹操は董承の一派を処刑すると、劉備を討つため親征した。袁紹の参謀である田豊は曹操の背後をつくことを進言したが、袁紹は息子の病気を理由に出陣を許さなかった。曹操は劉備を敗走させ、その部将の夏侯博と関羽を捕虜とした。劉備は袁紹を頼って落ち延びた。
一年後、曹操は倉亭まで軍を進め、袁紹の駐屯軍を破った(倉亭の戦い)。袁紹は領内の反乱の鎮圧に忙殺される中で202年に病没している。
袁紹の後継を袁譚と袁尚とが争い、袁家の勢力は二分された。
曹操は郭嘉の進言により袁譚と一時結び、袁尚と戦い204年8月には袁尚の臣下の審配が守備する鄴を陥落させ、袁尚を幽州に追いやった。次に袁尚の勢力を吸収しつつあった袁譚を理由をつけて攻撃し、205年春正月に南皮において袁譚・郭図を斬った。袁譚の本拠であった青州には張遼らを派遣して平定した。
曹操はさらに袁尚らを追って幽州に進撃し、207年秋8月には柳城の戦いで烏桓の蹋頓を斬るなどして袁氏の命脈を完全に断ち、さらに烏桓や遼東の公孫氏を服属させている。また、関中や并州方面においても袁氏陣営の高幹や郭援を滅ぼす一方で、張燕、馬騰、韓遂、王邑らを服属させるなど、曹操はその勢力圏を大きく広げることとなった。