該知道的都知道 不知道的慢慢了解 MySQL數據庫操作

一、數據庫操作

  • 查看所有數據庫
show databases;
  • 創建數據庫
create database db_name charset=utf8;
create database db_name character set utf8mb4;

說明:CREATE:創建命令;DATABASE:數據庫關鍵字;db_name:用戶自定義數據庫名稱

  • 查看當前使用的數據庫
select database();
  • 使用/切換數據庫
use 數據庫名;
  • 刪除數據庫
drop database 數據庫名;
  • 重命名數據庫
rename DATABASE old_name TO new_name; # innodb不支持,mysql默認就是innodb

二、數據表操作

1 查看數據表

  • 查看當前數據庫中所有表
show tables;
  • 查看錶結構
desc 表名;

2 創建數據表

CREATE TABLE table_name(
	column1 type [約束 comment 註釋],
	column2 type,
	column3 type,
	.....
	columnN type
);

注意:最後一個字段後不能添加逗號
例:創建班級表

create table class(
	id int unsigned auto_increment primary key not null,
	name varchar(10)
);

例2:創建職員表
comment 爲字段的註釋,可選

CREATE TABLE employee(
	id INT PRIMARY KEY AUTO_INCREMENT COMMENT '職員編號',
	emp_name VARCHAR(50) COMMENT '職員姓名',
	emp_date DATETIME COMMENT '入職時間'
)DEFAULT CHARACTER SET 'UTF8MB4';

3 修改表結構

數據表創建完成後,在需求變動時可能需要對數據表中的字段進行修改、增加、刪除等各種維護操作

  • 增加字段
alter table 表名 add 字段名 類型 [first/after 列名];-- 末尾添加一列:地址
alter table employee add address varchar(200);
-- 指定位置添加一列:生日
alter table employee add birthday datetime after emp_name;
-- 開頭位置
alter table employee add empid int first;

查看錶結構 desc employee;

  • 刪除字段
alter table 表名 drop 字段名;
例:
alter table employee drop empid;

查看錶結構 desc employee;

  • 修改字段
  • 修改字段:修改名字和類型約束
alter table 表名 change 原名 新名 類型及約束;
例:
-- 修改字段名
alter table employee change emp_name empname varchar(100);
  • 修改字段:修改類型約束
alter table 表名 modify 字段名 類型及約束;
-- 修改是否爲空
alter table employee modify empname varchar(100) not null;
  • 修改默認值
alter table 表名 alter 字段名 set default 默認值;
-- 修改地址默認值
alter table employee alter address set default "空";

注意:默認值類型要和字段類型保持一致。

4 刪除表

drop table 表名;
例:
drop table class;

5 重命名錶

RENAME TABLE 原名 TO 新名;
-- 修改表名
rename table employee to emp;

6 查看錶的創建語句

show create table 表名;
例:
show create table emp;

三、數據庫的增刪改查(crud)

curd的解釋: 代表創建(Create)、更新(Update)、讀取(Retrieve)和刪除(Delete)
創建職員表用於測試

-- 創建職員表
CREATE TABLE employee(
	empno int auto_increment primary key comment '人物編號',
	empname VARCHAR(10) comment '人物名稱',
	nickname varchar(20) comment '暱稱',
	job VARCHAR(9) comment '工作崗位',
	mgr int comment '上級編號',
	hirdate DATE comment '入夥時間',
	salary int comment '薪水待遇',
	comm int comment '獎金',
	deptno int comment '所屬部門'
);
-- 創建部門表
CREATE TABLE department (
	deptno int auto_increment primary key comment '部門編號',
	deptname varchar(50) comment '部門名稱',
	location varchar(100) comment '部門地點'
);

(一)INSERT 增加數據

-- 完整格式
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
	[INTO] tbl_name [(col_name,...)]
	VALUES ({expr | DEFAULT},...),(...),...
	[ ON DUPLICATE KEY UPDATE col_name=expr, ... ]
-- 常用格式
INSERT INTO 表名(字段1,字段2....) values(...),(...);

1 單行插入

  • 全列插入:值的順序與表中字段的順序對應
-- 格式
insert into 表名 values(...)
-- 實例
INSERT INTO department VALUES(10, '中央', '梁山本部');
INSERT INTO department VALUES(20, '近衛', '梁山本部');
INSERT INTO department VALUES(21, '軍委1部', '梁山本部');
INSERT INTO department VALUES(22, '軍委2部', '梁山本部');
  • 部分列插入:值的順序與給出的列順序對應
-- 格式
insert into 表名(1,...) values(1,...)
-- 實例
INSERT INTO department(deptno, deptname, location)
	VALUES(50, '後勤部', '梁山本部');
INSERT INTO department(deptno, deptname, location)
	VALUES(60, '軍情部', '梁山本部');
INSERT INTO department(deptno, deptname, location)
	VALUES(70, '迎賓部', '梁山本部');
INSERT INTO department(deptno, deptname, location)
	VALUES(80, '刑罰部', '梁山本部');

2 多行插入

-- 全列插入
insert into 表名 values(...),(...)...;
-- 指定列插入
insert into 表名(1,...) values(1,...),(2...)...

-- 實例
INSERT INTO employee
VALUES
(1, '宋江', '天魁星·及時雨', '頭領', null,'2015-11-8', 800, 200000, 1),
(2, '盧俊義', '天罡星·玉麒麟','盧俊義', 1,'2018-4-6', 800, 100000, 1),
(3, '吳用', '天機星·智多星', '頭領', 1,'2012-8-10', 800, 100000, 1),
(21, '關勝', '天勇星·大刀','五虎上將', 1,'2017-4-6', 20000, 2000, 20),
(22, '林沖', '天雄星 豹子頭','五虎上將', 1,'2018-4-6', 21000, 1800, 20),
(23, '秦明', '天猛星 霹靂火','五虎上將', 1,'2018-4-6', 19000, 1900, 20),
(24, '呼延灼', '天威星 雙鞭','五虎上將', 1,'2019-4-6', 22000, 1100, 20),
(25, '董平', '天立星·雙槍將','五虎上將', 1,'2017-4-6', 18000, 1200, 20),
(2101, '花榮', '天英星 小李廣','騎兵頭領', 1,'2016-4-6', 16000, 2000, 21),
(2102, '徐寧', '天佑星 金槍手','騎兵都統', 2101,'2015-4-6', 12000, 1200, 21),
(2103, '楊志', '天暗星 青面獸','騎兵都統', 2101,'2016-4-6', 13000, 1200, 21),
(2104, '索超', '天空星 急先鋒','騎兵都統', 2101,'2018-4-6', 16000, 1100, 21),
(2105, '張青', '地刑星 菜園子','騎兵都統', 2101,'2016-4-6', 14000, 1000, 21),
(2106, '史進', '天微星 九紋龍','騎兵都統', 2101,'2017-4-6', 15000, 1100, 21),
(2107, '穆虹', '天究星 沒遮攔','騎兵都統', 2101,'2015-4-6', 14000, 1000, 21),
(2108, '朱仝', '天滿星 美髯公','騎兵都統', 2101,'2016-4-6', 14000, 1000, 21),
(2109, '王英', '地微星 矮腳虎','騎兵都統', 2101,'2017-4-6', 12000, 900, 21),
(2110, '扈三娘', '地慧星 一丈青','騎兵都統', 2101,'2017-4-6', 11000, 800, 21),
(2111, '呂方', '地佐星 小溫侯','騎兵都統', 2101,'2016-4-6', 12000, 900, 21),
(2112, '郭盛', '地佑星 賽仁貴','騎兵都統', 2101,'2016-4-6', 12000, 900, 21),
(2201, '魯智深', '天孤星 花和尚','步軍頭領', 1,'2015-4-6', 16000, 2000, 22),
(2202, '武松', '天傷星 行者','步軍都統', 2201,'2015-4-6', 16000, 1400, 22),
(2203, '劉唐', '天異星 赤髪鬼','步軍都統', 2201,'2014-4-6', 13000, 1200, 22),
(2204, '雷橫', '天退星 插翅虎','步軍都統', 2201,'2016-4-6', 12000, 1200, 22),
(2205, '李逵', '天殺星 黑旋風','步軍都統', 2201,'2018-4-6', 11000, 1200, 22),
(2206, '燕青', '天巧星 浪子','步軍都統', 2201,'2016-4-6', 13000, 1200, 22),
(2207, '石秀', '天慧星·拚命三郎','步軍都統', 2201,'2015-4-6', 12000, 1200, 22),
(2208, '楊雄', '天牢星 病關索','步軍都統', 2201,'2014-4-6', 13000, 1200, 22),
(2209, '解珍', '天暴星 兩頭蛇','步軍都統', 2201,'2013-4-6', 12000, 1200, 22),
(2210, '解寶', '天哭星 雙尾蠍','步軍都統', 2201,'2013-4-6', 12000, 1200, 22),
(2211, '孔明', '地猖星 毛頭星','步軍偏將', 2201,'2015-4-6', 13000, 1100, 22),
(2212, '孔亮', '地狂星 獨火星','步軍偏將', 2201,'2016-4-6', 13000, 1000, 22),
(2213, '樊瑞', '地默星 混世魔王','步軍偏將', 1201,'2014-4-6', 12000, 1000, 22),
(2214, '鮑旭', '地暴星 喪門神','步軍偏將', 1201,'2015-4-6', 12000, 900, 22),
(2215, '項充', '地飛星 八臂哪吒','步軍偏將', 2201,'2016-4-6', 11000, 900, 22),
(2216, '李袞', '地走星 飛天大聖','步軍偏將', 2201,'2016-4-6', 12000, 1100, 22),
(2217, '薛永', '地幽星 病大蟲','步軍偏將', 2201,'2014-4-6', 11000, 900, 22),
(2218, '施恩', '地伏星 金眼彪','步軍偏將', 2201,'2014-4-6', 12000, 900, 22),
(2219, '穆春', '地鎮星 小遮攔','步軍偏將', 2201,'2015-4-6', 12800, 900, 22),
(2220, '李忠', '地僻星 打虎將','步軍偏將', 2201,'2013-4-6', 11000, 1100, 22),
(2221, '鄭天壽', '地異星·白麪郎君','步軍偏將', 2201,'2016-4-6', 12000, 1100, 22),
(2222, '宋萬', '地魔星 雲裏金剛','步軍偏將', 2201,'2016-4-6', 11000, 900, 22),
(2223, '杜遷', '地妖星 摸着天','步軍偏將', 2201,'2017-4-6', 10000, 900, 22),
(2224, '鄒淵', '地短星 出林龍','步軍偏將', 2201,'2017-4-6', 10000, 900, 22),
(2225, '鄒潤', '地角星 獨角龍','步軍偏將', 2201,'2018-4-6', 10000, 1100, 22),
(2226, '龔旺', '地捷星 花項虎','步軍偏將', 2201,'2018-4-6', 11000, 1000, 22),
(2227, '丁得孫', '地速星 中箭虎','步軍偏將', 2201,'2018-4-6', 12000, 900, 22),
(2228, '焦挺', '地惡星 沒面目','步軍偏將', 2201,'2018-4-6', 11000, 900, 22),
(2229, '石勇', '地醜星 石將軍','步軍偏將', 2201,'2018-4-6', 13000, 900, 22),
(2301, '李俊', '天壽星 混江龍','水軍頭領', 1,'2016-4-6', 16000, 2000, 23),
(2302, '張橫', '天平星 船火兒','水軍都統', 2301,'2017-4-6', 13000, 1000, 23),
(2303, '張順', '天損星 浪裏白條','水軍都統', 2301,'2018-4-6', 12000, 1100, 23),
(2304, '阮小二', '天劍星 立地太歲','水軍都統', 2301,'2014-4-6', 14000, 1000, 23),
(2305, '阮小五', '天罪星 短命二郎','水軍都統', 2301,'2014-4-6', 14000, 1200, 23),
(2306, '阮小七', '天敗星 活閻羅','水軍都統', 2301,'2014-4-6', 14000, 1000, 23),
(2307, '童威', '地進星 出洞蛟','水軍偏將', 2301,'2018-4-6', 13000, 1100, 23),
(2308, '童猛', '地退星 翻江蜃','水軍偏將', 2301,'2018-4-6', 12000, 1000, 23),
(3001, '柴進', '天貴星 小旋風','財務部長', 1,'2014-4-6', 15000, 2000, 30),
(3002, '李應', '天富星 撲天雕','財務會計', 3001,'2014-4-6', 13000, 2000, 30),
(3003, '皇甫端', '地獸星 紫髯伯','財務會計', 3001,'2015-4-6', 13000, 2000, 30),
(4001, '公孫勝', '天閒星 入雲龍','參謀長', 1,'2015-8-6', 15000, 2000, 40),
(4002, '張清', '天捷星 沒羽箭','參謀', 4001,'2016-9-15', 13000, 2000, 40),
(4003, '朱武', '地魁星 神機軍師','參謀', 4001,'2017-6-20', 13000, 2000, 40),
(4004, '安道全', '地靈星 神醫','參謀', 4001,'2015-10-18', 13000, 2000, 40),
(4005, '宋清', '地俊星 鐵扇子','參謀', 4001,'2018-11-16', 13000, 2000, 40),
(5001, '金大堅', '地巧星 玉臂匠','後勤部長', 1,'2015-2-1', 9000, 3000, 50),
(5002, '蔣敬', '地會星 神算子','後勤雜事', 5001,'2015-4-20', 9000, 2000, 50),
(5003, '孟康', '地滿星 玉幡竿','後勤雜事', 5001,'2016-5-10', 9000, 2000, 50),
(5004, '侯鍵', '地遂星 通臂猿','後勤雜事', 5001,'2016-8-16', 9000, 2000, 50),
(5005, '裴宣', '地正星 鐵面孔目','後勤雜事', 5001,'2017-12-3', 9000, 2000, 50),
(5006, '湯隆', '地孤星 金錢豹子','後勤雜事', 5001,'2017-1-20', 9000, 2000, 50),
(5007, '凌陣', '地輔星 轟天雷','後勤雜事', 5001,'2018-8-20', 9000, 2000, 50),
(5008, '李雲', '地察星 青眼虎','後勤雜事', 5001,'2018-8-21', 9000, 2000, 50),
(5009, '曹正', '地羈星 操刀鬼','後勤雜事', 5001,'2018-9-10', 9000, 2000, 50),
(5010, '朱富', '地藏星 笑面虎','後勤雜事', 5001,'2018-9-15', 9000, 2000, 50),
(5011, '陶宗旺', '地理星 九尾龜','後勤雜事', 5001,'2018-9-22', 9000, 2000, 50),
(5012, '鬱保四', '地健星 險道神','後勤雜事', 5001,'2018-10-6', 9000, 2000, 50),
(6001, '戴宗', '天速星 神行太保','軍情部長', 1,'2014-2-16', 5000, 10000, 50),
(6002, '樂和', '地樂星 鐵叫子','軍情都統', 6001,'2015-12-13', 2000, 8000, 50),
(6003, '時遷', '地賊星 鼓上蚤','軍情都統', 6001,'2015-10-16', 2000, 8000, 50),
(6004, '段景住', '地狗星 金毛犬','軍情都統', 6001,'2016-6-19', 2000, 8000, 50),
(6005, '白勝', '地耗星 白日鼠','軍情都統', 6001,'2016-8-20', 2000, 8000, 50),
(6006, '黃信', '地煞星 鎮三山','軍情遠哨', 6001,'2017-4-6', 2000, 8000, 50),
(6007, '孫立', '地勇星 病尉遲','軍情遠哨', 6001,'2018-12-6', 2000, 8000, 50),
(6008, '宣贊', '地傑星 醜郡馬','軍情遠哨', 6001,'2018-9-30', 2000, 8000, 50),
(6009, '郝思文', '地雄星 井木犴','軍情遠哨', 6001,'2018-5-21', 2000, 8000, 50),
(6010, '韓滔', '地威星 百勝將','軍情遠哨', 6001,'2018-5-21', 2000, 8000, 50),
(6011, '彭屺', '地英星 天目將','軍情遠哨', 6001,'2017-2-16', 2000, 8000, 50),
(6012, '單廷圭', '地奇星 聖水將','軍情遠哨', 6001,'2016-10-6', 2000, 8000, 50),
(6013, '魏定國', '地猛星 神火將','軍情遠哨', 6001,'2018-12-3', 2000, 8000, 50),
(6014, '歐鵬', '地闢星 摩雲金翅','軍情遠哨', 6001,'2017-11-4', 2000, 8000, 50),
(6015, '鄧飛', '地闔星 火眼狻猊','軍情遠哨', 6001,'2017-11-5', 2000, 8000, 50),
(6016, '燕順', '地強星 錦毛虎','軍情遠哨', 6001,'2018-10-16', 2000, 8000, 50),
(6017, '馬麟', '地明星 鐵笛仙','軍情遠哨', 6001,'2018-10-16', 2000, 8000, 50),
(6018, '陳達', '地周星 跳澗虎','軍情遠哨', 6001,'2018-9-20', 2000, 8000, 50),
(6019, '楊春', '地隱星 白花蛇','軍情遠哨', 6001,'2018-9-20', 2000, 8000, 50),
(6020, '楊林', '地暗星 錦豹子','軍情遠哨', 6001,'2018-9-20', 2000, 8000, 50),
(6021, '周通', '地空星 小霸王','軍情遠哨', 6001,'2018-5-30', 2000, 8000, 50),
(7001, '孫新', '地數星 小尉遲','東山迎賓', 3,'2014-8-6', 8000, 9000, 70),
(7002, '顧大嫂', '地陰星 母大蟲','東山迎賓', 3,'2014-8-6', 8000, 9000, 70),
(7003, '張青', '地刑星 菜園子','西山迎賓', 3,'2015-6-12', 8000, 9000, 70),
(7004, '孫兒娘', '地壯星 母夜叉','西山迎賓', 3,'2015-6-12', 8000, 9000, 70),
(7005, '朱貴', '地囚星 旱地忽律','南山迎賓', 3,'2013-5-25', 8000, 9000, 70),
(7006, '杜興', '地全星 鬼瞼兒','南山迎賓', 3,'2013-5-26', 8000, 9000, 70),
(7007, '李立', '地奴星 催命判官','北山迎賓', 3,'2015-4-18', 8000, 9000, 70),
(7008, '王定六', '地劣星 活閃婆','北山迎賓', 3,'2015-4-18', 8000, 9000, 70),
(8001, '蔡福', '地平星 鐵臂膊','刑罰堂主', 3,'2013-7-10', 12000, 2000, 80),
(8002, '蔡慶', '地損星 一枝花','刑罰執法', 3,'2013-7-10', 12000, 2000, 80);

3 通過查詢增加數據

項目在操作過程中,表中的數據會隨時發生變化,在某些時刻我們需要對錶中的所有數據轉移到表結構
一模一
樣的其他表中,此時,查詢並插入數據的語法就變得非常重要了

  • 複製表結構創建歷史表
 -- 創建歷史表:複製表結構,注意~如果不寫where false條件,表中的數據也會被複制到歷史表
CREATE TABLE dept_copy
	SELECT * FROM department WHERE 1=2;
-- 如果不寫條件,那麼會將表結構和數據一起復制
  • 查詢的⽅式將當前表中的數據遷移到歷史表
-- 數據遷移
INSERT INTO dept_copy
	SELECT * FROM department;

( 二 ) DELETE刪除數據

刪除數據屬於敏感操作,所以刪除數據需要謹慎或是使用邏輯刪除。

1 全表刪除

  • TRUNCATE TABLE [tab_name] ,刪除表中的所有數據,包括重置主鍵編號等。
-- 清空表數據
truncate table dept_copy2;
  • DELETE FROM tab_name ,只是將表中的數據全部刪除,其他表的特徵信息不變。
-- 基本語法:
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
	[WHERE where_definition]
	[ORDER BY ...]
	[LIMIT row_count]
-- 清空表數據
delete from dept_copy;

2 指定條件刪除(常用)

delete from table_name where 條件;

-- 刪除department中重複的數據
delete from departent where id=81;

#3 指定刪除數量

通過 LIMIT count 可以指定刪除數量,在進行大量數據刪除的時候,通過這樣的方式可以防止刪除操作引起 CPU 的大量佔用導致業務受理的阻塞。

-- 刪除5條數據
delete from department3 limit 5;

( 三 ) UPDATE修改數據

UPDATE 語句可以針對表中的數據進行條件修改,在修改過程中條件一定要明確,避免誤傷其他數據導
致產生垃圾數據。
注意:不指定條件會導致全表修改。

UPDATE [LOW_PRIORITY] [IGNORE] table_name
	SET col_name1=expr1 [, col_name2=expr2 ...]
	[WHERE where_definition]
-- 簡化版
update 表名 set 字段1=value, 字段2=value2... where 條件 ;
-- 修改梁山本部名稱:中央--》忠義堂
update department set deptname="忠義堂" where deptno=10;

( 四 ) SELECT 查詢數據(重點)

查詢操作,在增刪改查操作中,是屬於操作頻率最高,同時操作方式最多樣的,包含單表的操作以及多表關聯的操作。

1 普通查詢

基於單個數據表的數據查詢操作,我們稱爲單表查詢,單表查詢是高級查詢的基礎,也是項目中在進行數據測試時使用最多的SQL 語句。

(1)查詢所有字段
select * from table_name;
-- 查詢職員表中所有數據
select * from employee;
星號代表任何字段
(2)查詢指定字段
-- 查看錶中的指定字段
select 字段1,字段2,字段3... from 表名;
-- 查詢職員表中所有的職員姓名和入職時間
SELECT empname, hirdate FROM employee;
( 3 )在select後面列前使用distinct可以消除重複的行
select distinct 字段... from 表名;
-- 查詢職員表中所有的崗位
SELECT DISTINCT job FROM employee;
( 4 )使用 as 給字段起別名
select 字段1 as 別名1, 字段2 as 別名2, 字段3 as 別名3 from;
-- 查看字段,並起別名
select deptno as 編號,location as 位置 from department;

2 條件查詢

select * from 表 where 條件; ,where後面支持多種運算符,進行條件的處理

(1)比較運算符
  • 等於(等於可以用於字符): =

  • 大於: >

  • 大於等於: >=

  • 小於: <

  • 小於等於: <=

  • 不等於: != 或 <>

- -- 查詢工作爲頭領的數據
select * from employee where job='頭領';
(2)邏輯運算符–用於多個條件查詢
  • and

  • or

  • not

-- 獲取工作爲頭領,編號小於2的數據
select * from employee where job='頭領' and empno <2;
-- 獲取工作爲頭領,編號不小於2的數據
select * from employee where job='頭領' and not empno <2;
(3)模糊查詢: like
  • %表示任意多個任意字符

  • _表示任意一個字符

-- 查詢nickname是 天 開頭的
select * from employee where nickname like "天%";
-- 查詢nickname爲 天開頭,星結尾的人
select * from employee where nickname like "天%星";
(4)範圍查詢
  • in:表示在一個非連續範圍

  • between…and… 在一個連續範圍內

 -- 查詢編號爲1,11, 2211的人
select * from employee where empno in (1,11,2211);
-- 查詢編號爲1到100的人
select * from employee where empno between 1 and 100;
select * from employee where empno >=1 and empno <=100;
- 查詢崗位 五虎上將、步軍頭領、騎兵頭領 的職員且編號需要小於100
SELECT * FROM employee
   WHERE job IN ("五虎上將", "步軍頭領", "騎兵頭領") AND empno <100;
(5)空判斷
  • is null 判定爲空

  • is not null 判斷非空

-- 查詢mgr爲null的人
select * from employee where mgr is null;
-- 查詢學生表中身高爲空的學生
select * from students where height is null;

3 排序

select * from 表名 order by 列1 asc|desc [,列2 asc|desc,…]

  • 將行數據按照列1進行排序,如果某些行列1的值相同時,則按照列2排序,以此類推

  • 默認按照列值從小到大排列(asc)

  • asc從小到大排列,即升序

  • desc從大到小排序,即降序

-- 按照工作從小到大順序查詢前10條
select * from employee order by job limit 10;
-- 按照工作從大到小順序查詢前10條
select * from employee order by job desc limit 10;
-- 按照首先comm的多少降序排序,然後按照empno升序排序
select empno,empname,comm from employee order by comm desc,empno asc limit 20;

4 聚合函數

(1)計數

count(*)表示計算總行數,括號中寫星號與字段名,結果是相同的

-- 查詢表中數據數量
select count(*) from employee;
-- 統計編號小於100的人數
select count(*) from employee where empno<=100;
(2)最大值
  • max(列)表示求此列的最大值
-- 查詢編號最大的人
select max(empno) from employee;
--查詢編號最大的騎兵都統
select max(empno) from employee where job='騎兵都統';
(3)最小值
  • min(列)表示求此列的最小值
--查詢編號最小的騎兵都統
select min(empno) from employee where job='騎兵都統';
( 4 )求和
  • sum(列)表示求此列的和
-- 計算總工資
select sum(salary) from employee;
-- 計算平均工資
select sum(salary)/count(*) as 平均工資 from employee;
( 5 )平均值
  • avg(列)表示求此列的平均值
select avg(salary) as 平均工資 from employee;

5 分組

group by 字段

1. group by 字段 的含義:將查詢結果按照1個或多個字段進行分組,字段值相同的爲一組
2. group by可用於單個字段分組,也可用於多個字段分組
select job from employee group by job;

group by單獨使用時,只顯示出每組的第一條記錄, 所以group by單獨使用時的實際意義不大
通常會和其他方法合用。

1 group by + group_concat()
  • group_concat(字段名)可以作爲一個輸出字段來使用
  • 表示分組之後,根據分組結果,使用group_concat()來放置每一組的某字段的值的集合
-- 查看每個工作中的名單
select job,group_concat(empname) from employee group by job;
-- 查看每個工資中的名單
select salary,group_concat(empname) from employee group by salary;
-- 查看每個獎金分組中的名單
select comm,group_concat(empname) from employee group by comm;
2 group by + 聚合函數
-- 查看每個工作中的平均工資
select job,avg(salary) from employee group by job;
-- 查看每個工作中的平均獎金
select job,avg(comm) from employee group by job;
-- 查看每個工作中的人數,和平均工資
select job,count(*),avg(salary) from employee group by job;
3 group by + having
  • having 條件表達式:用來分組查詢後指定一些條件來輸出查詢結果
  • having作用和where一樣,但having只能用於group
    by
-- 查看每個工作中的人數,且人數大於2,和平均工資
select job,count(*),avg(salary) from employee group by job having count(*) >2;
6 獲取部分行

格式: select * from 表名 limit [offset,]count

  • offset:跳過數據條數
  • count:獲取數據數量
-- 跳過前兩條,從第三條數據開始,獲取3條數據
select * from employee limit 2,3;
-- 獲取前10條數據
select * from employee limit 10;
select * from employee limit 010;

分頁

--已知:每頁顯示m條數據,當前顯示第n頁,求第n頁數據
select * from employee limit (n-1)*m,m;

總結

SELECT select_expr [,select_expr,...] [
	FROM tb_name
	[WHERE 條件判斷]
	[GROUP BY {col_name | postion} [ASC | DESC], ...]
	[HAVING 條件判斷]
	[ORDER BY {col_name|expr|postion} [ASC | DESC], ...]
	[LIMIT {
  
  [offset,]rowcount | row_count OFFSET offset}]
]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章