In very simple analogy...
1st one is importing a contract into another so that you can use its instances in the contract you are importing it in. Just like you import some library in Python or some other language of your love.
2nd is the inheritance of features and qualities of one contract into another. As you want, in some case, for instance, you feel that a particular contract is the subset of the one you have already defined. You can simply use it to import the qualities and features of the previous contract into another contract.
3rd is the statement used to link some library into your contract. In case your contract depends on some library.
Before a contract using the library, the used library should be deployed to the network.
DO comment, if you need some better explanation...Thanks