How to find out who deleted some data SQL Server
I've not tried fn_dblog on Express but if it is available the following will give you delete operations:
SELECT
*
FROM
fn_dblog(NULL, NULL)
WHERE
Operation = 'LOP_DELETE_ROWS'
Take the transaction ID for transactions you're interested in and identify the SID that initiated the transaction with:
SELECT
[Transaction SID]
FROM
fn_dblog(NULL, NULL)
WHERE
[Transaction ID] = @TranID
AND
[Operation] = 'LOP_BEGIN_XACT'
Then identify the user from the SID:
SELECT
*
FROM
sysusers
WHERE
[sid] = @SID
Edit: Bringing that all together to find deletes on a specified table:
DECLARE @TableName sysname
SET @TableName = 'dbo.Table_1'
SELECT
u.[name] AS UserName
, l.[Begin Time] AS TransactionStartTime
FROM
fn_dblog(NULL, NULL) l
INNER JOIN
(
SELECT
[Transaction ID]
FROM
fn_dblog(NULL, NULL)
WHERE
AllocUnitName LIKE @TableName + '%'
AND
Operation = 'LOP_DELETE_ROWS'
) deletes
ON deletes.[Transaction ID] = l.[Transaction ID]
INNER JOIN
sysusers u
ON u.[sid] = l.[Transaction SID]
If database is in full recovery mode or if you have transaction log backups you can try to read these using third party log readers.
You can try ApexSQL Log (premium but has a free trial) or SQL Log Rescue (free but sql 2000 only).
how they could find out who deleted some data in their SQL Server database
Although this is answered, wanted to add that SQL Server has a default trace enabled and it can be used to find out who dropped/altered the objects.
Object events
Object events include: Object Altered, Object Created and Object Deleted
note: SQL Server by default has 5 trace files, 20 MB each and there is no known supported method of changing this. If you have a busy system, the trace files may roll over far too fast (even within hours) and you may not be able to catch some of the changes.
Excellent example can be found : The default trace in SQL Server - the power of performance and security auditing