通過以上二項措施,曹操統治區的農業生產迅速恢複。這是曹操在經濟上的一大成功。
迎獻帝、遷都於許和恢複農業生產是曹操得以成功的兩個重要條件。
從建安二年起,曹操利用他“挾天子以令諸侯”的政治優勢,東征西討,開始了他翦滅群雄,統一北方的戰爭。
其時,在曹操的北邊,是占有冀、並、幽、青四州的袁紹;南邊,是占據揚州的袁術;東南,是占據徐州的呂布;正南,是占據荊州的劉表;西邊,是關中諸將。此外,董卓部將張濟之侄張繡投降劉表後,屯駐於宛縣(今河南南陽),對許都形成威脅。
建安三年(198)九月,曹操東征徐州,進攻久與他為敵的呂布。在曹軍攻勢之下,呂布軍上下離心,十二月,呂布將侯成、宋憲等生擒呂布謀士陳宮歸降曹操。呂布見大勢已去,下城投降。曹操將呂布、陳宮處死,收降呂布將臧霸、孫觀等人,初步控製了徐州。
當時,群雄實力最強的是袁紹。曹操預作布置,命在青州有潛在影響的臧霸等人攻入青州,占領齊(治今山東臨淄)、北海(治今山東壽光東南)等地,鞏固右翼;又命大將於禁屯軍黃河南岸,監視袁軍。不久,張繡聽從謀士賈詡之計,投降曹操,曹操大喜,拜張繡為揚武將軍,解除了後顧之憂。這年十二月,曹操自率軍屯於官渡(今河南中牟北),準備迎擊袁紹。
劉備在徐州牧陶謙死後,曾一度出任徐州牧,後徐州被呂布攻占,劉備投奔曹操。曹操認為劉備是個英雄,先後表他為豫州牧、左將軍。曹操攻占徐州不久,淮南袁術準備逃往青州往依袁紹,曹操派劉備去截擊。建安五年正月,董承等人謀誅曹操事泄,被曹操殺掉。劉備遂襲殺徐州刺史車胄,占據徐州。
曹操為了免於將來同袁紹作戰時前後受敵,決定先消滅在徐州立足未穩的劉備。時諸將皆怕袁紹乘機來攻許都,曹操對此胸有成竹,說:“劉備,人傑也,今不擊,必有後患。袁紹雖有大誌,而見事遲,必不動也。”遂進軍,以迅雷不及掩耳之勢擊破劉備,劉備逃奔袁紹。
袁紹是當時北方最強大的一股勢力,也是曹操統一北方最強大的敵人。袁氏一門,自袁紹曾祖袁安以下,“四世居三公位”,“門生故吏遍於天下”,勢力本就很大,後袁紹取得冀、並、幽、青四州之地,實力大增,有軍隊數十萬人。袁紹以其長子袁譚、次子袁熙、外甥高幹分守青、幽、並三州,後方穩固,兵精糧足,根本不把曹操放在眼裏。他挑選精兵十萬、戰馬萬匹,誌在一舉消滅曹操。建安五年二月,袁紹命大將顏良等人進兵白馬(今河南滑縣北),自率大軍進屯黎陽(今河南浚縣東),向曹操發動進攻。
曹操的實力比袁紹弱得多。曹操所占的大河以南地區,地盤既小,又是四戰之地,殘破不堪,還沒有完全恢複,物資比不上袁紹那樣豐富。曹操的兵力也遠不及袁紹,其總兵力大概不過幾萬人,投入前線的兵力據《武帝紀》說“兵不滿萬,傷者十二三”。劉宋裴鬆之認為此數不準確,操之兵力不會如此之少,但曹操兵力遠遜於袁紹卻是毫無問題的。袁紹大軍來攻,許都震動。曹操安慰眾將說:“吾知紹之為人,誌大而智小,色厲而膽薄,忌克而少威,兵多而分畫不明,將驕而眾令不一,土地雖廣,糧食雖豐,適足以為我奉也。”曹操對袁紹有很深的認識,他敢於在袁紹將要大軍壓境之時抽身去進攻劉備,正是基於這種認識之上。
建安五年二月,袁軍顏良等人圍攻白馬,拉開了大戰的序幕。四月,曹操親自率兵北上解白馬之圍,他采納謀士荀攸之計,先進軍延津(今河南延津北,在白馬以西),做出要渡河襲擊袁軍的態勢,吸引袁軍分兵西向,然後突然轉向兼程去救白馬。曹操軍突然殺到,袁軍措手不及,顏良被曹軍殺死,袁軍大敗,白馬之圍遂解。曹操救出白馬軍民,沿黃河西撤。袁紹聞知,立即渡河追趕曹操。曹操見追兵漸近,命軍士解鞍放馬,並置輜重於道。袁軍追兵大至,爭搶輜重,陣形混亂。曹操率領僅有的騎兵突然殺出,大破追兵,陣斬袁紹另一大將文醜。顏良、文醜為袁軍名將,二戰分別被殺,袁軍大震。曹操初戰得勝,主動撤軍,繼續扼守官渡。
八月,袁紹大軍連營而進,東西數十裏,依沙堆為屯,進逼官渡。曹操分兵堅守營壘,伺機而動。袁軍向曹營發動猛攻,先是作高櫓、起土山,由上向曹營中射箭,接著又挖地道,欲從地下襲擊曹營,皆被曹操以相應辦法擊破。兩軍一攻一守,相持近二個月。久戰之下,曹操處境極為困難。
十月,袁紹從河北運來糧草萬餘車,派大將淳於瓊等帶萬餘人看守,屯於離袁紹大營四十裏的烏巢。恰好這時袁紹謀士許攸來投曹操,獻計讓曹操偷襲烏巢。曹操大喜,親率精銳步騎五千人,乘夜從小路偷襲烏巢。曹操軍至烏巢,命四麵放火,袁軍大亂,淳於瓊拒營死守。袁紹聞知,急忙派兵救授,曹操左右見“‘賊騎稍近,請分兵拒之。’操怒曰:‘賊在背後,乃白!’士卒皆殊死戰,遂大破之,斬瓊等,盡燔其糧草”。當袁紹聽說曹操襲擊烏巢時,認為這正是攻破曹操大營的好機會,因此派去的援兵很少,而以重兵圍攻曹操大營。但曹營未破,烏巢敗訊已經傳來,袁軍潰散,大將張郃等人投降曹操。袁紹棄軍逃回黃河以北。於是曹軍大獲全勝,斬首七萬餘級,盡獲袁軍輜重圖書珍寶。曹操清點袁紹書信,得到自己部下寫給袁紹的信,盡燒之,說:“當紹之強,孤猶不能自保,而況眾人乎?”
從客觀條件上說,曹操本處於劣勢,但由於他能正確分析客觀條件,善於聽取別人的正確意見,所以能揚長避短,采用正確的戰略戰術,使戰爭向有利於自己的方麵轉化,經過自己主觀上的努力,終於贏得了勝利。
官渡一戰,曹操擊潰了最大敵人袁紹,由他統一北方已是大勢所趨。
建安七年,袁紹病死,袁紹的兩個兒子袁譚、袁尚不和,發生火並。袁譚不敵袁尚,向曹操乞降。
建安九年二月,曹操乘袁尚出兵攻打袁譚之機,進軍圍攻鄴城。袁尚率軍回救,依滏水(今滏陽河)為營,曹操進軍將其營寨包圍。袁尚害怕,請求投降,曹操不許。袁尚乘夜逃跑,袁軍潰散。袁尚逃奔中山(今河北定縣)。曹操命人拿著繳獲袁尚的印綬節鉞招降鄴城守軍,城中鬥誌崩潰。鄴城遂被曹操攻破。第二年正月,曹操又以負約為名,攻滅袁譚,冀州平定。於是,曹操讓還兗州牧,改任冀州牧。