真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

nosql入門語句,nosql使用

nosql 怎么用?在關(guān)系數(shù)據(jù)庫中可以通過 select 語句查詢,但是在nosql中怎么用這個(gè)了,難道只能存儲(chǔ)鍵值對(duì)?

NoSQL數(shù)據(jù)庫有很多種,實(shí)現(xiàn)方式差別很大。有接近SQL查詢方式的,也有純粹的鍵值對(duì)查詢。

膠州ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

對(duì)于K-V型數(shù)據(jù)庫,比較典型的是Redis,系統(tǒng)提供了get、set之類的命令用于增刪改查。關(guān)鍵是鍵值對(duì)的鍵和值怎么設(shè)計(jì)。

玩轉(zhuǎn)SQL:如何寫出好的SQL語句

1.選擇最有效率的表名順序(只在基于規(guī)則的優(yōu)化器中有效):

ORALCE的解析器按照從右到左的順序處理FROM子句中的表名,F(xiàn)ROM子句中寫在最后的表(基礎(chǔ)表 driving table)將被最先處理,在FROM子句中包含多個(gè)表的情況下,你必須選擇記錄條數(shù)最少的表作為基礎(chǔ)表。如果有3個(gè)以上的表連接查詢, 那就需要選擇交叉表(intersection table)作為基礎(chǔ)表, 交叉表是指那個(gè)被其他表所引用的表.

2.WHERE子句中的連接順序:

ORACLE采用自下而上的順序解析WHERE子句,根據(jù)這個(gè)原理,表之間的連接必須寫在其他WHERE條件之前, 那些可以過濾掉最大數(shù)量記錄的條件必須寫在WHERE子句的末尾.

3.SELECT子句中避免使用 * :

ORACLE在解析的過程中, 會(huì)將’*’ 依次轉(zhuǎn)換成所有的列名, 這個(gè)工作是通過查詢數(shù)據(jù)字典完成的, 這意味著將耗費(fèi)更多的時(shí)間.

4.使用DECODE函數(shù)來減少處理時(shí)間:

使用DECODE函數(shù)可以避免重復(fù)掃描相同記錄或重復(fù)連接相同的表.

5.用Where子句替換HAVING子句:

避免使用HAVING子句, HAVING 只會(huì)在檢索出所有記錄之后才對(duì)結(jié)果集進(jìn)行過濾. 這個(gè)處理需要排序,總計(jì)等操作. 如果能通過WHERE子句限制記錄的數(shù)目,那就能減少這方面的開銷. on、where、having這三個(gè)都可以加條件的子句中,on是最先執(zhí)行,where次之,having最后,因?yàn)閛n是先把不符合條件的記錄過濾后才進(jìn)行統(tǒng)計(jì),它就可以減少中間運(yùn)算要處理的數(shù)據(jù),按理說應(yīng)該速度是最快的,where也應(yīng)該比having快點(diǎn)的,因?yàn)樗^濾數(shù)據(jù)后才進(jìn)行sum,在兩個(gè)表聯(lián)接時(shí)才用on的.在多表聯(lián)接查詢時(shí),on比where更早起作用。系統(tǒng)首先根據(jù)各個(gè)表之間的聯(lián)接條件,把多個(gè)表合成一個(gè)臨時(shí)表后,再由where進(jìn)行過濾,然后再計(jì)算,計(jì)算完后再由having進(jìn)行過濾。

6.減少對(duì)表的查詢:

在含有子查詢的SQL語句中,要特別注意減少對(duì)表的查詢.例子:

SELECT TAB_NAME FROM TABLES WHERE (TAB_NAME,DB_VER) = (SELECT TAB_NAME,DB_VER FROM TAB_COLUMNS WHERE VERSION = 604)

7.使用表的別名(Alias):

當(dāng)在SQL語句中連接多個(gè)表時(shí), 請(qǐng)使用表的別名并把別名前綴于每個(gè)Column上.這樣一來,就可以減少解析的時(shí)間并減少那些由Column歧義引起的語法錯(cuò)誤.

8.用EXISTS替代IN、用NOT EXISTS替代NOT IN:

在許多基于基礎(chǔ)表的查詢中,為了滿足一個(gè)條件,往往需要對(duì)另一個(gè)表進(jìn)行聯(lián)接.在這種情況下, 使用EXISTS(或NOT EXISTS)通常將提高查詢的效率. 在子查詢中,NOT IN子句將執(zhí)行一個(gè)內(nèi)部的排序和合并. 無論在哪種情況下,NOT IN都是最低效的 (因?yàn)樗鼘?duì)子查詢中的表執(zhí)行了一個(gè)全表遍歷). 為了避免使用NOT IN ,我們可以把它改寫成外連接(Outer Joins)或NOT EXISTS.

例子:

(高效)SELECT * FROM EMP (基礎(chǔ)表) WHERE EMPNO 0 AND EXISTS (SELECT ‘X’ FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = ‘MELB’)

(低效)SELECT * FROM EMP (基礎(chǔ)表) WHERE EMPNO 0 AND DEPTNO IN(SELECT DEPTNO FROM DEPT WHERE LOC = ‘MELB’)

9. 識(shí)別’低效執(zhí)行’的SQL語句:

SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,

ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,

ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,

SQL_TEXT

FROM V$SQLAREA

WHERE EXECUTIONS0

AND BUFFER_GETS 0

AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS 0.8

ORDER BY 4 DESC;

10.用索引提高效率:

索引是表的一個(gè)概念部分,用來提高檢索數(shù)據(jù)的效率,ORACLE使用了一個(gè)復(fù)雜的自平衡B-tree結(jié)構(gòu). 通常,通過索引查詢數(shù)據(jù)比全表掃描要快. 當(dāng)ORACLE找出執(zhí)行查詢和Update語句的最佳路徑時(shí), ORACLE優(yōu)化器將使用索引. 同樣在聯(lián)結(jié)多個(gè)表時(shí)使用索引也可以提高效率. 另一個(gè)使用索引的好處是,它提供了主鍵(primary key)的唯一性驗(yàn)證.。那些LONG或LONG RAW數(shù)據(jù)類型, 你可以索引幾乎所有的列. 通常, 在大型表中使用索引特別有效. 當(dāng)然,你也會(huì)發(fā)現(xiàn), 在掃描小表時(shí),使用索引同樣能提高效率. 雖然使用索引能得到查詢效率的提高,但是我們也必須注意到它的代價(jià). 索引需要空間來存儲(chǔ),也需要定期維護(hù), 每當(dāng)有記錄在表中增減或索引列被修改時(shí), 索引本身也會(huì)被修改. 這意味著每條記錄的INSERT , DELETE , UPDATE將為此多付出4 , 5 次的磁盤I/O . 因?yàn)樗饕枰~外的存儲(chǔ)空間和處理,那些不必要的索引反而會(huì)使查詢反應(yīng)時(shí)間變慢.

11.用EXISTS替換DISTINCT:

當(dāng)提交一個(gè)包含一對(duì)多表信息(比如部門表和雇員表)的查詢時(shí),避免在SELECT子句中使用DISTINCT. 一般可以考慮用EXIST替換, EXISTS 使查詢更為迅速,因?yàn)镽DBMS核心模塊將在子查詢的條件一旦滿足后,立刻返回結(jié)果. 例子:

(低效):

SELECT DISTINCT DEPT_NO,DEPT_NAME FROM DEPT D , EMP E

WHERE D.DEPT_NO = E.DEPT_NO

(高效):

SELECT DEPT_NO,DEPT_NAME FROM DEPT D WHERE EXISTS ( SELECT ‘X’

FROM EMP E WHERE E.DEPT_NO = D.DEPT_NO);

12.sql語句用大寫的:

因?yàn)閛racle總是先解析sql語句,把小寫的字母轉(zhuǎn)換成大寫的再執(zhí)行

13.避免在索引列上使用NOT  

我們要避免在索引列上使用NOT, NOT會(huì)產(chǎn)生在和在索引列上使用函數(shù)相同的影響. 當(dāng)ORACLE”遇到”NOT,他就會(huì)停止使用索引轉(zhuǎn)而執(zhí)行全表掃描.

14.避免在索引列上使用計(jì)算.

WHERE子句中,如果索引列是函數(shù)的一部分.優(yōu)化器將不使用索引而使用全表掃描.

舉例:

低效:

SELECT … FROM DEPT WHERE SAL * 12 25000;

高效:

SELECT … FROM DEPT WHERE SAL 25000/12;

15.用=替代

高效:

SELECT * FROM EMP WHERE DEPTNO =4

低效:

SELECT * FROM EMP WHERE DEPTNO 3

兩者的區(qū)別在于, 前者DBMS將直接跳到第一個(gè)DEPT等于4的記錄而后者將首先定位到DEPTNO=3的記錄并且向前掃描到第一個(gè)DEPT大于3的記錄

16.用UNION替換OR (適用于索引列)

通常情況下, 用UNION替換WHERE子句中的OR將會(huì)起到較好的效果. 對(duì)索引列使用OR將造成全表掃描. 注意, 以上規(guī)則只針對(duì)多個(gè)索引列有效. 如果有column沒有被索引, 查詢效率可能會(huì)因?yàn)槟銢]有選擇OR而降低. 在下面的例子中, LOC_ID 和REGION上都建有索引.

高效:

SELECT LOC_ID , LOC_DESC , REGION

FROM LOCATION

WHERE LOC_ID = 10

UNION

SELECT LOC_ID , LOC_DESC , REGION

FROM LOCATION

WHERE REGION = “MELBOURNE”

低效:

SELECT LOC_ID , LOC_DESC , REGION

FROM LOCATION

WHERE LOC_ID = 10 OR REGION = “MELBOURNE”

如果你堅(jiān)持要用OR, 那就需要返回記錄最少的索引列寫在最前面.

17.用IN來替換OR

這是一條簡單易記的規(guī)則,但是實(shí)際的執(zhí)行效果還須檢驗(yàn),在ORACLE8i下,兩者的執(zhí)行路徑似乎是相同的. 

低效:

SELECT…. FROM LOCATION WHERE LOC_ID = 10 OR LOC_ID = 20 OR LOC_ID = 30

高效

SELECT… FROM LOCATION WHERE LOC_IN IN (10,20,30);

18.避免在索引列上使用IS NULL和IS NOT NULL

避免在索引中使用任何可以為空的列,ORACLE將無法使用該索引.對(duì)于單列索引,如果列包含空值,索引中將不存在此記錄. 對(duì)于復(fù)合索引,如果每個(gè)列都為空,索引中同樣不存在此記錄. 如果至少有一個(gè)列不為空,則記錄存在于索引中.舉例: 如果唯一性索引建立在表的A列和B列上, 并且表中存在一條記錄的A,B值為(123,null) , ORACLE將不接受下一條具有相同A,B值(123,null)的記錄(插入). 然而如果所有的索引列都為空,ORACLE將認(rèn)為整個(gè)鍵值為空而空不等于空. 因此你可以插入1000 條具有相同鍵值的記錄,當(dāng)然它們都是空! 因?yàn)榭罩挡淮嬖谟谒饕兄?所以WHERE子句中對(duì)索引列進(jìn)行空值比較將使ORACLE停用該索引.

低效: (索引失效)

SELECT … FROM DEPARTMENT WHERE DEPT_CODE IS NOT NULL;

高效: (索引有效)

SELECT … FROM DEPARTMENT WHERE DEPT_CODE =0;

19.總是使用索引的第一個(gè)列:

如果索引是建立在多個(gè)列上, 只有在它的第一個(gè)列(leading column)被where子句引用時(shí),優(yōu)化器才會(huì)選擇使用該索引. 這也是一條簡單而重要的規(guī)則,當(dāng)僅引用索引的第二個(gè)列時(shí),優(yōu)化器使用了全表掃描而忽略了索引

20.用UNION-ALL 替換UNION ( 如果有可能的話):

當(dāng)SQL 語句需要UNION兩個(gè)查詢結(jié)果集合時(shí),這兩個(gè)結(jié)果集合會(huì)以UNION-ALL的方式被合并, 然后在輸出最終結(jié)果前進(jìn)行排序. 如果用UNION ALL替代UNION, 這樣排序就不是必要了. 效率就會(huì)因此得到提高. 需要注意的是,UNION ALL 將重復(fù)輸出兩個(gè)結(jié)果集合中相同記錄. 因此各位還是要從業(yè)務(wù)需求分析使用UNION ALL的可行性. UNION 將對(duì)結(jié)果集合排序,這個(gè)操作會(huì)使用到SORT_AREA_SIZE這塊內(nèi)存. 對(duì)于這塊內(nèi)存的優(yōu)化也是相當(dāng)重要的. 下面的SQL可以用來查詢排序的消耗量

低效:

SELECT ACCT_NUM, BALANCE_AMT

FROM DEBIT_TRANSACTIONS

WHERE TRAN_DATE = ’31-DEC-95’

UNION

SELECT ACCT_NUM, BALANCE_AMT

FROM DEBIT_TRANSACTIONS

WHERE TRAN_DATE = ’31-DEC-95’

高效:

SELECT ACCT_NUM, BALANCE_AMT

FROM DEBIT_TRANSACTIONS

WHERE TRAN_DATE = ’31-DEC-95’

UNION ALL

SELECT ACCT_NUM, BALANCE_AMT

FROM DEBIT_TRANSACTIONS

WHERE TRAN_DATE = ’31-DEC-95’

21.ORDER BY:

ORDER BY中所有的列必須包含在相同的索引中并保持在索引中的排列順序.

ORDER BY中所有的列必須定義為非空.

WHERE子句使用的索引和ORDER BY子句中所使用的索引不能并列.

22.需要當(dāng)心的WHERE子句:

某些SELECT 語句中的WHERE子句不使用索引. 這里有一些例子.

在下面的例子里, (1)‘!=’ 將不使用索引. 記住, 索引只能告訴你什么存在于表中, 而不能告訴你什么不存在于表中. (2) ‘||’是字符連接函數(shù). 就象其他函數(shù)那樣, 停用了索引. (3) ‘+’是數(shù)學(xué)函數(shù). 就象其他數(shù)學(xué)函數(shù)那樣, 停用了索引. (4)相同的索引列不能互相比較,這將會(huì)啟用全表掃描.

23.優(yōu)化GROUP BY:

提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉.下面兩個(gè)查詢返回相同結(jié)果但第二個(gè)明顯就快了許多.

低效:

SELECT JOB , AVG(SAL)

FROM EMP

GROUP by JOB

HAVING JOB = ‘PRESIDENT’

OR JOB = ‘MANAGER’

高效:

SELECT JOB , AVG(SAL)

FROM EMP

WHERE JOB = ‘PRESIDENT’

OR JOB = ‘MANAGER’

GROUP by JOB

24.視圖中不要有ORDER BY

視圖里面有 order by 會(huì)干擾執(zhí)行計(jì)劃

NoSQL如何實(shí)現(xiàn)數(shù)據(jù)的增刪改查?

package basic;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class JDBC {

public void findAll() {

try {

// 獲得數(shù)據(jù)庫驅(qū)動(dòng)

//由于長時(shí)間不寫,驅(qū)動(dòng)名和URL都忘記了,不知道對(duì)不對(duì),你應(yīng)該知道的,自己改一下的哈

String url = "jdbc:oracle:thin:@localhost:1521:XE";

String userName = "system";

String password = "system";

Class.forName("oracle.jdbc.driver.OracleDriver");

// 創(chuàng)建連接

Connection conn = DriverManager.getConnection(url, userName,

password);

// 新建發(fā)送sql語句的對(duì)象

Statement st = conn.createStatement();

// 執(zhí)行sql

String sql = "select * from users";

ResultSet rs = st.executeQuery(sql);

// 處理結(jié)果

while(rs.next()){

//這個(gè)地方就是給你的封裝類屬性賦值

System.out.println("UserName:"+rs.getString(0));

}

// 關(guān)閉連接

rs.close();

st.close();

conn.close();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

public void delete(){

try {

//步驟還是那六個(gè)步驟,前邊的兩步是一樣的

String url = "jdbc:oracle:thin:@localhost:1521:XE";

String userName = "system";

String password = "system";

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection conn = DriverManager.getConnection(url,userName,password);

//這里的發(fā)送sql語句的對(duì)象是PreparedStatement,成為預(yù)處理sql對(duì)象,因?yàn)榘礂l件刪除是需要不定值的

String sql = "delete from users where id = ?";

PreparedStatement ps = conn.prepareStatement(sql);

ps.setInt(0, 1);

int row = ps.executeUpdate();

if(row!=0){

System.out.println("刪除成功!");

}

// 關(guān)閉連接

rs.close();

st.close();

conn.close();

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

nosql是什么

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純動(dòng)態(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í)間,但是不可否認(rèn),現(xiàn)在已經(jīng)開始了第二代運(yùn)動(dòng)。盡管早期的堆棧代碼只能算是一種實(shí)驗(yàn),然而現(xiàn)在的系統(tǒng)已經(jīng)更加的成熟、穩(wěn)定。不過現(xiàn)在也面臨著一個(gè)嚴(yán)酷的事實(shí):技術(shù)越來越成熟——以至于原來很好的NoSQL數(shù)據(jù)存儲(chǔ)不得不進(jìn)行重寫,也有少數(shù)人認(rèn)為這就是所謂的2.0版本。這里列出一些比較知名的工具,可以為大數(shù)據(jù)建立快速、可擴(kuò)展的存儲(chǔ)庫。

NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是SQL”,是一項(xiàng)全新的數(shù)據(jù)庫革命性運(yùn)動(dòng),早期就有人提出,發(fā)展至2009年趨勢(shì)越發(fā)高漲。NoSQL的擁護(hù)者們提倡運(yùn)用非關(guān)系型的數(shù)據(jù)存儲(chǔ),相對(duì)于鋪天蓋地的關(guān)系型數(shù)據(jù)庫運(yùn)用,這一概念無疑是一種全新的思維的注入。

對(duì)于NoSQL并沒有一個(gè)明確的范圍和定義,但是他們都普遍存在下面一些共同特征:

不需要預(yù)定義模式:不需要事先定義數(shù)據(jù)模式,預(yù)定義表結(jié)構(gòu)。數(shù)據(jù)中的每條記錄都可能有不同的屬性和格式。當(dāng)插入數(shù)據(jù)時(shí),并不需要預(yù)先定義它們的模式。

無共享架構(gòu):相對(duì)于將所有數(shù)據(jù)存儲(chǔ)的存儲(chǔ)區(qū)域網(wǎng)絡(luò)中的全共享架構(gòu)。NoSQL往往將數(shù)據(jù)劃分后存儲(chǔ)在各個(gè)本地服務(wù)器上。因?yàn)閺谋镜卮疟P讀取數(shù)據(jù)的性能往往好于通過網(wǎng)絡(luò)傳輸讀取數(shù)據(jù)的性能,從而提高了系統(tǒng)的性能。

彈性可擴(kuò)展:可以在系統(tǒng)運(yùn)行的時(shí)候,動(dòng)態(tài)增加或者刪除結(jié)點(diǎn)。不需要停機(jī)維護(hù),數(shù)據(jù)可以自動(dòng)遷移。

分區(qū):相對(duì)于將數(shù)據(jù)存放于同一個(gè)節(jié)點(diǎn),NoSQL數(shù)據(jù)庫需要將數(shù)據(jù)進(jìn)行分區(qū),將記錄分散在多個(gè)節(jié)點(diǎn)上面。并且通常分區(qū)的同時(shí)還要做復(fù)制。這樣既提高了并行性能,又能保證沒有單點(diǎn)失效的問題。

異步復(fù)制:和RAID存儲(chǔ)系統(tǒng)不同的是,NoSQL中的復(fù)制,往往是基于日志的異步復(fù)制。這樣,數(shù)據(jù)就可以盡快地寫入一個(gè)節(jié)點(diǎn),而不會(huì)被網(wǎng)絡(luò)傳輸引起遲延。缺點(diǎn)是并不總是能保證一致性,這樣的方式在出現(xiàn)故障的時(shí)候,可能會(huì)丟失少量的數(shù)據(jù)。

BASE:相對(duì)于事務(wù)嚴(yán)格的ACID特性,NoSQL數(shù)據(jù)庫保證的是BASE特性。BASE是最終一致性和軟事務(wù)。

NoSQL數(shù)據(jù)庫并沒有一個(gè)統(tǒng)一的架構(gòu),兩種NoSQL數(shù)據(jù)庫之間的不同,甚至遠(yuǎn)遠(yuǎn)超過兩種關(guān)系型數(shù)據(jù)庫的不同??梢哉f,NoSQL各有所長,成功的NoSQL必然特別適用于某些場合或者某些應(yīng)用,在這些場合中會(huì)遠(yuǎn)遠(yuǎn)勝過關(guān)系型數(shù)據(jù)庫和其他的NoSQL。

求sql語法

SQL語言快速入門(一)

SQL是英文Structured Query Language的縮寫,意思為結(jié)構(gòu)化查詢語言。

SQL語言的主要功能就是同各種數(shù)據(jù)庫建立聯(lián)系,進(jìn)行溝通。按照ANSI(美國國家標(biāo)準(zhǔn)協(xié)會(huì))的規(guī)定,SQL被作為關(guān)系型數(shù)據(jù)庫管理系統(tǒng)的標(biāo)準(zhǔn)語言。SQL語句可以用來執(zhí)行各種各樣的操作,例如更新數(shù)據(jù)庫中的數(shù)據(jù),從數(shù)據(jù)庫中提取數(shù)據(jù)等。目前,絕大多數(shù)流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),如Oracle, Sybase, Microsoft SQL Server, Access等都采用了SQL語言標(biāo)準(zhǔn)。雖然很多數(shù)據(jù)庫都對(duì)SQL語句進(jìn)行了再開發(fā)和擴(kuò)展,但是包括Select, Insert, Update, Delete, Create, 及Drop在內(nèi)的標(biāo)準(zhǔn)的SQL命令仍然可以被用來完成幾乎所有的數(shù)據(jù)庫操作。下面,我們就來詳細(xì)介紹一下SQL語言的基本知識(shí)。

數(shù)據(jù)庫表格

一個(gè)典型的關(guān)系型數(shù)據(jù)庫通常由一個(gè)或多個(gè)被稱作表格的對(duì)象組成。數(shù)據(jù)庫

中的所有數(shù)據(jù)或信息都被保存在這些數(shù)據(jù)庫表格中。數(shù)據(jù)庫中的每一個(gè)表格都具有

自己唯一的表格名稱,都是由行和列組成,其中每一列包括了該列名稱,數(shù)據(jù)類型

,以及列的其它屬性等信息,而行則具體包含某一列的記錄或數(shù)據(jù)。以下,是一個(gè)

名為天氣的數(shù)據(jù)庫表格的實(shí)例。

城市 最高氣溫 最低氣溫

北京 10 5

上海 15 8

天津 8 2

重慶 20 13

該表格中“城市”,“最高氣溫”和“最低氣溫”就是三個(gè)不同的列

,而表格中的每一行則包含了具體的表格數(shù)據(jù)。

數(shù)據(jù)查詢

在眾多的SQL命令中,select語句應(yīng)該算是使用最頻繁的。Select語句主要被用來對(duì)數(shù)據(jù)庫進(jìn)行查詢并返回符合用戶查詢標(biāo)準(zhǔn)的結(jié)果數(shù)據(jù)。Select語句的語法格式如下:

select column1 [, column2,etc] from tablename

[where condition];

([] 表示可選項(xiàng))

Select語句中位于Select關(guān)鍵詞之后的列名用來決定那些列將作為查詢結(jié)果返回。用戶可以按照自己的需要選擇任意列,還可以使用通配符“*”來設(shè)定返回表格中的所有列。

Select語句中位于from關(guān)鍵詞之后的表格名稱用來決定將要進(jìn)行查詢操作的目

標(biāo)表格。

Select語句中的where可選從句用來規(guī)定哪些數(shù)據(jù)值或哪些行將被作為查詢結(jié)果返回或顯示。在where條件從句中可以使用以下一些運(yùn)算符來設(shè)定查詢標(biāo)準(zhǔn):

= 等于

大于

小于

= 大于等于

= 小于等于

不等于

除了上面所提到的運(yùn)算符外,LIKE運(yùn)算符在where條件從句中也非常重要。

LIKE運(yùn)算符的功能非常強(qiáng)大,通過使用LIKE運(yùn)算符可以設(shè)定只選擇與用戶規(guī)定格式相同的記錄。此外,我們還可以使用通配符“%”用來代替任何字符串。舉例如下:

Select firstname, lastname, city

from employee

where firstname LIKE ‘E%’;

(注意,字符串必須被包含在單括號(hào)內(nèi))

上述SQL語句將會(huì)查詢所有名稱以E開頭的姓名?;蛘?,通過如下語句:

Select * from employee

where firstname = ‘May’;

查詢所有名稱為May的行。

SQL語言快速入門(二)

創(chuàng)建表格

SQL語言中的create table語句被用來建立新的數(shù)據(jù)庫表格。Create table

語句的使用格式如下:

create table tablename

(column1 data type,

column2 data type,

column3 data type);

如果用戶希望在建立新表格時(shí)規(guī)定列的限制條件,可以使用可選的條件

選項(xiàng):

create table tablename

(column1 data type [constraint],

column2 data type [constraint],

column3 data type [constraint]);

舉例如下:

create table employee

(firstname varchar(15),

lastname varchar(20),

age number(3),

address varchar(30),

city varchar(20));

簡單來說,創(chuàng)建新表格時(shí),在關(guān)鍵詞create table后面加入所要建立的表格

的名稱,然后在括號(hào)內(nèi)順次設(shè)定各列的名稱,數(shù)據(jù)類型,以及可選的限制條件

等。注意,所有的SQL語句在結(jié)尾處都要使用“;”符號(hào)。

使用SQL語句創(chuàng)建的數(shù)據(jù)庫表格和表格中列的名稱必須以字母開頭,后面

可以使用字母,數(shù)字或下劃線,名稱的長度不能超過30個(gè)字符。注意,用戶在

稱時(shí)不要使用SQL語言中的保留關(guān)鍵詞,如select, create, insert等,作為表格或

列的名稱。

數(shù)據(jù)類型用來設(shè)定某一個(gè)具體列中數(shù)據(jù)的類型。例如,在姓名列中只能采

用的數(shù)據(jù)類型,而不能使用number的數(shù)據(jù)類型。

SQL語言中較為常用的數(shù)據(jù)類型為:

char(size):固定長度字符串,其中括號(hào)中的size用來設(shè)定字符串的最大

度。Char類型的最大長度為255字節(jié)。

varchar(size):可變長度字符串,最大長度由size設(shè)定。

number(size):數(shù)字類型,其中數(shù)字的最大位數(shù)由size設(shè)定。

Date:日期類型。

number(size,d):數(shù)字類型,size決定該數(shù)字總的最大位數(shù),而d則用于

設(shè)定該數(shù)字在小數(shù)點(diǎn)后的位數(shù)。

最后,在創(chuàng)建新表格時(shí)需要注意的一點(diǎn)就是表格中列的限制條件。所謂限

制條件就是當(dāng)向特定列輸入數(shù)據(jù)時(shí)所必須遵守的規(guī)則。

例如,unique這一限制條件要求某一列中不能存在兩個(gè)值相同的記錄,所有

記錄的值都必須是唯一的。除unique之外,較為常用的列的限制條件

還包括not, null和primary key等。Not null用來規(guī)定表格中某一列的值

不能為空.Primary key則為表格中的所有記錄規(guī)定了唯一的標(biāo)識(shí)符。

向表格中插入數(shù)據(jù)

SQL語言使用insert語句向數(shù)據(jù)庫表格中插入或添加新的數(shù)據(jù)行。Insert語

句的使用格式如下:

insert into tablename

(first_column,...last_column)

values (first_value,...last_value);

例如:

insert into employee

(firstname, lastname, age, address, city)

values (‘Li’, ‘Ming’, 45, ‘No.77 Changan Road’, ‘Beijing”);

簡單來說,當(dāng)向數(shù)據(jù)庫表格中添加新記錄時(shí),在關(guān)鍵詞insert into后面輸

入所要添加的表格名稱,然后在括號(hào)中列出將要添加新值的列的名稱。最后

,在關(guān)鍵詞values的后面按照前面輸入的列的順序?qū)?yīng)的輸入所有要添加的

記錄值。

更新記錄

SQL語言使用update語句更新或修改滿足規(guī)定條件的現(xiàn)有記錄。

Update語句的格式為:

update tablename

set columnname = newvalue [, nextcolumn = newvalue2...]

where columnname OPERATOR value [and|or column OPERATOR value];

例如:

update employee

set age = age+1

where first_name= ‘Mary’and last_name= ‘Williams’;

使用update語句時(shí),關(guān)鍵一點(diǎn)就是要設(shè)定好用于進(jìn)行判斷的where條件

從句。

刪除記錄

SQL語言使用delete語句刪除數(shù)據(jù)庫表格中的行或記錄。Delete語句的

格式為:

delete from tablename

where columnname OPERATOR value [and|or column OPERATOR value];

例如:

delete from employee

where lastname = May;

簡單來說,當(dāng)需要?jiǎng)h除某一行或某個(gè)記錄時(shí),在delete from關(guān)鍵詞之

后輸入表格名稱,然后在where從句中設(shè)定刪除記錄的判斷條件。注意,

如果用戶在使用delete語句時(shí)不設(shè)定where從句,則表格中的所有記錄將

全部被刪除。

刪除數(shù)據(jù)庫表格

在SQL語言中使用drop table命令刪除某個(gè)表格以及該表格中的所有記

錄。Drop table命令的使用格式為:

drop table tablename;

例如:

drop table employee;

如果用戶希望將某個(gè)數(shù)據(jù)庫表格完全刪除,只需要在drop table命令后

輸入希望刪除的表格名稱即可。Drop table命令的作用與刪除表格中的所有

記錄不同。刪除表格中的全部記錄之后,該表格仍然存在,而且表格中列

的信息不會(huì)改變。而使用drop table命令則會(huì)將整個(gè)數(shù)據(jù)庫表格的所有信息

全部刪除。

以上,我們對(duì)SQL語言主要的命令和語句進(jìn)行了較為詳細(xì)的介紹。應(yīng)該說SQL語句的語法結(jié)構(gòu)和風(fēng)格還是相當(dāng)簡單和直觀的,只要用戶結(jié)合實(shí)踐多加練習(xí),一定會(huì)在短期內(nèi)迅速掌握。

SQL語言快速入門(三)

我們?nèi)粘J褂肧QL語言的工作過程中,使用最多的還是從已經(jīng)建立好的數(shù)據(jù)庫中查詢信息。下面,我們就來詳細(xì)介紹一下如何使用SQL語言實(shí)現(xiàn)各種數(shù)據(jù)庫查詢操作。

SELECT…FROM

為方便講解,我們?cè)跀?shù)據(jù)庫中創(chuàng)建名為Store_Information的如下數(shù)據(jù)表。

Store_Information

Store_Name Sales Date

Los Angeles 00 Jan-10-2000

San Diego 0 Jan-11-2000

Los Angeles 0 Jan-12-2000

Boston 0 Jan-12-2000

SQL語言中用于數(shù)據(jù)庫查詢的最簡單的命令就是SELECT…FROM,語法格

式為:

SELECT \"column_name\" FROM \"table_name\"

例如,如果我們希望查詢Store_Information數(shù)據(jù)表中所有的商店名稱時(shí),可

以使用如下命令:

SELECT store_name FROM Store_Information

查詢結(jié)果顯示為:

Store_Name

Los Angeles

San Diego

Los Angeles

Boston

如果用戶希望一次查詢多個(gè)字段,可以將所要查詢的字段名稱依次加入

SELECT關(guān)鍵字之后,中間用“,”隔開即可。

DISTINCT

SELECT關(guān)鍵字支持用戶查詢數(shù)據(jù)表中指定字段的所有數(shù)據(jù),但是這樣有時(shí)

就會(huì)不可避免的出現(xiàn)重復(fù)信息。如果用戶希望只查詢那些具有不同記錄值的信

息的話,可以使用SQL語言的DISTINCT關(guān)鍵字。語法格式如下:

SELECT DISTINCT \"column_name\"

FROM \"table_name\"

例如,我們可以使用以下命令查詢Store_Information數(shù)據(jù)表具有不同記錄值

的所有記錄。

SELECT DISTINCT Store_Name FROM Store_Information

查詢結(jié)果如下:

Store_Name

Los Angeles

San Diego

Boston

WHERE

除了選擇具有不同記錄值的記錄之外,有時(shí)我們可能還會(huì)需要根據(jù)某些條

件對(duì)數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行查詢。例如,我們可能需要查詢Store_Information數(shù)

據(jù)表中銷售額超過1000美圓的商店。為此,我們可以使用SQL語言的WHERE

關(guān)鍵字設(shè)定查詢條件。語法格式如下:

SELECT \"column_name\"

FROM \"table_name\"

WHERE \"condition\"

由此,我們可以使用如下命令查詢銷售額超過1000美圓的商店信息:

SELECT store_name FROM Store_Information WHERE Sales 1000

查詢結(jié)果顯示為:

store_name

Los Angeles

運(yùn)算函數(shù)

現(xiàn)在,我們已經(jīng)了解到在使用SQL語言進(jìn)行數(shù)據(jù)庫查詢操作時(shí)可以通過對(duì)

數(shù)值的判斷設(shè)定靈活的查詢條件。為了增強(qiáng)對(duì)運(yùn)算的支持能力,SQL提供了眾

多實(shí)用的運(yùn)算函數(shù)供廣大用戶使用。例如,我們可以直接在SQL命令中調(diào)用

SUM或AVG這兩個(gè)分別用于計(jì)算總數(shù)和平均數(shù)的函數(shù)。語法格式如下:

SELECT \"function type\"(\"column_name\")

FROM \"table_name\"

如果我們希望查詢Store_Information數(shù)據(jù)表中所有商店的總銷售額的話,可

以使用如下命令:

SELECT SUM(Sales) FROM Store_Information

查詢結(jié)果顯示為:

SUM(Sales)

50

COUNT

除了SUM和AVG函數(shù)之外,COUNT函數(shù)是SQL語言中另一個(gè)較為常用

的運(yùn)算函數(shù)。COUNT函數(shù)可以用來計(jì)算數(shù)據(jù)表中指定字段所包含的記錄數(shù)目。

語法格式為:

SELECT COUNT(\"column_name\")

FROM \"table_name\"

例如,如果我們希望查詢Store_Information數(shù)據(jù)表中的有關(guān)商店的記錄條數(shù)

時(shí),可以使用如下命令:

SELECT COUNT(store_name)

FROM Store_Information

查詢結(jié)果顯示為:

Count(store_name)

4

COUNT函數(shù)可以和DISTINCT關(guān)鍵字一起使用從而可以查詢數(shù)據(jù)表中指定

字段中所有具有不同記錄值的記錄數(shù)目.例如,如果我們希望查詢Store_Information

數(shù)據(jù)表中不同商店的數(shù)目時(shí),可以使用如下命令:

SELECT COUNT(DISTINCT store_name)

FROM Store_Information

查詢結(jié)果顯示為:

Count(DISTINCT store_name)

3

GROUP BY

下面我們來進(jìn)一步看一下SQL語言中的集合函數(shù)。上文中,我們?cè)褂?/p>

SUM函數(shù)計(jì)算所有商店的銷售總額,如果我們希望計(jì)算每一家商店各自的總銷

售額時(shí)該怎么辦呢?要實(shí)現(xiàn)這一目的我們需要做兩件事:首先,我們需要查詢

商店名稱和銷售額兩個(gè)字段;然后,我們使用SQL語言的GROUP BY命令將

銷售額按照不同的商店進(jìn)行分組,從而計(jì)算出不同商店的銷售總額。GROUP

BY命令的語法格式為:

SELECT \"column_name1\", SUM(\"column_name2\")

FROM \"table_name\"

GROUP BY \"column_name1\"

我們可以使用如下命令實(shí)現(xiàn)上述查詢目的:

SELECT store_name, SUM(Sales)

FROM Store_Information

GROUP BY store_name

查詢結(jié)果顯示為:

store_name SUM(Sales)

Los Angeles 00

San Diego 0

Boston 0

小注:

GROUP BY關(guān)鍵字一般應(yīng)用于同時(shí)查詢多個(gè)字段并對(duì)字段進(jìn)行算術(shù)運(yùn)

算的SQL命令中。

HAVING

用戶在使用SQL語言的過程中可能希望解決的另一個(gè)問題就是對(duì)由sum或

其它集合函數(shù)運(yùn)算結(jié)果的輸出進(jìn)行限制。例如,我們可能只希望看到Store_

Information數(shù)據(jù)表中銷售總額超過1500美圓的商店的信息,這時(shí)我們就需要使

用HAVING從句。語法格式為:

SELECT \"column_name1\", SUM(\"column_name2\")

FROM \"table_name\"

GROUP BY \"column_name1\"

HAVING (arithematic function condition)

(GROUP BY從句可選)

由此,我們可以使用如下命令實(shí)現(xiàn)上述查詢目的:

SELECT store_name, SUM(sales)

FROM Store_Information

GROUP BY store_name

HAVING SUM(sales) 1500

查詢結(jié)果顯示為:

store_name SUM(Sales)

Los Angeles 00

小注:

SQL語言中設(shè)定集合函數(shù)的查詢條件時(shí)使用HAVING從句而不是

WHERE從句。通常情況下,HAVING從句被放置在SQL命令的結(jié)尾處。

ALIAS

下面,我們重點(diǎn)介紹一下如何在SQL命令中設(shè)定別名。SQL語言中一般使

用兩種類型的別名,分別為字段別名和數(shù)據(jù)表別名。簡單的說,使用字段別名

可以幫助我們有效的組織查詢的輸出結(jié)果。例如,上文所列舉的多個(gè)實(shí)例中,

當(dāng)我們計(jì)算商店銷售總額時(shí),顯示結(jié)果中就會(huì)出現(xiàn)SUM(sales)。雖然SUM(sales)

并不會(huì)對(duì)我們理解查詢結(jié)果帶來不便,但是如果我們需要在查詢中使用多項(xiàng)復(fù)

雜運(yùn)算時(shí),顯示結(jié)果就不會(huì)這么直觀了。如果這時(shí)我們使用字段別名就會(huì)極大

的提高查詢結(jié)果的可讀性。

對(duì)于數(shù)據(jù)表別名,我們可以通過將別名直接放置在FROM從句中數(shù)據(jù)表名

稱的后面設(shè)定。數(shù)據(jù)表別名在我們下面將要講述的連接多個(gè)數(shù)據(jù)表進(jìn)行查詢的

操作中極為有用。

字段和數(shù)據(jù)表別名的語法格式如下:

SELECT \"table_alias\".\"column_name1\" \"column_alias\"

FROM \"table_name\" \"table_alias\"

即別名都直接放置在各自對(duì)應(yīng)名稱的后面,中間用空格分開。

以Store_Information數(shù)據(jù)表為例,我們可以在GROUP BY一節(jié)中所使用的

SQL命令中設(shè)置如下字段和數(shù)據(jù)表別名:

SELECT A1.store_name \ "Store\", SUM(Sales) \"Total Sales\"

FROM Store_Information A1

GROUP BY A1.store_name

查詢結(jié)果顯示為:

Store Total Sales

Los Angeles 00

San Diego 0

Boston 0

連接多個(gè)數(shù)據(jù)表

最后,我們來看一下如果使用SQL語言連接多個(gè)數(shù)據(jù)表,實(shí)現(xiàn)對(duì)多個(gè)數(shù)據(jù)

表的查詢。為方便講解,我們?cè)跀?shù)據(jù)庫中分別創(chuàng)建了兩個(gè)名為Store_Information

和Region的數(shù)據(jù)表。

Store_Information

Store_Name Sales Date

Los Angeles 00 Jan-10-2000

San Diego 0 Jan-11-2000

Los Angeles 0 Jan-12-2000

Boston 0 Jan-12-2000

Region

Region_Name Store_Name

East Boston

East New York

West Los Angeles

West San Diego

下面,我們就來看一下通過數(shù)據(jù)表的連接實(shí)現(xiàn)按不同區(qū)域查詢銷售額。

我們注意到在名為Region的數(shù)據(jù)表中包含區(qū)域和商店兩個(gè)字段信息,而在名為

Store_Information的數(shù)據(jù)表中則包含每一家商店的銷售信息。因此,為了得到按

區(qū)域劃分的銷售信息,我們需要將兩個(gè)不同數(shù)據(jù)表的信息結(jié)合在一起進(jìn)行查詢.

通過對(duì)上述兩個(gè)數(shù)據(jù)表的分析,我們發(fā)現(xiàn)每個(gè)數(shù)據(jù)表中都包含一個(gè)名為

Store_Name的字段,因此,我們可以使用如下命令實(shí)現(xiàn)查詢目的:

SELECT A1.region_name REGION, SUM(A2.Sales) SALES

FROM Region A1, Store_Information A2

WHERE A1.store_name = A2.store_name

GROUP BY A1.region_name

查詢結(jié)果顯示為:

REGION SALES

East 0

West 50

說明:

上述查詢命令的前兩行用于指定所要查詢的目標(biāo)字段,分別為Region數(shù)據(jù)

表中的Region_Name字段和Store_Information數(shù)據(jù)表中Sales字段的記錄值總

數(shù)。這里,我們?cè)O(shè)定兩個(gè)字段的別名分別為REGION和SALES,兩個(gè)數(shù)據(jù)表的

別名分別為A1和A2。如果我們只使用字段別名而不設(shè)定數(shù)據(jù)表別名的話,上

述SQL命令的第一行就變成如下形式:

SELECT Region.Region_Name REGION, SUM(Store_Information.Sales) SALES

由此我們可以看出有效的使用數(shù)據(jù)表別名,可以極大的簡化對(duì)多個(gè)數(shù)據(jù)表

進(jìn)行操作的SQL命令。

上述查詢命令的第3行為WHERE從句,正是該從句設(shè)定了兩個(gè)數(shù)據(jù)表的

連接條件。因?yàn)槲覀兿M_保Region數(shù)據(jù)表中的Store_Name字段能夠與

Store_Information數(shù)據(jù)表中的同名字段相對(duì)應(yīng),所以我們規(guī)定兩個(gè)字段的記錄

值應(yīng)當(dāng)相等。在連接多個(gè)數(shù)據(jù)表時(shí),一定要準(zhǔn)確設(shè)定數(shù)據(jù)表的連接條件,如果

WHERE從句設(shè)定不正確,則可能導(dǎo)致查詢結(jié)果中出現(xiàn)眾多不相關(guān)的數(shù)據(jù) .

sql語句,有的全要

SELECT --從數(shù)據(jù)庫表中檢索數(shù)據(jù)行和列

INSERT --向數(shù)據(jù)庫表添加新數(shù)據(jù)行

DELETE --從數(shù)據(jù)庫表中刪除數(shù)據(jù)行

UPDATE --更新數(shù)據(jù)庫表中的數(shù)據(jù)

--數(shù)據(jù)定義

CREATE TABLE --創(chuàng)建一個(gè)數(shù)據(jù)庫表

DROP TABLE --從數(shù)據(jù)庫中刪除表

ALTER TABLE --修改數(shù)據(jù)庫表結(jié)構(gòu)

CREATE VIEW --創(chuàng)建一個(gè)視圖

DROP VIEW --從數(shù)據(jù)庫中刪除視圖

CREATE INDEX --為數(shù)據(jù)庫表創(chuàng)建一個(gè)索引

DROP INDEX --從數(shù)據(jù)庫中刪除索引

CREATE PROCEDURE --創(chuàng)建一個(gè)存儲(chǔ)過程

DROP PROCEDURE --從數(shù)據(jù)庫中刪除存儲(chǔ)過程

CREATE TRIGGER --創(chuàng)建一個(gè)觸發(fā)器

DROP TRIGGER --從數(shù)據(jù)庫中刪除觸發(fā)器

CREATE SCHEMA --向數(shù)據(jù)庫添加一個(gè)新模式

DROP SCHEMA --從數(shù)據(jù)庫中刪除一個(gè)模式

CREATE DOMAIN --創(chuàng)建一個(gè)數(shù)據(jù)值域

ALTER DOMAIN --改變域定義

DROP DOMAIN --從數(shù)據(jù)庫中刪除一個(gè)域

--數(shù)據(jù)控制

GRANT --授予用戶訪問權(quán)限

DENY --拒絕用戶訪問

REVOKE --解除用戶訪問權(quán)限

--事務(wù)控制

COMMIT --結(jié)束當(dāng)前事務(wù)

ROLLBACK --中止當(dāng)前事務(wù)

SET TRANSACTION --定義當(dāng)前事務(wù)數(shù)據(jù)訪問特征

--程序化SQL

DECLARE --為查詢?cè)O(shè)定游標(biāo)

EXPLAN --為查詢描述數(shù)據(jù)訪問計(jì)劃

OPEN --檢索查詢結(jié)果打開一個(gè)游標(biāo)

FETCH --檢索一行查詢結(jié)果

CLOSE --關(guān)閉游標(biāo)

PREPARE --為動(dòng)態(tài)執(zhí)行準(zhǔn)備SQL 語句

EXECUTE --動(dòng)態(tài)地執(zhí)行SQL 語句

DESCRIBE --描述準(zhǔn)備好的查詢

---局部變量

declare @id char(10)

--set @id = '10010001'

select @id = '10010001'

---全局變量

---必須以@@開頭

--IF ELSE

declare @x int @y int @z int

select @x = 1 @y = 2 @z=3

if @x @y

print 'x y' --打印字符串'x y'

else if @y @z

print 'y z'

else print 'z y'

--CASE

use pangu

update employee

set e_wage =

case

when job_level = ’1’ then e_wage*1.08

when job_level = ’2’ then e_wage*1.07

when job_level = ’3’ then e_wage*1.06

else e_wage*1.05

end

--WHILE CONTINUE BREAK

declare @x int @y int @c int

select @x = 1 @y=1

while @x 3

begin

print @x --打印變量x 的值

while @y 3

begin

select @c = 100*@x + @y

print @c --打印變量c 的值

select @y = @y + 1

end

select @x = @x + 1

select @y = 1

end

--WAITFOR

--例 等待1 小時(shí)2 分零3 秒后才執(zhí)行SELECT 語句

waitfor delay ’01:02:03’

select * from employee

--例 等到晚上11 點(diǎn)零8 分后才執(zhí)行SELECT 語句

waitfor time ’23:08:00’

select * from employee

***SELECT***

select *(列名) from table_name(表名) where column_name operator value

ex:(宿主)

select * from stock_information where stockid = str(nid)

stockname = 'str_name'

stockname like '% find this %'

stockname like '[a-zA-Z]%' --------- ([]指定值的范圍)

stockname like '[^F-M]%' --------- (^排除指定范圍)

--------- 只能在使用like關(guān)鍵字的where子句中使用通配符)

or stockpath = 'stock_path'

or stocknumber 1000

and stockindex = 24

not stocksex = 'man'

stocknumber between 20 and 100

stocknumber in(10,20,30)

order by stockid desc(asc) --------- 排序,desc-降序,asc-升序

order by 1,2 --------- by列號(hào)

stockname = (select stockname from stock_information where stockid = 4)

--------- 子查詢

--------- 除非能確保內(nèi)層select只返回一個(gè)行的值,

--------- 否則應(yīng)在外層where子句中用一個(gè)in限定符

select distinct column_name form table_name --------- distinct指定檢索獨(dú)有的列值,不重復(fù)

select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_name

select stockname , "stocknumber" = count(*) from table_name group by stockname

--------- group by 將表按行分組,指定列中有相同的值

having count(*) = 2 --------- having選定指定的組

select *

from table1, table2

where table1.id *= table2.id -------- 左外部連接,table1中有的而table2中沒有得以null表示

table1.id =* table2.id -------- 右外部連接

select stockname from table1

union [all] ----- union合并查詢結(jié)果集,all-保留重復(fù)行

select stockname from table2

***insert***

insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")

value (select Stockname , Stocknumber from Stock_table2)---value為select語句

***update***

update table_name set Stockname = "xxx" [where Stockid = 3]

Stockname = default

Stockname = null

Stocknumber = Stockname + 4

***delete***

delete from table_name where Stockid = 3

truncate table_name ----------- 刪除表中所有行,仍保持表的完整性

drop table table_name --------------- 完全刪除表

***alter table*** --- 修改數(shù)據(jù)庫表結(jié)構(gòu)

alter table database.owner.table_name add column_name char(2) null .....

sp_help table_name ---- 顯示表已有特征

create table table_name (name char(20), age smallint, lname varchar(30))

insert into table_name select ......... ----- 實(shí)現(xiàn)刪除列的方法(創(chuàng)建新表)

alter table table_name drop constraint Stockname_default ---- 刪除Stockname的default約束

***function(/*常用函數(shù)*/)***

----統(tǒng)計(jì)函數(shù)----

AVG --求平均值

COUNT --統(tǒng)計(jì)數(shù)目

MAX --求最大值

MIN --求最小值

SUM --求和

--AVG

use pangu

select avg(e_wage) as dept_avgWage

from employee

group by dept_id

--MAX

--求工資最高的員工姓名

use pangu

select e_name

from employee

where e_wage =

(select max(e_wage)

from employee)

--STDEV()

--STDEV()函數(shù)返回表達(dá)式中所有數(shù)據(jù)的標(biāo)準(zhǔn)差

--STDEVP()

--STDEVP()函數(shù)返回總體標(biāo)準(zhǔn)差

--VAR()

--VAR()函數(shù)返回表達(dá)式中所有值的統(tǒng)計(jì)變異數(shù)

--VARP()

--VARP()函數(shù)返回總體變異數(shù)

----算術(shù)函數(shù)----

/***三角函數(shù)***/

SIN(float_expression) --返回以弧度表示的角的正弦

COS(float_expression) --返回以弧度表示的角的余弦

TAN(float_expression) --返回以弧度表示的角的正切

COT(float_expression) --返回以弧度表示的角的余切

/***反三角函數(shù)***/

ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表示的角

ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表示的角

ATAN(float_expression) --返回正切是FLOAT 值的以弧度表示的角

ATAN2(float_expression1,float_expression2)

--返回正切是float_expression1 /float_expres-sion2的以弧度表示的角

DEGREES(numeric_expression)

--把弧度轉(zhuǎn)換為角度返回與表達(dá)式相同的數(shù)據(jù)類型可為

--INTEGER/MONEY/REAL/FLOAT 類型

RADIANS(numeric_expression) --把角度轉(zhuǎn)換為弧度返回與表達(dá)式相同的數(shù)據(jù)類型可為

--INTEGER/MONEY/REAL/FLOAT 類型

EXP(float_expression) --返回表達(dá)式的指數(shù)值

LOG(float_expression) --返回表達(dá)式的自然對(duì)數(shù)值

LOG10(float_expression)--返回表達(dá)式的以10 為底的對(duì)數(shù)值

SQRT(float_expression) --返回表達(dá)式的平方根

/***取近似值函數(shù)***/

CEILING(numeric_expression) --返回=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為

--INTEGER/MONEY/REAL/FLOAT 類型

FLOOR(numeric_expression) --返回=表達(dá)式的最小整數(shù)返回的數(shù)據(jù)類型與表達(dá)式相同可為

--INTEGER/MONEY/REAL/FLOAT 類型

ROUND(numeric_expression) --返回以integer_expression 為精度的四舍五入值返回的數(shù)據(jù)

--類型與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型

ABS(numeric_expression) --返回表達(dá)式的絕對(duì)值返回的數(shù)據(jù)類型與表達(dá)式相同可為

--INTEGER/MONEY/REAL/FLOAT 類型

SIGN(numeric_expression) --測(cè)試參數(shù)的正負(fù)號(hào)返回0 零值1 正數(shù)或-1 負(fù)數(shù)返回的數(shù)據(jù)類型

--與表達(dá)式相同可為INTEGER/MONEY/REAL/FLOAT 類型

PI() --返回值為π 即3.1415926535897936

RAND([integer_expression]) --用任選的[integer_expression]做種子值得出0-1 間的隨機(jī)浮點(diǎn)數(shù)

----字符串函數(shù)----

ASCII() --函數(shù)返回字符表達(dá)式最左端字符的ASCII 碼值

CHAR() --函數(shù)用于將ASCII 碼轉(zhuǎn)換為字符

--如果沒有輸入0 ~ 255 之間的ASCII 碼值CHAR 函數(shù)會(huì)返回一個(gè)NULL 值

LOWER() --函數(shù)把字符串全部轉(zhuǎn)換為小寫

UPPER() --函數(shù)把字符串全部轉(zhuǎn)換為大寫

STR() --函數(shù)把數(shù)值型數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù)

LTRIM() --函數(shù)把字符串頭部的空格去掉

RTRIM() --函數(shù)把字符串尾部的空格去掉

LEFT(),RIGHT(),SUBSTRING() --函數(shù)返回部分字符串

CHARINDEX(),PATINDEX() --函數(shù)返回字符串中某個(gè)指定的子串出現(xiàn)的開始位置

SOUNDEX() --函數(shù)返回一個(gè)四位字符碼

--SOUNDEX函數(shù)可用來查找聲音相似的字符串但SOUNDEX函數(shù)對(duì)數(shù)字和漢字均只返回0 值

DIFFERENCE() --函數(shù)返回由SOUNDEX 函數(shù)返回的兩個(gè)字符表達(dá)式的值的差異

--0 兩個(gè)SOUNDEX 函數(shù)返回值的第一個(gè)字符不同

--1 兩個(gè)SOUNDEX 函數(shù)返回值的第一個(gè)字符相同

--2 兩個(gè)SOUNDEX 函數(shù)返回值的第一二個(gè)字符相同

--3 兩個(gè)SOUNDEX 函數(shù)返回值的第一二三個(gè)字符相同

--4 兩個(gè)SOUNDEX 函數(shù)返回值完全相同

QUOTENAME() --函數(shù)返回被特定字符括起來的字符串

/*select quotename('abc', '{') quotename('abc')

運(yùn)行結(jié)果如下

----------------------------------{

{abc} [abc]*/

REPLICATE() --函數(shù)返回一個(gè)重復(fù)character_expression 指定次數(shù)的字符串

/*select replicate('abc', 3) replicate( 'abc', -2)

運(yùn)行結(jié)果如下

----------- -----------

abcabcabc NULL*/

REVERSE() --函數(shù)將指定的字符串的字符排列順序顛倒

REPLACE() --函數(shù)返回被替換了指定子串的字符串

/*select replace('abc123g', '123', 'def')

運(yùn)行結(jié)果如下

----------- -----------

abcdefg*/

SPACE() --函數(shù)返回一個(gè)有指定長度的空白字符串

STUFF() --函數(shù)用另一子串替換字符串指定位置長度的子串

----數(shù)據(jù)類型轉(zhuǎn)換函數(shù)----

CAST() 函數(shù)語法如下

CAST() (expression AS data_ type[ length ])

CONVERT() 函數(shù)語法如下

CONVERT() (data_ type[ length ], expression [, style])

select cast(100+99 as char) convert(varchar(12), getdate())

運(yùn)行結(jié)果如下

------------------------------ ------------

199 Jan 15 2000

----日期函數(shù)----

DAY() --函數(shù)返回date_expression 中的日期值

MONTH() --函數(shù)返回date_expression 中的月份值

YEAR() --函數(shù)返回date_expression 中的年份值

DATEADD(datepart ,number ,date)

--函數(shù)返回指定日期date 加上指定的額外日期間隔number 產(chǎn)生的新日期

DATEDIFF(datepart ,number ,date)

--函數(shù)返回兩個(gè)指定日期在datepart 方面的不同之處

DATENAME(datepart , date) --函數(shù)以字符串的形式返回日期的指定部分

DATEPART(datepart , date) --函數(shù)以整數(shù)值的形式返回日期的指定部分

GETDATE() --函數(shù)以DATETIME 的缺省格式返回系統(tǒng)當(dāng)前的日期和時(shí)間

----系統(tǒng)函數(shù)----

APP_NAME() --函數(shù)返回當(dāng)前執(zhí)行的應(yīng)用程序的名稱

COALESCE() --函數(shù)返回眾多表達(dá)式中第一個(gè)非NULL 表達(dá)式的值

COL_LENGTH('table_name', 'column_name') --函數(shù)返回表中指定字段的長度值

COL_NAME(table_id, column_id) --函數(shù)返回表中指定字段的名稱即列名

DATALENGTH() --函數(shù)返回?cái)?shù)據(jù)表達(dá)式的數(shù)據(jù)的實(shí)際長度

DB_ID(['database_name']) --函數(shù)返回?cái)?shù)據(jù)庫的編號(hào)

DB_NAME(database_id) --函數(shù)返回?cái)?shù)據(jù)庫的名稱

HOST_ID() --函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱

HOST_NAME() --函數(shù)返回服務(wù)器端計(jì)算機(jī)的名稱

IDENTITY(data_type[, seed increment]) [AS column_name])

--IDENTITY() 函數(shù)只在SELECT INTO 語句中使用用于插入一個(gè)identity column列到新表中

/*select identity(int, 1, 1) as column_name

into newtable

from oldtable*/

ISDATE() --函數(shù)判斷所給定的表達(dá)式是否為合理日期

ISNULL(check_expression, replacement_value) --函數(shù)將表達(dá)式中的NULL 值用指定值替換

ISNUMERIC() --函數(shù)判斷所給定的表達(dá)式是否為合理的數(shù)值

NEWID() --函數(shù)返回一個(gè)UNIQUEIDENTIFIER 類型的數(shù)值

NULLIF(expression1, expression2)

--NULLIF 函數(shù)在expression1 與expression2 相等時(shí)返回NULL 值若不相等時(shí)則返回expression1 的值

--------------------------------------------------------------------------------

sql中的保留字

action add aggregate all

alter after and as

asc avg avg_row_length auto_increment

between bigint bit binary

blob bool both by

cascade case char character

change check checksum column

columns comment constraint create

cross current_date current_time current_timestamp

data database databases date

datetime day day_hour day_minute

day_second dayofmonth dayofweek dayofyear

dec decimal default delayed

delay_key_write delete desc describe

distinct distinctrow double drop

end else escape escaped

enclosed enum explain exists

fields file first float

float4 float8 flush foreign

from for full function

global grant grants group

having heap high_priority hour

hour_minute hour_second hosts identified

ignore in index infile

inner insert insert_id int

integer interval int1 int2

int3 int4 int8 into

if is isam join

key keys kill last_insert_id

leading left length like

lines limit load local

lock logs long longblob

longtext low_priority max max_rows

match mediumblob mediumtext mediumint

middleint min_rows minute minute_second

modify month monthname myisam

natural numeric no not

null on optimize option

optionally or order outer

outfile pack_keys partial password

precision primary procedure process

processlist privileges read real

references reload regexp rename

replace restrict returns revoke

rlike row rows second

select set show shutdown

smallint soname sql_big_tables sql_big_selects

sql_low_priority_updates sql_log_off sql_log_update sql_select_limit

sql_small_result sql_big_result sql_warnings straight_join

starting status string table

tables temporary terminated text

then time timestamp tinyblob

tinytext tinyint trailing to

type use using unique

unlock unsigned update usage

values varchar variables varying

varbinary with write when

where year year_month zerofill


分享標(biāo)題:nosql入門語句,nosql使用
當(dāng)前網(wǎng)址:http://weahome.cn/article/hccsdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部