1. 程式人生 > 資料庫 >MySQL 詳細單表增刪改查crud語句

MySQL 詳細單表增刪改查crud語句

MySQL 增刪改查語句

1.建立練習表

  • 這裡練習表沒有滿足三正規化

第一正規化(又稱 1NF):保證每列的原子性
資料表中的每一列(欄位),必須是不可拆分的最小單元,也就是確保每一列的原子性。滿足第一正規化是關係模式規範化的最低要求,否則,將有很多基本操作在這樣的關係模式中實現不了。
第二正規化(又稱 2NF):保證一張表只描述一件事情
滿足1NF後要求表中的所有列,每一行的資料只能與其中一列相關,即一行資料只做一件事。只要資料列中出現數據重複,就要把表拆分開來。
第三正規化(又稱 3NF):保證每列都和主鍵直接相關
滿足2NF後,要求:表中的每一列都要與主鍵直接相關,而不是間接相關(表中的每一列只能依賴於主鍵)。

資料不能存在傳遞關係,即沒個屬性都跟主鍵有直接關係而不是間接關係。像:a–>b–>c 屬性之間含有這樣的關係,是不符合第三正規化的。

  • 五大約束

資料庫中的五大約束包括:

1.主鍵約束(Primay Key Coustraint) 唯一性,非空性;

2.唯一約束 (Unique Counstraint)唯一性,可以空,但只能有一個;

3.預設約束 (Default Counstraint) 該資料的預設值;

4.外來鍵約束 (Foreign Key Counstraint) 需要建立兩表間的關係;

5.非空約束(Not Null Counstraint):設定非空約束,該欄位不能為空。

五大約束的語法示例:

新增主鍵約束
Alter table 表名 add Constraint 主鍵名 primary key(欄位)

新增唯一約束
Alter table 表名 add Constraint 約束名 unique(欄位)

新增預設約束
Alter table 表名 add Constraint 約束名 default(預設內容) for 欄位名

新增檢查約束
Alter table 表名 add Constraint 約束名 check (欄位表達)

新增外來鍵約束
Alter table 表名 add Constraint 約束名 foreign key(欄位) references 表名(欄位名)

1.1使用者表(user)

CREATE TABLE `user`(
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '使用者id(主鍵)',`username` VARCHAR(50) COMMENT '使用者姓名',`age` CHAR(3) COMMENT '使用者年齡'
);

插入資料

INSERT INTO USER VALUES(2,'小二',12);
INSERT INTO USER VALUES(3,'張三',33);
INSERT INTO USER VALUES(4,'李四',24);
INSERT INTO USER VALUES(5,'王五',17);
INSERT INTO USER VALUES(6,'趙六',36);
INSERT INTO USER VALUES(7,'七七',18);

完成後
表名 user
表資料:

在這裡插入圖片描述

1.2學生表

CREATE TABLE `students`(
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '學生id(主鍵)',`name` VARCHAR(10) COMMENT '學生姓名',`grade` VARCHAR(10) COMMENT '學生年級',`chinese` INT COMMENT '語文成績',`math` INT COMMENT '數學成績',`english` INT COMMENT '英語成績'
);

插入資料

INSERT INTO students VALUES(1,'迪麗熱巴','二年級',100,100);
INSERT INTO students VALUES(2,'古力娜扎','一年級',99,88,98);
INSERT INTO students VALUES(3,'馬爾扎哈','三年級',46,20,99);
INSERT INTO students VALUES(4,'阿里巴巴',78,81,100);
INSERT INTO students VALUES(5,'哈哈哈哈','六年級',10,5);
INSERT INTO students VALUES(6,'作者本人',100);
INSERT INTO students VALUES(7,'嘻嘻哈哈','五年級',70,60);
INSERT INTO students VALUES(8,'哭哭啼啼','四年級',33,15,54);

列名或者表名和 MySQL 關鍵字衝突可以使用 ` 符號,鍵盤esc 下面,1 左邊,Tab 上面;
注意 ==> 如果成績型別是 varcher ,那使用排序將會顯示不正確。

完成後
表名 students
表資料:

在這裡插入圖片描述

2.查詢

2.1查詢全部(這裡使用user使用者表)

Select * from 表名;

SELECT * FROM USER;

2.2查詢已經成年的使用者(使用where條件查詢)

  • 條件中比較運算子:( 等於: = 大於: > 大於等於: >= 小於: < 小於等於: <= 不等於: != 或 <> )
  • Select * from 表名 where 條件;
SELECT * FROM USER WHERE age >= 18;

在這裡插入圖片描述

2.3查詢未成年使用者的名字

SELECT 欄位名 FROM 表名 WHERE 條件;

SELECT username FROM USER WHERE age < 18;

在這裡插入圖片描述

2.4使用別名查詢

使用as關鍵字(as可以省略)

SELECT u.* FROM USER AS u;

在這裡插入圖片描述

2.5使用邏輯運算子查詢

邏輯運算子( 並且:and 或 && 或:or 非:not 或 ! )

查詢名字為小二又年齡是12歲的(顯示名字和年齡)

SELECT u.`username`,u.`age` FROM USER u WHERE u.`username`='小二' && u.`age`=12;

在這裡插入圖片描述

查詢名字為張三又是未成年的(查詢結果空,沒有這個人)

SELECT * FROM USER WHERE username='張三' && age < 18;

在這裡插入圖片描述

2.6使用運算子查詢(這裡開始使用students學生表)

在這裡插入圖片描述

查詢 哈哈哈哈 的三科總分
運算子優先順序:
1.乘法和除法的優先順序高於加法和減法
2.同級運算的順序是從左到右
3.表示式中使用"括號"可強行改變優先順序的運算順序
select 列1[ ±*/ ]列2 from 表名 where 條件;

SELECT s.chinese + s.math + s.english FROM students s WHERE s.name = '哈哈哈哈';

在這裡插入圖片描述

2.7範圍查詢(between 條件1 and 條件2)

(良 60-70,中70-80,優80-90,優秀90-100)

查詢語文成績是 良到中 的同學名字一
where 欄位(列名) between 條件1 and 條件2;

SELECT NAME FROM students WHERE chinese BETWEEN 60 AND 80;

在這裡插入圖片描述

查詢數學成績不合格的同學名字


where 欄位(列名)not between 條件1 and 條件2;

SELECT NAME FROM students WHERE math NOT BETWEEN 60 AND 100;

在這裡插入圖片描述

查詢英語成績優秀的同學id和名字;


where !( 欄位名 between 條件1 and 條件2);

SELECT s.`id`,s.`name` FROM students s WHERE !(s.`english` BETWEEN 0 AND 90);

在這裡插入圖片描述

2.8集合查詢查詢一年級和二年級的學生資訊

where 列名 in (值1,值2,值3);

SELECT * FROM students WHERE grade IN ('一年級','二年級');

在這裡插入圖片描述

*查詢一年級,二年級,三年級以外的學生資訊
where 列名 not in (值1,值2,值3);

SELECT * FROM students WHERE grade NOT IN ('一年級','三年級');

在這裡插入圖片描述

2.9 NULL值查詢

注意:列中值為null不能使用=去查詢

查詢名字為 null 的學生資料(沒有儲存有,所以啥也沒有)
where 列名 is null;

SELECT * FROM students WHERE `name` IS NULL;

在這裡插入圖片描述

2.10模糊查詢( like )% 表示0個到n個字元

where 列名 like '%巴'; 		-- 表示以 巴 結尾的;
where 列名 like '巴%'; 		-- 表示以 巴 開頭的;
where 列名 like '%巴巴%' 	-- 表示資料裡面包含 巴巴 的;

查詢名字以 巴 結尾的學生;

SELECT * FROM students WHERE `name` LIKE '%巴';

在這裡插入圖片描述

查詢名字以 作者 開頭的學生;

SELECT * FROM students WHERE `name` LIKE '作者%';

在這裡插入圖片描述

查詢名字裡麵包含 嘻哈 的學生;

SELECT * FROM students WHERE `name` LIKE '%嘻哈%';

在這裡插入圖片描述

_ 表示一個字元,可以多次使用

查詢名字裡面倒數第二個字有 哈 的學生
where 列名 like ‘哈_';

SELECT * FROM students WHERE `name` LIKE '%哈_';

在這裡插入圖片描述

2.11結果排序

對結果經行排序(對查詢出的結果按照一列或多列進行升序或者倒序排序,升序式ASC,倒序式 DESC,預設升序)。

注意不能使用中文或者中問別名排序。
where 條件 order by 列名 [ ASC / DESC ];

查詢一年級,二年級,三年級學生資料,以 語文成績排序,降序。

SELECT * FROM students WHERE grade IN ('一年級','三年級') ORDER BY chinese DESC;

在這裡插入圖片描述

2.12分頁查詢

分頁查詢( beginIndex 表示從第幾條資料開始(也可以說是跳過前面多少頁),第一頁從0開始。pageSize 表示每頁顯示多少條資料);
select * from 表名 where 條件 limit beginIndex,pageSize;

分頁演算法公式 (當前頁 - 1)* pageSize;

比如說每頁 10頁 分頁。
第一頁 limit 0,10;// 顯示 0-10;跳過前面0條資料
第二頁 limit 10,10;// 顯示 11-20;跳過前面10條資料
第三頁 limit 20,10;// 顯示 21-30;跳過前面20條資料

注意當我們使用 select * from students;(最後底層執行語句分頁了 limit 0,1000 )
在這裡插入圖片描述

查詢全部學生,每頁三條資料
第一頁

SELECT * FROM students LIMIT 0,3;

在這裡插入圖片描述
第二頁

SELECT * FROM students LIMIT 3,3;

在這裡插入圖片描述

第三頁

SELECT * FROM students LIMIT 6,3;

在這裡插入圖片描述

2.13聚合函式

作用於一組資料,對那組返回一個值

  • count :統計結果記錄多少條數,
  • max:統計最大值
  • min:統計最小值sum:計算求和
  • avg: 計算平均值

注意,分組函式 group by。如果要對 分組後 的資料進行篩選,那麼必須使用 having 關鍵字,條件寫在 having 後面;

  • where:先過濾已有的資料,在分組,在聚合函式計算;
  • having:過濾分組之後的資料。

插入我們需要練習的表city 表

CREATE TABLE `city` (
	`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵',`city_name` VARCHAR(100) COMMENT '城市名',`city_year` VARCHAR(4) COMMENT '年份,yyyy',`city_gdp` DOUBLE COMMENT '當前年份,城市一整年的GDP,單位億元',`city_population` DOUBLE COMMENT '當前年豐,城市的總人口,單位萬人'
);

新增資料

INSERT INTO city VALUES(1,'上海',2018,32679,2418);
INSERT INTO city VALUES(2,'北京',30320,2171);
INSERT INTO city VALUES(3,'深圳',24691,1253);
INSERT INTO city VALUES(4,'廣州',23000,1450);
INSERT INTO city VALUES(5,'重慶',20363,3372);
INSERT INTO city VALUES(6,2019,38155,2424);
INSERT INTO city VALUES(7,35371,2171);
INSERT INTO city VALUES(8,26927,1302);
INSERT INTO city VALUES(9,23628,1491);
INSERT INTO city VALUES(10,23605,3372);

COUNT
查詢計算2019年一共有多少個城市錄入資料(答案 5個)

SELECT COUNT(*) FROM city WHERE city_year = '2019';

在這裡插入圖片描述

MAX
查詢 2018年裡 GDP 最高是多少;

SELECT MAX(city_gdp) FROM city WHERE city_year = '2018';

在這裡插入圖片描述

MIN
查詢 2018年裡 GDP 最低是多少;

SELECT MIN(city_gdp) FROM city WHERE city_year = '2018';

在這裡插入圖片描述

SUM
查詢2019年裡所有城市 GDP 總和;

SELECT SUM(city_gdp) FROM city WHERE city_year = '2019';

在這裡插入圖片描述

AVG
查詢2019年所有城市 GDP 平均值;

SELECT AVG(city_gdp) FROM city WHERE city_year = '2019';

在這裡插入圖片描述

3.增加

insert into 表名(欄位1,欄位2,欄位3,…)values(值1,值2,值3,…);

新增學生雞雞雞雞

INSERT INTO students(id,NAME,grade,chinese,math,english) 
VALUES( 9,'雞雞雞雞','七年級',77,77);

在這裡插入圖片描述

其它插入方式

INSERT INTO 表名(欄位1,欄位2,欄位3) VALUES (值1,值2,值3),(值1,值3); -- 插入多條資料
INSERT INTO 表名 VALUES(值1,值2); -- 針對表全欄位進行插入操作
INSERT INTO 表名(欄位) SELECT 欄位 FROM 表2; -- 查詢結果插入
INSERT INTO 表名 SELECT 欄位 FROM 表2; -- 查詢結果,全表插入

4.更新

update 表名 set 欄位=值 where 條件; -- 帶條件的去修改指定資料,否則修改全表;

修改學生 ‘哈哈哈哈' 的英語成績為 10;

UPDATE students SET english = 10 WHERE `name` = '哈哈哈哈';

在這裡插入圖片描述

5.刪除

delete from 表名 where 條件; -- 刪除資料帶條件刪除,否則刪除全表的資料

刪除學生 ‘雞雞雞雞' ;

DELETE FROM students WHERE `name` = '雞雞雞雞';

在這裡插入圖片描述

在這裡插入圖片描述

6.語句執行順序

from -> on -> join -> where -> group by -> having -> select -> distinct -> order by -> limitMySQL其它文章,請看下面連結

MySQL DDL 語句
MySQL CRUD 語句
MySQL 聚合函式
MySQL 多表查詢

END…

到此這篇關於MySQL 詳細單表增刪改查crud語句的文章就介紹到這了,更多相關MySQL 增刪改查語句內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!