開発環境
- OS: OS X Lion - Apple
- データベース言語: SQL
- リレーショナルデータベース: MySQL
『初めてのSQL』(Alan Beaulieu 著、株式会社クイープ 翻訳、オライリー・ジャパン、2006年、ISBN4-8733-181-8) の9章(サブクエリ), 9.7(練習問題)9-3を解いてみる。
9-3.
SQL文(TextWrangler)
SELECT e.emp_id, e.fname, e.lname, levels.name FROM employee e inner join ( SELECT 'trainee' name, '2004-01-01' start_dt, '2005-12-31' end_dt UNION ALL SELECT 'worker' name, '2002-01-01' start_dt, '2003-12-31' end_dt UNION ALL SELECT 'mentor' name, '2000-01-01' start_dt, '2001-12-31' end_dt ) levels ON e.start_date BETWEEN levels.start_dt AND levels.end_dt;
入出力結果(Terminal)
$ mysql -u lrngsql -p bank
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.24 MySQL Community Server (GPL)
Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show tables;
+----------------+
| Tables_in_bank |
+----------------+
| account |
| branch |
| business |
| customer |
| department |
| employee |
| individual |
| officer |
| product |
| product_type |
| tmp |
| transaction |
+----------------+
12 rows in set (0.03 sec)
mysql> desc employee;
+--------------------+----------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+----------------------+------+-----+---------+----------------+
| emp_id | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| fname | varchar(20) | NO | | NULL | |
| lname | varchar(20) | NO | | NULL | |
| start_date | date | NO | | NULL | |
| end_date | date | YES | | NULL | |
| superior_emp_id | smallint(5) unsigned | YES | MUL | NULL | |
| dept_id | smallint(5) unsigned | YES | MUL | NULL | |
| title | varchar(20) | YES | | NULL | |
| assigned_branch_id | smallint(5) unsigned | YES | MUL | NULL | |
+--------------------+----------------------+------+-----+---------+----------------+
9 rows in set (0.41 sec)
mysql> SELECT e.emp_id, e.fname, e.lname, levels.name
-> FROM employee e inner join (
-> SELECT 'trainee' name, '2004-01-01' start_dt, '2005-12-31' end_dt
-> UNION ALL
-> SELECT 'worker' name, '2002-01-01' start_dt, '2003-12-31' end_dt
-> UNION ALL
-> SELECT 'mentor' name, '2000-01-01' start_dt, '2001-12-31' end_dt
-> ) levels
-> ON e.start_date BETWEEN levels.start_dt AND levels.end_dt;
+--------+----------+-----------+---------+
| emp_id | fname | lname | name |
+--------+----------+-----------+---------+
| 1 | Michael | Smith | mentor |
| 2 | Susan | Barker | worker |
| 3 | Robert | Tyler | mentor |
| 4 | Susan | Hawthorne | worker |
| 5 | John | Gooding | worker |
| 6 | Helen | Fleming | trainee |
| 7 | Chris | Tucker | trainee |
| 8 | Sarah | Parker | worker |
| 9 | Jane | Grossman | worker |
| 10 | Paula | Roberts | worker |
| 11 | Thomas | Ziegler | mentor |
| 12 | Samantha | Jameson | worker |
| 13 | John | Blake | mentor |
| 14 | Cindy | Mason | worker |
| 15 | Frank | Portman | worker |
| 16 | Theresa | Markham | mentor |
| 17 | Beth | Fowler | worker |
| 18 | Rick | Tulman | worker |
+--------+----------+-----------+---------+
18 rows in set (0.00 sec)
mysql> quit
Bye
$
0 コメント:
コメントを投稿