獲取數據SELECT語句()
現在MYLIBRARY表中已經有了數據可以對該表執行查詢以精確地查找所具有的圖書SELECT語句用於從表中獲取數據要使用SELECT語句獲取數據只需要告訴它表名和列名
SELECT all_my_books FROM myLibrary;
盡管該查詢可以產生一個圖書信息的列表但它還不是特別有用該圖書信息是一大堆的數據將其存儲在一個關系型數據庫中的唯一好處就是可以輕而易舉地重新獲取或打印這些信息如果要搜索數據呢?要查找是否有某一本特定的圖書必須獲取所有的記錄然後人工地逐一遍歷每一條記錄!這並不是我們期望從一個復雜的RDBMS軟件獲得的結果
需要采用某種辦法來標識存儲在表中的記錄的特殊關鍵詞例如圖書名稱或ISBN號對於該問題一個標准的程序設計方式的答案就是對記錄進行解析將記錄切分為多個片段並在一個循環中遍歷查找特定的目標詞匯對於表中的每一條記錄重復執行這一過程如果沒有特定於廠商的過程化擴展SQL無法執行任何類似的操作這種方式違背了SQL語言是一種聲明性語言的本質並要求深刻地理解數據結構下面讓我們再看一看輸入到MYLIBRARY表中的第一條記錄
SQL Bible by Alex Kriegel Boris M Trukhnov Paperback: pages
Publisher: Wiley; edition (April ) Language: English
ISBN:
如何才能將記錄切分為不同的信息片段呢?每一個片段之間的標記是什麼呢?如何區分圖書的名稱和作者呢?如果使用空格符作為分隔符那麼SQL和Bible將被切分為不同的片段但在邏輯上SQL和Bible屬於同一個信息片段如何才能知道by是一個介詞而不是作者姓名中的一部分?解決的辦法來自SQL結構化的本性畢竟SQL是一種結構化的查詢語言要解決這一問題需要更多的列來存儲不同片段的信息將一個笨重的字符串拆分為多個語義上有著密切聯系的數據片段就可以獨立地標識每一個數據片段因為每一個片段都成為一個單獨的列回到CREATE TABLE語句(首先刪除現有的表)
DROP TABLE myLibrary;
根據上面的討論創建一個新表
CREATE TABLE myLibrary
(
title VARCHAR()
author VARCHAR()
author VARCHAR()
publisher VARCHAR()
pages INTEGER
publish_date VARCHAR()
isbn VARCHAR()
book_language VARCHAR()
)
在新表的結構中將原來的單個列拆分為個列另外還可以添加第個列將作者的名和姓拆分到兩個單獨的列中(這就是將在第章中討論的數據建模過程)就目前而言除了將PAGES列的數據類型設置為INTEGER類型以表示圖書包含多少頁之外對於其他所有的列都使用了相同的數據類型並縮短了每一個列中所能包含的字符數量本章後面將進一步解釋將PAGES列設置為INTEGER類型的原因讀者或許還會考慮到修改PUBLISH_DATE列的數據類型通常情況下日期數據的行為與字符數據不同DBMS提供了專門用於日期和時間的數據類型
現在無須將所有的數據都保存在同一個桶中對於各個列的數據類型可以有更多的選擇可以將不同的列定義為不同的數據類型當插入或更新各個列中的數據(本章後面將對此進行介紹)時建議不要將數據類型搞混
本章後面還將重新審視數據類型第章也將詳細地介紹數據類型
讀者可能已經注意到在新的MYLIBRARY表中有兩個作者列這是為了適應一本圖書有兩個作者的情形這也提出了另外一個問題當一本圖書只有一個作者或者一本圖書有個作者時該如何處理呢?該問題將在第章和第章的數據建模小節中進行深入的探討這裡讀者只需要注意對於未使用的列將自動使用默認值進行填充如果讀者發現經常需要在表中添加新的列那麼最好花時間閱讀一下關於數據庫規范化方面的內容(請參見第章)
接下來將向新表中插入數據這一步驟與之前介紹的插入操作完全相同唯一的差別在於VALUES列表變得更長因為原來只包含一個列而現在包含了個列在VALUES列表中除了PAGES列的值之外所提供的所有其他數據都必須用單引號括起來引號表明了這些數據是字符數據沒有引號則表示數值數據
INSERT INTO myLibrary VALUES (
SQL Bible
Alex Kriegel
Boris M Trukhnov
Wiley
April
English)
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16484.html