數據庫——(7)數據高級操作

新增數據
基本語法:insert into 表名[(字段列表)] values(值列表);
當主鍵存在衝突的時候,可以選擇性的進行處理:更新和替換。
主鍵衝突:更新操作
insert into 表名[(字段列表:包含主鍵字段)] values(值列表) on duplicate key update 字段=新值;
主鍵衝突:替換
Replace into 表名[(字段列表:包含主鍵)] values(值列表);

蠕蟲複製
蠕蟲複製:從已有的數據中去獲取數據,然後將數據又進行新增操作:數據成倍的參加。
表創建的高級操作:從已有表創建新表(複製表結構):create table 表名 like 數據庫.表名;(只複製表結構,不復制數據)
蠕蟲複製:先查出數據,然後將查出的數據新增一遍。
insert into 表名[(字段列表)] select 字段列表/*from 數據表名;

蠕蟲複製的意義:
1.從已有表拷貝數據到新表中
2.迅速的讓表中數據膨脹到一定數量級:測試表的壓力和效率。

更新數據
基本語法:update 表名 set 字段 = 值[where 條件];
高級新增語法:update 表名 set 字段 = 值[where 條件] [limit更新數量];

刪除數據
與更新類型:可以通過limit來限制數量。
delete from 表名 [where條件][limit數量];

注意:刪除時如果存在主鍵自增長,刪除後,自增長不會還原。只能刪除表後重新建表。
truncate 表名; – –先刪除改變,後新增改變。危險不建議用。

查詢數據
基本語法:select 字段列表/* from 表名 [where 條件];
完整語法:select[select選項] 字段列表[字段別名]/* from 數據源[where 條件字句][group by字句][having 字句][order by 字句][limit 字句];

1)select選項:select對查出來的結果的處理方式

1.All:默認的,保留所有結果。
2.Distinct:去重,查出來的結果,將重複給去除(所有字段都相同)。

2)別名語法: 字段名 [as] 別名
3)數據源:數據的來源,分爲單表數據源、多表數據源、查詢語句。

單表數據源:select * from 表名;
多表數據源:select * from 表名1 表名2;-- --查詢結果稱爲笛卡兒積(交叉查詢),儘量避免。
子查詢:select*from(select 語句)as 別名;

4)where字句:返回結果:0和1

運算符:>,<,>=,<=,!=,<>,like,betweent and,in/not in
邏輯運算符:&&(and),||(or),!(not)

where原理:where是唯一一個直接從磁盤獲取數據的時候就開始判斷的條件:從磁盤取出一條紀錄,開始進行where判斷,成功就保存到內存,失敗就直接放棄。
5)group by字句:根據某個字段進行分組(相同的放一組,不同的放到不同的組)。
分組的意義:爲了統計數據(按分組字段進行數據統計)。
SQL提供了一系列統計函數:
Count():統計總記錄數:函數裏可以有兩種參數。count(*)代表全部,count(字段)
Max():統計最大值
Min():統計最小值
Avg():統計平均值
Sum():統計和
分組會自動排序:根據分組字段:默認升序
多字段分組:先根據一個字段進行分組,然後對分組後的結果再次按照其他字段進行分組。

select c_id,sex,count(*) from my_stu group by c_id,sex;

有一個函數可以對分組後的結果中的某個字段進行字符串連接(保留該組所有的某個字段):group_concat(字段);

select c_id,sex,count(*),group_concat(score) from my_stu group by c_id,sex;

回溯統計:with rollup:任何一個分組後都會有一個小組,最後都需要向上級分組進行彙報統計。

select c_id,sex,count(*)from my_stu group by c_id,sex with rollup;

5)having字句:與where字句一樣進行條件判斷
區別:

1.where是針對磁盤數據進行判斷:進入內存後若進行分組操作,分組結果需要用having來處理。
2.having能做where能做的幾乎所有事情,但是where卻不能做having能做的很多事情。
3.having能夠使用字段別名,where不能。

6)order by字句:排序,根據某個字段升序或者降序,依賴校對集。
基本語法:order by 字段名[asc/desc];

select c_id,count(*)from my_stu group by c_id having count(*)>=2;

7)limit字句:限制結果的語句
有兩種使用方式:
方案1:只用來限制長度(數據量):limit 數據量;

select * from my_stu limit 2;

方案2:限制起始位置,限制數量:limit 起始位置,長度;

select * from my_stu limit 2,2;

方案2主要用來實現數據的分頁,爲用戶節省時間,提高服務器的響應效率,減少資源的浪費。

對於用戶來講:可以點擊分頁按鈕:1,2,3,4
對於服務器來講:根據用戶選擇的頁面來獲取不同的數據:limit offset,length;
Length:每頁顯示的數據量:基本不變。。
Offset:offset=(頁面-1)*每頁顯示量。
發佈了38 篇原創文章 · 獲贊 2 · 訪問量 9701
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章