數(shù)據(jù)庫和SQL語句

數(shù)據(jù)庫分類:

關(guān)系型數(shù)據(jù)庫

關(guān)系數(shù)據(jù)庫,是建立在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫,借助于集合代數(shù)等數(shù)學(xué)概念和方法來處理數(shù)據(jù)庫中的數(shù)據(jù)。現(xiàn)實(shí)世界中的各種實(shí)體以及實(shí)體之間的各種聯(lián)系均用關(guān)系模型來表示。標(biāo)準(zhǔn)數(shù)據(jù)查詢語言SQL就是一種基于關(guān)系數(shù)據(jù)庫的語言楼吃,這種語言執(zhí)行對關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的檢索和操作。 關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合孩锡、關(guān)系完整性約束三部分組成酷宵。

目前主流的關(guān)系型數(shù)據(jù)庫有Oracle,Mysql躬窜,SqlServer

非關(guān)系型數(shù)據(jù)庫

NoSQL浇垦,泛指非關(guān)系型的數(shù)據(jù)庫。隨著互聯(lián)網(wǎng)web2.0網(wǎng)站的興起荣挨,傳統(tǒng)的關(guān)系數(shù)據(jù)庫在應(yīng)付web2.0網(wǎng)站男韧,特別是超大規(guī)模和高并發(fā)的SNS類型的web2.0純動態(tài)網(wǎng)站已經(jīng)顯得力不從心,暴露了很多難以克服的問題默垄,而非關(guān)系型的數(shù)據(jù)庫則由于其本身的特點(diǎn)得到了非常迅速的發(fā)展此虑。NoSQL數(shù)據(jù)庫的產(chǎn)生就是為了解決大規(guī)模數(shù)據(jù)集合多重?cái)?shù)據(jù)種類帶來的挑戰(zhàn),尤其是大數(shù)據(jù)應(yīng)用難題口锭。

NoSQL數(shù)據(jù)庫分類

鍵值(Key-Value)存儲數(shù)據(jù)庫

這一類數(shù)據(jù)庫主要會使用到一個哈希表朦前,這個表中有一個特定的鍵和一個指針指向特定的數(shù)據(jù)。Key/value模型對于IT系統(tǒng)來說的優(yōu)勢在于簡單鹃操、易部署韭寸。但是如果DBA只對部分值進(jìn)行查詢或更新的時候,Key/value就顯得效率低下了组民。[3]? 舉例如:Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB.

列存儲數(shù)據(jù)庫棒仍。

這部分?jǐn)?shù)據(jù)庫通常是用來應(yīng)對分布式存儲的海量數(shù)據(jù)。鍵仍然存在臭胜,但是它們的特點(diǎn)是指向了多個列。這些列是由列家族來安排的癞尚。如:Cassandra, HBase, Riak.

文檔型數(shù)據(jù)庫

文檔型數(shù)據(jù)庫的靈感是來自于Lotus Notes辦公軟件的耸三,而且它同第一種鍵值存儲相類似。該類型的數(shù)據(jù)模型是版本化的文檔浇揩,半結(jié)構(gòu)化的文檔以特定的格式存儲仪壮,比如JSON。文檔型數(shù)據(jù)庫可 以看作是鍵值數(shù)據(jù)庫的升級版胳徽,允許之間嵌套鍵值积锅。而且文檔型數(shù)據(jù)庫比鍵值數(shù)據(jù)庫的查詢效率更高。如:CouchDB, MongoDb. 國內(nèi)也有文檔型數(shù)據(jù)庫SequoiaDB养盗,已經(jīng)開源缚陷。

圖形(Graph)數(shù)據(jù)庫

圖形結(jié)構(gòu)的數(shù)據(jù)庫同其他行列以及剛性結(jié)構(gòu)的SQL數(shù)據(jù)庫不同,它是使用靈活的圖形模型往核,并且能夠擴(kuò)展到多個服務(wù)器上箫爷。NoSQL數(shù)據(jù)庫沒有標(biāo)準(zhǔn)的查詢語言(SQL),因此進(jìn)行數(shù)據(jù)庫查詢需要制定數(shù)據(jù)模型。許多NoSQL數(shù)據(jù)庫都有REST式的數(shù)據(jù)接口或者查詢API虎锚。[2]? 如:Neo4J, InfoGrid, Infinite Graph.

NoSQL數(shù)據(jù)庫的使用場景

NoSQL數(shù)據(jù)庫在以下的這幾種情況下比較適用:1硫痰、數(shù)據(jù)模型比較簡單;2窜护、需要靈活性更強(qiáng)的IT系統(tǒng)效斑;3、對數(shù)據(jù)庫性能要求較高柱徙;4缓屠、不需要高度的數(shù)據(jù)一致性;5坐搔、對于給定key藏研,比較容易映射復(fù)雜值的環(huán)境。

SQL語句

SQL(structed query language) 結(jié)構(gòu)化的查詢語言:

DDL(Data Definition Language) 數(shù)據(jù)定義語言概行,命令:CREATE, DROP,ALTER 等

DML(Data Manipulation Language) 數(shù)據(jù)操縱語言蠢挡,命令:INSERT、UPDATE凳忙、DELETE

DQL(Data Query Language) 數(shù)據(jù)查詢語言业踏,命令:SELECT

CRUD操作,指在做計(jì)算處理時的增加(Create)涧卵、查詢(Retrieve)勤家、更新(Update)和刪除(Delete)

DDL是針對數(shù)據(jù)庫和表結(jié)構(gòu)的,其它的是針對表中的數(shù)據(jù)的柳恐。

創(chuàng)建數(shù)據(jù)庫

CREATE DATABASE [IF NOT EXISTS]? db_name

[DEFAULT]? CHARACTER SET charaset_name? 指定數(shù)據(jù)庫采用的字符集

[DEFAULT]? COLLATE? collation_name? ? ? ? ? ? 指定數(shù)據(jù)庫字符集的比較方式

字符集的支持分為四個層次:

服務(wù)器(server)伐脖,數(shù)據(jù)庫(database),數(shù)據(jù)表(table)和連接(connection):

character_set_server:這是設(shè)置服務(wù)器使用的字符集

character_set_client :這是設(shè)置客戶端發(fā)送查詢使用的字符集

character_set_connection :這是設(shè)置服務(wù)器需要將收到的查詢串轉(zhuǎn)換成的字符集

character_set_results :這是設(shè)置服務(wù)器要將結(jié)果數(shù)據(jù)轉(zhuǎn)換到的字符集乐设,轉(zhuǎn)換后才發(fā)送給客戶端

顯示數(shù)據(jù)庫語句

SHOW DATABASES

顯示數(shù)據(jù)庫創(chuàng)建語句

SHOW CREATE DATABASE db_name

修改數(shù)據(jù)庫

ALTER DATABASE db_name ? character? set? utf8

數(shù)據(jù)庫刪除語句

DROP DATABASE [IF EXITS] db_name

同時修改列名和列的數(shù)據(jù)類型的方法:通乘媳樱可以寫成 alter table 表名 change column 舊列名 新列名 新的列類型

創(chuàng)建表(基本語句)

CREATE TABLE table_name? ? ? ? 注意:創(chuàng)建表前,要先使用use db語句使用庫近尚。

(

field1 datatype,

field2 datatype,

field3 datatype,

field4 datatype,

....

)character? 字符集 collate 校對規(guī)則

顯示所有表

SHOW TABLES

顯示表的創(chuàng)建語句

SHOW CREATE TABLE table_name

顯示表的結(jié)構(gòu)

DESC table_name

刪除表

DROP TABLE table_name

使用 ALTER TABLE 語句追加, 修改, 或刪除列的語法.

ALTER TABLE table

ADD (column datatype [DEFAULT expr]

[ , column datatype]....);

ALTER TABLE table

MODIFY (column datatype [DEFAULT expr]

[ , column datatype]....);

ALTER TABLE table

DROP (column);

修改表的名稱:Rename table 表名 to 新表名

修改表的字符集:alter table student character set utf8

C(create增加數(shù)據(jù)) Insert語句

INSERT INTO? table [(column [, column...])]

VALUES (value [, value...]);

插入的數(shù)據(jù)應(yīng)與字段的數(shù)據(jù)類型相同。數(shù)據(jù)的大小應(yīng)在列的規(guī)定范圍內(nèi)戈锻,例如:不能將一個長度為80的字符串加入到長度為40的列中歼跟。在values中列出的數(shù)據(jù)位置必須與被加入的列的排列位置相對應(yīng)。字符和日期型數(shù)據(jù)應(yīng)包含在單引號中格遭。插入空值哈街,不指定或insert into table value(null)

U(update更新數(shù)據(jù)) Update語句

UPDATE? tbl_name

SET col_name1=expr1 [, col_name2=expr2 ...]

[WHERE where_definition]

UPDATE語法可以用新值更新原有表行中的各列。SET子句指示要修改哪些列和要給予哪些值如庭。WHERE子句指定應(yīng)更新哪些行叹卷。如沒有WHERE子句撼港,則更新所有的行

D(drop刪除數(shù)據(jù)) Delete語句

delete from tbl_name

[WHERE where_definition]

如果不使用where子句,將刪除表中所有數(shù)據(jù)骤竹。Delete語句不能刪除某一列的值(可使用update)使用delete語句僅刪除記錄帝牡,不刪除表本身。如要刪除表蒙揣,使用drop table語句靶溜。同insert和update一樣,從一個表中刪除記錄將引起其它表的參照完整性問題懒震,在修改數(shù)據(jù)庫數(shù)據(jù)時罩息,頭腦中應(yīng)該始終不要忘記這個潛在的問題。

R(Retrieve查找數(shù)據(jù)) Select語句

SELECT [DISTINCT] *|{column1, column2. column3..}

FROM ? table;

Select 指定查詢哪些列的數(shù)據(jù)个扰。column指定列名瓷炮。*號代表查詢所有列。From指定查詢哪張表递宅。DISTINCT可選娘香,指顯示結(jié)果時,是否剔除重復(fù)數(shù)據(jù)

在select語句中可使用表達(dá)式對查詢的列進(jìn)行運(yùn)算

SELECT *|{column1|expression, column2|expression办龄,..}

FROM? table;

在select語句中可使用as語句

SELECT column as 別名 from 表名;

使用order by 子句排序查詢結(jié)果

SELECT column1, column2. column3..

FROM? table;

order by column asc|desc

Order by 指定排序的列烘绽,排序的列即可是表中的列名,也可以是select 語句后指定的列名俐填。Asc 升序安接、Desc 降序ORDER BY 子句應(yīng)位于SELECT語句的結(jié)尾。

使用group by 子句對列進(jìn)行分組

SELECT column1, column2. column3.. FROM? table;

group by column

使用having 子句過濾

SELECT column1, column2. column3..

FROM? table;

group by column having ...

Having和where均可實(shí)現(xiàn)過濾英融,但在having可以使用合計(jì)函數(shù),having通常跟在group by后盏檐,它 作用于組。

SQL函數(shù):

合計(jì)函數(shù)-count

Count(列名)返回某一列驶悟,行的總數(shù)

Select count(*)|count(列名) from tablename

[WHERE where_definition]

合計(jì)函數(shù)-SUM

Sum函數(shù)返回滿足where條件的行的和

Select sum(列名){,sum(列名)…} from tablename

[WHERE where_definition]

合計(jì)函數(shù)-AVG

AVG函數(shù)返回滿足where條件的一列的平均值

Select sum(列名){,sum(列名)…} from tablename

[WHERE where_definition]

合計(jì)函數(shù)-MAX/MIN

Max/min函數(shù)返回滿足where條件的一列的最大/最小值

Select max(列名) from tablename

[WHERE where_definition]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末糯笙,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子撩银,更是在濱河造成了極大的恐慌,老刑警劉巖豺憔,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件额获,死亡現(xiàn)場離奇詭異,居然都是意外死亡恭应,警方通過查閱死者的電腦和手機(jī)抄邀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來昼榛,“玉大人境肾,你說我怎么就攤上這事。” “怎么了奥喻?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵偶宫,是天一觀的道長。 經(jīng)常有香客問我环鲤,道長纯趋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任冷离,我火速辦了婚禮吵冒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘西剥。我一直安慰自己痹栖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布瞭空。 她就那樣靜靜地躺著揪阿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪匙铡。 梳的紋絲不亂的頭發(fā)上图甜,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音鳖眼,去河邊找鬼黑毅。 笑死,一個胖子當(dāng)著我的面吹牛钦讳,可吹牛的內(nèi)容都是我干的矿瘦。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼愿卒,長吁一口氣:“原來是場噩夢啊……” “哼缚去!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起琼开,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤易结,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后柜候,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搞动,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年渣刷,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹦肿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡辅柴,死狀恐怖箩溃,靈堂內(nèi)的尸體忽然破棺而出瞭吃,到底是詐尸還是另有隱情,我是刑警寧澤涣旨,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布歪架,位于F島的核電站,受9級特大地震影響开泽,放射性物質(zhì)發(fā)生泄漏牡拇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一穆律、第九天 我趴在偏房一處隱蔽的房頂上張望惠呼。 院中可真熱鬧,春花似錦峦耘、人聲如沸剔蹋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泣崩。三九已至,卻和暖如春洛口,著一層夾襖步出監(jiān)牢的瞬間矫付,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工第焰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留买优,地道東北人。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓挺举,卻偏偏與公主長得像杀赢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子湘纵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容