先創建下面三個表:
(book表)
(borrow表)
(reader表)
1) 找出姓李的讀者姓名(NAME)和所在單位(COMPANY)。
SELECT name,addr FROM reader WHERE name LIKE '李%';
SELECT name,addr FROM reader WHERE name LIKE '李%';
2) 列出圖書庫中所有藏書的書名(BOOK_NAME)及出版單位(OUTPUT)。
SELECT DISTINCT(book_name),output FROM book;
SELECT DISTINCT(book_name),output FROM book;
3) 查找“高等教育出版社”的所有圖書名稱(BOOK_NAME)及單價(PRICE),結果按單價降序排序。
SELECT DISTINCT(book_name),price FROM book
SELECT DISTINCT(book_name),price FROM book
WHERE output='高等教育出版社'
ORDER BY 2 DESC;
4) 查找價格介於10元和20元之間的圖書種類(SORT),結果按出版單位(OUTPUT)和單價(PRICE)升序排序。
SELECT sort,price FROM book
SELECT sort,price FROM book
WHERE price BETWEEN 10 AND 20
ORDER BY output,price;
5) 查找書名以”計算機”開頭的所有圖書和作者(WRITER)。
SELECT DISTINCT(book_name),writer FROM book
SELECT DISTINCT(book_name),writer FROM book
WHERE book_name LIKE '計算機%';
6) 檢索同時借閱了總編號(BOOK_ID)爲112266和449901兩本書的借書證號(READER_ID)。
SELECT borrow.reader_id FROM borrow ,
SELECT borrow.reader_id FROM borrow ,
(SELECT reader_id FROM borrow WHERE book_id = 112266) t WHERE borrow.reader_id = t.reader_id and book_id = 449901;
7)* 查找所有借了書的讀者的姓名(NAME)及所在單位(COMPANY)。
SELECT name,company FROM reader
SELECT name,company FROM reader
WHERE reader_id in
(SELECT reader_id FROM borrow WHERE book_id is NOT null);
8)* 找出李某所借所有圖書的書名及借書日期(BORROW_DATE)。
SELECT writer,book_name,
(SELECT borrow_date FROM borrow WHERE book_id in
(SELECT book_id from book WHERE writer LIKE '李%'))
FROM book WHERE writer LIKE '李%';
SELECT writer,book_name,
(SELECT borrow_date FROM borrow WHERE book_id in
(SELECT book_id from book WHERE writer LIKE '李%'))
FROM book WHERE writer LIKE '李%';
9)* 無重複地查詢2006年10月以後借書的讀者借書證號(READER_ID)、姓名和單位。
SELECT reader_id,name,company FROM reader
SELECT reader_id,name,company FROM reader
WHERE reader_id in
(SELECT distinct reader_id FROM borrow
WHERE borrow_date >= to_date('2006-10-01','yyyy-mm-dd')) ;
(SELECT distinct reader_id FROM borrow
WHERE borrow_date >= to_date('2006-10-01','yyyy-mm-dd')) ;
10)* 找出借閱了<FoxPro大全>一書的借書證號。
SELECT reader_id FROM borrow WHERE book_id in
(SELECT DISTINCT book_id FROM book
SELECT reader_id FROM borrow WHERE book_id in
(SELECT DISTINCT book_id FROM book
WHERE book_name='FoxPro大全');
11) 找出與”趙正義”在同一天借書的讀者姓名、所在單位及借書日期 。
方法一:
SELECT name,company,
SELECT name,company,
(SELECT borrow_date FROM borrow WHERE reader_id =
(SELECT reader_id FROM reader WHERE name='趙正義') )
(SELECT reader_id FROM reader WHERE name='趙正義') )
borrow_date
FROM reader WHERE reader_id = (
FROM reader WHERE reader_id = (
SELECT reader_id FROM borrow WHERE borrow_date =
(SELECT borrow_date FROM borrow WHERE reader_id =
(SELECT reader_id FROM reader WHERE name='趙正義') )
(SELECT borrow_date FROM borrow WHERE reader_id =
(SELECT reader_id FROM reader WHERE name='趙正義') )
AND reader_id != (SELECT reader_id FROM reader
WHERE name='趙正義') );
方法二:聯合查詢
SELECT reader.name, reader.company, borrow.borrow_date
SELECT reader.name, reader.company, borrow.borrow_date
FROM reader,borrow
WHERE reader.reader_id = borrow.reader_id
WHERE reader.reader_id = borrow.reader_id
AND borrow_date in (
SELECT borrow_date FROM borrow WHERE reader_id =
SELECT borrow_date FROM borrow WHERE reader_id =
(SELECT reader_id FROM reader WHERE name = '趙正義')
) AND reader.name <> '趙正義';
) AND reader.name <> '趙正義';
12) 查詢2006年7月以後沒有借書的讀者借書證號、姓名及單位。
日期的關係:昨天 > 今天 > 明天
SELECT reader_id,name,company FROM reader
日期的關係:昨天 > 今天 > 明天
SELECT reader_id,name,company FROM reader
WHERE reader_id NOT IN
(SELECT reader_id FROM borrow
WHERE borrow_date>=to_date('2006-08-01','yyyy-mm-dd'));
WHERE borrow_date>=to_date('2006-08-01','yyyy-mm-dd'));
13) 求”科學出版社”圖書的最高單價、最低單價、平均單價。
SELECT max(price),min(price),avg(price) FROM book
WHERE output='科學出版社'
SELECT max(price),min(price),avg(price) FROM book
WHERE output='科學出版社'
GROUP BY output;
14)* 求”信息系”當前借閱圖書的讀者人次數。
SELECT count(distinct reader_id) FROM borrow
WHERE reader_id in
(SELECT reader_id FROM reader WHERE company='信息系');
(SELECT reader_id FROM reader WHERE company='信息系');
15) 求出各個出版社圖書的最高價格、最低價格和總冊數。
SELECT max(price),min(price),count(book_id)
FROM book GROUP BY output;
16) 分別找出各單位當前借閱圖書的讀者人數及所在單位。
SELECT count(reader_id),company FROM reader
WHERE reader_id in (SELECT distinct reader_id FROM borrow)
GROUP BY company;
17)* 找出當前至少借閱了2本圖書(大於等於2本)的讀者姓名及其所在單位。
SELECT name,company FROM reader WHERE reader_id in
(SELECT distinct reader_id FROM borrow
GROUP BY reader_id having count(book_id)>=2);
GROUP BY reader_id having count(book_id)>=2);
18) 分別找出借書人次數多於1人次的單位及人次數。
SELECT company,count(reader_id) FROM reader
WHERE reader_id in(SELECT distinct reader_id FROM borrow)GROUP BY company having count(reader_id)>1;
SELECT company,count(reader_id) FROM reader
WHERE reader_id in(SELECT distinct reader_id FROM borrow)GROUP BY company having count(reader_id)>1;
19) 找出藏書中各個出版單位的名稱、每個出版社的書籍的總冊數(每種可能有多冊)、書的價值總額。
SELECT output,count(book_id),sum(price)
SELECT output,count(book_id),sum(price)
FROM book GROUP BY output;
20) 查詢經濟系是否還清所有圖書。如果已經還清,顯示該系所有讀者的姓名、所在單位和職稱。
SELECT name,company,grade FROM reader
SELECT name,company,grade FROM reader
WHERE reader_id not in (SELECT DISTINCT reader_id FROM borrow)
AND company='經濟系';
附錄:建表語句
創建圖書管理庫的圖書、讀者和借閱三個基本表的表結構:
創建BOOK:(圖書表)
CREATE TABLE BOOK (
BOOK_ID NUMBER(10),
SORT VARCHAR2(10),
BOOK_NAME VARCHAR2(50),
WRITER VARCHAR2(10),
OUTPUT VARCHAR2(50),
PRICE NUMBER(3));
創建BOOK:(圖書表)
CREATE TABLE BOOK (
BOOK_ID NUMBER(10),
SORT VARCHAR2(10),
BOOK_NAME VARCHAR2(50),
WRITER VARCHAR2(10),
OUTPUT VARCHAR2(50),
PRICE NUMBER(3));
創建READER:(讀者表)
CREATE TABLE READER (
READER_ID NUMBER(3),
COMPANY VARCHAR2(10),
NAME VARCHAR2(10),
SEX VARCHAR2(2),
GRADE VARCHAR2(10),
ADDR VARCHAR2(50));
CREATE TABLE READER (
READER_ID NUMBER(3),
COMPANY VARCHAR2(10),
NAME VARCHAR2(10),
SEX VARCHAR2(2),
GRADE VARCHAR2(10),
ADDR VARCHAR2(50));
創建BORROW:(借閱表)
CREATE TABLE BORROW (
READER_ID NUMBER(3),
BOOK_ID NUMBER(10),
BORROW_DATE DATE);
CREATE TABLE BORROW (
READER_ID NUMBER(3),
BOOK_ID NUMBER(10),
BORROW_DATE DATE);
插入數據:
BOOK表:
insert into book values(445501,'TP3/12','數據庫導論','王強','科學出版社',17.90);
insert into book values(445502,'TP3/12','數據庫導論','王強','科學出版社',17.90);
insert into book values(445503,'TP3/12','數據庫導論','王強','科學出版社',17.90);
insert into book values(332211,'TP5/10','計算機基礎','李偉','高等教育出版社',18.00);
insert into book values(112266,'TP3/12','FoxBASE','張三','電子工業出版社',23.60);
insert into book values(665544,'TS7/21','高等數學','劉明','高等教育出版社',20.00);
insert into book values(114455,'TR9/12','線性代數','孫業','北京大學出版社',20.80);
insert into book values(113388,'TR7/90','大學英語','胡玲','清華大學出版社',12.50);
insert into book values(446601,'TP4/13','數據庫基礎','馬凌雲','人民郵電出版社',22.50);
insert into book values(446602,'TP4/13','數據庫基礎','馬凌雲','人民郵電出版社',22.50);
insert into book values(446603,'TP4/13','數據庫基礎','馬凌雲','人民郵電出版社',22.50);
insert into book values(449901,'TP4/14','FoxPro大全','周虹','科學出版社',32.70);
insert into book values(449902,'TP4/14','FoxPro大全','周虹','科學出版社',32.70);
insert into book values(118801,'TP4/15','計算機網絡','黃力鈞','高等教育出版社',21.80);
insert into book values(118802,'TP4/15','計算機網絡','黃力鈞','高等教育出版社',21.80);
READER表:
insert into reader values(111,'信息系','王維利','女','教授','1號樓424');
insert into reader values(112,'財會系','李 立','男','副教授','2號樓316');
insert into reader values(113,'經濟系','張 三','男','講師','3號樓105');
insert into reader values(114,'信息系','周華髮','男','講師','1號樓316');
insert into reader values(115,'信息系','趙正義','男','工程師','1號樓224');
insert into reader values(116,'信息系','李 明','男','副教授','1號樓318');
insert into reader values(117,'計算機系','李小峯','男','助教','1號樓214');
insert into reader values(118,'計算機系','許鵬飛','男','助工','1號樓216');
insert into reader values(119,'計算機系','劉大龍','男','教授','1號樓318');
insert into reader values(120,'國際貿易','李 雪','男','副教授','4號樓506');
insert into reader values(121,'國際貿易','李 爽','女','講師','4號樓510');
insert into reader values(122,'國際貿易','王 純','女','講師','4號樓512');
insert into reader values(123,'財會系','沈小霞','女','助教','2號樓202');
insert into reader values(124,'財會系','朱 海','男','講師','2號樓210');
insert into reader values(125,'財會系','馬英明','男','副教授','2號樓212');
BORROW表:
insert into borrow values(112,445501,'19-3月-2006');
insert into borrow values(125,332211,'12-2月-2006');
insert into borrow values(111,445503,'21-8月-2006');
insert into borrow values(112,112266,'14-3月-2006');
insert into borrow values(114,665544,'21-10月-2006');
insert into borrow values(120,114455,'02-11月-2006');
insert into borrow values(120,118801,'18-10月-2006');
insert into borrow values(119,446603,'12-11月-2006');
insert into borrow values(112,449901,'23-10月-2006');
insert into borrow values(115,449902,'21-8月-2006');
insert into borrow values(118,118801,'10-9月-2006');