一、基本概念 ——後續的內容將會記錄作者在計科學習內容 DB(資料庫):存儲數據的倉庫,數據是有組織進行存儲 DBMS(資料庫管理系統):操縱和管理資料庫的大型軟體 SQL:操縱關係資料庫的編程語言,是一套標準 有Mysql,Oracle,SQLSever,PostgreSQl RDBMS(關係型數 ...
一、基本概念
——後續的內容將會記錄作者在計科學習內容
- DB(資料庫):存儲數據的倉庫,數據是有組織進行存儲
- DBMS(資料庫管理系統):操縱和管理資料庫的大型軟體
- SQL:操縱關係資料庫的編程語言,是一套標準
- 有Mysql,Oracle,SQLSever,PostgreSQl
-
RDBMS(關係型資料庫):建立在關係模型基礎上,有多張相互連接的二維表組成的資料庫
特點:
- 使用表存儲數據,格式統一,便於維護
- 使用sql語句操作,標準統一,使用方便
SQL的通用語法:
- SQL語句可以單行或者多行書寫,以分號結尾
- SQL語句可以使用空格/縮進來增強語句的可讀性
- Mysql資料庫的SQL語句部分區分大小寫,關鍵詞建議使用大些
- 註釋:單行註釋--註釋內容或# ;多行註釋/* */
SQL的分類:
- DDL:數據定義語言,定義數據對象(資料庫,表欄位)
- DML:數據操作語言,對資料庫表中的數據進行增刪改
- DQL:數據查詢語句,查詢資料庫中表的記錄
- DCL:數據控制語言,用來創建數據用戶,控制DB的訪問許可權
二、操作
DDL操作:(所用軟體DataGrip)
- 查詢:
- 查詢所有資料庫:
Show databases;
- 查詢當前資料庫:
Select database ();
- 創建:
Creat database [if not exists]資料庫名 [default charset 字元集] [collate排序規則];
- 查詢所有資料庫:
-
- 刪除:
drop database[if exists]資料庫名;
- 使用:
use 數據名;
- 刪除:
- DDL表操作——查詢
- 查詢當前資料庫所有的表:
Show tables;
- 查詢表結構:
desc 表名;
- 查詢指定表的建表語句:
Show create table 表名;
DDL——表操作——創建:
-
Create table 表名( 欄位1 欄位1類型[comment 欄位1註釋], 欄位2 欄位2類型[comment 欄位2註釋] )[comment 欄位註釋];
字元串類型:
- char(10):性能好
- varchar(10):性能較差
- 例如:用戶名 user name varchar(50)
- 例如:性別 gender char (1)
- 查詢當前資料庫所有的表:
- DDL——表操作——修改
- 添加欄位:
Alter table 表名 add 欄位名 類型(長度)[comment註釋][約束]
- 修改數據類型:
Alter table 表名 modify 欄位名 新數據類型(類型)
- 修改欄位名和欄位類型:
Alter table 表名 change 舊欄位名 新欄位名 類型(長度)[comment註釋][約束]
- 刪除欄位:
Alter table 表名 drop 欄位名;
- 修改表名:
Alter table 表名 rename to 新表名;
- 添加欄位:
- DDL表操作——刪除
- 刪除表:
drop table [if exsits]表名;
- 刪除指定表,並重新創建該表:
truncate table 表名;
- 刪除表:
DML:用來對資料庫中表的數據記錄進行增刪改操作
- 給指定欄位添加數據:
Insert into 表名 (欄位名1,欄位名2...)Values(值1,值2...);
- 給全部欄位添加數據:
Insert into 表名 values(值1,值2...);
- 批量添加數據:
Insert into 表名(欄位名1,欄位名2)values(值1,值2...),(值1,值2...); Insert into 表名 values(值1,值2...),(值1,值2...);
- 註意:插入數據時,指定的欄位順序需要與值的順序是一一對應的。
- 字元串和日期數據應該包含在引號內
- 插入的數據大小,應該在欄位的規定範圍
DML:修改數據
update 表名 set 欄位名1=值1,欄位名2=值2,...[where條件];
刪除數據:
delete from 表名[where 條件];
DQL:用來查詢庫中表的記錄
- select欄位列表
- from表名列表
- where條件列表
- group by分組欄位列表
- having分組後條件列表
- order by排序欄位列表
- limit分頁參數
- 查詢多個欄位
select 欄位1,欄位2...from 表名; select *from 表名;
- 設置別名
select 欄位1 [As 別名1],欄位1 [As 別名1]...from 表名;
- 去除重覆記錄
select distinct 欄位列表 from 表名;
> >= < <= = <>或!= between...and在某個範圍之內(含最小值,最大值) in(...)在in之後的列表中的值,多選一 Like 占位符,模糊匹配(匹配單個字元,%匹配任意字元) : select * from 表名where name Like '%666' is Null是Null and或&& OR或|| NOT或!
聚合函數:將一列數據作為一個整體,進行縱向計算
- 常見的聚合函數
- count統計數量
- max最大值
- min最小值
- avg平均值
- sum求和
select 聚合函數(欄位列表) from 表名; select count(*) from employee;
分組查詢
- 語法:
select 欄位列表 from 表名 [where條件] group by 分組欄位名[having 分組後過濾條件];
where與having區別
- 執行時機不同:where是分組之前進行過濾,不滿足where條件,不參與分組,而having 是分組後對結果進行過濾。
- 判斷條件不同:where不能對聚合函數進行判斷,having可以
1例如,根據性別分組,統計男性員工和女性員工的數量 select gender count(*) from employment group by gender;
2例如,根據性別分組,統計男性員工和女性員工的平均年齡 select gender avg(age) from employee group by gender
3例如,年齡小於45的員工,並根據工作地址分組,獲取員工數大於等於3的工作地址 select count(*) from employee where age<45 group by workdress having count(*)>=3
註意:
- 執行順序:where>聚合函數>having
- 分組之後,查詢的欄位一般為聚合函數和分組欄位
- 查詢其他欄位無任何意義
DQL-排序查詢
- 語法:
select 欄位列表 from 表名 order by 欄位1 排序方式1,欄位2,排序方式2;
- 排序方式:
- ASC:升序(預設值)
- DESC:降序
- 註意:如果是在多欄位排序,當第一個欄位值相同時,才會根據第二個欄位進行排 例如:select * from employee order by age asc; DQL——分頁查詢
- 語法:
select 欄位列表 from 表名 limit 啟始索引,查詢記錄數;
- 註意:
- 啟始索引從0開始,啟始索引=(查詢頁碼-1)*每頁顯示記錄數
- 分頁查詢是資料庫的方言,不同的資料庫有不同的實現,如果查詢的第一頁數據,其實索引可以省略,直接簡寫limit 10
- 語法: