sql語句增刪改查的基本命令「資料庫的增刪改查sql語句」

一文輕鬆學會Mysql資料庫:DDL操作庫表和DML語句增刪改查表數據,全文特別詳細,安裝MYSQL數據請自行搜索,或者搜索我的頭條文章有,,建議收藏+關注。不迷路,用的時候找得到。^_^

一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句

學習目標

  • 能夠理解資料庫的概念
  • 能夠安裝MySql資料庫
  • 能夠使用SQL語句操作資料庫
  • 能夠使用SQL語句操作表結構
  • 能夠使用SQL語句進行數據的添加修改和刪除的操作
  • 能夠使用SQL語句進行條件查詢數據
  • 能夠使用SQL語句進行排序
  • 能夠使用聚合函數
  • 能夠使用SQL語句進行分組查詢
  • 能夠使用SQL語句進行分頁查詢

第一章-資料庫概述

1. 知識點-資料庫的介紹

沒有資料庫之前,如果我們要進行數據存儲,有幾種方式:

  1. 我們可以使用java集合等方式將數據保存在內存中,但是數據不能持久化保存,斷電/程序退出,數據就清除了
  2. 我們還可以將數據保存在普通文件中,可以持久化保存,但是查找,增加,修改,刪除數據比較麻煩,效率低

所以我們需要一個既可以持久化保存數據又可以方便操作的地方來存儲數據,這就是我們接下來要給大家介紹的資料庫

2.1 什麼是資料庫

資料庫(DataBase,DB):指長期保存在計算機的存儲設備(硬碟)上,按照一定規則組織起來,可以被各種用戶或應用共享的數據集合. 還是以文件的方式存在伺服器的電腦上的。

說白了就是數據的倉庫, 用來保存數據的.

2.2 常見的關係型資料庫

  • MySql :開源免費的資料庫,中小型的資料庫,已經被Oracle收購了。MySql6.x版本也開始收費。後來Sun公司收購了MySql,而Sun公司又被Oracle收購
  • Oracle:收費的大型資料庫.Oracle公司的產品.Oracle收購SUN公司,收購MySql.
  • DB2:IBM公司的資料庫產品,收費的.銀行系統中.
  • SQLServer:MS公司.收費的中型的資料庫.
  • SyBase:已經淡出歷史舞台.提供了一個非常專業數據建模的工具PowerDesigner.
  • SQLite: 嵌入式的小型資料庫,應用在手機端.
一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句

知識點1:資料庫結構

資料庫管理程序(DBMS)可以管理多個資料庫,一般開發人員會針對每一個應用創建一個資料庫。為保存應用中實體的數據,一般會在資料庫創建多個表,以保存程序中實體的數據。

資料庫管理系統、資料庫和表的關係如圖所示:

一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句

小結

  1. 關係型資料庫按行存儲
  2. 一個資料庫下可以有多張表,一張表可以有多條記錄
  3. 一般情況下,一個項目對應一個資料庫,一個實體類對應一張表,表中的每一條記錄對應一個java對象

知識點2-Sql介紹

1.什麼是sql?

  • SQL:Structure Query Language。(結構化查詢語言),通過sql操作資料庫(操作資料庫,操作表,操作數據)
  • SQL被美國國家標準局(ANSI)確定為關係型資料庫語言的美國標準,後來被國際化標準組織(ISO)採納為關係資料庫語言的國際標準
  • 各資料庫廠商(MySql,oracle,sql server)都支持ISO的SQL標準。
  • 各資料庫廠商在標準的基礎上做了自己的擴展。 各個資料庫自己特定的語法
一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句

2.sql的語法

  • 每條語句以分號結尾(命令行裡面需要),如果在navicat,java代碼中不是必須加的。
  • SQL在window中不區分大小寫,關鍵字中認為大寫和小寫是一樣的

3 sql的分類

  • Data Definition Language (DDL數據定義語言) 如:操作資料庫,操作表
  • Data Manipulation Language(DML數據操縱語言),如:對表中的記錄操作增刪改
  • Data Query Language(DQL 數據查詢語言),如:對表中的查詢操作
  • Data Control Language(DCL 數據控制語言),如:對用戶許可權的設置
一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句

4.小結

  1. SQL:結構化查詢語言,是關係型資料庫的操作標準,但是每個資料庫又會有其獨有的方言
  2. SQL分類:數據增刪改–DML數據查詢 — DQL資料庫表操作–DDL數據控制–DCL

第四章-DDL操作資料庫

知識點-DDL操作資料庫

1.目標

我們把Sql介紹完成了, 那下面就通過DDL操作資料庫

2.步驟

  • 創建資料庫(掌握)
  • 查看資料庫
  • 刪除資料庫(掌握)
  • 修改資料庫
  • 資料庫的其它操作(掌握)

3.講解

3.1創建資料庫

  • 語法
create database 資料庫名 [character set 字符集][collate  校對規則]     注: []意思是可選的意思

字符集(charset):是一套符號和編碼。

  • 練習

創建一個資料庫(默認字符集)

create database web16db;

創建一個day16_2的資料庫,指定字符集為gbk(了解)

create database web14_2 character set gbk;

3.2查看所有的資料庫

3.2.1查看所有的資料庫

  • 語法
show databases; 

3.2.2查看資料庫的定義結構【了解】

  • 語法
show create database 資料庫名;
  • 查看web14_1這個資料庫的定義
show create database web14_1; 

3.3刪除資料庫

  • 語法
drop database 資料庫名;
  • 刪除web14_2資料庫
drop database web14_2;

3.4修改資料庫【了解】

  • 語法
alter database 資料庫名 character set 字符集;
  • 修改web14_1這個資料庫的字符集(gbk)
alter database web14_1 character set gbk;

注意:

  • 是utf8,不是utf-8
  • 不是修改資料庫名

3.5其他操作

  • 切換資料庫, 選定哪一個資料庫
use 資料庫名;           //注意: 在創建表之前一定要指定資料庫. use 資料庫名
  • 練習: 使用web14_1
use web14_1;
  • 查看正在使用的資料庫
select database();

4.小結

  1. 創建資料庫 create database db_name;
  2. 修改資料庫 alter database db_name;
  3. 刪除資料庫 drop database db_name;
  4. 查看資料庫 show databases;

第五章-DDL操作表

一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句

知識點-創建表【重點】

1.目標

我們第四章已經把資料庫的CRUD講解完了,下面我們就學習創建表

2.步驟

  • 創建表的語法介紹
  • MySql常見的類型
  • MySql約束

3.講解

3.1語法

create table 表(
    列 類型 [約束],
    列 類型 [約束]
    ...
        
);

3.2 類型

一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句
  1. 整型 一般使用int
    或者bigint,偶爾使用tinyint tinyint — byte smallint — short int — int
    bigint — long unsigned:表示無符號數字,最高位不表示正負zerofill:0填充,設置一個數字的長度,int(4):
    存儲1:0001tinyint 經常用於表示boolean類型 1表示true 0 表示false
  2. 浮點/雙精度型 默認的範圍 float或者double指定範圍 float(M,D) eg: float(4,2) 表達的範圍: -99.99~99.99,M表示數字位長度,D表示小數位長度float(5,2):100.01
  3. 字元串固定長度 char(n) eg: char(20), 最大能存放20個字元. 『aaa』, 還是佔20個字元的空間可變長度 varchar(n) eg:varchar(20), 最大能存放20個字元. 『aaa』, 佔3個字元的空間 插入數據時 數據需要使用單引號包起來一般使用varchar(n) 節省空間; 如果長度(eg:身份證)是固定的話 可以使用char(n) 性能高一點
  4. 關於大文件一般在資料庫裡面很少存文件的內容, 一般存文件的路徑一般不使用二進位存, 使用varchar(n)存文件的路徑
  5. 日期DATE 只有日期DATETIME 日期和時間 ,一般如果需要設置默認時間, 我們使用TimeStamp數據類型
  6. 數值:tinyint int bigint double 字元串:char varchar 時間日期:datetime timestamp

3.3 約束

  • 即規則,規矩 限制;
  • 作用:保證用戶插入的數據保存到資料庫中是符合規範的
約束約束關鍵字
主鍵primary key
唯一unique
非空not null

約束種類:

  • not null: 非空 ; eg: username varchar(40) not null username這個列不能有null值
  • unique:唯一約束, 後面的數據不能和前面重複; eg: cardNo char(18) unique; cardNo 列裡面不可以有重複數據
  • primary key;主鍵約束(非空+唯一); 一般用在表的id列上面. 一張表基本上都有id列的, id列作為唯一標識的 auto_increment: ==自動增長,必須是設置了primary key之後,才可以使用auto_increment==
  • id int primary key auto_increment; id不需要我們自己維護了, 插入數據的時候直接插入null, 自動的增長進行填充進去, 避免重複了.

注意:

先設置了primary key 再能設置auto_increment

只有當設置了auto_increment 才可以插入null 自己維護 否則插入null會報錯

id列:

  1. 給id設置為int類型, 添加主鍵約束, 自動增長
  2. 或者給id設置為字元串類型,添加主鍵約束, 不能設置自動增長

3.4練習

  • 創建一張學生表(含有id欄位,姓名欄位,性別欄位. id為主鍵自動增長)
CREATE TABLE student(
 id INT PRIMARY KEY AUTO_INCREMENT,
 `name` VARCHAR(40) NOT NULL,
 sex INT
);

4.小結

  1. 語法
create table 表名(
    列 類型 【約束】,
    列 類型 【約束】
);
  1. 類型數值:int bigint double 偶爾使用tinyint字元:char(n) 固定長度 varchar(n) 可變長度時間:Date DateTime TimeStamp
  2. 約束not null 非空unique 唯一primary key 主鍵(非空+唯一)auto_increment 自動增長
  3. iid可以設置成int類型, 設置成primary key, 添加auto_increment 作為記錄唯一標識
  4. 注意:
列名:見名識義 多個單詞用_拼接
列類型:tinyint int bigint double char varchar datetime timestamp
列約束:
 not null:不能為空
 primary key:主鍵,限制表中的每一行都是唯一的,主鍵所在的列不能為空也不可以重複
 unique key:唯一約束 限制當前列可以為null(只能出現一個),但是不能重複
 primary key == unique key + not null
列屬性:
 auto_increment:自增 用在主鍵列上,並且該列為整型
 zerofill:零填充 用在整型類型列上
 unsigned:無符號,最高位不表示正負
 
    1.auto_increment需要和primary key 一起使用
    2.unsigned、zerofill不能和primary key一起使用

知識點-查看錶【了解】

1.目標

我們把表創建好了, 下面就來介紹查看錶

2.步驟

  • 查看當前資料庫所有的表
  • 查看錶的定義結構

3.講解

3.1查看所有的表

show tables;

3.2查看錶的定義結構

  • 語法desc 表名;
  • 練習: 查看student表的定義結構
desc student;

知識點-修改表【掌握】

1.目標

我們表創建好了, 如果要增加一列,要刪除一列呢? 那下面就來講解修改表

2.步驟

  • 增加列
  • 修改列的類型約束
  • 修改列的名稱,類型,約束
  • 刪除列
  • 修改表名

3.講解

3.1語法

  • 增加一列;alter table 表 add 欄位 類型 約束;
  • 修改列的類型約束; alter table 表 modify 欄位 類型 約束 ;
  • 修改列的名稱,類型,約束;alter table 表 change 舊列 新列 類型 約束;
  • 刪除一列; alter table 表名 drop 列名;
  • 修改表名 ; rename table 舊錶名 to 新表名;

3.2練習

  • 給學生表增加一個grade欄位
alter table student add grade varchar(20) not null;
  • 給學生表的sex欄位改成字元串類型
alter table student modify sex varchar(10);
  • 給學生表的grade欄位修改成class欄位
alter table student change grade class varchar(20);
  • 把class欄位刪除
alter table student drop class;
  • 把學生表修改成老師表(了解)
rename table student to teacher

4.小結

  1. 修改表都是以alter table tb_name打頭
  2. 增加列 add
  3. 修改列的類型 約束 modify
  4. 修改列的名字 類型 約束 change
  5. 刪除列 drop
  6. 修改表名 rename

知識點-刪除表【掌握】

1.目標

表創建好了, 我們還可以刪除。 掌握表的刪除

2.步驟

  • 刪除表

3.講解

  • 語法drop table 表名;
  • 把teacher表刪除
drop table teacher;

4.小結

  1. 刪除表語法
drop table 表名;
  1. 創建表create table tb_name(
    列名 類型 約束 ,…);
  2. 修改表add 、modify 、change 、 drop 、rename
  3. 查看錶show tables;
    desc tb_name;

第六章-DML操作表記錄-增刪改【重點】

  • 準備工作: 創建一張商品表(商品id,商品名稱,商品價格,商品數量.)
create table product(
    pid int primary key auto_increment,  //只有設置了auto_increment id列才可以賦值為null
    pname varchar(40),
    price double,
    num int
);

知識點-插入記錄

1.目標

  • 掌握插入記錄

2.步驟

  • 兩種方式插入數據
  • 使用命令行操作時候亂碼的解決

3.講解

  • 方式一: 插入指定列, ==如果沒有把這個列進行列出來, 以null進行自動賦值了==.eg: 只想插入pname, price , insert into t_product(pname, price) values(‘mac’,18000);
insert into 表(列,列..) values(值,值..);

注意: 如果沒有插入了列設置了非空約束, 會報錯的

  • 方式二: 插入所有的列
insert into 表 values(值,值....);           

eg:
insert into product values(null,'蘋果電腦',18000.0,10);
insert into product values(null,'華為5G手機',30000,20);
insert into product values(null,'小米手機',1800,30);
insert into product values(null,'iPhonex',8000,10);
insert into product values(null,'蘋果電腦',8000,100);
insert into product values(null,'iPhone7',6000,200);
insert into product values(null,'iPhone6s',4000,1000);
insert into product values(null,'iPhone6',3500,100);
insert into product values(null,'iPhone5s',3000,100);

insert into product values(null,'速食麵',4.5,1000);
insert into product values(null,'咖啡',11,200); 
insert into product values(null,'礦泉水',3,500);

命令行插入中文數據報錯:

一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句
  • 關閉服務, net stop MySql
  • 在資料庫軟體的安裝目錄下面, 修改配置文件 my.ini中客戶端的編碼為gbk
一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句
  • 重新打開命令行,開啟服務, net start MySql

4.小結

  1. 語法
  • 插入特定的列
insert into 表名(欄位列表) values(值列表)

插入所有的列

insert into 表名 values(值,值,值....) 

多行插入

insert into 表名 values(值列表),(值列表),(值列表)...

注意:

  • 插入特定的列沒有賦值的列,系統自動賦為null(前提是當前列沒有設置not null 約束)
  • 在插入指定列數據時,可以省略不插入的是一些(可以為空的列、設置默認值的列、設置AUTO_INCREMENT的列)。
  • 列名與列值的類型、個數、順序要一一對應。
  • 值不要超出列定義的長度。eg:password varchar(12) abcd123456789
  • 插入的日期和字元串,使用單引號括起來。

知識點-更新記錄

1.目標

我們數據插入成功了, 還可以對已有的數據進行更新。

2.步驟

  • 更新數據

3.講解

3.1語法

update 表 set 列 =值, 列 =值 [where 條件]

3.2練習

  • 將所有商品的價格修改為5000元
update product set price = 5000;
  • 將商品名是Mac的價格修改為18000元
UPDATE product set price = 18000 WHERE name = 'Mac';
  • 將商品名是Mac的價格修改為17000,數量修改為5
UPDATE product set price = 17000,num = 5 WHERE name = 'Mac';
  • 將商品名是速食麵的商品的價格在原有基礎上增加2元
UPDATE product set price = price+2 WHERE name = '速食麵';

4.小結

  1. 語法
update tb_name set 列1=值1[,列2=值2...] where條件
  1. 注意實際工作中,where 條件必不可少,不可省略

知識點-刪除記錄

1.目標

  • 掌握記錄的刪除

2.步驟

  • 使用delete刪除
  • 使用truncate刪除

3.講解

3.1delete

  • 語法
delete from 表 [where 條件]    注意: 刪除數據用delete,不用truncate
  • 類型

刪除表中名稱為』Mac』的記錄

delete from product where pname = 'Mac';

刪除價格小於5001的商品記錄

delete from product where price < 5001;

刪除表中的所有記錄

delete from product;

3.2truncate

truncate table 表;

4.小結

  1. 刪除記錄
delete from 表 【where 條件】 注意:實際開發中,where條件一定不能少
  1. delete 和truncate區別【面試題】 DELETE 刪除表中的數據,表結構還在; 刪除後的數據可以找回,一條一條的刪除.
  • TRUNCATE 刪除是把表直接DROP掉,然後再創建一個同樣的新表。刪除的數據不能找回。執行速度比DELETE快。
  1. 工作裡面的刪除 物理刪除: 真正的刪除了, 數據不在, 使用delete就屬於物理刪除邏輯刪除: 沒有真正的刪除, 數據還在. 搞一個標記, 其實邏輯刪除是更新 eg: del_flag 0存在 1刪除工作裡面一般使用邏輯刪除用得多 ALTER TABLE product ADD del_flag TINYINT(4) DEFAULT 0 NOT NULL;
    # 邏輯刪除UPDATE product SET del_flag=1 WHERE pid=3;

第七章-DQL操作表記錄-查詢【重點】

知識點-單表查詢
1.目標

我們上面講解了對數據的增刪改, 下面就來重點講解數據的簡單查詢.

2.路徑

  • 基本查詢語法
  • 查詢所有的列
  • 查詢某張表特定列
  • 去重查詢
  • 別名查詢
  • 運算查詢(+,-,*,/等)
  • 基本條件查詢

3.講解

3.1基本查詢語法

select  [*] [列名 ,列名] [列名 as 別名 ...] [distinct 欄位] from 表名 [where 條件] 

3.2簡單查詢

3.2.1 查詢所有的列的記錄

  • 語法
select * form 表
  • 查詢商品表裡面的所有的列
select * from product;

3.2.2查詢某張表特定列的記錄

  • 語法
select 列名,列名,列名... from 表
  • 查詢商品名字和價格
select pname, price from product;

3.2.3 去重查詢

  • 語法
SELECT DISTINCT 欄位名 FROM 表名;   //要數據一模一樣才能去重
  • 去重查詢商品的價格
select distinct price from product;

注意點: 去重針對某列, distinct前面不能先出現列名

3.2.4 別名查詢

  • 語法
select 列名 as 別名 ,列名  from 表   //列別名  as可以不寫
select 別名.* from 表 as 別名      //表別名(多表查詢, 看主頁另外一篇Mysql高級)
  • 查詢商品名稱和商品價格,商品價格通過別名『價格』來顯示
select pname , price as 價格 from product;

3.2.5運算查詢(+,-,*,/等)

  • 把商品名,和商品價格+10查詢出來
select pname ,price+10 from product;

注意

  • 運算查詢欄位,欄位之間是可以的
  • 字元串等類型可以做運算查詢,但結果沒有意義

3.3條件查詢

3.3.1語法

select ... from 表 where 條件 
//取出表中的每條數據,滿足條件的記錄就返回,不滿足條件的記錄不返回
一篇文章輕鬆掌握MYSQL資料庫基礎增刪改查SQL語句
  1. between…and… 區間查詢
eg: where price between  1000 and 3000  相當於 1000<=price<=3000 
  1. in(值,值..)
-- 查詢id為1,3,5,7的
select * from t_product where id = 1
select * from t_product where id = 3
select * from t_product where id = 5
select * from t_product where id = 7

select * from t_product where id in(1,3,5,7)
  1. like 模糊查詢 一般和_或者%一起使用_ 佔一位% 佔0或者n位
name like '張%'  --查詢姓張的用戶, 名字的字數沒有限制
name like '張_'  --查詢姓張的用戶 並且名字是兩個的字的
  1. and 多條件同時滿足
where 條件1 and 條件2 and 條件3
  1. or 任意條件滿足
where 條件1 or 條件2 or 條件3

3.3.2練習

  • 查詢商品價格>3000的商品
select * from product where price > 3000;
  • 查詢id=1的商品
select * from product where pid = 1;
  • 查詢id<>1的商品
select * from product where pid <> 1;
  • 查詢價格在3000到6000之間的商品
select * from product where price between 3000 and 6000;
  • 查詢id在1,5,7,15範圍內的商品
select * from product where id = 1;
select * from product where id = 5;
select * from product where id = 7;
select * from product where id = 15;

select * from product where id in (1,5,7,15);
  • 查詢商品名以iPho開頭的商品(iPhone系列)
select * from product where pname like 'iPho%';
  • 查詢商品價格大於3000並且數量大於20的商品 (條件 and 條件 and…)
select * from product where price > 3000 and num > 20;
  • 查詢id=1或者價格小於3000的商品
select * from product where pid = 1 or price < 3000;

4.小結

  • 語法
select [*]|[欄位列表] from 表名 [where條件]
select * from tb_name;
  • 條件where 條件
  • between … and …
  • in
  • like _|%

知識點-排序查詢

1.目標

  • 能夠使用SQL語句進行排序

2.分析

有時候我們需要對查詢出來的結果排序顯示,那麼就可以通過ORDER BY子句將查詢出的結果進行排序。排序可以根據一個欄位排,也可以根據多個欄位排序,排序只是對查詢的結果集排序,並不會影響表中數據的順序。

3.講解

3.0 環境的準備

# 創建學生表(有sid,學生姓名,學生性別,學生年齡,分數列,其中sid為主鍵自動增長)
CREATE TABLE student(
    sid INT PRIMARY KEY auto_increment,
    sname VARCHAR(40),
    sex VARCHAR(10),
    age INT,
  score DOUBLE
);

INSERT INTO student VALUES(null,'zs','男',18,98.5);
INSERT INTO student VALUES(null,'ls','女',18,96.5);
INSERT INTO student VALUES(null,'ww','男',15,50.5);
INSERT INTO student VALUES(null,'zl','女',20,98.5);
INSERT INTO student VALUES(null,'tq','男',18,60.5);
INSERT INTO student VALUES(null,'wb','男',38,98.5);
INSERT INTO student VALUES(null,'小麗','男',18,100);
INSERT INTO student VALUES(null,'小紅','女',28,28);
INSERT INTO student VALUES(null,'小強','男',21,95);

3.1單列排序

  1. 語法: 只按某一個欄位進行排序,單列排序
SELECT 欄位名 FROM 表名 [WHERE 條件] ORDER BY 欄位名 [ASC|DESC];  //ASC: 升序,默認值; DESC: 降序
  1. 練習: 以分數降序查詢所有的學生
SELECT * FROM student ORDER BY score DESC

3.2組合排序

  1. 語法: 同時對多個欄位進行排序,如果第1個欄位相等,則按第2個欄位排序,依次類推
SELECT 欄位名 FROM 表名 WHERE 欄位=值 ORDER BY 欄位名1 [ASC|DESC], 欄位名2 [ASC|DESC];
  1. 練習: 以分數降序查詢所有的學生, 如果分數一致,再以age降序
SELECT * FROM student ORDER BY score DESC, age DESC

4.小結

  1. 排序的語法
select * from tb_name where條件  order by 排序要使用的列[ASC|DESC [,第二列...]]
order by 列 asc/desc, 列 asc/desc;
asc: 升序【默認值】
desc: 降序
  1. 應用場景 商城裡面 根據價格, 銷量, 上架時間, 評論數… 社交裡面 根據距離排序排序不改變表中數據的順序,只是改變查詢結果集的顯示順序

知識點-聚合函數

1.目標

  • 能夠使用聚合函數

2.分析

之前我們做的查詢都是橫向查詢,它們都是根據條件一行一行的進行判斷,而使用聚合函數查詢是==縱向查詢==,它是對一列的值進行計算,然後返回==一個結果值==。聚合函數會忽略空值NULL

聚合函數用於數學計算統計!

3.講解

聚合函數作用
max(列名)求這一列的最大值
min(列名)求這一列的最小值
avg(列名)求這一列的平均值
count(列名)統計這一列有多少條記錄
sum(列名)對這一列求總和
  1. 語法
SELECT 聚合函數(列名) FROM 表名 [where 條件];
  1. 練習
-- 求出學生表裡面的最高分數
SELECT MAX(score) FROM student
-- 求出學生表裡面的最低分數
SELECT MIN(score) FROM student
-- 求出學生表裡面的分數的總和(忽略null值)
SELECT SUM(score) FROM student
-- 求出學生表裡面的平均分
SELECT AVG(score) FROM student
-- 統計學生的總人數 (忽略null) 
SELECT COUNT(sid) FROM student
SELECT COUNT(*) FROM student

注意: 聚合函數會忽略空值NULL

我們發現對於NULL的記錄不會統計,建議如果統計個數則不要使用有可能為null的列,但如果需要把NULL也統計進去呢?我們可以通過 IFNULL(列名,默認值) 函數來解決這個問題. 如果列不為空,返回這列的值。如果為NULL,則返回默認值。

4.小結

  1. 語法
select 聚合函數(列) from 表名;

2.聚合函數 用於數學統計:

  • max() 最大值
  • min() 最小值
  • sum() 求和
  • avg() 平均值
  • count() 統計數量:求一個表中的記錄數,建議使用count(*)

3.注意事項

  • 聚合函數會忽略null值的

知識點-分組查詢

1.目標

  • 能夠使用SQL語句進行分組查詢

2.分析

分組查詢是指使用 GROUP BY語句對查詢信息進行分組

GROUP BY怎麼分組的? 將分組欄位結果中相同內容作為一組,如按性別將學生分成兩組

==GROUP BY將分組欄位結果中相同內容作為一組,並且返回每組的第一條數據,所以單獨分組沒什麼用處。分組的目的就是為了統計,一般分組會跟聚合函數一起使用==

3.講解

3.1分組

  1. 語法
SELECT 欄位1,欄位2... FROM 表名  [where 條件] GROUP BY 列 [HAVING 條件];
  1. 練習:根據性別分組, 統計每一組學生的總人數
-- 根據性別分組, 統計每一組學生的總人數
SELECT sex, count(*) FROM student GROUP BY sex

3.2 分組後篩選 having

  • 練習根據性別分組, 統計每一組學生的總人數> 5的(分組後篩選)
SELECT sex, count(*) FROM student GROUP BY sex HAVING count(*) > 5

4.小結

  1. 分組語法
select 分組列,分組統計結果 from 表 [where條件] group by 列 [having條件]
  1. 注意事項根據某一列進行分組,
    將分組欄位結果中相同內容作為一組; 有幾組 返回的記錄就有幾條單獨分組 沒有意義, 返回每一組的第一條記錄分組的目的一般為了做統計使用,
    所以經常和聚合函數一起使用在分組裡面, 如果select後面的列沒有出現在group by後面 展示這個組的這個列的第一個數據使用分組時,注意要進行查詢顯示的是分組列和分組統計結果。
  2. where和having的區別【面試】
子名作用
where 子句1) 對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,即先過濾再分組。2) where後面不可以使用聚合函數
having字句1) having 子句的作用是篩選滿足條件的組,即在分組之後過濾數據,即先分組再過濾。2) having後面可以使用聚合函數

知識點-分頁查詢

1.目標

  • 掌握分頁查詢

2.分析

LIMIT是限制的意思,所以LIMIT的作用就是限制查詢記錄的條數. 經常用來做分頁查詢

3.講解

  1. 語法
select ... from .... limit a ,b.
LIMIT a,b;
a:起始行數,從0開始計數,如果省略,默認就是0; a=(當前頁碼-1)*b;
b: 返回的行數
  1. 練習
eg: 分頁查詢學生, 每一頁查詢4條  
b=4;   a=(當前頁碼-1)*b;

第一頁: a=0, b=4;
第二頁: a=4, b=4;
第三頁: a=8, b=4;

4.小結

  1. 語法
limit a,b; 
a:從第幾條數據開始查詢, 從0開始計數 【a=(當前頁碼-1)*b】
b: 一頁查詢的數量【固定的,自定義的】
  1. 應用場景如果資料庫裡面的數據量特別大, 我們不建議一次查詢出來. 為了提升性能和用戶體驗, 使用分頁

查詢的語法小結

select...from...where...group by...order by...limit

select...from...where...
select...from...where...order by...
select...from...where...limit...
select...from...where...order by...limit

Mysql進階:多表聯合查詢,外鍵約束,多表間關係,連接查詢,內連接查詢,隱式內連接,事務特性和隔離級別

原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/281295.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
投稿專員的頭像投稿專員
上一篇 2024-12-21 13:17
下一篇 2024-12-21 13:17

相關推薦

發表回復

登錄後才能評論