Skip to content

SELECT Queries in SQL Server (DQL)

DQL is used to READ data.

SELECT -> get data from a table

This lesson creates its own small tables, so you can run it on any SQL Server database. The Output under each query is the real result.

IF DB_ID('SqlBasicsDb') IS NULL
    CREATE DATABASE SqlBasicsDb;
GO

USE SqlBasicsDb;
GO

DROP TABLE IF EXISTS Employees;
GO

CREATE TABLE Employees
(
    EmpID      INT PRIMARY KEY,
    Name       VARCHAR(50),
    Department VARCHAR(30),
    City       VARCHAR(30),
    Salary     INT,
    Gender     CHAR(1)
);

INSERT INTO Employees VALUES
(1,  'Ravi',   'IT',      'Hyderabad', 50000, 'M'),
(2,  'Sita',   'HR',      'Chennai',   40000, 'F'),
(3,  'John',   'IT',      'Bengaluru', 60000, 'M'),
(4,  'Meena',  'Sales',   'Hyderabad', 35000, 'F'),
(5,  'Arjun',  'Sales',   'Mumbai',    45000, 'M'),
(6,  'Pooja',  'IT',      'Hyderabad', 55000, 'F'),
(7,  'Kiran',  'HR',      'Mumbai',    38000, 'M'),
(8,  'Divya',  'Finance', 'Chennai',   52000, 'F'),
(9,  'Rahul',  'Finance', 'Bengaluru', 48000, 'M'),
(10, 'Neha',   'IT',      NULL,        65000, 'F');   -- City is unknown
GO
Messages
(10 rows affected)

All columns, all rows

SELECT * FROM Employees;
Output
EmpIDNameDepartmentCitySalaryGender
1RaviITHyderabad50000M
2SitaHRChennai40000F
3JohnITBengaluru60000M
4MeenaSalesHyderabad35000F
5ArjunSalesMumbai45000M
6PoojaITHyderabad55000F
7KiranHRMumbai38000M
8DivyaFinanceChennai52000F
9RahulFinanceBengaluru48000M
10NehaITNULL65000F

Only some columns

SELECT Name, Salary FROM Employees;
Output
NameSalary
Ravi50000
Sita40000
John60000
Meena35000
Arjun45000
Pooja55000
Kiran38000
Divya52000
Rahul48000
Neha65000

Column alias (a new name for the output column)

SELECT Name AS EmployeeName, Salary AS MonthlySalary FROM Employees;
Output
EmployeeNameMonthlySalary
Ravi50000
Sita40000
John60000
Meena35000
Arjun45000
Pooja55000
Kiran38000
Divya52000
Rahul48000
Neha65000

Calculation in SELECT

SELECT Name, Salary, Salary * 12 AS YearlySalary FROM Employees;
Output
NameSalaryYearlySalary
Ravi50000600000
Sita40000480000
John60000720000
Meena35000420000
Arjun45000540000
Pooja55000660000
Kiran38000456000
Divya52000624000
Rahul48000576000
Neha65000780000

WHERE - filter rows

SELECT * FROM Employees WHERE Department = 'IT';
Output
EmpIDNameDepartmentCitySalaryGender
1RaviITHyderabad50000M
3JohnITBengaluru60000M
6PoojaITHyderabad55000F
10NehaITNULL65000F

Comparison operators: = <> > < >= <=

SELECT * FROM Employees WHERE Salary > 50000;
SELECT * FROM Employees WHERE Department <> 'IT';     -- not equal
Output
EmpIDNameDepartmentCitySalaryGender
3JohnITBengaluru60000M
6PoojaITHyderabad55000F
8DivyaFinanceChennai52000F
10NehaITNULL65000F
Output
EmpIDNameDepartmentCitySalaryGender
2SitaHRChennai40000F
4MeenaSalesHyderabad35000F
5ArjunSalesMumbai45000M
7KiranHRMumbai38000M
8DivyaFinanceChennai52000F
9RahulFinanceBengaluru48000M

And - both conditions must be true

SELECT * FROM Employees WHERE Department = 'IT' AND Salary > 55000;
Output
EmpIDNameDepartmentCitySalaryGender
3JohnITBengaluru60000M
10NehaITNULL65000F

Or - any one condition is enough

SELECT * FROM Employees WHERE City = 'Mumbai' OR City = 'Chennai';
Output
EmpIDNameDepartmentCitySalaryGender
2SitaHRChennai40000F
5ArjunSalesMumbai45000M
7KiranHRMumbai38000M
8DivyaFinanceChennai52000F

In - match any value in a list

SELECT * FROM Employees WHERE City IN ('Mumbai', 'Chennai');
Output
EmpIDNameDepartmentCitySalaryGender
2SitaHRChennai40000F
5ArjunSalesMumbai45000M
7KiranHRMumbai38000M
8DivyaFinanceChennai52000F

NOT IN

SELECT * FROM Employees WHERE Department NOT IN ('IT', 'HR');
Output
EmpIDNameDepartmentCitySalaryGender
4MeenaSalesHyderabad35000F
5ArjunSalesMumbai45000M
8DivyaFinanceChennai52000F
9RahulFinanceBengaluru48000M

BETWEEN - a range (both ends included)

SELECT * FROM Employees WHERE Salary BETWEEN 40000 AND 50000;
Output
EmpIDNameDepartmentCitySalaryGender
1RaviITHyderabad50000M
2SitaHRChennai40000F
5ArjunSalesMumbai45000M
9RahulFinanceBengaluru48000M

LIKE - search text

% = any number of characters _ = exactly one character

SELECT * FROM Employees WHERE Name LIKE 'R%';      -- starts with R
SELECT * FROM Employees WHERE Name LIKE '%a';      -- ends with a
SELECT * FROM Employees WHERE Name LIKE '%ee%';    -- contains ee
SELECT * FROM Employees WHERE Name LIKE '____';    -- exactly 4 letters
Output
EmpIDNameDepartmentCitySalaryGender
1RaviITHyderabad50000M
9RahulFinanceBengaluru48000M
Output
EmpIDNameDepartmentCitySalaryGender
2SitaHRChennai40000F
4MeenaSalesHyderabad35000F
6PoojaITHyderabad55000F
8DivyaFinanceChennai52000F
10NehaITNULL65000F
Output
EmpIDNameDepartmentCitySalaryGender
4MeenaSalesHyderabad35000F
Output
EmpIDNameDepartmentCitySalaryGender
1RaviITHyderabad50000M
2SitaHRChennai40000F
3JohnITBengaluru60000M
10NehaITNULL65000F

IS NULL / IS NOT NULL (do NOT use = NULL)

SELECT * FROM Employees WHERE City IS NULL;
SELECT * FROM Employees WHERE City IS NOT NULL;
Output
EmpIDNameDepartmentCitySalaryGender
10NehaITNULL65000F
Output
EmpIDNameDepartmentCitySalaryGender
1RaviITHyderabad50000M
2SitaHRChennai40000F
3JohnITBengaluru60000M
4MeenaSalesHyderabad35000F
5ArjunSalesMumbai45000M
6PoojaITHyderabad55000F
7KiranHRMumbai38000M
8DivyaFinanceChennai52000F
9RahulFinanceBengaluru48000M

DISTINCT - remove duplicates

SELECT DISTINCT Department FROM Employees;
Output
Department
Finance
HR
IT
Sales

TOP - first N rows

SELECT TOP 3 * FROM Employees;
Output
EmpIDNameDepartmentCitySalaryGender
1RaviITHyderabad50000M
2SitaHRChennai40000F
3JohnITBengaluru60000M

ORDER BY - sort the result

SELECT * FROM Employees ORDER BY Salary;          -- low to high (ASC is default)
SELECT * FROM Employees ORDER BY Salary DESC;     -- high to low
Output
EmpIDNameDepartmentCitySalaryGender
4MeenaSalesHyderabad35000F
7KiranHRMumbai38000M
2SitaHRChennai40000F
5ArjunSalesMumbai45000M
9RahulFinanceBengaluru48000M
1RaviITHyderabad50000M
8DivyaFinanceChennai52000F
6PoojaITHyderabad55000F
3JohnITBengaluru60000M
10NehaITNULL65000F
Output
EmpIDNameDepartmentCitySalaryGender
10NehaITNULL65000F
3JohnITBengaluru60000M
6PoojaITHyderabad55000F
8DivyaFinanceChennai52000F
1RaviITHyderabad50000M
9RahulFinanceBengaluru48000M
5ArjunSalesMumbai45000M
2SitaHRChennai40000F
7KiranHRMumbai38000M
4MeenaSalesHyderabad35000F

TOP with ORDER BY - 3 highest salaries

SELECT TOP 3 Name, Salary FROM Employees ORDER BY Salary DESC;
Output
NameSalary
Neha65000
John60000
Pooja55000

Replace NULL with a value

SELECT Name, ISNULL(City, 'Not Known') AS City FROM Employees;
Output
NameCity
RaviHyderabad
SitaChennai
JohnBengaluru
MeenaHyderabad
ArjunMumbai
PoojaHyderabad
KiranMumbai
DivyaChennai
RahulBengaluru
NehaNot Known