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).
Like C#, in SQL, a Boolean variable can hold a TRUE value. The value is also considered as 1. 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 is existent or not. The comparison for a True or False value is mostly performed on Boolean fields, such a case is the SPHome (which specifies whether a student lives in a single parent home) field of the Students table of the HighSchool 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. After you have declared a variable, the SQL interpreter reserves a space in the computer memory for it but does not put anything in that memory space. At that time, that area of memory does not hold a significant value. Also at that time, the variable is considered null. Here is note to be careful about: when a variable is said to hold a null value, it does not mean its value is 0. It does not even mean that the variable's memory space is empty. It actually means that we cannot clearly determine the current value that the variable is holding. To support the null value, Transact-SQL provides a constant named NULL. The NULL constant is mostly used for comparison purposes. For example, you can use an IF statement to check the nullity of a variable. 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. Here is an example: // Square Calculation
private void btnConditions_Click(object sender, EventArgs e)
{
SqlConnection connection =
new SqlConnection("Data Source=(local);" +
"Database='Exercise1';" +
"Integrated Security=yes;");
SqlCommand command =
new SqlCommand("DECLARE @Side As Decimal(10,3)," +
" @Perimeter As Decimal(10,3)," +
" @Area As Decimal(10,3);" +
"SET @Perimeter = @Side * 4;" +
"SET @Area = @Side * @Side;" +
"IF @Side IS NULL" +
" PRINT 'A null value is not welcome'" +
"ELSE IF @Side > 0" +
" BEGIN" +
" SELECT @Side AS Side;" +
" SELECT @Perimeter AS Perimeter ;" +
" SELECT @Area AS Area;" +
" END;" +
"ELSE" +
" PRINT 'You must provide a positive value';",
connection);
connection.Open();
SqlDataReader rdr = command.ExecuteReader();
while (rdr.Read())
{
MessageBox.Show(rdr[0].ToString());
}
rdr.Close();
connection.Close();
}
To avoid having a NULL value, you can either initialize the variable or you can assign it a value. Here is an example:
// Square Calculation
private void btnCalculate_Click(object sender, EventArgs e)
{
SqlConnection connection =
new SqlConnection("Data Source=(local);" +
"Database='Exercise1';" +
"Integrated Security=yes;");
SqlCommand command =
new SqlCommand("DECLARE @Side As Decimal(10,3)," +
" @Perimeter As Decimal(10,3)," +
" @Area As Decimal(10,3);" +
"SET @Side = 48.126;" +
"SET @Perimeter = @Side * 4;" +
"SET @Area = @Side * @Side;" +
"IF @Side IS NULL" +
" PRINT 'A null value is not welcome'" +
"ELSE IF @Side > 0" +
" BEGIN" +
" SELECT @Side, @Perimeter, @Area;" +
" END;" +
"ELSE" +
" PRINT 'You must provide a positive value';",
connection);
connection.Open();
SqlDataReader rdr = command.ExecuteReader();
while (rdr.Read())
{
txtSide.Text = rdr[0].ToString();
txtPerimeter.Text = rdr[1].ToString();
txtArea.Text = rdr[2].ToString();
}
rdr.Close();
connection.Close();
}
This would produce:
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.
Depending on how it was created, a field can have actual or null values. To check whether a field is holding a null value, use the following formula for the WHERE statement: WHERE ColumnName IS NULL
In this case, only the records that are NULL on the ColumnName will be considered in the result.
We saw that we can use the NOT operator to negate the validity of a Boolean expression. Consider the following statement: SELECT DateOfBirth, LastName, FirstName,
State, ParentsNames
FROM Students
WHERE Sex = 'Female';
When this statement is executed, a list of female students would display. Instead of girls, to get a list of male students, you can negate the WHERE condition. To do this, type NOT before the expression. Here is an example: SELECT DateOfBirth, LastName, FirstName,
Gender, State, ParentsNames
FROM Students
WHERE NOT Gender = 'Female';
GO
To make this condition easier to read, you should include the positive expression in parentheses. This would be done as follows: SELECT DateOfBirth, LastName, FirstName,
Gender, State, ParentsNames
FROM Students
WHERE NOT (Sex = 'Female');
This clearly indicates that it is the expression in the parentheses that is being negated. In the same way, you can use the IS NOT NULL to find the records that are not null. For example, you can create a list of only records that do not have a null value on a certain column. Here is an example: SELECT DateOfBirth, LastName, FirstName,
State, ParentsNames
FROM Students
WHERE State IS NOT NULL;
When this statement is executed, the table would display only the records that include a state for each student.
As you should know already, the values of a certain column can be null or using a value of type char, varchar, or varchar(max), or their variants (nchar, nvarchar, or nvarchar(max)). The primary Boolean operation you can perform on a field consists of checking its nullity. As mentiond already, this operation can be performed by using IS NULL in its expression. Here is an example: private void btnShowRecordsClick(object sender, EventArgs e)
{
using (SqlConnection cntVideos =
new SqlConnection("Data Source='EXPRESSION';" +
"Database='VideoCollection1';" +
"Integrated Security=yes;"))
{
SqlCommand cmdVideos =
new SqlCommand("SELECT ALL * FROM Collection.Videos " +
"WHERE [Shelf #] IS NULL;",
cntVideos);
cntVideos.Open();
cmdVideos.ExecuteNonQuery();
SqlDataAdapter sdaVideos = new SqlDataAdapter(cmdVideos);
BindingSource bsVideos = new BindingSource();
DataSet dsVideos = new DataSet("VideosSet");
sdaVideos.Fill(dsVideos);
bsVideos.DataSource = dsVideos.Tables[0];
dgvVideos.DataSource = bsVideos;
}
}
This would produce:
As mentioned already, to make the condition easier to read, you should include the expression in parentheses. This would be done as follows: SELECT ALL * FROM Videos WHERE ([Shelf #] IS NULL); GO When the statement executes, the table would display only the records that don't have a value for the state. On the other hand, to get the records that are not null, you would use IS NOT NULL. Here is an example: private void btnShowRecordsClick(object sender, EventArgs e)
{
using (SqlConnection cntVideos =
new SqlConnection("Data Source='EXPRESSION';" +
"Database='VideoCollection1';" +
"Integrated Security=yes;"))
{
SqlCommand cmdVideos =
new SqlCommand("SELECT ALL * FROM Collection.Videos " +
"WHERE [Shelf #] IS NOT NULL;",
cntVideos);
cntVideos.Open();
cmdVideos.ExecuteNonQuery();
SqlDataAdapter sdaVideos = new SqlDataAdapter(cmdVideos);
BindingSource bsVideos = new BindingSource();
DataSet dsVideos = new DataSet("VideosSet");
sdaVideos.Fill(dsVideos);
bsVideos.DataSource = dsVideos.Tables[0];
dgvVideos.DataSource = bsVideos;
}
}
This would produce:
Another common operation performed on a field consists of finding out whether it holds a specific value. This is done using the equality "=" operator. Therefore, to find out whether a field holds a certain value, compare it with that value. You must include the value in single-quotes. Here is an example: SELECT ALL * FROM Videos
WHERE Rating = N'R';
GO
In a WHERE statement, you can also use the ORDER BY expression to sort a list of records based on a column of your choice. Consider this: private void btnShowRecordsClick(object sender, EventArgs e)
{
using (SqlConnection cntVideos =
new SqlConnection("Data Source='EXPRESSION';" +
"Database='VideoCollection1';" +
"Integrated Security=yes;"))
{
SqlCommand cmdVideos =
new SqlCommand("SELECT ALL * FROM Collection.Videos " +
"WHERE Rating = N'R';",
cntVideos);
cntVideos.Open();
cmdVideos.ExecuteNonQuery();
SqlDataAdapter sdaVideos = new SqlDataAdapter(cmdVideos);
BindingSource bsVideos = new BindingSource();
DataSet dsVideos = new DataSet("VideosSet");
sdaVideos.Fill(dsVideos);
bsVideos.DataSource = dsVideos.Tables[0];
dgvVideos.DataSource = bsVideos;
}
}
This would produce:
Here is an example or sorting the records after filtering: private void btnShowRecordsClick(object sender, EventArgs e)
{
using (SqlConnection cntVideos = new SqlConnection("Data Source='EXPRESSION';" +
"Database='VideoCollection1';" +
"Integrated Security=yes;"))
{
SqlCommand cmdVideos =
new SqlCommand("SELECT ALL * FROM Collection.Videos " +
"WHERE Rating = 'R' " +
"ORDER BY Director;",
cntVideos);
cntVideos.Open();
cmdVideos.ExecuteNonQuery();
SqlDataAdapter sdaVideos = new SqlDataAdapter(cmdVideos);
BindingSource bsVideos = new BindingSource();
DataSet dsVideos = new DataSet("VideosSet");
sdaVideos.Fill(dsVideos);
bsVideos.DataSource = dsVideos.Tables[0];
dgvVideos.DataSource = bsVideos;
}
}
This would produce:
To check whether a field doesn't hold a certain value, you can use the <> operator. Here is an example: private void btnShowRecordsClick(object sender, EventArgs e)
{
using (SqlConnection cntVideos = new SqlConnection("Data Source='EXPRESSION';" +
"Database='VideoCollection1';" +
"Integrated Security=yes;"))
{
SqlCommand cmdVideos =
new SqlCommand("SELECT ALL * FROM Collection.Videos " +
"WHERE Rating <> N'R';",
cntVideos);
cntVideos.Open();
cmdVideos.ExecuteNonQuery();
SqlDataAdapter sdaVideos = new SqlDataAdapter(cmdVideos);
BindingSource bsVideos = new BindingSource();
DataSet dsVideos = new DataSet("VideosSet");
sdaVideos.Fill(dsVideos);
bsVideos.DataSource = dsVideos.Tables[0];
dgvVideos.DataSource = bsVideos;
}
}
Remember (from Lesson 08) that, besides <>, Transact-SQL also supports the != operator used to perform a comparison for inequality. Therefore, the above statement can also be written as: SELECT ALL * FROM Videos
WHERE Rating != N'R';
GO
As an alternative, instead of <> or !=, use the equality operator but precede the expression with NOT. Here is an example: private void btnShowRecordsClick(object sender, EventArgs e)
{
using (SqlConnection cntVideos = new SqlConnection("Data Source='EXPRESSION';" +
"Database='VideoCollection1';" +
"Integrated Security=yes;"))
{
SqlCommand cmdVideos =
new SqlCommand("SELECT ALL * FROM Collection.Videos " +
"WHERE NOT Rating = N'R';",
cntVideos);
cntVideos.Open();
cmdVideos.ExecuteNonQuery();
SqlDataAdapter sdaVideos = new SqlDataAdapter(cmdVideos);
BindingSource bsVideos = new BindingSource();
DataSet dsVideos = new DataSet("VideosSet");
sdaVideos.Fill(dsVideos);
bsVideos.DataSource = dsVideos.Tables[0];
dgvVideos.DataSource = bsVideos;
}
}
The result is the same as if only the comparison for equality was used. Of course, you can precede the <> operation with NOT. Here is an example (the SQL code ROSH database is available): SELECT StudentNumber, FirstName, LastName, Gender, ParentsNames FROM Registration.Students WHERE NOT (Gender <> 'Male'); GO In this case, the result would include not the records that are not equal to the value, which would be equivalent to using = and not NOT.
As done for strings, if a field holds both numeric and null values, to find out whether a field holds a null value, apply the IS NULL expression to its condition. Here is an example: SELECT [Shelf #], Title, [Year] FROM Videos WHERE [Year] IS NULL; GO Unlike strings, number-based fields use all Boolean operators supported both by ISO SQL anbd Transact-SQL. They are:
Here is an example: private void btnShowRecordsClick(object sender, EventArgs e)
{
using (SqlConnection cntVideos = new SqlConnection("Data Source='EXPRESSION';" +
"Database='VideoCollection1';" +
"Integrated Security=yes;"))
{
SqlCommand cmdVideos =
new SqlCommand("SELECT ALL * FROM Collection.Videos " +
"WHERE [Length] > 125;",
cntVideos);
cntVideos.Open();
cmdVideos.ExecuteNonQuery();
SqlDataAdapter sdaVideos = new SqlDataAdapter(cmdVideos);
BindingSource bsVideos = new BindingSource();
DataSet dsVideos = new DataSet("VideosSet");
sdaVideos.Fill(dsVideos);
bsVideos.DataSource = dsVideos.Tables[0];
dgvVideos.DataSource = bsVideos;
}
}
This would produce:
There are various ways you can find the negation of a number-based comparison. As seen previously, to negate a comparison, you can precede the expression with the NOT operator. Otherwise, by definition, each Boolean operator has an opposite. They are:
Based on this, to find the negativity of a comparision, you can use the opposite operator.
As you may know already, a Boolean field is one whose type is BIT. A Boolean field can hold only one of two values: 0 or 1 (representing False or True, No or Yes, On or Off). As seen for the other types, a Boolean field can hold a null value if it didn't receive an actual value during data entry. This means that you can compare its value to IS NULL. Here is an example: SELECT StudentNumber, FirstName, LastName,
Gender, City, SingleParentHome
FROM Registration.Students
WHERE SingleParentHome IS NULL;
GO
In the same way, you can use IS NOT NULL, exactly as done for the other data type, to negate IS NULL. In Microsoft SQL Server, a Boolean or bit value is treated as a small integer. That is, it behaves as if it can use a value from 0 up. In this case, 0 means that the value of the field is false and 1 means the value of the field is true. When filtering Boolean records, you can use the 0 or the 1 value applied to a column with the equality operator. If you use any other number, or although you can also use any integer, you may get get only empty records. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||