东汉初平三年,公元192年夏。此时的曹操已经占据兖州。次年春,曹操在封丘大败袁术,同年夏,曹操在从封丘撤回定陶后,就派人前往琅琊迎接父亲曹嵩,但曹嵩在经过黄县时被陶谦部下贪财所杀,于是曹操于同年秋天大举进攻徐州。194年春,曹操再次率军进攻徐州,而位于后方的陈留太守张邈在讨董时因为袁绍有骄横之色曾呵斥过袁绍,袁绍就让曹操杀了张邈,但曹操没有听从。在第二次进攻徐州时,此时的袁绍势力十分强大,张邈担心曹操会因此为袁绍谋害自己,就听从陈宫的继承,迎吕布袭兖州。
吕布在长安失败后,曾投奔与袁术,但因自认为杀董有功,十分放任自己的部下,因此不被袁术所接纳。吕布离开袁术后因李傕、郭汜悬赏吕布,吕布就去投奔了袁绍,并于袁绍共同击败了黑山军。不过吕布依旧放任部下,导致袁绍也对他十分不满,袁绍为了解决后患就想除掉吕布,但事情被吕布得知,吕布遂投奔河内张杨,之后就是陈宫、张邈迎吕布入兖州,曹操回师与吕布展开较量。
张邈、陈宫共推吕布为兖州牧,并联合豫州刺史郭贡举兵趁兖州空虚之际袭击。张邈先是人前往鄄城向荀彧汇报说吕布率军前来帮助曹操进攻陶谦,以此来迷惑荀彧,然后吕布率军袭击濮阳、郭贡袭击鄄城、陈宫袭击东阿、汎嶷进袭范县。
荀彧并没有相信张邈的话,他一边整军备战,一面急召夏侯惇回鄄城,夏侯惇回鄄城后诛杀了准备谋反的数十人,这才使鄄城稳定下来。当郭贡率军数万抵至鄄城时,荀彧单骑出城谈话,郭贡见荀彧毫无惧意,以为鄄城有所准备,攻城不易,就引兵撤回。
范县靳允设伏兵刺杀汎嶷,敕兵守城。程昱遣别骑绝仓亭津,以阻陈宫之进入东阿。而其余地区要么被攻陷,要么起兵响应,要么投降。
曹操得知后方之事,立刻停止对徐州的进攻,引兵回援。在得知吕布驻守濮阳后,十分放心的说道:“吕布虽占据兖州,却不占领东平、截断亢父、泰山的通道,依托险要来阻击我,反而去驻守濮阳,这足以见得他的平庸。”遂开始进攻吕布。
公元194年八月,曹操率先袭击了吕布在濮阳城外的一处军营,还未等撤军时,吕布就率军赶到,双方从清晨一直打到黄昏,交手数十次不分胜负。曹操为了突破战局,重金招募敢死队,并让典韦带着他们发起冲锋,这才使吕布军稍稍退却,曹操这才得以引军而退。
正巧,濮阳城内有人反叛吕布,并将曹操放入城中,吕布再次率军与曹操交战,并大败曹军。在追击过程中,吕布抓到了曹操,但他并不认识曹操,还问曹操在哪里,曹操随手指了一个人这才逃脱。双方僵持百余日,恰逢蝗虫四起,百姓闹起了饥荒,曹操与吕布粮草也都耗尽,就各自退兵。
十月,袁绍派人来拜访曹操,想让曹操将家属送至邺城,名为保护,实为借此操控曹操。曹操因兖州丢失,军粮不济,就想答应。关键时刻,程昱及时站出来阻止曹操:“将军有龙虎之威,怎能去做韩信、彭越那样的人。兖州虽然被占领,但我们还有三城,能战之士不下万人,以将军的神威,再加上我与荀彧的智谋,一定能成就霸业,希望将军再考虑考虑。”于是,曹操接受了程昱的建议。
公元195年五月十一日,曹操率军进攻驻守在巨野的薛兰、李封,吕布率军救援,但没有及时赶到,曹操大败薛兰、李封,遂乘胜进据乘氏。此时的陶谦已经病逝,并将徐州让给了刘备。曹操打算趁此时机先进攻徐州,然后再平定吕布。荀彧认为,兖州乃天下要地,虽然已经残破,但依旧能够自保,如今已经击败薛兰、李封,分兵东进陈宫,使其无法顾及西边,期间收割熟麦,就能一举击败吕布。若舍弃兖州东进徐州,留兵过多前线不够用,过少又不足以守城,而陶谦虽然病逝,但徐州并非轻易攻下。如今徐州已经割麦,必定坚壁清野以待我军,若是攻之不克,则我军必定自我灭亡。最终,曹操认可了荀彧的建议。
此时,吕布得陈宫万余人马增援,率军再次进攻曹操。曹军因大多去地里割麦,留在营地里人仅有千余。于是,曹操派一部人马埋伏在西边的河堤里,再派一部人马去引诱吕布,待吕布接近河堤时,曹军伏兵尽出,吕布军不知曹军伏兵有多少人,军心大乱,遂大败,趁夜向东逃跑投奔刘备,曹操收复定陶。
吕布败退后,张邈派其弟张超带着家属退守雍丘,自己前往九江向袁术搬救兵,在路上被部下所杀。同年八月,曹操围困雍丘,张超自杀。
曹操收复兖州后,又于196年又占据了豫州全境,并挟汉献帝建都许昌,封吕布为左将军。吕布大喜,就与曹操和解。但曹操认为吕布狼子野心,暗中委托陈登除掉吕布。
198年五月,吕布与袁术联合,共同进攻刘备。曹操得知后,派夏侯惇前往救援,但被高顺军击败。九月,高顺、张辽攻克沛城。曹操听从荀攸得建议,先打吕布后打袁术,率军亲征吕布。
198年九月,曹操率军进至彭城,陈宫建议吕布以逸待劳,立即出击,但吕布却想逼曹操至泗水再进攻。十月,曹军攻克彭城,并排先头部队进逼下邳。因为之前的多次战争,吕布胜少输多,面对曹军不敢主动出击,就退入下邳坚守城池。
曹操给吕布写了封信,信中晓之以情,动之以理,分析厉害,让吕布出城投降。吕布本想同意,陈宫说:“曹军远道而来,一定不能持久。不如我军兵分两路,将军率一部驻守城外,我率一部驻守城内,若曹操攻城,将军从背后进攻,若曹操攻将军,我在背后进攻。这样一来,不出一个月,曹操就会败退。”但因吕布之妻的阻止,吕布并没有采取陈宫的计策,只是坚守城池,并派人向袁术求援。
袁术不敢进攻曹操,又怕吕布被曹操所灭,只是派出大军集结然后声援吕布,而河内太守张杨因与吕布有过交情,也派兵假装进攻野王来声援吕布。
十一月,曹操开始进攻下邳,因久攻不下,便引沂水、泗水灌城,双方交战月余,吕布军逐渐坚持不住,吕布因而就想投降曹操,但被陈宫阻止。于是,侯成、宋宪、魏续等人就绑了陈宫向曹操投降,吕布只好退守门楼。吕布让左右拿着他的首级去领赏,左右不肯,吕布便下城投降,最终被曹操绞杀。
《孙子兵法》曾讲过:“主不可以怒而兴师,将不可因愠而致战”。曹操为报杀父之仇,在征讨徐州的过程中,迁怒于民,导致众叛亲离,在吕布入兖州时,众郡县皆响应。曹操在只剩三座城池的情况下,接受程昱的建议,重整旗鼓,最终打败吕布。在回师兖州时,见吕布不能占据险要之地,知其无战略眼光,所以,吕布虽勇,最终失败。