2015年4月9日 星期四

(溫故知新) SQL 基本語法練習

【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 為環境,使用 MySQL Workbench 建立Table
-- 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';

沒有留言 :

張貼留言