一、数据库操作
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 0,10;
分页
--已知:每页显示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}]
]