【SQL 基本語法練習】
以下是運動中心的使用者資料與使用記錄
USER_PROFILE (使用者資料)
USER_ID (使用者編號) | USER_NAME (使用者姓名) | USER_SEX (使用者性別) | USER_PHONE (使用者電話) | USER_ADDRESS (使用者地址) |
2013000001 | 張三 | M | 0911120111 | 台北市士林區 |
2013000002 | 李四 | M | 0911120112 | 新北市土城區 |
2013000003 | 王五 | M | 0911120113 | 新北市三重區 |
2013000004 | 陳二 | F | 0911120114 | 台北市信義區 |
2013000005 | 孫九 | F | 0911120115 | 台北市中山區 |
USE_RECORD (使用記錄)
USER_ID (使用者編號) | USE_DATE_START (使用開始日) | USE_TIME_START (使用開始時間) | USE_DATE_END (使用結束日) | USE_TIME_END (使用結束時間) | USE_PLACE (使用地方) |
2013000001 | 20131101 | 080500 | 20131101 | 121000 | 1 |
2013000001 | 20131102 | 083300 | 20131102 | 121900 | 1 |
2013000001 | 20131102 | 130000 | 20131102 | 162300 | 1 |
2013000001 | 20131101 | 130550 | 20131101 | 235000 | 3 |
2013000005 | 20131102 | 130300 | 20131102 | 140000 | 1 |
2013000002 | 20131102 | 103000 | 20131102 | 162400 | 3 |
2013000002 | 20131102 | 182400 | 20131102 | 203000 | 2 |
2013000002 | 20131102 | 230130 | 20131103 | 033030 | 1 |
2013000003 | 20131101 | 090100 | 20131101 | 100600 | 2 |
2013000003 | 20131102 | 152000 | 20131102 | 202400 | 1 |
2013000003 | 20131102 | 100000 | 20131103 | 010000 | 2 |
(1) 2013/11/02 曾經在運動中心運動的有哪些人 ?
(2) 2013/11/02 12:00:00~2013/11/03 12:00:00 曾經在運動中心運動的有哪些人?
-- MySQL 語法 先建立 Table USER_PROFILE
CREATE TABLE IF NOT EXISTS `USER_PROFILE` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`USER_ID` varchar(11) NOT NULL,
`USER_NAME` varchar(10) NOT NULL,
`USER_SEX` varchar(10) NOT NULL,
`USER_PHONE` varchar(10) NOT NULL,
`USER_ADDRESS` varchar(10) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
-- MySQL 語法 插入資料
INSERT INTO `USER_PROFILE` (`USER_ID`, `USER_NAME`, `USER_SEX`,`USER_PHONE`,`USER_ADDRESS`) VALUES
('2013000001', '張三', 'M','0911120111','台北市士林區'),
('2013000002', '李四', 'M','0911120112','新北市土城區'),
('2013000003', '王五', 'M','0911120113','新北市三重區'),
('2013000004', '陳二', 'F','0911120114','台北市信義區'),
('2013000005', '孫九', 'F','0911120115','台北市中山區');
-- MySQL 語法 驗證資料
SELECT * FROM `user_profile`;
-- MySQL 語法 先建立 Table USE_RECORD
CREATE TABLE IF NOT EXISTS `USE_RECORD` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`USER_ID` varchar(11) NOT NULL,
`USE_DATE_START` varchar(10) NOT NULL,
`USE_TIME_START` varchar(10) NOT NULL,
`USE_DATE_END` varchar(10) NOT NULL,
`USE_TIME_END` varchar(10) NOT NULL,
`USE_PLACE` varchar(2) NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
-- MySQL 語法 插入資料
INSERT INTO `USE_RECORD` (`USER_ID`, `USE_DATE_START`, `USE_TIME_START`,`USE_DATE_END`,`USE_TIME_END`,`USE_PLACE`) VALUES
('2013000001', '20131101', '080500','20131101','121000','1'),
('2013000001', '20131102', '083300','20131102','121900','1'),
('2013000001', '20131102', '130000','20131102','162300','1'),
('2013000001', '20131101', '130550','20131101','235000','3'),
('2013000005', '20131102', '130300','20131102','140000','1'),
('2013000002', '20131102', '103000','20131102','162400','3'),
('2013000002', '20131102', '182400','20131102','203000','2'),
('2013000002', '20131102', '230130','20131103','033030','1'),
('2013000003', '20131101', '090100','20131101','100600','2'),
('2013000003', '20131102', '152000','20131102','202400','1'),
('2013000003', '20131102', '100000','20131103','010000','2');
-- MySQL 語法 驗證資料
SELECT * FROM `use_record`;
問題解答 SQL 語法
(1) 使用交集 Inner join 找出兩張 Table 的關聯性,其中 USER_ID 是其主要關聯,最後下查詢條件 where r.USE_DATE_START = ‘20131102’
SELECT distinct p.USER_NAME as '姓名', r.USE_DATE_START as '使用日期'
FROM `user_profile` p
INNER join `use_record1` r
on p.USER_ID = r.USER_ID
where r.USE_DATE_START = '20131102';
(2) 使用交集 Inner join 找出兩張 Table 的關聯性,其中 USER_ID 是其主要關聯,最後下查詢條件 其中用 MySQL 的語法 Concat,結合 USE_DATE_START 與 USE_TIME_START 來方便下達搜尋條件。
SELECT distinct p.USER_NAME as '姓名'
FROM `user_profile` p
INNER join `use_record` r
on p.USER_ID = r.USER_ID
where
CONCAT(r.USE_DATE_START,USE_TIME_START) between '201311021200' and '201311031200'
or
CONCAT(r.USE_DATE_END,USE_TIME_END) between '201311021200' and '201311031200';
沒有留言 :
張貼留言