日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【简单易懂】MySQL增删改查(进阶)

發布時間:2024/1/18 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【简单易懂】MySQL增删改查(进阶) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1.數據庫約束

1.1 約束類型

1.2 NULL約束

1.3 UNIQE:唯一約束

1.4 DEFAULT:默認值約束

1.5 PRIMARY KEY:主鍵約束

?1.6 FOREIGN KEY:外鍵約束

2. 表的設計

3. 新增

4. 查詢

4.1 聚合查詢

4.1.2 GROUP BY子句

4.1.3 HAVING

4.2 聯合查詢

4.2.1 內連接

4.2.2 外連接

4.2.3 自連接

4.2.4 子查詢


1.數據庫約束

1.1 約束類型

NOT NULL - 指示某列不能存儲 NULL 值。 UNIQUE - 保證某列的每行必須有唯一的值。 DEFAULT - 規定沒有給列賦值時的默認值。 PRIMARY KEY - NOT NULL UNIQUE 的結合。確保某列(或兩個列多個列的結合)有唯一標 識,有助于更容易更快速地找到表中的一個特定的記錄。 FOREIGN KEY - 保證一個表中的數據匹配另一個表中的值的參照完整性。 CHECK - 保證列中的值符合指定的條件。對于 MySQL 數據庫,對 CHECK 子句進行分析,但是忽略 CHECK 子句。

1.2 NULL約束

創建表時,可以指定某列不為空: create table student (id int not null,name varchar(30) );

?如果往 id 列插入空值,就直接報錯

1.3 UNIQE:唯一約束

uniqe就是指定列的每一個數值為唯一值,不能有重復。如果往指定的列中插入重復值也會報錯。

create table student (id int unique,name varchar(30) );

?如下列表信息中已經表明

1.4 DEFAULT:默認值約束

default 就是給插入空數據時指定默認值,也可以手動默認

create table student (id int,name varchar(30) default,age int );

?往表中增加信息

?將name 默認為 ‘guangming’

create table student (id int,name varchar(20) default 'guangming' );

?

1.5 PRIMARY KEY:主鍵約束

對于一個表來說,只能有一個列被指定為主鍵,并且 primary key 是 not null 和 unique 的結合,確保某列有唯一標識,有助于更容易更快速的找到表中的一個特定的記錄。

確認了主鍵,該列既不能為空又不能為重復值。

如下插入數據,將 id 列為空,最終顯示結果為錯誤

?插入重復值,為錯誤

?對于主鍵的關鍵用法就是使用在數字自增中,auto_ncrement 是主要句子

創建表

create table student (id int primary key auto_increment,name varchar(20) );

?插入數據

insert into into student (id, name) values (null, 'lisi'), (null, 'zahngsan'), (null,'wnagwu');

?在插入數據中,并沒有插入 id ,但是表中可以自動生成

?自增主鍵也可以手動指定 id, 但是后序的自增是從指定的 id 開始的

?1.6 FOREIGN KEY:外鍵約束

外鍵用于關聯其他表的主鍵或唯一建

?foreign key (字段名) references 主表 (列)

?例如創建一張學生表和班級表,學生表就依賴于班級表,學生表就為‘字表’,班級表就為‘父表’

?先創建一個班級表

?

?classId 既是 class 表的主鍵,又是? student 表的外鍵

?然后構造一個學生表,來指定一下 外鍵約束

?往表中插入數據,其中 classId 為1,在class 表中存在,所以插入成功

?如果我們將classId 為10,在class 表中不存在,所以插入不成功

insert into student values (null, 'wangwu', 10);

?

?外鍵約束,同樣也約束著父表,當父表中的某個記錄被子表中依賴著的時候,進行修改或者刪除都會失敗

delete from class where class where classId = 1;

?

?外鍵約束工作原理

在子表中插入新的記錄的時候,就會根據對應的值,在父表中先查詢,查詢到之后,才能夠執行后序的插入。

查詢操作就是根據父表中被依賴的這一列,必須要有索引,即得到 primary key 或者unique?

2. 表的設計

2.1 一對一

就是唯一性,例如每個人只有一個身份證號

2.2 一對多

以班級為例,一個班級可以有多個學生。

2.3 多對多

以學生和課程為例,一個學生可以選多們課,一門課可以被多個學生選

3. 新增

?將查詢到的結果插入新的表中,但是需要保證查詢到的結果與插入到新的表中類型匹配,列的順序可以不一樣。

創建 A?表? 、 B表

create table A (id int ,name varchar(20), age int); create table B (id int ,name varchar(20), age int);

?往表A中插入數據

insert into A values(1, 'lisi', 13), (2, 'wangwu', 15);

?將查詢A的結果插入表B中

insert into B select * from A

4. 查詢

4.1 聚合查詢

4.1.1 聚合函數

常見的統計總數,計算平均值等,可以使用聚合函數來實現,常見的聚合函數有:

函數 說明
COUNT([DISTINCT] expr) 返回查詢到的數據的數量
SUM([DISTINCT] expr 返回查詢到的數據的總和,不是數字沒有意義
AVG([DISTINCT] expr 返回查詢到的數據的平均值,不是數字沒有意義
MAX([DISTINCT] expr 返回查詢到的數據的最大值,不是數字沒有意義
MIN([DISTINCT] expr) 返回查詢到的數據的最小值,不是數字沒有意義

count 函數 的用法

查詢? exam 表的人數, count(*)

select * from count(*) from exam;

?在 count 時,也可以指定某個列,如,指定math 列,count(math)

select count(math) from exam;

?

?注意,如果表中存在 null ,則是不會被記錄在當中的

?sum 求和函數

將列的若干個數值相加

例如,求 math 列的總成績, sum(math)

select sum(math) from exam;

?

?sum 函數只能針對數字進行運算,不能針對字符串來進行

?例如對name進行計算,sum(name)

select sum(name) from exam;

?一個聚合函數里面的參數,也可以通過表達式的方式進行運算

select sum(chinese) + sum(math) from exam; select sum(chinese + math + english) from exam;

?還可以用 as 起別名來顯示;

select sum(chinese + math + english) as total from exam;

?聚合函數還可以搭配 where 字句來使用,可以基于條件進行篩選,把篩選結果再進行聚合

?例如,先篩選出 english 大于 85 的,然后將大于 85 的求和

select sum(english) from eaxm where english > 85;

4.1.2 GROUP BY子句

SELECT 中使用 GROUP BY 子句可以對指定列進行分組查詢。需要滿足:使用 GROUP BY 進行分組查詢時,SELECT 指定的字段必須是 分組依據字段 ,其他字段若想出現在 SELECT 中則必須包含在聚合函數中

?例如對 emp 表進行分組在聚合函數查詢

select role, max(salary), min(salary), avg(salary) from emp group by role;

?group by 是可以使用 where, 只不過是在分組之前執行

?如下,先去掉 name 是 liliu 的,在進行對 role 分組

select role, avg(salary) from emp where name != 'liliu' group by role;

?

4.1.3 HAVING

GROUP BY 子句進行分組以后,需要對分組結果再進行條件過濾時,不能使用 WHERE 語句,而需要用HAVING

?如下,先對role 進行分組,求avg, 然后執行篩選條件 having, 最終將篩選之后的顯示出來。

select role, avg(salary) from emp group by role having avg(salary) < 30;

4.2 聯合查詢

聯合查詢就是把多個表的記錄往一起合并,一起進行查詢,稱為多表查詢,使用的方法是“笛卡爾積”

運算過程: 先拿第A表的第一行記錄與第B表的每行記錄分別組合,得到一行新的記錄,

再繼續拿A表的記錄和B的記錄重復執行上述的操作。

得到的列數就是A 的列數 + B的列數

?例如先單獨查詢 表 a 和表 student ,

select * from a; select * from student;

?進行聯合查詢

語句就是直接 select * from 表名,表名;

表名與表名之間是有逗號隔開

select * from a, student;

?加上條件,可以單獨列出一行的信息,

select * from a, student where a.id = student.studentId;

?只保留名字和成績,student.name = exam.name 是兩個表中名字一樣的

select student. name, exam.math from student,exam where student.name = exam.name and student.classId = 1;

?

4.2.1 內連接

語法

select 字段 from 1 別名 1 [inner] join 2 別名 2 on 連接條件 and 其他條件 ; select 字段 from 1 別名 1, 2 別名 2 where 連接條件 and 其他條件 ; select student. name, exam.math from student join exam on student.name = exam.name and student.classId = 1;

?

4.2.2 外連接

外連接分為左外連接和右外連接。如果聯合查詢,左側的表完全顯示我們就說是左外連接;右側的表完全顯示我們就說是右外連接。

語法

-- 左外連接,表 1 完全顯示 select 字段名 ? from 表名 1 left join 表名 2 on 連接條件 ; -- 右外連接,表 2 完全顯示 select 字段 from 表名 1 right join 表名 2 on連接條件

4.2.3 自連接

自連接是指在同一張表連接自身進行查詢。

4.2.4 子查詢

子查詢是指嵌入在其他 sql 語句中的 select 語句,也叫嵌套查詢 單行子查詢:返回一行記錄的子查詢 查詢與 不想畢業 同學的同班同學: select * from student where classes_id=(select classes_id from student where name='不想畢業'); 多行子查詢:返回多行記錄的子查詢 案例:查詢 語文 英文 課程的成績信息 -- 使用IN select * from score where course_id in (select id from course where name='語文'or name='英文');

4.2.5 合并查詢

在實際應用中,為了合并多個 select 的執行結果,可以使用集合操作符 union union all 。使用 UNION 和 UNION ALL 時,前后查詢的結果集中,字段需要一致。 union 該操作符用于取得兩個結果集的并集。當使用該操作符時,會自動去掉結果集中的重復行。 案例:查詢 id 小于 3 ,或者名字為 英文 的課程: select * from course where id<3 union select * from course where name='英文'; -- 或者使用or來實現 select * from course where id<3or name='英文'; union all 該操作符用于取得兩個結果集的并集。當使用該操作符時,不會去掉結果集中的重復行。 案例:查詢 id 小于 3 ,或者名字為 “Java” 的課程 -- 可以看到結果集中出現重復數據 select * from course where id<3 union all select * from course where name='英文';

總結

以上是生活随笔為你收集整理的【简单易懂】MySQL增删改查(进阶)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。