You can also use the ngons to your advantage if you want, and this is a way that you can make what you are looking for without using booleans.
Enable Looptools addon first in your user preferences under the Addon tab.
Starting with the default cube, I enter edit mode and change the selection to Face. I select the top face, and then shift-S to snap the cursor to selection. I add a mesh circle and change the vert count to 16 in the operator panel at the bottom of the toolbar.
I delete the top face of the cube, and then in Vertex select mode I select the top vertices and extrude and scale them inward. I subdivided them, and this creates an ngon situation. I change round them with the Circle command in the LoopTools menu under the W popup. I then bridge them with the mesh circle, and then extrude them down in Z into the cube.
I also could have skipped the step of adding the circle and just used the one made from LoopTools on the extrusion, but that would have been harder to place possibly.




!bridge edge loops]6[
]7