SQL Server/T-SQL/Select Query/Where
Версия от 13:46, 26 мая 2010; (обсуждение)
Содержание
- 1 An expression can also be a part of the condition in the WHERE clause
- 2 Limiting the Search result using where clause
- 3 Query a single row
- 4 Use of a comparison operator in the WHERE clause
- 5 Use query in where clause
- 6 Use variable in where statement
- 7 Using defined variables in where clause
- 8 WHERE clause conditions can either be simple or contain multiple conditions
- 9 Where value "IS NULL"
An expression can also be a part of the condition in the WHERE clause
1> CREATE TABLE project (project_no CHAR(4) NOT NULL,
2> project_name CHAR(15) NOT NULL,
3> budget FLOAT NULL)
4>
5> insert into project values ("p1", "Search Engine", 120000.00)
8> GO
(1 rows affected)
1> -- An expression can also be a part of the condition in the WHERE clause
2>
3> SELECT project_name FROM project WHERE budget*0.51 > 60000
4> GO
project_name
---------------
Search Engine
SQL
(2 rows affected)
1>
2> drop table project
3> GO
1>
Limiting the Search result using where clause
1> create table employee(
2> ID int,
3> name nvarchar (10),
4> salary int,
5> start_date datetime,
6> city nvarchar (10),
7> region char (1))
8> GO
1>
2> insert into employee (ID, name, salary, start_date, city, region)
3> values (1, "Jason", 40420, "02/01/94", "New York", "W")
4> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (2, "Robert",14420, "01/02/95", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (3, "Celia", 24020, "12/03/96", "Toronto", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (4, "Linda", 40620, "11/04/97", "New York", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (5, "David", 80026, "10/05/98", "Vancouver","W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (6, "James", 70060, "09/06/99", "Toronto", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (7, "Alison",90620, "08/07/00", "New York", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (8, "Chris", 26020, "07/08/01", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (9, "Mary", 60020, "06/09/02", "Toronto", "W")
3> GO
(1 rows affected)
1>
2> select * from employee
3> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
1 Jason 40420 1994-02-01 00:00:00.000 New York W
2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N
3 Celia 24020 1996-12-03 00:00:00.000 Toronto W
4 Linda 40620 1997-11-04 00:00:00.000 New York N
5 David 80026 1998-10-05 00:00:00.000 Vancouver W
6 James 70060 1999-09-06 00:00:00.000 Toronto N
7 Alison 90620 2000-08-07 00:00:00.000 New York W
8 Chris 26020 2001-07-08 00:00:00.000 Vancouver N
9 Mary 60020 2002-06-09 00:00:00.000 Toronto W
(9 rows affected)
1>
2> -- Limiting the Search result using where clause
3>
4> SELECT * FROM Employee WHERE Name > "Jack"
5> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
1 Jason 40420 1994-02-01 00:00:00.000 New York W
2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N
4 Linda 40620 1997-11-04 00:00:00.000 New York N
6 James 70060 1999-09-06 00:00:00.000 Toronto N
9 Mary 60020 2002-06-09 00:00:00.000 Toronto W
(5 rows affected)
1>
2> drop table employee
3> GO
1>
Query a single row
1> create table employee(
2> ID int,
3> name nvarchar (10),
4> salary int,
5> start_date datetime,
6> city nvarchar (10),
7> region char (1))
8> GO
1>
2> insert into employee (ID, name, salary, start_date, city, region)
3> values (1, "Jason", 40420, "02/01/94", "New York", "W")
4> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (2, "Robert",14420, "01/02/95", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (3, "Celia", 24020, "12/03/96", "Toronto", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (4, "Linda", 40620, "11/04/97", "New York", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (5, "David", 80026, "10/05/98", "Vancouver","W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (6, "James", 70060, "09/06/99", "Toronto", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (7, "Alison",90620, "08/07/00", "New York", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (8, "Chris", 26020, "07/08/01", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (9, "Mary", 60020, "06/09/02", "Toronto", "W")
3> GO
(1 rows affected)
1>
2> select * from employee
3> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
1 Jason 40420 1994-02-01 00:00:00.000 New York W
2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N
3 Celia 24020 1996-12-03 00:00:00.000 Toronto W
4 Linda 40620 1997-11-04 00:00:00.000 New York N
5 David 80026 1998-10-05 00:00:00.000 Vancouver W
6 James 70060 1999-09-06 00:00:00.000 Toronto N
7 Alison 90620 2000-08-07 00:00:00.000 New York W
8 Chris 26020 2001-07-08 00:00:00.000 Vancouver N
9 Mary 60020 2002-06-09 00:00:00.000 Toronto W
(9 rows affected)
1>
2> SELECT Name, Salary
3> FROM Employee
4> WHERE ID = 6
5> GO
Name Salary
---------- -----------
James 70060
(1 rows affected)
1>
2>
3> drop table employee
4> GO
1>
Use of a comparison operator in the WHERE clause
1>
2> CREATE TABLE employee (emp_no INTEGER NOT NULL,
3> emp_fname CHAR(20) NOT NULL,
4> emp_lname CHAR(20) NOT NULL,
5> dept_no CHAR(4) NULL)
6>
7> insert into employee values(1, "Matthew", "Smith", "d3")
8> insert into employee values(2, "Ann", "Jones", "d3")
9> insert into employee values(3, "John", "Barrimore","d1")
10> insert into employee values(4, "James", "James", "d2")
11> insert into employee values(5, "Elsa", "Bertoni", "d2")
12> insert into employee values(6, "Elke", "Hansel", "d2")
13> insert into employee values(7, "Sybill", "Moser", "d1")
14> GO
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
1> -- Use of a comparison operator in the WHERE clause.
2>
3> SELECT emp_lname, emp_fname FROM employee WHERE emp_no>= 15000
4> GO
emp_lname emp_fname
-------------------- --------------------
(0 rows affected)
1>
2> drop table employee
3> GO
1>
Use query in where clause
2> CREATE TABLE Orders (
3> OrderID int NOT NULL ,
4> CustomerID nchar (5) NULL ,
5> EmployeeID int NULL ,
6> OrderDate datetime NULL ,
7> RequiredDate datetime NULL ,
8> ShippedDate datetime NULL ,
9> ShipVia int NULL ,
10> Freight money NULL DEFAULT (0),
11> ShipName nvarchar (40) NULL ,
12> ShipAddress nvarchar (60) NULL ,
13> ShipCity nvarchar (15) NULL ,
14> ShipRegion nvarchar (15) NULL ,
15> ShipPostalCode nvarchar (10) NULL ,
16> ShipCountry nvarchar (15) NULL
17> )
18> GO
1>
2> SELECT o1.CustomerID, o1.OrderID, o1.OrderDate
3> FROM Orders o1
4> WHERE o1.OrderDate = (SELECT Min(o2.OrderDate)
5> FROM Orders o2
6> WHERE o2.CustomerID = o1.CustomerID)
7> ORDER BY CustomerID
8> GO
CustomerID OrderID OrderDate
---------- ----------- -----------------------
(0 rows affected)
1>
2> drop table orders;
3> GO
Use variable in where statement
1>
2> create table employee(
3> ID int,
4> name nvarchar (10),
5> salary int,
6> start_date datetime,
7> city nvarchar (10),
8> region char (1))
9> GO
1>
2> insert into employee (ID, name, salary, start_date, city, region)
3> values (1, "Jason", 40420, "02/01/94", "New York", "W")
4> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (2, "Robert",14420, "01/02/95", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (3, "Celia", 24020, "12/03/96", "Toronto", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (4, "Linda", 40620, "11/04/97", "New York", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (5, "David", 80026, "10/05/98", "Vancouver","W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (6, "James", 70060, "09/06/99", "Toronto", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (7, "Alison",90620, "08/07/00", "New York", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (8, "Chris", 26020, "07/08/01", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (9, "Mary", 60020, "06/09/02", "Toronto", "W")
3> GO
(1 rows affected)
1>
2> select * from employee
3> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
1 Jason 40420 1994-02-01 00:00:00.000 New York W
2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N
3 Celia 24020 1996-12-03 00:00:00.000 Toronto W
4 Linda 40620 1997-11-04 00:00:00.000 New York N
5 David 80026 1998-10-05 00:00:00.000 Vancouver W
6 James 70060 1999-09-06 00:00:00.000 Toronto N
7 Alison 90620 2000-08-07 00:00:00.000 New York W
8 Chris 26020 2001-07-08 00:00:00.000 Vancouver N
9 Mary 60020 2002-06-09 00:00:00.000 Toronto W
(9 rows affected)
1>
2> DECLARE @alpha1 nvarchar(30), @alpha2 nvarchar(10)
3> SET @alpha1 = "David"
4> SET @alpha2 = "%Vancouver%"
5> SELECT Name, Start_Date
6> FROM Employee
7> WHERE Name = @alpha1 AND city LIKE @alpha2
8> GO
Name Start_Date
---------- -----------------------
David 1998-10-05 00:00:00.000
(1 rows affected)
1>
2>
3>
4>
5> drop table employee
6> GO
1>
Using defined variables in where clause
1> create table employee(
2> ID int,
3> name nvarchar (10),
4> salary int,
5> start_date datetime,
6> city nvarchar (10),
7> region char (1))
8> GO
1>
2> insert into employee (ID, name, salary, start_date, city, region)
3> values (1, "Jason", 40420, "02/01/94", "New York", "W")
4> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (2, "Robert",14420, "01/02/95", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (3, "Celia", 24020, "12/03/96", "Toronto", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (4, "Linda", 40620, "11/04/97", "New York", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (5, "David", 80026, "10/05/98", "Vancouver","W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (6, "James", 70060, "09/06/99", "Toronto", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (7, "Alison",90620, "08/07/00", "New York", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (8, "Chris", 26020, "07/08/01", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (9, "Mary", 60020, "06/09/02", "Toronto", "W")
3> GO
(1 rows affected)
1>
2> select * from employee
3> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
1 Jason 40420 1994-02-01 00:00:00.000 New York W
2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N
3 Celia 24020 1996-12-03 00:00:00.000 Toronto W
4 Linda 40620 1997-11-04 00:00:00.000 New York N
5 David 80026 1998-10-05 00:00:00.000 Vancouver W
6 James 70060 1999-09-06 00:00:00.000 Toronto N
7 Alison 90620 2000-08-07 00:00:00.000 New York W
8 Chris 26020 2001-07-08 00:00:00.000 Vancouver N
9 Mary 60020 2002-06-09 00:00:00.000 Toronto W
(9 rows affected)
1>
2> DECLARE @total dec(12,2), @num int
3>
4> SET @total = (SELECT SUM(Salary) FROM Employee)
5>
6> SET @num = (SELECT COUNT(ID) FROM Employee)
7>
8> SELECT *
9> FROM Employee
10> where salary > @total/@num
11> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
5 David 80026 1998-10-05 00:00:00.000 Vancouver W
6 James 70060 1999-09-06 00:00:00.000 Toronto N
7 Alison 90620 2000-08-07 00:00:00.000 New York W
9 Mary 60020 2002-06-09 00:00:00.000 Toronto W
(4 rows affected)
1>
2>
3> drop table employee
4> GO
1>
WHERE clause conditions can either be simple or contain multiple conditions
1> CREATE TABLE works_on (emp_no INTEGER NOT NULL,
2> project_no CHAR(4) NOT NULL,
3> job CHAR (15) NULL,
4> enter_date DATETIME NULL)
5>
6> insert into works_on values (1, "p1", "analyst", "1997.10.1")
7> insert into works_on values (1, "p3", "manager", "1999.1.1")
8> insert into works_on values (2, "p2", "clerk", "1998.2.15")
9> insert into works_on values (2, "p2", NULL, "1998.6.1")
10> insert into works_on values (3, "p2", NULL, "1997.12.15")
11> insert into works_on values (4, "p3", "analyst", "1998.10.15")
12> insert into works_on values (5, "p1", "manager", "1998.4.15")
13> insert into works_on values (6, "p1", NULL, "1998.8.1")
14> insert into works_on values (7, "p2", "clerk", "1999.2.1")
15> insert into works_on values (8, "p3", "clerk", "1997.11.15")
16> insert into works_on values (7, "p1", "clerk", "1998.1.4")
17>
18> select * from works_on
19> GO
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
emp_no project_no job enter_date
----------- ---------- --------------- -----------------------
1 p1 analyst 1997-10-01 00:00:00.000
1 p3 manager 1999-01-01 00:00:00.000
2 p2 clerk 1998-02-15 00:00:00.000
2 p2 NULL 1998-06-01 00:00:00.000
3 p2 NULL 1997-12-15 00:00:00.000
4 p3 analyst 1998-10-15 00:00:00.000
5 p1 manager 1998-04-15 00:00:00.000
6 p1 NULL 1998-08-01 00:00:00.000
7 p2 clerk 1999-02-01 00:00:00.000
8 p3 clerk 1997-11-15 00:00:00.000
7 p1 clerk 1998-01-04 00:00:00.000
(11 rows affected)
1>
2> -- Boolean Operators
3> -- WHERE clause conditions can either be simple or contain multiple conditions.
4>
5> SELECT emp_no, project_no FROM works_on WHERE project_no = "p2" AND job = "Clerk"
6> GO
emp_no project_no
----------- ----------
2 p2
7 p2
(2 rows affected)
1> drop table works_on
2> GO
1>
Where value "IS NULL"
1> create table employee(
2> ID int,
3> name nvarchar (10),
4> salary int,
5> start_date datetime,
6> city nvarchar (10),
7> region char (1))
8> GO
1>
2> insert into employee (ID, name, salary, start_date, city, region)
3> values (1, "Jason", 40420, "02/01/94", "New York", "W")
4> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (2, "Robert",14420, "01/02/95", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (3, "Celia", 24020, "12/03/96", "Toronto", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (4, "Linda", 40620, "11/04/97", "New York", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (5, "David", 80026, "10/05/98", "Vancouver","W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (6, "James", 70060, "09/06/99", "Toronto", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (7, "Alison",90620, "08/07/00", "New York", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (8, "Chris", NULL , "07/08/01", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (9, "Mary", NULL , "06/09/02", "Toronto", "W")
3> GO
(1 rows affected)
1>
2> select * from employee
3> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
1 Jason 40420 1994-02-01 00:00:00.000 New York W
2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N
3 Celia 24020 1996-12-03 00:00:00.000 Toronto W
4 Linda 40620 1997-11-04 00:00:00.000 New York N
5 David 80026 1998-10-05 00:00:00.000 Vancouver W
6 James 70060 1999-09-06 00:00:00.000 Toronto N
7 Alison 90620 2000-08-07 00:00:00.000 New York W
8 Chris NULL 2001-07-08 00:00:00.000 Vancouver N
9 Mary NULL 2002-06-09 00:00:00.000 Toronto W
(9 rows affected)
1>
2> SELECT *
3> FROM Employee
4> WHERE Salary IS NULL
5> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
8 Chris NULL 2001-07-08 00:00:00.000 Vancouver N
9 Mary NULL 2002-06-09 00:00:00.000 Toronto W
(2 rows affected)
1>
2>
3>
4> drop table employee
5> GO
1>