When I create my database I define sizes for the datafiles that make it up, by default the MDF and LDF datafiles. I might specify 250MB for the MDF and 50MB for the LDF. These sizes are the sizes that are displayed when I look in Windows Explorer, run sp_helpdb and so on.

The problem is this: How do I find out how much of that datafile is actually filled with data and how much is empty and reserved for use using SQL-based queries?