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


學習目標
- 能夠理解數據庫的概念
- 能夠安裝MySql數據庫
- 能夠使用SQL語句操作數據庫
- 能夠使用SQL語句操作表結構
- 能夠使用SQL語句進行數據的添加修改和刪除的操作
- 能夠使用SQL語句進行條件查詢數據
- 能夠使用SQL語句進行排序
- 能夠使用聚合函數
- 能夠使用SQL語句進行分組查詢
- 能夠使用SQL語句進行分頁查詢
第一章-數據庫概述
1. 知識點-數據庫的介紹
沒有數據庫之前,如果我們要進行數據存儲,有幾種方式:
- 我們可以使用java集合等方式將數據保存在內存中,但是數據不能持久化保存,斷電/程序退出,數據就清除了
- 我們還可以將數據保存在普通文件中,可以持久化保存,但是查找,增加,修改,刪除數據比較麻煩,效率低
所以我們需要一個既可以持久化保存數據又可以方便操作的地方來存儲數據,這就是我們接下來要給大家介紹的數據庫
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: 嵌入式的小型數據庫,應用在手機端.


知識點1:數據庫結構
數據庫管理程序(DBMS)可以管理多個數據庫,一般開發人員會針對每一個應用創建一個數據庫。為保存應用中實體的數據,一般會在數據庫創建多個表,以保存程序中實體的數據。
數據庫管理系統、數據庫和表的關系如圖所示:


小結
- 關系型數據庫按行存儲
- 一個數據庫下可以有多張表,一張表可以有多條記錄
- 一般情況下,一個項目對應一個數據庫,一個實體類對應一張表,表中的每一條記錄對應一個java對象
知識點2-Sql介紹
1.什么是sql?
- SQL:Structure Query Language。(結構化查詢語言),通過sql操作數據庫(操作數據庫,操作表,操作數據)
- SQL被美國國家標準局(ANSI)確定為關系型數據庫語言的美國標準,后來被國際化標準組織(ISO)采納為關系數據庫語言的國際標準
- 各數據庫廠商(MySql,oracle,sql server)都支持ISO的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 數據控制語言),如:對用戶權限的設置


4.小結
- SQL:結構化查詢語言,是關系型數據庫的操作標準,但是每個數據庫又會有其獨有的方言
- 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.小結
- 創建數據庫 create database db_name;
- 修改數據庫 alter database db_name;
- 刪除數據庫 drop database db_name;
- 查看數據庫 show databases;
第五章-DDL操作表


知識點-創建表【重點】
1.目標
我們第四章已經把數據庫的CRUD講解完了,下面我們就學習創建表
2.步驟
- 創建表的語法介紹
- MySql常見的類型
- MySql約束
3.講解
3.1語法
create table 表(
列 類型 [約束],
列 類型 [約束]
...
);
3.2 類型


- 整型 一般使用int 或者bigint,偶爾使用tinyint tinyint — byte smallint — short int — int bigint — long unsigned:表示無符號數字,最高位不表示正負zerofill:0填充,設置一個數字的長度,int(4): 存儲1:0001tinyint 經常用于表示boolean類型 1表示true 0 表示false
- 浮點/雙精度型 默認的范圍 float或者double指定范圍 float(M,D) eg: float(4,2) 表達的范圍: -99.99~99.99,M表示數字位長度,D表示小數位長度float(5,2):100.01
- 字符串固定長度 char(n) eg: char(20), 最大能存放20個字符. ‘aaa’, 還是占20個字符的空間可變長度 varchar(n) eg:varchar(20), 最大能存放20個字符. ‘aaa’, 占3個字符的空間 插入數據時 數據需要使用單引號包起來一般使用varchar(n) 節省空間; 如果長度(eg:身份證)是固定的話 可以使用char(n) 性能高一點
- 關于大文件一般在數據庫里面很少存文件的內容, 一般存文件的路徑一般不使用二進制存, 使用varchar(n)存文件的路徑
- 日期DATE 只有日期DATETIME 日期和時間 ,一般如果需要設置默認時間, 我們使用TimeStamp數據類型
- 數值: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列:
- 給id設置為int類型, 添加主鍵約束, 自動增長
- 或者給id設置為字符串類型,添加主鍵約束, 不能設置自動增長
3.4練習
- 創建一張學生表(含有id字段,姓名字段,性別字段. id為主鍵自動增長)
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(40) NOT NULL,
sex INT
);
4.小結
- 語法
create table 表名(
列 類型 【約束】,
列 類型 【約束】
);
- 類型數值:int bigint double 偶爾使用tinyint字符:char(n) 固定長度 varchar(n) 可變長度時間:Date DateTime TimeStamp
- 約束not null 非空unique 唯一primary key 主鍵(非空+唯一)auto_increment 自動增長
- iid可以設置成int類型, 設置成primary key, 添加auto_increment 作為記錄唯一標識
- 注意:
列名:見名識義 多個單詞用_拼接
列類型: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.小結
- 修改表都是以alter table tb_name打頭
- 增加列 add
- 修改列的類型 約束 modify
- 修改列的名字 類型 約束 change
- 刪除列 drop
- 修改表名 rename
知識點-刪除表【掌握】
1.目標
表創建好了, 我們還可以刪除。 掌握表的刪除
2.步驟
- 刪除表
3.講解
- 語法drop table 表名;
- 把teacher表刪除
drop table teacher;
4.小結
- 刪除表語法
drop table 表名;
- 創建表create table tb_name(
列名 類型 約束 ,…); - 修改表add 、modify 、change 、 drop 、rename
- 查看表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);
命令行插入中文數據報錯:


- 關閉服務, net stop MySql
- 在數據庫軟件的安裝目錄下面, 修改配置文件 my.ini中客戶端的編碼為gbk


- 重新打開命令行,開啟服務, net start MySql
4.小結
- 語法
- 插入特定的列
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.小結
- 語法
update tb_name set 列1=值1[,列2=值2...] where條件
- 注意實際工作中,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.小結
- 刪除記錄
delete from 表 【where 條件】 注意:實際開發中,where條件一定不能少
- delete 和truncate區別【面試題】 DELETE 刪除表中的數據,表結構還在; 刪除后的數據可以找回,一條一條的刪除.
- TRUNCATE 刪除是把表直接DROP掉,然后再創建一個同樣的新表。刪除的數據不能找回。執行速度比DELETE快。
- 工作里面的刪除 物理刪除: 真正的刪除了, 數據不在, 使用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 條件
//取出表中的每條數據,滿足條件的記錄就返回,不滿足條件的記錄不返回


- between…and… 區間查詢
eg: where price between 1000 and 3000 相當于 1000<=price<=3000
- 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)
- like 模糊查詢 一般和_或者%一起使用_ 占一位% 占0或者n位
name like '張%' --查詢姓張的用戶, 名字的字數沒有限制
name like '張_' --查詢姓張的用戶 并且名字是兩個的字的
- and 多條件同時滿足
where 條件1 and 條件2 and 條件3
- 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單列排序
- 語法: 只按某一個字段進行排序,單列排序
SELECT 字段名 FROM 表名 [WHERE 條件] ORDER BY 字段名 [ASC|DESC]; //ASC: 升序,默認值; DESC: 降序
- 練習: 以分數降序查詢所有的學生
SELECT * FROM student ORDER BY score DESC
3.2組合排序
- 語法: 同時對多個字段進行排序,如果第1個字段相等,則按第2個字段排序,依次類推
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];
- 練習: 以分數降序查詢所有的學生, 如果分數一致,再以age降序
SELECT * FROM student ORDER BY score DESC, age DESC
4.小結
- 排序的語法
select * from tb_name where條件 order by 排序要使用的列[ASC|DESC [,第二列...]]
order by 列 asc/desc, 列 asc/desc;
asc: 升序【默認值】
desc: 降序
- 應用場景 商城里面 根據價格, 銷量, 上架時間, 評論數… 社交里面 根據距離排序排序不改變表中數據的順序,只是改變查詢結果集的顯示順序
知識點-聚合函數
1.目標
- 能夠使用聚合函數
2.分析
之前我們做的查詢都是橫向查詢,它們都是根據條件一行一行的進行判斷,而使用聚合函數查詢是==縱向查詢==,它是對一列的值進行計算,然后返回==一個結果值==。聚合函數會忽略空值NULL
聚合函數用于數學計算統計!
3.講解
聚合函數 | 作用 |
max(列名) | 求這一列的最大值 |
min(列名) | 求這一列的最小值 |
avg(列名) | 求這一列的平均值 |
count(列名) | 統計這一列有多少條記錄 |
sum(列名) | 對這一列求總和 |
- 語法
SELECT 聚合函數(列名) FROM 表名 [where 條件];
- 練習
-- 求出學生表里面的最高分數
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.小結
- 語法
select 聚合函數(列) from 表名;
2.聚合函數 用于數學統計:
- max() 最大值
- min() 最小值
- sum() 求和
- avg() 平均值
- count() 統計數量:求一個表中的記錄數,建議使用count(*)
3.注意事項
- 聚合函數會忽略null值的
知識點-分組查詢
1.目標
- 能夠使用SQL語句進行分組查詢
2.分析
分組查詢是指使用 GROUP BY語句對查詢信息進行分組
GROUP BY怎么分組的? 將分組字段結果中相同內容作為一組,如按性別將學生分成兩組
==GROUP BY將分組字段結果中相同內容作為一組,并且返回每組的第一條數據,所以單獨分組沒什么用處。分組的目的就是為了統計,一般分組會跟聚合函數一起使用==
3.講解
3.1分組
- 語法
SELECT 字段1,字段2... FROM 表名 [where 條件] GROUP BY 列 [HAVING 條件];
- 練習:根據性別分組, 統計每一組學生的總人數
-- 根據性別分組, 統計每一組學生的總人數
SELECT sex, count(*) FROM student GROUP BY sex
3.2 分組后篩選 having
- 練習根據性別分組, 統計每一組學生的總人數> 5的(分組后篩選)
SELECT sex, count(*) FROM student GROUP BY sex HAVING count(*) > 5
4.小結
- 分組語法
select 分組列,分組統計結果 from 表 [where條件] group by 列 [having條件]
- 注意事項根據某一列進行分組, 將分組字段結果中相同內容作為一組; 有幾組 返回的記錄就有幾條單獨分組 沒有意義, 返回每一組的第一條記錄分組的目的一般為了做統計使用, 所以經常和聚合函數一起使用在分組里面, 如果select后面的列沒有出現在group by后面 展示這個組的這個列的第一個數據使用分組時,注意要進行查詢顯示的是分組列和分組統計結果。
- where和having的區別【面試】
子名 | 作用 |
where 子句 | 1) 對查詢結果進行分組前,將不符合where條件的行去掉,即在分組之前過濾數據,即先過濾再分組。2) where后面不可以使用聚合函數 |
having字句 | 1) having 子句的作用是篩選滿足條件的組,即在分組之后過濾數據,即先分組再過濾。2) having后面可以使用聚合函數 |
知識點-分頁查詢
1.目標
- 掌握分頁查詢
2.分析
LIMIT是限制的意思,所以LIMIT的作用就是限制查詢記錄的條數. 經常用來做分頁查詢
3.講解
- 語法
select ... from .... limit a ,b.
LIMIT a,b; |
a:起始行數,從0開始計數,如果省略,默認就是0; a=(當前頁碼-1)*b; |
b: 返回的行數 |
- 練習
eg: 分頁查詢學生, 每一頁查詢4條 ?
b=4; ? a=(當前頁碼-1)*b;
第一頁: a=0, b=4;
第二頁: a=4, b=4;
第三頁: a=8, b=4;
4.小結
- 語法
limit a,b;
a:從第幾條數據開始查詢, 從0開始計數 【a=(當前頁碼-1)*b】
b: 一頁查詢的數量【固定的,自定義的】
- 應用場景如果數據庫里面的數據量特別大, 我們不建議一次查詢出來. 為了提升性能和用戶體驗, 使用分頁
查詢的語法小結
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進階:多表聯合查詢,外鍵約束,多表間關系,連接查詢,內連接查詢,隱式內連接,事務特性和隔離級別
版權聲明:本文內容由互聯網用戶自發貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發現本站有涉嫌抄襲侵權/違法違規的內容, 請發送郵件至 舉報,一經查實,本站將立刻刪除。