I wonder if we have n risky assets, does the portfolio with the minimum variance always have non-zero weights or can any weight be 0?
There can be zero weights, and for that matter there can be (and often will be) negative weights as well unless you specifically have a constraint saying there can't be. Consider the case where you have 2 risky assets with different variance that are perfectly positively correlated with each other. The minimum variance portfolio will then consist only of the asset with lower variance. Unless you have perfectly correlated asset or the constraint that you don't allow short-selling you won't see zero weights.