Does this SQL code look okay to everyone? I'm new to coding SELECT Title
FROM Film F, Award A
WHERE F.Film = a.FilmID
AND Award_Category = "Best Documentary"
AND Award_Ceremony = "Galway Film Fleadh"
AND F.Year = 2008;

SELECt Title,Year,Genre
FROM Film F, Director D
WHERE D.DirectorID = F.DirectorID
AND D.Forename = "Neil"
AND D.Surname = "Jordan";

SELECT A.Forename, A.Surname
FROM Actor A, Film F, Role R
WHERE A.ActorID = R.ActorID
AND F.Film.ID = R.FilmID
AND Part = "Harry Waters"
AND Year = "2008"
AND Made_In_Country = "Ireland"
AND F.Title = "In Bruges";

SELECT F.Title 
FROM Director D,Film F, Role R,Actor A
WHERE D.DirectorId = F.DirectorID
AND F.FilmID = R.FilmID
AND A.ActorID = R.ActorID
AND D.Forename = "John"
AND D.Surname = "Forde"
AND A.Forename = "John"
AND A.Surname = "Wayne";

SELECT COUNT(Language)
FROM Film
WHERE Made_In_Country = "Ireland"
AND Langauge = "Irish"
AND Year &gt;= 1995;

SELECT Title
FROM Film
WHERE Genre = "Western"
AND Title LIKE "%Riders%";

SELECT DISTINCT A.Forename, A.Surname
FROM Actor A, Role R
WHERE A.ActorID = R.ActorID
AND Part = "James Bond"

DELETE FROM Actor
WHERE Actor.Forename = "Steven"
AND Actor.Surname = "Spielberg";

INSERT INTO Director (Forename,Surname)
VALUES ("Steven", "Spielberg");


Assuming no actor has the same name.

SELECT A.Forename, A.Surname
FROM Actor, Award
WHERE A.ActorID = AW.ActorID
AND AW.Award_Category = "Best Actor"
AND Award_Ceremony = "Oscars"
GROUP BY A.FOrename, A.Surname
HAVING (SELECT COUNT(A.Forename,A.Surname)
FROM Actor A,Award AW
WHERE A.ActorID = AW.ActorID AND AW.Award_Category = "Best Actor"
AND Award_Ceremony = "Oscars"
GROUP BY A.Forename, A.Surname
HAVING COUNT(A.Forename, A.Surname) &gt; 1);
It is hard to tell without more details. Like @Paparazzi said, it is more clear if you do joins using the join syntax:

SELECT Title
FROM Film F
    INNER JOIN Award A
    ON F.Film = a.FilmID
WHERE 
    Award_Category = "Best Documentary"
    AND Award_Ceremony = "Galway Film Fleadh"
    AND F.Year = 2008;


Generally speaking if you are building an app you might want to do your selects using a unique ID column instead. This will be faster because you can create better indexes(ms-sql, mysql) on your tables, plus you can avoid multiple conditionals:

SELECT Title
FROM Film F
    INNER JOIN Award A
    ON F.Film = a.FilmID
WHERE 
    F.Film = 1234


This is the same for your delete and presumably your update too, what if you have two directors named Steven Spielberg? Doing data changes based on ID is much more reliable.

For this query it doesn't seem to actually need a join. Is any data being pulled/compared from the Role table? I would look at all your queries to see if they really need the join or not.

SELECT DISTINCT A.Forename, A.Surname
FROM Actor A, Role R
WHERE A.ActorID = R.ActorID
AND Part = "James Bond"


Instead of using LIKE with a wildcard character in the front(thus preventing any index from being used on this field), you might want to look into full text searching if you are using SQL Server.

 SELECT Title
 FROM Film
 WHERE Genre = "Western"
 AND Title LIKE "%Riders%";


The last query with the headline Assuming no actor has the same name. is very confusing, I've never seen a query like that, is that valid sql? I believe group by and having should always be at the end.

If you post your table structure we can probably offer more improvements because from your queries there might be room for normalization improvements as well.

For MySQL run: show create table my_table\G

For SQL Server: right click your table and select Script As then select Create To