MySql數據庫(三):數據的增刪改查,排序,聚合函數,分組查詢,外鍵約束,多表查詢,子查詢

數據的增刪改查(CRUD)

插入數據(insert)

向表中指定的字段中添加值:
	insert into(字段1,字段2,字段3) values (1,2,3);

向表中所有的字段添加值:
	insert intovalues (1,2,3...);

注意:1.插入的數據與字段數據的類型相同
	 2.數據的大小應在規定的範圍內
	 3.字符串和日期類型的數據,必須使用單引號括起來

修改數據(update)

修改/更改數據:
	update 表名 set 字段=where 條件;

注意:若沒有where條件子句,默認修改所有該字段的數據
	 若有where條件子句,修改符合條件的數據

刪除數據(delete)

刪除數據:
	delete fromwhere 條件;

注意:若不加where,默認刪除所有數據
	 若加where條件,刪除符合條件的數據
	 
delete 刪除支持事務的操作

關於刪除的命令

drop truncate delete

drop table 表名;	--刪除整個表,包括數據和結構
truncate table 表名;	--先把整個表刪除掉,再創建一個與原來一摸一樣的表,不支持事務
delete fromwhere 條件;	--支持事務操作,回滾

關於事務

開啓事務:
	start transaction;
使用delete刪除:
	delete fromwhere 條件;
數據回滾:
	rollback;

查詢數據(select)

查詢語句:
   select * from;	--默認查詢所有字段的數據
   select * fromwhere 條件;	--查詢符合條件的數據 
   select 字段1,字段2,字段3 from;	--查詢指定字段的數據
   select distinct from;	--使用distinct剔除掉查詢結果中重複的數據
   
查詢語句中可以使用as起別名,as可以省略不寫,中間使用空格代替

where子句後可以使用的符號

1.>, =, <, >=, <=, !=

2.in 查詢字段的值是否在指定的集合中
	select * from 表名 where 字段 in (元素1,元素2...);	
		--嵌套查詢,括號裏也可以寫查詢語句

3.like	模糊查詢
	select * from 表名 where 字段 like '張_';
	select * from 表名 where 字段 like '張%';
	後面配合通配符使用:'%''_'
	'_'下劃線,表示查詢所佔一個字符
	'%'百分號,表示查詢所佔多個字符
	條件需要使用單引號''
	
4.andornotbetween...and...範圍,包含兩個端點
	select * from stu where english>60 and english <90;
	select * from stu where english>80 or chinese>90;
	select * from stu where english between 60 and 90;

使用 order by 對結果排序

order by 字段 asc | desc;
	asc --默認升序
	desc --降序
order by放在select語句的末尾

select * from(where 字段) order by 字段 asc/desc;
對結果多次排序時,order by寫一次即可,多次不同排序之間使用逗號隔開

聚合函數

聚合函數操作的都是某一列的數據
count()	--求數量
	select count(*) | count(列名) from;	--某一列數據的總和

sum()	--求某一列數據的和
	注意:沒有sum(*),求某一列,只對數值類型起作用
	select sum(列名) from;
	
avg()	--求平均分
	select avg(字段) from;
	
min()	--求最小值
	select min(字段) from;
	
max()	--求最大值
	select max(字段) from;

分組查詢

group by	--分組查詢,在對錶中的數據進行一定的類別統計
	select 字段 fromgroup by 字段名;
分組查詢一般和聚合函數聯合一起使用

注意:使用where的條件,如果有分組,where的條件是分組之前的條件
	 having關鍵字是進行分組的條件過濾,用在group by後面
	 where關鍵字後不能使用聚合函數,
	 having關鍵字後可以使用聚合函數

外鍵約束

外鍵約束:
	foregin key (外鍵字段名) references 外表表名 (主鍵字段名)
用於建立和加強兩個表數據之間的聯繫

多表的設計

多表設計存在多種方式:
	一對多	多對多	一對一(瞭解)

一對多:
部門表(一方)		員工表(多方)
用戶表(一方)		訂單表(多方)

一對多表結構設計,兩張表,主表(一方),從表(多方)
建表原則:在多方表中添加字段,把該字段作爲外鍵,指向一方表的主鍵。

多對多表結構:

多表查詢

笛卡兒積是兩個結果的乘積,假如說有兩張表,A表和B表
	select * from A,B;	--查詢產生的結果就是笛卡兒積
應該解決這個問題,去掉其中重複的查詢結果

內連接

1.普通內連接
	語法:...inner join ... on 條件;
注意:在inner join關鍵字之前寫表1,在inner join關鍵字之後寫表2
	 on後面寫條件:表1:dept 表2:emp	(dept.did = emp.dno)
	 
	 select * from dept inner join emp on dept.did = emp.dno;
	 
2.隱式內連接(常用)
	語法:select * from1,2 where1.字段 =2.字段;
	例句:select * from dept,emp where dept.did = emp.dno;

外連接

1.左外連接(left)
	select * from1 left (outer) join2 on 條件;
	outer可以省略不寫
	例句:
		select * from dept left outer join emp on dept.did = emp.dno;
		
2.右外連接(right)
	select * from1 right (outer) join2 on 條件;
	例句:
		select * from dept right outer join emp on dept.did = emp.dno;

內連接 與 外連接的區別

  • 內連接查詢的是2張表交集的數據,主外鍵關聯的數據
  • 左外連接查詢的是左表中所有的數據和2張表主外鍵關聯的數據 (以左表爲基準,取交集,與右表不匹配的以 null 填充)
  • 右外連接查詢的是右表中所有的數據和2張表主外鍵關聯的數據 (以右表爲基準,取交集,與左表不匹配的以 null 填充)

子查詢

子查詢,嵌套查詢,一個 select 語句不能查詢出結果的,可以通過多個 select 語句來查詢結果。一個查詢語句的結果,作爲另一條查詢語句的條件。

例句:查詢出語文成績大於語文平均分的同學?
	先計算出語文成績的平均分:select avg(chinese) from stu
	語文成績大於語文平均分的同學:
select username,chinese from stu where chinese > (select avg(chinese) from stu);

MySql事務

事務的4個特性:“ACID

  1. 原子性 2. 一致性 3. 持久性 4. 隔離性
  • 原子性 :一個事務是一個整體,不可拆分的,事務的 sql 語句,要麼都執行,要麼都不執行
  • 一致性 :通過事務操作的數據要保持一致
  • 持久性 :通過事務提交的數據,若沒有問題的情況下,將永久生效
  • 隔離性 :事務與事務之間相互隔離,就是說一個事務是一個單獨的個體,隔離性在多線程操作數據的過程中發揮很大作用,避免了數據的髒讀,幻讀等
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章