Your cart is currently empty!
Author: alien
-
Khóa học miễn phí SQL – Order By Clause nhận dự án làm có lương
SQL – ORDER BY Clause
Table of content
The SQL ORDER BY Clause
The SQL ORDER BY clause is used to sort the data in either ascending or descending order, based on one or more columns. This clause can sort data by a single column or by multiple columns. Sorting by multiple columns can be helpful when you need to sort data hierarchically, such as sorting by state, city, and then by the person”s name.
ORDER BY is used with the SQL SELECT statement and is usually specified after the WHERE, HAVING, and GROUP BY clauses.
Following are the important points about ORDER BY Clause −
- Some databases sort the query results in an ascending order by default.
- To sort the data in ascending order, we use the keyword ASC.
- To sort the data in descending order, we use the keyword DESC.
In addition to sorting records in ascending order or descending order, the ORDER BY clause can also sort the data in a database table in a preferred order.
This preferred order may not sort the records of a table in any standard order (like alphabetical or lexicographical), but they could be sorted based on external condition(s).
For instance, in the CUSTOMERS table containing the details of the customers of an organization, the records can be sorted based on the population of the cities they are from. This need not be alphabetically sorted, instead, we need to define the order manually using the statement.
Syntax
The basic syntax of the ORDER BY clause is as follows −
SELECT column-list FROM table_name [ORDER BY column1, column2, .. columnN] [ASC | DESC];
Where, column-list is list of the columns we want to retrieve; and ASC or DESC specifies the sort order.
Note: We can use more than one column in the ORDER BY clause, but we need to make sure that the column we are using to sort is specified in the column-list.
ORDER BY Clause with ASC
We can sort the result-set of a query in ascending order (based on one or more columns) using the SQL ORDER BY clause by specifying ASC as the sort order. ASC is the default sort order for this clause, i.e. while using the ORDER BY clause if you do not explicitly specify the sort order, the data will be sorted in ascending order.
Example
Assume we have created a table with name CUSTOMERS in the MySQL database using CREATE TABLE statement as shown below −
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
Following query inserts values into this table using the INSERT statement −
insert INTO CUSTOMERS VALUES (1, ''Ramesh'', 32, ''Ahmedabad'', 2000.00), (2, ''Khilan'', 25, ''Delhi'', 1500.00), (3, ''Kaushik'', 23, ''Kota'', 2000.00), (4, ''Chaitali'', 25, ''Mumbai'', 6500.00), (5, ''Hardik'', 27, ''Bhopal'', 8500.00), (6, ''Komal'', 22, ''Hyderabad'', 4500.00), (7, ''Muffy'', 24, ''Indore'', 10000.00);
The table obtained is as shown below −
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 2000.00 2 Khilan 25 Delhi 1500.00 3 Kaushik 23 Kota 2000.00 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 6 Komal 22 Hyderabad 4500.00 7 Muffy 24 Indore 10000.00 In the following query, we are sorting the records of the CUSTOMERS table in ascending order based on the column NAME −
SELECT * FROM CUSTOMERS ORDER BY NAME ASC;
Output
This would produce the following result −
ID NAME AGE ADDRESS SALARY 4 Chaitali 25 Mumbai 6500.00 5 Hardik 27 Bhopal 8500.00 3 Kaushik 23 Kota 2000.00 2 Khilan 25 Delhi 1500.00 6 Komal 22 Hyderabad 4500.00 7 Muffy 24 Indore 10000.00 1 Ramesh 32 Ahmedabad 2000.00 ORDER BY Clause with DESC
To sort the result-set of a query in descending order (based on one or more columns), we need to use the ORDER BY clause by specifying DESC as the sort order.
Example
The following query sorts the records of the CUSTOMER table based on the descending order of the name of the customers −
SELECT * FROM CUSTOMERS ORDER BY NAME DESC;
Output
This would produce the result as follows −
ID NAME AGE ADDRESS SALARY 1 Ramesh 32 Ahmedabad 2000.00 7 Muffy 24 Indore 10000.00 6 Komal 22 Hyderabad 4500.00 2 Khilan 25 Delhi 1500.00 3 Kaushik 23 Kota 2000.00 5 Hardik 27 Bhopal 8500.00 4 Chaitali 25 Mumbai 6500.00 ORDER BY Clause on Multiple Columns
We can use the ORDER BY clause to sort the result-set of a query by multiple (more than one) columns. When sorting by multiple columns, the sorting is done in the order that is specified in the ORDER BY clause. In other words, the table will be sorted based on the first column (specified in the query), then the second column, and so on.
Example
In the following query, we are retrieving all records from the CUSTOMERS table and sorting them first by their address in ascending order, and then by their salary in descending order −
SELECT * FROM CUSTOMERS ORDER BY AGE ASC, SALARY DESC;
Output
Following is the result produced −
ID NAME AGE ADDRESS SALARY 6 Komal 22 Hyderabad 4500.00 3 Kaushik 23 Kota 2000.00 7 Muffy 24 Indore 10000.00 4 Chaitali 25 Mumbai 6500.00 2 Khilan 25 Delhi 1500.00 5 Hardik 27 Bhopal 8500.00 1 Ramesh 32 Ahmedabad 2000.00 ORDER BY with WHERE Clause
We can also use the WHERE clause with the ORDER BY clause to sort the rows that meet certain conditions. This can be useful when we want to sort a subset of the data in a table based on the specific criteria.
Example
Now, we are retrieving all records from the CUSTOMERS table where the age of the customer is 25, and sorting them as per the descending order of their names −
SELECT * FROM CUSTOMERS WHERE AGE = 25 ORDER BY NAME DESC;
Output
Following is the output of the above query −
ID NAME AGE ADDRESS SALARY 2 Khilan 25 Delhi 1500.00 4 Chaitali 25 Mumbai 6500.00 ORDER BY with LIMIT Clause
We can use the LIMIT clause with ORDER BY clause to limit the specified number of rows by sorting them either in ascending or in descending order.
Syntax
Following is the syntax of using the LIMIT clause with the ORDER BY clause in MySQL database −
SELECT column1, column2, ... FROM table_name ORDER BY column_name1 [ASC | DESC], column_name2 [ASC | DESC], ... LIMIT N;
Example
In here, we are retrieving the top 4 records from the CUSTOMERS table based on their salary, and sorting them in ascending order based on their name −
SELECT SALARY FROM CUSTOMERS ORDER BY NAME LIMIT 4;
Output
Following is the output of the above query −
SALARY 6500.00 8500.00 2000.00 1500.00 Sorting Results in a Preferred Order
One can also sort the records of a table in their own preferred order using the CASE statement within the ORDER BY clause. All the values are specified in the clause along with the position they are supposed to be sorted in; if the values are not given any number, they are automatically sorted in ascending order.
Example
To fetch the rows with their own preferred order, the SELECT query used would be as follows −
SELECT * FROM CUSTOMERS ORDER BY ( CASE ADDRESS WHEN ''MUMBAI'' THEN 1 WHEN ''DELHI'' THEN 2 WHEN ''HYDERABAD'' THEN 3 WHEN ''AHMEDABAD'' THEN 4 WHEN ''INDORE'' THEN 5 WHEN ''BHOPAL'' THEN 6 WHEN ''KOTA'' THEN 7 ELSE 100 END );
Output
The above query sorts the CUSTOMERS table based on the custom order defined using the CASE statement. Here, we are sorting the records based on the population of the cities specified in the ADDRESS column.
ID NAME AGE ADDRESS SALARY 4 Chaitali 25 Mumbai 6500.00 2 Khilan 25 Delhi 1500.00 6 Komal 22 Hyderabad 4500.00 1 Ramesh 32 Ahmedabad 2000.00 7 Muffy 24 Indore 10000.00 5 Hardik 27 Bhopal 8500.00 3 Kaushik 23 Kota 2000.00
Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc
Khóa học miễn phí SQL – Top Clause nhận dự án làm có lương
SQL – TOP Clause
The SQL TOP Clause
While we are retrieving data from an SQL table, the SQL TOP clause is used to restrict the number of rows returned by a SELECT query in SQL server. In addition, we can also use it with UPDATE and DELETE statements to limit (restrict) the resultant records.
For instance, if you have a large number of data stored in a database table, and you only want to perform operations on first N rows, you can use the TOP clause in your SQL server query.
MySQL database does not support TOP clause instead of this, we can use the clause to select a limited number of records from a MySQL table. Similarly, Oracle supports the ROWNUM clause to restrict the records of a table. The TOP clause is similar to the LIMIT clause.
Syntax
The basic syntax of the SQL TOP clause is as follows −
SELECT TOP value column_name(s) FROM table_name WHERE [condition]
Where, value is the number/ percentage of number of rows to return from the top.
Example
To understand it better let us consider the CUSTOMERS table which contains the personal details of customers including their name, age, address and salary etc. as shown below −
CREATE TABLE CUSTOMERS ( ID INT NOT NULL, NAME VARCHAR (20) NOT NULL, AGE INT NOT NULL, ADDRESS CHAR (25), SALARY DECIMAL (18, 2), PRIMARY KEY (ID) );
Now, insert values into this table using the INSERT statement as follows −
INSERT INTO CUSTOMERS VALUES (1, ''Ramesh'', 32, ''Ahmedabad'', 2000.00 ), (2, ''Khilan'', 25, ''Delhi'', 1500.00 ), (3, ''Kaushik'', 23, ''Kota'', 2000.00 ), (4, ''Chaitali'', 25, ''Mumbai'', 6500.00 ), (5, ''Hardik'', 27, ''Bhopal'', 8500.00 ), (6, ''Komal'', 22, ''Hyderabad'', 4500.00 ), (7, ''Muffy'', 24, ''Indore'', 10000.00 );
The table will be created as follows −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
Now, we are using the TOP clause to fetch the top 4 records from the CUSTOMERS table without specifying any conditional clauses such as WHERE, ORDER BY, etc. −
SELECT TOP 4 * FROM CUSTOMERS;
Output
This would produce the following result −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
TOP with ORDER BY Clause
The ORDER BY clause in SQL is used to sort the result-set of a query in ascending or descending order. We can use it along with the TOP clause to retrieve (or, update or, delete etc.) first N records in sorted order.
Example
Using the following query we are retrieving the top 4 records of the CUSTOMERS table in a sorted order. Here, we are sorting the table in descending order based on the SALARY column −
SELECT TOP 4 * FROM CUSTOMERS ORDER BY SALARY DESC;
Output
We obtain the result as follows −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
7 | Muffy | 24 | Indore | 10000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
Note − By default, the ORDER BY clause sorts the data in ascending order. So, if we need to sort the data in descending order, we must use the DESC keyword.
TOP Clause with PERCENT
We can also restrict the records by specifying percentage value instead of number, using the PERCENT clause along with the TOP clause.
Example
The following query selects the first 40% of the records from the CUSTOMERS table sorted in the ascending order by their SALARY −
SELECT TOP 40 PERCENT * FROM CUSTOMERS ORDER BY SALARY
Output
We have the total of 7 records in our table. So 40% of 7 is 2.8. Therefore, SQL server rounds the result to three rows (the next whole number) as shown in the output below −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
TOP with WHERE Clause
We can use the TOP clause with the WHERE clause to limit the given number of rows and filter them based on a specified condition.
Example
Following is the query to show the details of the first two customers whose name starts with K from the CUSTOMERS table −
SELECT TOP 2 * FROM CUSTOMERS WHERE NAME LIKE ''k%''
Output
Following result is produced −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
TOP Clause With DELETE Statement
The TOP clause can be used with the DELETE statement to delete a specific number of rows that meet the given criteria.
Example
In the following query, we are using DELETE statement with TOP clause. Here, we are deleting the top 2 customers whose NAME starts with K −
DELETE TOP(2) FROM CUSTOMERS WHERE NAME LIKE ''K%
Output
We get the output as shown below −
(2 rows affected)
Verification
We can verify whether the changes are reflected in a table by retrieving its contents using the SELECT statement as shown below −
SELECT * FROM CUSTOMERS;
The table is displayed as follows −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
TOP and WITH TIES Clause
While sorting the data in a table using the ORDER BY clause based on a column, some times multiple rows may contain same values in the column(s) specified in the ORDER BY clause.
If you try to restrict the number of records using the TOP clause, all the eligible columns may not be filtered.
The WITH TIES clause is used to ensure that the records having the same values (records with “tied” values) are included in the query results.
Example
Consider the above created table CUSTOMERS. If we need to retrieve the top 2 customers sorted by the ascending order of their SALARY values, the query would be −
SELECT TOP 2 * FROM CUSTOMERS ORDER BY SALARY;
The resultant table would be −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
But, the first two salary values (in ascending order) in the table are 1500 and 2000 and there is another column in the CUSTOMERS table with salary value 2000 which is not included in the result.
If you want to retrieve all the columns with first two salary values (when arranged in the ascending order). We need to use the WITH TIES clause as showb below −
SELECT TOP 2 WITH TIES * FROM CUSTOMERS ORDER BY SALARY;
Output
The resultant table would be −
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
Uses of TOP Clause
Some common use cases for the TOP clause include −
-
Pagination − When displaying a large number of records, the TOP clause can be used to return only a certain number of records at a time, allowing for more manageable and efficient pagination of the data.
-
Sampling data − The TOP clause can be used to quickly retrieve a sample of data from a table for testing or analysis.
-
Improving performance − By limiting the number of rows returned, the TOP clause can help improve the performance of a query, especially when dealing with large tables.
-
Debugging − When developing or debugging a query, the TOP clause can be used to quickly return a small number of rows to test the correctness of the query.
-
Data visualization − The TOP clause can be used to limit the number of rows returned for visualization purposes, such as creating charts or graphs.
Khóa học lập trình tại Toidayhoc vừa học vừa làm dự án vừa nhận lương: Khóa học lập trình nhận lương tại trung tâm Toidayhoc