NoSQL數(shù)據(jù)庫有很多種,實現(xiàn)方式差別很大。有接近SQL查詢方式的,也有純粹的鍵值對查詢。
創(chuàng)新互聯(lián)是專業(yè)的繁峙網(wǎng)站建設公司,繁峙接單;提供網(wǎng)站設計制作、做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行繁峙網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!
對于K-V型數(shù)據(jù)庫,比較典型的是Redis,系統(tǒng)提供了get、set之類的命令用于增刪改查。關鍵是鍵值對的鍵和值怎么設計。
參考這個鏈接: 應該能解決的。
我正在努力看懂...............
試一下下面代碼看看
select WPRO_NAME,CS_PRICE+WS_PRICE --CONT_NO ,CONT_VER 這兩列我不要了
INTO #ProgrectDetail
from CS_COST_DETAIL where FTY_ID='mk5' and CONT_NO='GWCH-14-AK084' and COST_VER=0
DECLARE @sql VARCHAR(1000), @distinct_val VARCHAR(500) ;
SET @sql = 'SELECT * FROM #ProgrectDetail PIVOT(SUM(PRICE) FOR [WPRO_NAME] IN (' ;
SET @distinct_val = (SELECT STUFF(( SELECT DISTINCT ',' + [WPRO_NAME] FROM #ProgrectDetail FOR XML PATH('')), 1, 1, '')) ;
SET @sql = @sql + @distinct_val + '))' + ' p'
EXEC(@sql)
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ù)庫驅動
//由于長時間不寫,驅動名和URL都忘記了,不知道對不對,你應該知道的,自己改一下的哈
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語句的對象
Statement st = conn.createStatement();
// 執(zhí)行sql
String sql = "select * from users";
ResultSet rs = st.executeQuery(sql);
// 處理結果
while(rs.next()){
//這個地方就是給你的封裝類屬性賦值
System.out.println("UserName:"+rs.getString(0));
}
// 關閉連接
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 {
//步驟還是那六個步驟,前邊的兩步是一樣的
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語句的對象是PreparedStatement,成為預處理sql對象,因為按條件刪除是需要不定值的
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("刪除成功!");
}
// 關閉連接
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都有自己的語法。跟t-sql類數(shù)據(jù)庫的方式類似。但。不是用sql語句。而是他自身定義的讀取語句
想法1
先查詢出以每個部門為單位,有多少人工資低于3000 以及 低于3000的人數(shù) 順便把部門ID也帶出來,以備后用
select sum(salary),count(id),dep_id from yuangong where salary3000 group by dep_id
然后,將上面查詢出來的結果進行加工,得出最后結論
select
bumen.dep_name,
a.renshu,
a.money/a.renshu
from
bumen,
(select sum(salary) as money,count(id) as renshu,dep_id from yuangong where salary3000 group by dep_id) a
where
a.dep_id = bumen.id
想法呢是這個想法,
想法2
先把所有的部門,工資少許8000 的數(shù)據(jù)找出來
select
bumen.dep_name,
yuangong.*
from
bumen,
yuangong
where
yuangong.salary3000 and
yuangong.dep_id = bumen.id
然后對上面的數(shù)據(jù)進行分類加工,
分類的依據(jù)是部門id 或者部門名字(group by bumen.dep_name)
select
bumen.dep_name,
count(yuangong.id),
sum(yuangong.salary)/count(yuangong.id)
from
bumen,
yuangong
where
yuangong.salary3000 and
yuangong.dep_id = bumen.id
group by bumen.dep_name
一樣是數(shù)據(jù)庫
NOSQL查詢速度快,但是占用空間也大(都去索引那邊了)
但是NOSQL查詢復雜的邏輯關系的時候,只能批量獲取到本地去統(tǒng)計而SQL能通過條件和關聯(lián)表等方式進行篩選只顯示符合條件的語句。
NOSQL用于無條件或少條件下的存取。百億級數(shù)據(jù)也能快速取出。
SQL用于復雜的邏輯存取。在數(shù)據(jù)量不多的情況下也能跟NOSQL一樣用于數(shù)據(jù)存儲。