Filtering Records

 Setting a Criterion

 Introduction

A filter is a technique of an expression that behaves like a funnel: it selects some records, based on a condition or rule, and excludes the records that don't follow the rule. The condition of a filter is also called a criterion. The plural is criteria but it can also be used in singular. To create a filter, you write a SQL statement such as those we introduced in the previous lesson. This means that you must specify the column(s) to SELECT and the data source using FROM. Here is an example:

```SELECT FirstName, LastName, Gender
FROM Students;```

To specify a criterion in a filter, you use the WHERE keyword. The formula to follow is:

`SELECT WhatColumn FROM WhatObject WHERE Condition;`

The new section in this formula is the WHERE Condition. When you ask the interpreter to execute this type of statement, it will examine the Condition. The Condition must be valid and must produce a Boolean constant.

 Introduction to Boolean Constants

Databases and other programming environments provide operators you can use to perform data analysis. The operators used are called logical operators because they are used to perform comparisons that produce a result of true or false (there is no middle result; in other words, something is not half true or half false or "Don't Know": either it is true or it is false).

 The TRUE and FALSE Constants

In Boolean algebra, something is considered TRUE when it holds a value. The value is also considered as 1 or Yes. By contrast, if something doesn't hold a value, it is considered non-existent and non-worthy of consideration. Such a thing has a value of FALSE, 0, or No. To retrieve such a value, you can just find out if the value of a field exists or not.

The comparison for a True or False value can be performed on a Boolean field, such a case is the SPH (which specifies whether a student lives in a single parent home) field of the Students table of the ROSH1 database. If a record has a value of 1, the table considers that such a field is True. If the field has a 0 value, then it holds a FALSE value.

 The NULL Constant

While the True and False constants are used to find out whether a Boolean expression has a positive or a negative value, the database provides another constant used to find out whether a field is empty. This can be done using the NULL constant.

When a field holds a value, the value would be considered using the comparison operators we will learn shortly. If the field is empty, it holds a value of NULL.

 Practical Learning: Analyzing Data With Operators
1. Display the MySQL prompt and execute the following statement:

USE ROSH1;

 Filtering Records With Boolean Operators

 Equality =

The equality operator is used to compare two values for similarity. The syntax of this operation is:

`Value1 = Value2`

If Value1 and Value2 hold the same value, the comparison produces a TRUE result. If they hold different values, the comparison renders a FALSE value.
 Practical Learning: Applying the Equality Operator

1. To use the equality operator, execute the following statement:

 ```mysql> SELECT FirstName, LastName, Gender -> FROM Students -> WHERE Gender = 'Male'; +-----------+----------+--------+ | FirstName | LastName | Gender | +-----------+----------+--------+ | Sebastien | Porter | Male | | Koko | Domba | Male | | Nehemiah | Dean | Male | | Santos | Pacheco | Male | | Mohamed | Husseini | Male | | Dean | Chen | Male | | Justin | Vittas | Male | | Ismael | Zara | Male | | Anselme | Waters | Male | | Danilo | Chico | Male | | Paul | Farms | Male | | Lester | Bell | Male | | Christian | Liss | Male | | Clint | Fuller | Male | | Thomas | Moore | Male | | Tim | Amorros | Male | | Maurice | Walken | Male | | Charles | Edelman | Male | | Arthur | Milley | Male | | Martin | Davis | Male | | Arthur | Junger | Male | | George | Orion | Male | | Albert | Linken | Male | | Ralph | Hagers | Male | | Charles | Laurel | Male | +-----------+----------+--------+ 25 rows in set (0.07 sec) mysql>```
2. Notice the list includes only male students
 Inequality <>

To find out if two fields hold different values, you can use the inequality operator which is represented by <>. Its syntax is:

`Value1 <> Value2`

This comparison is performed between Value1 and Value2. If they hold different values, then the comparison produces a TRUE value. If they hold the same value, the comparison produces FALSE. This shows that the equality (=) and the inequality (<>) operators are opposite each other.
 Practical Learning: Applying the Inequality Operator

1. To use the inequality operator, execute the following statement:

 ```SELECT FirstName, LastName, Gender FROM Students WHERE Gender <> 'Female';```
2. Notice the list includes the same result as the previous
 Less Than <

The "Less Than" operator uses the following syntax:

`Value1 < Value2`

If Value1 holds a value that is lower than that of Value2, the comparison produces TRUE. If Value1 holds a value that is greater than or similar to that of Value2, the comparison renders FALSE.

 Practical Learning: Applying the Inequality Operator
1. To get a list of students born before June 1988, execute the following statement:

 ```mysql> SELECT FirstName, LastName, Gender, DOB -> FROM Students -> WHERE DOB < '1988-06-01'; +------------+----------+--------+------------+ | FirstName | LastName | Gender | DOB | +------------+----------+--------+------------+ | Sebastien | Porter | Male | 1985-02-12 | | Antoinette | Clarck | Female | 1986-04-10 | | Janet | West | Female | 1986-06-02 | | Catherine | Chang | Female | 1987-06-12 | | Nehemiah | Dean | Male | 1985-12-02 | | Sherryl | Ashburn | Female | 1985-10-07 | | Santos | Pacheco | Male | 1988-05-05 | | Mohamed | Husseini | Male | 1988-01-05 | | Dean | Chen | Male | 1987-05-02 | | Brenda | Lobo | Female | 1986-10-05 | | Suzanna | Verde | Female | 1988-03-12 | | Danilo | Chico | Male | 1987-06-20 | | Paul | Farms | Male | 1986-04-30 | | Lester | Bell | Male | 1985-12-06 | | Arlette | Duma | Female | 1985-09-28 | | Harriette | Sans | Female | 1986-08-02 | | Clint | Fuller | Male | 1986-04-19 | | Thomas | Moore | Male | 1988-04-22 | | Bernadette | Howerson | Female | 1986-06-11 | | Charles | Edelman | Male | 1986-12-26 | | Arthur | Milley | Male | 1985-05-01 | | Martin | Davis | Male | 1986-10-14 | | Ann | Miller | Female | 1987-06-21 | | Victoria | Milchen | Female | 1988-04-18 | | Martine | Quarles | Female | 1986-02-04 | | Martha | Bastens | Female | 1985-02-12 | | Jeannette | Hutchins | Female | 1988-04-24 | | George | Orion | Male | 1985-12-22 | | Albert | Linken | Male | 1988-05-14 | +------------+----------+--------+------------+ 29 rows in set (0.00 sec) mysql>```
2. Notice the result
 Less Than or Equal <=

When comparing two values, you may want to know whether two fields hold the same value or if one is lower than the other. This comparison can be performed with the "Less Than Or Equal To" operator. It is represented by <= and its formula is:

`Value1 <= Value2`

If both operands (Value1 and Value2) hold the same value, then the comparison produces a TRUE result. If Value1 holds a value that is lower than that of Value2, the comparison still produces a TRUE result. By contrast, if the value of Value1 is higher than that of Value2, the comparison renders a FALSE result. Notice that the > and the <= operators are opposite each other.

 Practical Learning: Using the Less Than Or Equal Operator
1. To get a list of students born before 1990, execute the following statement:

 ```SELECT FirstName, LastName, DOB, EmailAddress FROM Students WHERE DOB <= '1990-01-01';```
2. Notice that the result includes students whose year of birth is less than 1990
 Greater Than >

The > operator is used to find out whether one value is "Greater Than" another. Its syntax is:

`Value1 > Value2`

The operation is performed on the values of Value1 and Value2. If Value1 holds a value greater than that of Value2, then the comparison produces TRUE. Otherwise, the comparison produces FALSE. That is, if the value of Value2 is greater than or equal to that of Value1, then the comparison produces FALSE.

 Greater Than or Equal >=

If you have two values and want to find out whether they hold similar values or the first is greater than the second, you can use the >= operator whose syntax is:

`Value1 >= Value2`

If both Value1 and Value2 hold the same value, then the comparison renders a TRUE result. Similarly, if the left operand, Value1, holds a value greater than that of the right operand, Value2, the comparison still produces TRUE. If the value of Value1 is less than the value of Value2, the comparison produces a FALSE result. Therefore, < and >= are opposite.

 Filtering Records With Logical Operators

 The NOT Operator
 To deny the presence, the availability, or the existence of a value, you can use the NOT operator. This operator is primarily used to reverse a Boolean value. For example, we have learned that FALSE is the opposite of TRUE. In the same way, TRUE is the opposite of FALSE. If you want to compare a value as not being TRUE, the NOT TRUE would produce the same result as the FALSE value. For the same reason, the expression NOT FALSE is the same as TRUE.

 Practical Learning: Using the NOT Operator
1. To get a list of female students by denying those who are male gender, execute the following statement:

 ```mysql> SELECT LastName, FirstName, Gender, DOB -> FROM Students -> WHERE NOT (Gender = 'Male'); +--------------+------------+--------+------------+ | LastName | FirstName | Gender | DOB | +--------------+------------+--------+------------+ | Hoak | Suzie | Female | 1991-10-05 | | Clarck | Antoinette | Female | 1986-04-10 | | West | Janet | Female | 1986-06-02 | | Chang | Catherine | Female | 1987-06-12 | | Ashburn | Sherryl | Female | 1985-10-07 | | DeGaram | Ruby | Female | 1988-10-11 | | Chance | Carole | Female | 1990-10-22 | | Lobo | Brenda | Female | 1986-10-05 | | Verde | Suzanna | Female | 1988-03-12 | | Franse | Mincy | Female | 1991-10-08 | | Andriamirano | Arlene | Female | 1989-02-15 | | Ledoux | Gabrielle | Female | 1989-06-23 | | Lobila | Koko | Female | 1990-08-20 | | Duma | Arlette | Female | 1985-09-28 | | Sans | Harriette | Female | 1986-08-02 | | Howerson | Bernadette | Female | 1986-06-11 | | Steinberg | Judith | Female | 1989-02-22 | | Napolis | Ella | Female | 1991-04-24 | | Miller | Ann | Female | 1987-06-21 | | Broadskey | Millicent | Female | 1989-09-10 | | Milchen | Victoria | Female | 1988-04-18 | | Quarles | Martine | Female | 1986-02-04 | | Laurens | Julie | Female | 1988-06-22 | | Bastens | Martha | Female | 1985-02-12 | | Hutchins | Jeannette | Female | 1988-04-24 | | Marlly | Paul | Female | 1990-10-20 | | Mart | Donnie | Female | 1990-06-08 | +--------------+------------+--------+------------+ 27 rows in set (0.02 sec) mysql>```
2. Notice that the list includes students only girls
 The IS Operator
 To validate something as being possible, you can use the IS operator. For example, to acknowledge that something is NULL, you can use the IS NULL expression. In the same way, to validate that something is not null, you can use the expression IS NOT NULL.

 Practical Learning: Using the IS Operator
1. To get a list of students where the record doesn't include an emergency name, execute the following statement:

 ```mysql> SELECT LastName, FirstName, Gender, EmergencyName -> FROM Students -> WHERE EmergencyName IS NULL; +-----------+-----------+--------+---------------+ | LastName | FirstName | Gender | EmergencyName | +-----------+-----------+--------+---------------+ | Pacheco | Santos | Male | NULL | | Vittas | Justin | Male | NULL | | Lobo | Brenda | Female | NULL | | Ledoux | Gabrielle | Female | NULL | | Duma | Arlette | Female | NULL | | Davis | Martin | Male | NULL | | Miller | Ann | Female | NULL | | Broadskey | Millicent | Female | NULL | | Junger | Arthur | Male | NULL | | Laurens | Julie | Female | NULL | | Bastens | Martha | Female | NULL | | Hutchins | Jeannette | Female | NULL | | Orion | George | Male | NULL | | Linken | Albert | Male | NULL | | Hagers | Ralph | Male | NULL | +-----------+-----------+--------+---------------+ 15 rows in set (0.00 sec) mysql>```
2. To see a list of the students whose records include a number to call in case of emergency, execute the following statement:

 ```mysql> SELECT LastName, FirstName, EmergencyName, EmergencyPhone -> FROM Students -> WHERE EmergencyPhone IS NOT NULL; +--------------+------------+--------------------------+----------------+ | LastName | FirstName | EmergencyName | EmergencyPhone | +--------------+------------+--------------------------+----------------+ | Porter | Sebastien | John Porter | (202) 662-4825 | | Hoak | Suzie | Christianne Hoak | (301) 364-0221 | | Clarck | Antoinette | Henriette Clarck | (301) 598-9292 | | Chang | Catherine | Ernie Change | (202) 215-6663 | | Dean | Nehemiah | Marie Rodnat | (703) 434-8756 | | Ashburn | Sherryl | Shelia Ashburn | (703) 292-8340 | | Pacheco | Santos | NULL | (202) 938-7772 | | Husseini | Mohamed | Dr. Phyllis Husseini | (202) 631-8855 | | DeGaram | Ruby | Anthony DeGaram | (301) 938-1220 | | Chance | Carole | Andy Chance | (301) 422-1001 | | Vittas | Justin | NULL | (301) 549-0020 | | Zara | Ismael | Robert Zara | (202) 978-6642 | | Waters | Anselme | Celestin Waters | (703) 894-6624 | | Lobo | Brenda | NULL | (703) 894-2888 | | Chico | Danilo | Stephen Chico | (202) 299-7001 | | Franse | Mincy | Melanie Franse | (301) 986-4445 | | Andriamirano | Arlene | Christianne Andriamirano | (703) 593-2820 | | Lobila | Koko | Aquilla Lobila | (301) 752-0002 | | Farms | Paul | Rebecca Farms | (301) 696-8281 | | Bell | Lester | Bernadette Bell | (301) 979-0032 | | Liss | Christian | Sandra Liss | (703) 797-9762 | | Duma | Arlette | NULL | (301) 206-8623 | | Sans | Harriette | Thomas Sans | (703) 684-1500 | | Moore | Thomas | Deborah Moore | (410) 730-8100 | | Howerson | Bernadette | Caron Howerson | (301) 899-1800 | | Steinberg | Judith | Jim | (301) 322-7130 | | Napolis | Ella | Sandra Napolis | (301) 925-7041 | | Walken | Maurice | | (202) 583-4228 | | Edelman | Charles | Jasmine Bealieu | (301) 656-4441 | | Milley | Arthur | Jeffrey Milley | (301) 229-1600 | | Milchen | Victoria | Paul Milchen | (301) 540-2300 | | Junger | Arthur | NULL | (301) 656-4060 | | Bastens | Martha | NULL | (301) 780-4424 | | Marlly | Paul | Arlette Hutchins | (301) 661-5050 | | Mart | Donnie | Alan Marly | (301) 276-6068 | | Linken | Albert | NULL | (301) 530-0540 | | Laurel | Charles | Stephen Laurel | (301) 628-3200 | +--------------+------------+--------------------------+----------------+ 37 rows in set (0.00 sec) mysql>```
3. Type quit and press Enter to end the lesson
 Comparison Operators: IN
 If you have a series of records and want to find a record or a group of records among them, you can use the IN operator.
 SQL provides many and many other operators that we have not reviewed here.

 Other Operators

 Introduction
 We have seen that the SELECT keyword can be used to create a list of isolated columns. These columns are rendered separate of each other. Instead of having separate columns, you can combine them to create a string or a value that is in fact an expression. For example, you can combine a first name and a last name to create a full name. An expression that combines columns can be performed on text-based columns. such as a first name being added to a last name to get a full name. Another expression can use a date on the table, add a number to it to get a date on another day. An expression can also be used to perform a calculation on two or more columns such as employees weekly hours multiplied by their hourly salary to get their weekly salary. The most common operator used is the addition. It can be used on numeric values. All other arithmetic operators can be used. For example, you can multiply a weekly hours value to an hourly salary to get a weekly salary. The statement of such an expression can be written as follows: ```SELECT WeeklyHours * HourlySalary FROM Payroll```

 The Assignment Operator
 The SQL allows you to specify a different name for any column during data analysis or a name for an expression. This is done using the assignment operator "=". To change the name of a column during data analysis, on the right side of SELECT, type the desired name, followed by the assignment operator, followed by the actual name of the column.