|=--------------------------------------------------=| _________________ .____ ___________________ / _____/\_____ \ | | \_ _____/\______ \ \_____ \ / / \ \| | | __)_ | | \ / \/ \_/. \ |___ | \ | ` \ /_______ /\_____\ \_/_______ \/_______ //_______ / \/ \__> \/ \/ \/ |=--------------------------------------------------=| . |03.08 - Joins . |=--------------------------------------------------=| In previous part we create foreign constraint. When added pragme the sqlite controlled the inserts for validity and prevented us from inserting notes to non-existing user. We added some data into the notes table. Now we will examine queries that connects these two tables. There are several types of joins between tables. The most basic are inner joins. Inner join will search first table and according to filter will select given records from the second table. When there is a inner join specified with second table then the second table is searched and records for given records from 1st table will be selected. Let's select all data from notes for given users. select u.user_name, n.no_text from users u inner join notes n on u.user_key = n.user_key order by u.user_key, n.no_key asc; The inner join uses previously created relation between user and notes table. We are using aliases for the tables to simplify the notation. This is e.g. notes n. When alias is specified for table in the from clause then the alias can be used in the rest of the SQL. This can simplify and shorten the notation for the given SQL. This query will give us following results: user_name no_text ----------- ------------ user1 Hello World! user1 Notes no. 2 user1 Notes no. 5 user1 Notes no. 8 user2 Notes no. 3 user2 Notes no. 6 user3 Notes no. 1 user3 Notes no. 4 user3 Notes no. 7 We will now examine the outer joins. Common outer join is LEFT JOIN. That will use relationship of the two tables. But this time it will provide so-called outer join and when there are no records in the joined table the row will display with columns from joined tables empty. In databases there is special term for empty cell - NULL. In the preparation of the user's notes we didn't specify any note for the user4. Let's see if we can query the database to see if there is any user that doesn't have any note stored. select u.user_name, n.no_text from users u left join notes n on u.user_key = n.user_key where n.no_text is null order by u.user_key, n.no_key asc; We will get following result: user_name no_text ----------- --------- user4 We found user without note. And that's user4. That's it for this part. |=--------------------------------------------------=| |=--------------------------------------------------=|