Читайте также: |
|
_> WHERE title = 'Head Teller';
+________+_________+_________+____________+_____________+ | emp_id | fname | lname | start_date | title | +________+_________+_________+____________+_____________+
| | | | Helen | | Fleming | | 2004_03_17 | | Head | Teller | | |||||
| | | | Paula | | Roberts | | 2002_07_27 | | Head | Teller | | |||||
| | | | John | | | Blake | | | 2000_05_11 | | | Head | Teller | | | |
| | | | Theresa | | | Markham | | | 2001_03_15 | | | Head | Teller | | |
+________+_________+_________+____________+_____________+ 4 rows in set (0.00 sec)
В данном случае блоком where были отсеяны 14 из 18 строк. Этот блок where содержит всего одно условие фильтрации (filter condition), но этих условий может быть столько, сколько потребуется. Условия разделяют_ ся с помощью таких операторов, как and, or и not (подробно блок where и условия фильтрации обсуждаются в главе 4). Вот расширенный вари_ ант предыдущего запроса со вторым условием – должны быть включе_ ны только сотрудники, принятые на работу после 1 января 2002 года:
Глава 3. Азбука запросов | ||
mysql> | SELECT emp_id, fname, lname, start_date, title | |
_> | FROM employee | |
_> | WHERE | title = 'Head Teller' |
_> | AND | start_date > '2002_01_01'; |
+________+_______+_________+____________+_____________+ | emp_id | fname | lname | start_date | title | +________+_______+_________+____________+_____________+ | 6 | Helen | Fleming | 2004_03_17 | Head Teller | | 10 | Paula | Roberts | 2002_07_27 | Head Teller | +________+_______+_________+____________+_____________+ 2 rows in set (0.00 sec)
По первому условию (title = 'Head Teller') было отфильтровано 14 из 18 строк, а по второму (start_date > '2002_01_01') – еще 2. В итоге в резуль_ тирующем наборе осталось 2 строки. Давайте посмотрим, что произой_ дет, если заменить разделяющий условия оператор and оператором or:
mysql> | SELECT emp_id, fname, lname, start_date, title | |
_> | FROM | employee |
_> | WHERE title = 'Head Teller' | |
_> | OR | start_date > '2002_01_01'; |
+________+__________+___________+____________+____________________+ | emp_id | fname | lname | start_date | title | +________+__________+___________+____________+____________________+
| | | Susan | | Barker | | 2002_09_12 | | Vice President | | | ||
| | | Susan | | Hawthorne | | 2002_04_24 | | Operations Manager | | |||
| | | John | | Gooding | | 2003_11_14 | | Loan Manager | | | ||
| | | Helen | | Fleming | | 2004_03_17 | | Head Teller | | | ||
| | | Chris | | Tucker | | 2004_09_15 | | Teller | | | ||
| | | Sarah | | Parker | | 2002_12_02 | | Teller | | | ||
| | | Jane | | Grossman | | 2002_05_03 | | Teller | | | ||
| | | Paula | | Roberts | | 2002_07_27 | | Head Teller | | | ||
| | | Samantha | | Jameson | | 2003_01_08 | | Teller | | | ||
| | | John | | Blake | | 2000_05_11 | | Head Teller | | | ||
| | | Cindy | | Mason | | 2002_08_09 | | Teller | | | ||
| | | Frank | | Portman | | 2003_04_01 | | | Teller | | | |
| | | Theresa | | Markham | | 2001_03_15 | | | Head Teller | | | |
| | | Beth | | Fowler | | 2002_06_29 | | | Teller | | | |
| | | Rick | | Tulman | | 2002_12_12 | | | Teller | | |
+________+__________+___________+____________+____________________+ 15 rows in set (0.00 sec)
Посмотрев на выходные данные, можно увидеть, что в результирую_ щий набор включены все четыре старших операциониста (Head Tel_ ler), а также все остальные сотрудники, приступившие к работе в бан_ ке после 1 января 2002 года. Для 15 из 18 сотрудников из таблицы employee выполняется по крайней мере одно из двух условий. Таким образом, чтобы строка попала в результирующий набор, когда условия разделяются оператором and, для нее должны выполняться все усло_ вия; а при использовании оператора or достаточно, чтобы выполня_ лось только одно из условий.
Блоки group by и having | |
А как быть, если вам нужно задействовать в блоке where оба оператора – and и or? Рад, что спросили. Необходимо сгруппировать условия с по_ мощью круглых скобок. Следующий запрос составлен так, что в ре_ зультирующий набор должны попасть только те сотрудники, которые являются старшими операционистами (Head Teller) и начали работать в компании позже 1 января 2002 года, или простые операционисты (Tel_ ler), начавшие работать после 1 января 2003 года:
Дата добавления: 2015-08-17; просмотров: 69 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Блок where | | | Блоки group by и having |