????????上一章我們了解了對表及庫的基本增刪查改操作,本章我們針對增刪查改內容進行與一些拓展,
9.1字段修飾及數據類型
????????我們之前在創建表時用到的格式為:
create table 表名 ( 字段名1 字段數據類型(數據類型長度), 字段名2 字段數據類型(數據類型長度), 字段名3 字段數據類型(數據類型長度), 字段名4 字段數據類型(數據類型長度), )
????????其實這個格式較為簡單,僅僅定義了數據類型,但是大部分情況下無法只能通過數據類型來定義字段。因此我們可以拓展一下,在數據類型之后加上字段修飾,字段修飾有以下幾個主要內容:
- unsigned:表示的數字是無符號數字(只能是正數)
- null:這個字段可以為空
- not null:這個字段不可以為空
- primary key:主鍵,用來唯一標識表中的一條記錄(主鍵的內容不能重復)
- auto_increment:設置主鍵自增
- default:設置字段的默認值
我們來一個個講解上述的字段修飾:
unsigned:
????????表示該字段為無符號數字,顧名思義,也就是非負數。該字段只能緊跟在數據類型之后,否則會報錯。
null:
該字段修飾可以讓字段值為空,默認為null
not null:
????????該字段不能讓字段值為空,如果非空字段無值的情況下,會顯示下圖結果
primary key:
????????主鍵,用來唯一標識表中的一條記錄,該字段不能重復,通常用來作為序號,id等字段名稱,
auto_increment:
????????該修飾主要是用來做主鍵自增時使用,相關主鍵的數據類型盡量為數值型。
(注意:在設置自增后主鍵輕易不要修改,因為主鍵自增后一般按照最大數值之后開始自增。貿然修改主鍵數值可能會導致之后的主鍵會從修改數值字段的最大值開始自增!!!)
default:
設置字段默認值,在未改動該字段的情況下會默認為該字段修飾之后的字符
格式
字段名 數據類型 default “字符”
拓展創建表
?在了解字段修飾之后,我們就可以拓展一下之前我們所學習的創建表
?拓展格式如下
create table 表名 ( 字段名1 字段數據類型(數據類型長度) 字段修飾, 字段名2 字段數據類型(數據類型長度)字段修飾, 字段名3 字段數據類型(數據類型長度)字段修飾, 字段名4 字段數據類型(數據類型長度)字段修飾, )
話不多說,我們直接來舉例
例:
在數據庫db1下創建表格tb001表,要求:
name 為可變長度字符,50長度,
age為整型,三字符長度,且不能為空,
id為int長度,不能為空,且擁有主鍵并自加主鍵,
genger為可變長的字符,30長度,默認值為hebei,
nmum為枚舉類型,枚舉值為m和n
use db1; create table tb001( name varchar(50), age int(3) not null, id int not null primary key auto_increment, genger varchar(30) default"hebei")
我們來查看一下上列命令的表結構
通過查看表結構我們可以發現我們上面所使用的字段名稱,數據類型以及字段修飾,在上一篇文章我們已經講解了各個字段的名稱及含義,這里我們不再贅述。
補充:數據類型長度
不同數據類型長度所代表的含義不同,如果我們在char,或者varchar后加數據類型長度之后,該類型則可以最多輸出數據類型長度的字符,如果是數值長度的話,輸入少于字符長度的數據前面會自動用0去補全,如果超出長度則會原樣顯示出來,這里直接放截圖
age int(3)時輸入3顯示的數據
age int(3)時輸入333333顯示的數據
而char或varchar輸入超過該數據長度則會報錯,char默認長度是1,這里請大家注意。
9.2對表中的數據進行操作
我們之前已經學習了對表的操作,接下來我們開始對表中的數據進行操作
在表中插入數據
????????在表中插入數據有兩種方法
- 方法一
insert into 表名 values(值1,值2,值3)
????????注意:該方法是依次給字段賦值,因此需要將字段逐個賦值
- 方法二
insert into 表名(字段,字段,字段) values(值1,值2,值3)
????????該方法可以指定字段進行賦值,因此方法二較為常用
這里我們舉個例子
案例:
????????在tb001中插入數據,name為ch225,age為66,genger為f
insert into tb001(name,age,genger)values("ch225",66,"f")
我們來看一下結果
注意:
- 在賦值時候去注意字符類型,字母及文字需要用英文雙引號引用,否則報錯
- 這里僅僅是向部分字段寫入值
- 沒有指定字段,會寫如空
- 字段的順序要和值的順序保持一致
?刪除表中的數據及截斷表
刪除表中的數據有兩個格式,如下:
- 格式一:
delete from 表名
該命令可以直接刪除表中的全部數據
- 格式二:
delete from 表名 where 條件
該命令可以刪除表中的指定數據
直接舉例子
現在有以下表student(如下圖)
例子1.
刪除student表中的sage為18的數據
delete from student where sage=18
看結果
刪除三行,我們現在進表里看
例子二:
????????刪除表中所有數據
delete from student
老規矩,看結果
我們來看表
沒數據了,說明命令執行成功下一個
但我們重新插入數據時會發現,主鍵不也是從0開始自增,而是在刪除數據之前最高的主鍵開始增加
截斷表
截斷表,類似于我們超市開的小票,打出來一大堆東西,一撕,啪!全都沒了,然后重新打印下一張小票繼續從o開始。簡單點來說,就是刪除表中全部的數據,而且會截斷表(id會重新開始自增)
格式
truncate 表名
老規矩,我們舉例子來驗證
上圖為表sc的數據,主鍵為sid,我們來截斷該表
TRuncate sc
ok,命令執行成功,接下來我們添加數據來看看
insert into sc (cid,score)values(1,20)
看結果
主鍵sid開始從零自增,完成!!
修改表中數據
也是有兩種格式,
格式1:
update 表名 set 字段=值
該格式為批量修改,只要是該字段內的數據都會被修改
格式2:
update 表名 set 字段=值 where 記錄=值
該字段用where進行條件篩選
話不多說直接舉例:
現有表teacher,表內容如下圖
例1:將阿斯頓修改為圖靈
update teacher set tname="圖靈" where tid=1
我們來查看表
阿斯頓已成功更改·下一個例子
例子二:
表中的tname修改為喬布斯
update teacher set tname="喬布斯"
查看表
、
修改表中數據就這些,完成!
9.3 對表中的字段進行操作
增加字段
在已經創建的字段之前或之后添加新的字段
格式一:在字段名之后添加新字段
alter table 表名 add column 新字段名 字段屬性 after 字段名
格式二:在字段名之前添加新字段
alter table 表名 add column 新字段名 字段屬性 first 字段名
直接舉例:
teacher表如上圖,在tname后添加新字段age,數據類型為int,默認為30
alter table teacher add column age int default"30" after tname
我們查看表結構
ok,完成,我們開始下一個環節
刪除字段:
顧名思義,刪除字段,不做解釋
格式:
alter table 表名 drop column 字段名
我們還是以上述表舉例
例子
刪除tname字段
alter table teacher drop column tname
我們看下表
ok,刪除表成功
注意:貿然刪除字段可能會導致一些未知錯誤,因此:
建議不要刪除!
建議不要刪除!!
建議不要刪除!!!
建議不要刪除!!!!
建議不要刪除!!!!!
建議不要刪除!!!!!!
修改字段名
????????修改字段名,見名知義,
格式:
alter table 表名 change column 字段名 新字段子 屬性約束
?還是舉例來看一下吧
還是那個teacher
例:
將字段名age修改為gae
alter table teacher change column age gae int(30)
我們來看結果
ok了,
該命令不僅可以修改字段名,也可以去修改數據類型和字段修飾。這里就不一一演示了。還請各位讀者見諒。
修改字段順序
這玩意跟之前添加字段還有些類似,還別不信,直接看格式
格式一:alter table 表名 modify column 字段名 屬性 after 位置
格式二:
alter table 表名 modify column 字段名 屬性 first 位置
?這里我們還是舉例表示:
還是teacher表,將表中的age字段移動至tid之前
alter table teacher modify column tid int(30) after gae
我們來看一下表
改過去了,說明ok,沒問題對表中的字段進行操作就了解這么多,接下來進入下一個板塊
9.4查詢表中的內容
9.4.1 簡單查詢
就是可以查看表中的內容,這里我們先看格式,再去了解
格式
select 查詢的內容 from 表名 where 條件
表示查詢內容的方法有很多我們來看幾個較為常用的
表示查詢內容的方法:
- *:表示所有的內容
- 一個或者多個字段的名字:表示僅僅查詢一個或者多個字段(查詢多個字段的時候,多個字段之間,用逗號分割)
注意:查詢內容只能通過字段查詢相關記錄,不能通過記錄去查詢,如果想要控制顯示記錄,則需要通過where之后加條件去執行。
where后條件寫法
- > 大于
- >= 大于等于
- < 小于
- <= 小于等
- <> 不等于
- != 不等于
- between ... and ... 判斷范圍
- is null 是空
- is not null 不是空
- like 模糊查詢
? ? ? ? (like后可能要跟通配符“%”,%? 表示任意個任意字符,具體使用方法如下面例子)
- in 判斷某個字段是否在給定的集合中
好了,一條簡單些的select語句大概就由這么些內容組成,之后的內容我們通過例題進行補充。
例:
假設有一表name,如下
查詢name中age大于20的字段
select *from name where age > 20
查詢name中age大于等于20的字段
select *from name where age >= 20
查詢name中age小于20的字段
select *from name where age < 20
查詢name中age為空的字段
select *from name where age is null
查詢name中age不為空的字段
select *from name where age is not null
查詢name中age為3,5,7的字段
select *from name where age in(3,5,7)
?
查詢name中 age大于等于8 且小于等于50select *from name where age>3 and age < 50
注意:接下來就要用到簡單查詢了!!!!
簡單查詢如下
查詢name中name包含a的記錄
select name from name where name like "%a%"
查詢name中namey以a為結尾的記錄
select name from name where name like "%a"
(因為框中只有一個a,所以a即使開頭也是結尾)
我們就先簡單舉上述這些例子,接下來我們對簡單進行略微的擴展
? ?9.4.2查詢排序
????????就是對上述的結果進行了簡單的排序,話不多說,我們先來看格式
格式:
select 查詢內容 from 表名 where 條件 order by 字段名
排序分為兩種字段名,
- 升序(默認為升序)
? ? ? ? asc
- 降序
????????desc
看上去好像怪簡單的,我們直接進行實操
還是以上面name為例
查詢name中age不為空的字段并且對age由高到低進行排序
select *from name where age is not null order by age desc
查詢name中age不為空的字段并且對name由低到高進行排序
select *from name where age is not null order by name asc
這里我們可以看到,當排序對象為數字時,是從0開始進行排序;當排序對象是字母時,則是依照字母順序表從a到z進行排序。因此在排序時請注意這幾點。
9.4.3 指定輸出行
指定輸出行,顧名思義就是指定輸出前幾行,其余記錄不進行顯示,老規矩,還是先看格式
格式:
select 查詢內容 from 表名 where 條件 order by 字段名 limit 數字
當不使用limit字段時,默認輸出所有符合條件的記錄,而當使用該字段時,輸入數字是幾則顯示幾條記錄。我們還是舉例說明
例:
查詢name中age不為空的字段并且對name由低到高進行排序顯示前三條記錄
select *from name where age is not null order by name asc limit 3
看結果
ok,下一個
9.4.4 聚合函數:
?可以簡單理解為四則運算,但一般常用的聚合函數很少用到乘除法則,因此這里只講常用的聚合函數,講解不到位還請讀者諒解0..0
常用的聚合函數:
- sum() 求和
- avg() 求平均值
- max() 求最大值
- min() 求最小值
- count() 統計記錄條數
格式:
select 聚合函數(字段名) from 表名
還是以上述name表為例,
簡單舉個例子:
計算所有學生年齡的和
select sum(agde) from name
計算所有學生年齡的平均值
select avg(age) from name
統計一共有多少條記錄
select count(age) from name
統計最小的年齡
select min(age) from name
ok了,下一個
9.4.5 查詢記錄去重
顧名思義,就是去除重復字段,我們直接看格式
格式
select distinct 字段名 from 表名
例:
查詢name中age不為空的字段并且對name由低到高進行排序并去除重復字段
select distinct age from name where age is not null
下一個
9.4.6 分組及分組后加條件
分組
對記錄進行區分,通常用于統計過個字段人數使用
group by
格式:
select 字段 from 格式 group by 分組字段
直接舉例,還是上個name表
對age進行分組,并顯示名稱
select name from name GROUP BY age
分組后加條件
having,使用格式如下select 字段 from 表名 group by 字段 having 條件
因為該命令不常用,因此這里只做了解,還請各位讀者諒解,還是通過例題來簡單了解一下分組后加條件,例題如下
有一表students,內容如下
例題:通過gender進行分組分別查詢查詢students表中stuid大于二十的男生人數
select count(stuid),gender from students where stuid>20 group by gender having gender="m"
我們來看結果
注:(分組后加條件是在分組后顯示的結果進行進一步的條件篩選,若分組時結果沒有條件,則會顯示查詢不到對應的字段或其他報錯,因此在分組后查詢過程中,建議先運行不分組后不加條件的代碼,針對分組后不加條件的代碼進行進一步的條件篩選!!!)
以上就是本期內容了,很多東西筆者因為篇幅原因還沒講到,還請各位見諒。如有錯誤,還請諒解.感謝各位觀看!