Java資料進階知識(一)資料庫簡介及SQL基礎語法
Java資料進階知識(一)資料庫簡介及SQL基礎語法
一、資料庫簡介
1.資料庫介紹
資料庫是什麼? 資料庫是一個儲存、管理資料的倉庫
2.資料庫的分類
- 關係型資料庫
什麼是關係型資料庫?關係型資料庫不僅僅可以儲存資料,還可以儲存資料與資料之間的關係 比如訂單資料和商品資料。
常用的關係型資料庫:
1.Mysql
2.Oracle
3.Sqlserver - 非關係型資料庫
什麼是非關係型資料庫? 僅僅用來存放資料,不能儲存資料與資料之間的關係
常見的非關係型資料庫:
1.Redis
2.Memcache
3.Hbase
4.MongoDB
注:非關係型資料的出現是對關係型資料的一個良好的補充,非關係型資料的出現不是為了去取代關係型資料庫,而是作為關係型資料的一個補充。
意思是有些活 關係型資料並不擅長 就讓非關係型資料去幹
因為關係型資料庫基本都是吧資料儲存到磁碟上的,那麼就會有訪問資料比較慢的問題,當關系型資料庫遇到資料訪問量比較高的場景是 就會出現一定的侷限性。這時,就可以採用非關係型資料庫,非關係型資料都是把資料儲存到記憶體中,記憶體中的資料訪問是比較快的
二、SQL簡介
SQL:結構化查詢語言。SQL是SQL標準委員會制定的一套操作關係型資料庫的一個標準,和Java一樣,是一門語言。
1.SQL語法
在SQL語法中,SQL是由一個個關鍵字組成的語句,在這語句中嗎,有關鍵字,也有使用者自己定義的庫名、表名、列名(欄位名)、資料。 其中關鍵字是不區分大小寫的。
建議:在sql語句中,都使用小寫(小寫比大寫的可讀性更高)
2.庫的操作
1. 建立:create database dbname(character set utf8 collate utf8_bin 此處為指定資料庫字符集與校對規則)
2. 刪除:drop database dbname
3. 修改:
- SQL標準語法支援修改資料庫的名字
- 修改資料庫字符集與校對規則 alter database dbname character set utf8 collate utf8_bin
4.查詢:
- 查詢所有資料庫 show databases
- 查詢對應庫的建表語句 show create database dbname
3.表的操作
- 建立:
create table tableName( id int, name varchar(20), gender char(6), birthday date, entry_date date, job varchar(20), salary double(10,2), resume text )character set utf8 collate utf8_bin;
2.刪除:drop table tableName
3.修改:
- 修改表名
rename table oldtablename to newtablename
- 修改表的字符集
alter table tablename character set xxx collate xxxx
- 修改列
- 增加列
alter table tablename add columnname int
- 刪除列
alter table tablename drop columnname
- 修改列的型別
alter table tablename modify columnname float(4,2)
- 重新命名列
alter table tablename change oldcolumn newcolumn int
- 增加列
4.查詢:
- 查詢所有表
show tables
- 查詢表結構
desc tablename
- 查詢建表語句
show creata table
- 注意: 當我們需要使用一些關鍵字來做 表名、列名、資料庫名的時候,需要使用''符號把對應的名字包起來,表示是一個存文字
4.資料的操作
1.增加
- 插入單行資料
insert into tableName values (xxx,xxxx,xxx)
- 插入多行資料
insert into tableName values (xxxx,xxxx,xxx),(xxx,xxx,xxx)
- 插入指定列的資料
insert into tableName (columnName1,columnName2) values (xxx,xxxx)
2.刪除 delete from tableName where xxx=xxx
3.修改 update tableName set columnName = 'xxx' where xx=xx
4.查詢 select * from tableName
5.關鍵字
1.where
where其實就是篩選的意思,可以幫助我們找到符合條件的指定的資料,where後面可以跟各種判別式。
那麼,where是如何查詢的呢?
在不考慮表中索引的情況下,where判別條件會根據表中的一行一行的資料進行查詢,如果當某行符合我們的where判別條件就保留下來,然後查詢下一行,如果不符合就捨棄,直至到最後一行。
2.distinct 過濾掉結果集中相同的兩個資料 (去重)
3.limit 限制結果集 select * from t_students limit 4,2 表示從第四行開啟取 取兩行資料
limit 的作用:可以幫助我們來進行資料的分頁 select * from tableName limit (pageNo-1)*pageSize,pageSize (頁碼:pageNo 頁的大小:pageSize)
4.其他關鍵字
AS :別名
order by :排序
group by:分組
group_concat(xxx)
5.聚合函式
having:與group by放在一起使用 篩選資料
count:計數
max:最大值
min:最小值
avg:平均值
sum:求和
6.資料庫設計
1.資料庫設計三大正規化
第一正規化
原子性:表中資料都是不可分割的最小單元
第二正規化
一致性:記錄的唯一性,每一條記錄都應該有唯一的標識,比如主鍵。
第三正規化
資料不要冗餘
注:冗餘的資料會使資料的維護成本增加,同時在某些場景中,冗餘的資料可能會方便資料的查詢,假如資料的查詢遠大於增刪改的需求,那麼可以考慮資料的冗餘 否則不應該冗餘。這種冗餘資料的做法叫做“反正規化化設計”
7.多表查詢
連線查詢
- 交叉連線:cross join 交叉連線其實就是求多個表的笛卡爾積 並沒有實際的作用意義。
- 內連線 innor join 內連線分為顯示內連線和隱式內連線兩種
- 外連線 outer join
- 左外連線 left outer join 在內連線的結果的基礎上,會去和左表做並集,會全部保留左表的資料
- 右外連線 right outrt join 在內連線的結果的基礎上,會去和右表做並集,會完全保留右表的資料
-
outer 可以省略
連線查詢最重要的是找到連線條件!
子查詢
子查詢又稱巢狀查詢,是指,一個sql語句的結果可以作為另一個sql語句的條件。
聯合查詢
union / union all 拼接多個sql語句 要求:每個sql語句查詢出的臨時表的 列名與資料型別要一致
菜鳥程式設計師的總結與複習 僅供參考