|=--------------------------------------------------=| _________________ .____ ___________________ / _____/\_____ \ | | \_ _____/\______ \ \_____ \ / / \ \| | | __)_ | | \ / \/ \_/. \ |___ | \ | ` \ /_______ /\_____\ \_/_______ \/_______ //_______ / \/ \__> \/ \/ \/ |=--------------------------------------------------=| . |03.05 - Querying the data II. . |=--------------------------------------------------=| Next we will examine some more data querying. Let's assume we have table table named users. Selecting all columns and all rows from this table: select * from users; Gives us following result: user_key user_name user_password ---------- ----------- --------------- 1 user1 pass 2 user2 pass 3 user3 pass 4 user4 pass Previously we selected certain both columns or rows. Now we would like to sort the results. This is done by adding ORDER BY clause to the query. After this the query can look like: select * from users a order by user_key desc; That would give use following result: user_key user_name user_password ---------- ----------- --------------- 4 user4 pass 3 user3 pass 2 user2 pass 1 user1 pass You can see the rows are sorted according to numeric order by the user_key column. Let's limit the result to only TOP n rows. We would like to select last 4 rows in terms of the descending user_key order: select * from users a order by user_key desc limit 2; Here we added the lmit user_key user_name user_password ---------- ----------- --------------- 4 user4 pass 3 user3 pass In the previous queries we added alias for the table "a". From now we can reference to the columns of the certain table using this alias. Now we will try to select 2 middle rows when sorted by user name descending. For this purpose we will use analytical function row_number(). This function calculate and apply internal sort in the inner query. Then we will give alias to the inner query "b". And finally we will apply filter to select only rows with row number between 2 and 3. select rn, user_key, user_name from ( select row_number() over (order by user_name desc) rn, a.user_key, a.user_name from users a ) b where b.rn between 2 and 3; Will give us following result: rn user_key user_name ---- ---------- ----------- 2 3 user3 3 2 user2 In the next section we will examine grouping. |=--------------------------------------------------=| |=--------------------------------------------------=|