Изучаем sql


• A union B =  {L M N O P Q R S T} •



Pdf көрінісі
бет244/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   240   241   242   243   244   245   246   247   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )


A
union
B

{L
M
N
O
P
Q
R
S
T}

A
union
all
B

{L
M
N
O
P
P
Q
R
S
T}

A
intersect
B

{P}

A
except
B

{L
M
N
O}
6.2
Напишите составной запрос для выбора имен и фамилий всех клиен
товфизических лиц, а также имен и фамилий всех сотрудников.
mysql> 
SELECT fname, lname
> FROM individual
> UNION
> SELECT fname, lname
> FROM employee;
+++
| fname | lname |
+++


278
Приложение C
| James | Hadley |
| Susan | Tingley |
| Frank | Tucker |
| John | Hayward |
| Charles | Frasier |
| John | Spencer |
| Margaret | Young |
| Louis | Blake |
| Richard | Farley |
| Michael | Smith |
| Susan | Barker |
| Robert | Tyler |
| Susan | Hawthorne |
| John | Gooding |
| Helen | Fleming |
| Chris | Tucker |
| Sarah | Parker |
| Jane | Grossman |
| Paula | Roberts |
| Thomas | Ziegler |
| Samantha | Jameson |
| John | Blake |
| Cindy | Mason |
| Frank | Portman |
| Theresa | Markham |
| Beth | Fowler |
| Rick | Tulman |
+++
27 rows in set (0.01 sec)
6.3
Отсортируйте результаты упражнения 6.2 по столбцу 
lname
.
mysql> 
SELECT fname, lname
> FROM individual
> UNION ALL
> SELECT fname, name
> FROM employee
> ORDER BY lname;
+++
| fname | lname |
+++
| Susan | Barker |
| Louis | Blake |
| John | Blake |
| Richard | Farley |
| Helen | Fleming |
| Beth | Fowler |
| Charles | Frasier |
| John | Gooding |


Решения к упражнениям
279
| Jane | Grossman |
| James | Hadley |
| Susan | Hawthorne |
| John | Hayward |
| Samantha | Jameson |
| Theresa | Markham |
| Cindy | Mason |
| Sarah | Parker |
| Frank | Portman |
| Paula | Roberts |
| Michael | Smith |
| John | Spencer |
| Susan | Tingley |
| Chris | Tucker |
| Frank | Tucker |
| Rick | Tulman |
| Robert | Tyler |
| Margaret | Young |
| Thomas | Ziegler |
+++
27 rows in set (0.01 sec)
Глава 7
7.1
Написать запрос, возвращающий 17–25 символы строки «Please find
the substring in this string» (Пожалуйста, найдите подстроку в этой
строке).
mysql> 
SELECT SUBSTRING('Please find the substring in this string',17,9);
++
| SUBSTRING('Please find the substring in this string',17,9) |
++
| substring |
++
1 row in set (0.00 sec)
7.2
Напишите запрос, возвращающий абсолютную величину и знак (
1

0
или 
1
) числа 

25,768 23. Также возвратите число, округленное до сотых.
mysql> 
SELECT ABS(25.76823), SIGN(25.76823), ROUND(25.76823, 2);
++++
| ABS(25.76823) | SIGN(25.76823) | ROUND(25.76823, 2) |
++++
| 25.76823 | 1 | 25.77 |
++++
1 row in set (0.00 sec)


280
Приложение C
7.3
Напишите запрос, возвращающий только значение месяца текущей
даты.
mysql> 
SELECT EXTRACT(MONTH FROM CURRENT_DATE( ));
++
| EXTRACT(MONTH FROM CURRENT_DATE) |
++
| 5 |
++
1 row in set (0.02 sec)
(Если это упражнение выполняется не в мае, полученный результат
будет отличаться от приведенного.)
Глава 8
8.1
Создайте запрос для подсчета числа строк в таблице 
account
.
mysql> 
SELECT COUNT(*)
> FROM account;
++
| count(*) |
++
| 24 |
++
1 row in set (0.32 sec)
8.2
Измените свой запрос из упражнения 8.1 для подсчета числа счетов,
имеющихся у каждого клиента. Для каждого клиента выведите ID
клиента и количество счетов.
mysql> 
SELECT cust_id, COUNT(*)
> FROM account
> GROUP BY cust_id;
+++
| cust_id | count(*) |
+++
| 1 | 3 |
| 2 | 2 |
| 3 | 2 |
| 4 | 3 |
| 5 | 1 |
| 6 | 2 |
| 7 | 1 |
| 8 | 2 |
| 9 | 3 |
| 10 | 2 |


Решения к упражнениям
281
| 11 | 1 |
| 12 | 1 |
| 13 | 1 |
+++
13 rows in set (0.00 sec)
8.3
Измените запрос из упражнения 8.2 так, чтобы в результирующий на
бор были включены только клиенты, имеющие не меньше двух счетов.
mysql> 
SELECT cust_id, COUNT(*)
> FROM account
> GROUP BY cust_id
> HAVING COUNT(*) >= 2;
+++
| cust_id | COUNT(*) |
+++
| 1 | 3 |
| 2 | 2 |
| 3 | 2 |
| 4 | 3 |
| 6 | 2 |
| 8 | 2 |
| 9 | 3 |
| 10 | 2 |
+++
8 rows in set (0.04 sec)
8.4 (дополнительно)
Найдите общий доступный остаток по типу счета и отделению, где на
каждый тип и отделение приходится более одного счета. Результаты
должны быть упорядочены по общему остатку (от наибольшего к наи
меньшему).
mysql> 
SELECT product_cd, open_branch_id, SUM(avail_balance)
> FROM account
> GROUP BY product_cd, open_branch_id
> HAVING COUNT(*) > 1
> ORDER BY 3 DESC;
++++
| product_cd | open_branch_id | SUM(avail_balance) |
++++
| CHK | 4 | 67852.33 |
| MM | 1 | 14832.64 |
| CD | 1 | 11500.00 |
| CD | 2 | 8000.00 |
| CHK | 2 | 3315.77 |
| CHK | 1 | 782.16 |
| SAV | 2 | 700.00 |
++++
7 rows in set (0.01 sec)


282
Приложение C
Примечание: 
MySQL не принимает 
ORDER
BY
SUM(avail_balance)
DESC,
, по
этому я был вынужден обозначить столбец сортировки его порядко
вым номером.
Глава 9
9.1
Создайте запрос к таблице 
account
, использующий условие фильтра
ции с несвязанным подзапросом к таблице 
product
для поиска всех кре
дитных счетов (
product.product_type_cd
=
'LOAN'
). Должны быть выбра
ны ID счета, код счета, ID клиента и доступный остаток.
mysql> 
SELECT account_id, product_cd, cust_id, avail_balance
> FROM account
> WHERE product_cd IN (SELECT product_cd
> FROM product
> WHERE product_type_cd = 'LOAN');
+++++
| account_id | product_cd | cust_id | avail_balance |
+++++
| 21 | BUS | 10 | 0.00 |
| 22 | BUS | 11 | 9345.55 |
| 24 | SBL | 13 | 50000.00 |
+++++
3 rows in set (0.07 sec)
9.2
Переработайте запрос из упражнения 9.1, используя 
связанный 
подза
прос к таблице 
product
для получения того же результата.
mysql> 
SELECT a.account_id, a.product_cd, a.cust_id, a.avail_balance
> FROM account a
> WHERE EXISTS (SELECT 1
> FROM product p
> WHERE p.product_cd = a.product_cd
> AND p.product_type_cd = 'LOAN');
+++++
| account_id | product_cd | cust_id | avail_balance |
+++++
| 21 | BUS | 10 | 0.00 |
| 22 | BUS | 11 | 9345.55 |
| 24 | SBL | 13 | 50000.00 |
+++++
3 rows in set (0.01 sec)
9.3
Соедините следующий запрос с таблицей 
employee
, чтобы показать уро
вень квалификации каждого сотрудника:


Решения к упражнениям
283
SELECT 'trainee' name, '20040101' start_dt, '20051231' end_dt
UNION ALL
SELECT 'worker' name, '20020101' start_dt, '20031231' end_dt
UNION ALL
SELECT 'mentor' name, '20000101' start_dt, '20011231' end_dt
Дайте подзапросу псевдоним 
levels
(уровни) и включите ID сотрудни
ка, имя, фамилию и квалификацию (
levels.name
). (Совет: в условии со
единения определяйте диапазон, в который попадает столбец 
employee
.start_date
, с помощью условия неравенства.)
mysql> 
SELECT e.emp_id, e.fname, e.lname, levels.name
> FROM employee e INNER JOIN
> (SELECT 'trainee' name, '20040101' start_dt, '20051231' end_dt
> UNION ALL
> SELECT 'worker' name, '20020101' start_dt, '20031231' end_dt
> UNION ALL
> SELECT 'mentor' name, '20000101' start_dt, '20011231' end_dt) levels
> ON e.start_date BETWEEN levels.start_dt AND levels.end_dt;
+++++
| emp_id | fname | lname | name |
+++++
| 6 | Helen | Fleming | trainee |
| 7 | Chris | Tucker | trainee |
| 2 | Susan | Barker | worker |
| 4 | Susan | Hawthorne | worker |
| 5 | John | Gooding | worker |
| 8 | Sarah | Parker | worker |
| 9 | Jane | Grossman | worker |
| 10 | Paula | Roberts | worker |
| 12 | Samantha | Jameson | worker |
| 14 | Cindy | Mason | worker |
| 15 | Frank | Portman | worker |
| 17 | Beth | Fowler | worker |
| 18 | Rick | Tulman | worker |
| 1 | Michael | Smith | mentor |
| 3 | Robert | Tyler | mentor |
| 11 | Thomas | Ziegler | mentor |
| 13 | John | Blake | mentor |
| 16 | Theresa | Markham | mentor |
+++++
18 rows in set (0.00 sec)
9.4
Создайте запрос к таблице 
employee
для получения ID, имени и фами
лии сотрудника вместе с названиями отдела и отделения, к которым
он приписан. Не используйте соединение таблиц.
mysql> 


Достарыңызбен бөлісу:
1   ...   240   241   242   243   244   245   246   247   ...   261




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет