Cellular networks have become a major Internet gateway over which online video is increasingly accessed. Data caching in cellular networks brings the accessed content closer to the requesting clients, thus enhancing simultaneously the performance of the video application and the operational efficiency of the cellular network. State-of-the-art caching schemes for cellular networks either employ traditional approaches such as Least Recently Used (LRU) caching or optimize the cache placement at each base station independently. We study the problem of collaborative content caching among base stations such that their aggregate operational cost is minimized or the profit earned by the service provider is maximized, given their caching capacity constraints. We distinguish between two cases: (i) non-coded data in which a content item is either stored at a base station or not, and (ii) coded data, where segments of the fountain or network coded content item are stored at multiple base stations. For the non-coded case, we derive an integer programming formulation and prove its NP-completeness. We also design a fully polynomial-time approximation algorithm for solving the problem of interest. For the coded case, we derive a linear program formulation that can be solved in polynomial time. Our simulation results show that the proposed collaborative caching schemes provide considerable advances over non-collaborative competitors.