Oracle sql語句練習

先創建下面三個表:
                                                          (book表)
 
                                (borrow表)
 
                                                         (reader表)
 
1) 找出姓李的讀者姓名(NAME)和所在單位(COMPANY)。
SELECT name,addr FROM reader WHERE name LIKE '李%';
 
2) 列出圖書庫中所有藏書的書名(BOOK_NAME)及出版單位(OUTPUT)。
SELECT DISTINCT(book_name),output FROM book; 
 
3) 查找“高等教育出版社”的所有圖書名稱(BOOK_NAME)及單價(PRICE),結果按單價降序排序。
SELECT DISTINCT(book_name),price FROM book
    WHERE output='高等教育出版社'
    ORDER BY 2 DESC;
 
4) 查找價格介於10元和20元之間的圖書種類(SORT),結果按出版單位(OUTPUT)和單價(PRICE)升序排序。
SELECT sort,price FROM book 
     WHERE price BETWEEN 10 AND 20
     ORDER BY output,price;
 
5) 查找書名以”計算機”開頭的所有圖書和作者(WRITER)。
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 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
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 '李%';
 
9)* 無重複地查詢2006年10月以後借書的讀者借書證號(READER_ID)、姓名和單位。
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'))
;
 
10)* 找出借閱了<FoxPro大全>一書的借書證號。
SELECT reader_id FROM borrow WHERE book_id in
      
(SELECT DISTINCT book_id FROM book
         WHERE book_name='FoxPro大全');
 
11) 找出與”趙正義”在同一天借書的讀者姓名、所在單位及借書日期 。
方法一:
SELECT name,company,
      (SELECT borrow_date FROM borrow WHERE reader_id =
      (SELECT reader_id FROM reader WHERE name='趙正義') )  
                  borrow_date
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='趙正義') )
    AND reader_id != (SELECT reader_id FROM reader
                                   WHERE name='趙正義') );
 
方法二:聯合查詢
SELECT reader.name, reader.company, borrow.borrow_date
FROM reader,borrow 
  WHERE reader.reader_id = borrow.reader_id
  AND borrow_date in (
       SELECT borrow_date FROM borrow WHERE reader_id =
          (SELECT reader_id FROM reader WHERE name = '趙正義')
   ) AND reader.name <> '趙正義'
;
 
12) 查詢2006年7月以後沒有借書的讀者借書證號、姓名及單位。
日期的關係:昨天 > 今天 > 明天
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'))
;
 
13) 求”科學出版社”圖書的最高單價、最低單價、平均單價。
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='信息系');

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);
 
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;
 
19) 找出藏書中各個出版單位的名稱、每個出版社的書籍的總冊數(每種可能有多冊)、書的價值總額。
SELECT output,count(book_id),sum(price) 
FROM book GROUP BY output;
 
20) 查詢經濟系是否還清所有圖書。如果已經還清,顯示該系所有讀者的姓名、所在單位和職稱。
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));
 
創建READER:(讀者表)
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);

插入數據:
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');

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章