前言:今天给你们讲的是:MySQL数据库表的模糊/多行/分组/排序/分页查询以及mysql数据类型的讲解,固然若是你对数据库的基础操做--对库的建立/对表的增删改查有兴趣,能够去看看个人这篇文章---MySQL数据库表的基础操做(增删改查)---讲解一。java
将该数据库导入mysql中
先将其存入.sql
的文档,肯定路径中无中文,而后打开数据库,用source xxx/db10.sql
或者粗暴点,直接复制粘贴在数据库中(不过很low通常不采用)mysql
-- 建立db10库、emp表并插入记录 -- ----------------------------------- -- 删除db10库(若是存在) drop database if exists db10; -- 从新建立db10库 create database db10 charset utf8; -- 选择db10库 use db10; -- 删除员工表(若是存在) drop table if exists emp; -- 建立员工表 create table emp( id int primary key auto_increment, -- 员工编号 name varchar(50), -- 员工姓名 gender char(1), -- 员工性别 birthday date, -- 员工生日 dept varchar(50), -- 所属部门 job varchar(50), -- 所任职位 sal double, -- 薪资 bonus double -- 奖金 ); -- 往员工表中插入记录 insert into emp values(null,'王富国','男','1995-10-25','市场部','部门总监','8400','1200'); insert into emp values(null,'齐雷锋','男','1994-11-6','市场部','市场调查员','5600','800'); insert into emp values(null,'刘治雪','女','1996-09-14','市场部','营销讲师','3000','1300'); insert into emp values(null,'陈子封','男','1991-05-18','技术部','部门总监','4200','500'); insert into emp values(null,'刘海涛','男','1993-11-18','技术部','研发员','6600','500'); insert into emp values(null,'王明悦','女','1998-07-18','技术部','测试师','5400','600'); insert into emp values(null,'苍若智','男','1995-08-18','人事部','部门总监','4850','800'); insert into emp values(null,'范中闲','男','1999-09-18','人事部','人力资源师','3600','600'); insert into emp values(null,'刘克','男','1990-10-18','人事部','助理','3200','400'); insert into emp values(null,'韩约','男','1980-12-18',null,'CEO','11000',null);
Like操做符用于在WHERE子句中搜索列中的指定模式
能够和通配符(%)配合使用,其中(%)表示0或多个任意的字符。“_”表示一个任意的字符。
语法:SELECT 列 | * FROM 表名 WHERE 列名 LIKE 值
例如:sql
-- 25.查询emp表中姓名中包含"雷"字的员工,显示员工姓名。 select * from emp where name like '%雷%'; -- 26.查询emp表中姓名中以"王"字开头的员工,显示员工姓名。 select * from emp where name like '王%'; -- 27.查询emp表中姓名以"刘"开头,而且姓名为两个字的员工,显示员工姓名。 select * from emp where name like '刘_'; select * from emp where name like '刘__';
多行函数也叫作聚合函数,根据某一列或全部列进行统计。
常见的多行函数有:数据库
提示:多行函数不能在where子句中使用函数
-- 28.统计emp表中薪资大于3000的员工个数 select count(bonus) from emp where sal>3000; -- 29.求emp表中的最高薪资 select max(sal) from emp; -- 求最低薪资 select min(sal) from emp; -- 30.统计emp表中全部员工的薪资总和(不包含奖金) select sum(sal) from emp; -- 31.统计emp表员工的平均薪资(不包含奖金) select avg(sal) from emp; select sum(sal) / count( * ) from emp;
GRUOP BY语句根据一个或多个列对结果集进行分组。
在分组的列上咱们可使用COUNT, SUM, AVG, MAX, MIN等函数。
语法:SELECT 列 | * FROM 表名 [WHERE子句] GROUP BY 列;测试
对emp表按照部门对员工进行分组,查看分组后效果。.net
-- 32.对emp表按照部门对员工进行分组,查看分组后效果。 select count(*) from emp; -- 默认整个查询结果也是一组 -- 按照部门分组 select * from emp group by dept; -- 按照部门分组,统计每一个组的人数 select count(*) from emp group by dept; -- 按照奖金分组,统计每一个组的人数 select count(*) from emp group by bonus;
对emp表按照职位进行分组,并统计每一个职位的人数,显示职位和对应人数code
-- 33.对emp表按照职位进行分组,并统计每一个职位的人数,显示职位和对应人数 select * from emp group by job; select job, count(*) from emp group by job;
对emp表按照部门进行分组,求每一个部门的最高薪资(不包含奖金),显示部门名称和最高薪资blog
-- 34.对emp表按照部门进行分组,求每一个部门的最高薪资(不包含奖金),显示部门名称和最高薪资 -- 按照部门分组 select * from emp group by dept; -- 按照部门分组,统计每一个部门的最高薪资 select dept, max(sal) from emp group by dept; -- 按照部门分组,统计每一个部门的最高薪资,并显示对应的员工姓名( select dept, max(sal), name from emp group by dept;
若是不分组,默认整个查询结果也是一个组,此时用聚合函数(count、sum、avg、max、min) 是统计这一个组的人数、和、平均值、最大值、最小值。排序
使用 ORDER BY 子句将结果集根据指定的列排序后再返回
语法:SELECT 列名 FROM 表名 ORDER BY 列名 [ASC|DESC]
ASC(默认)升序,即从低到高;
DESC(须要本身声明) 降序,即从高到低。
-- 35.对emp表中全部员工的薪资进行升序(从低到高)排序,显示员工姓名、薪资。 SELECT name,sal FROM emp ORDER BY sal; -- 默认也是升序 -- 36.对emp表中全部员工奖金进行降序(从高到低)排序,显示员工姓名、奖金。 select name,bonus from emp order by bonus desc; -- 根据奖金和薪资进行排序(奖金是降序排序,薪资是升序排序,先根据奖金排序,若是奖金相同再根据薪资进行排序) select name,bonus,sal from emp order by bonus desc,sal asc;
在mysql中,经过limit进行分页查询:
*select * from emp limit (页码-1)每页显示记录数,每页显示记录数
-- 37.查询emp表中的全部记录,分页显示:每页显示3条记录,返回第 1 页。 select * from emp limit 0, 3; -- 38.查询emp表中的全部记录,分页显示:每页显示3条记录,返回第 2 页。 select * from emp limit 3, 3; -- 查询emp表中薪资最高的前三个员工的信息 select * from emp order by sal desc limit 0,3;
查询emp表中全部在1993和1995年之间出生的员工,显示姓名、出生日期。
-- 39.查询emp表中全部在1993和1995年之间出生的员工,显示姓名、出生日期 select name, birthday from emp where birthday between '1993-1-1' and '1995-12-31'; -- 或 select name, birthday from emp where year(birthday) between 1993 and 1995;
查询emp表中本月过生日的全部员工
-- 40.查询emp表中本月过生日的全部员工 select * from emp where month( now() ) = month( birthday ); -- 查询下个月过生日的员工 select * from emp where (month( now() )+1) % 12 = month( birthday ) % 12;
查询emp表中员工的姓名和薪资(薪资格式为: xxx(元) )
-- 41.查询emp表中员工的姓名和薪资(薪资格式为: xxx(元) ) select name, concat(sal, '(元)') from emp;
MySQL中支持多种整型,其实很大程度上是相同,只是存储值得大小范围不一样而已。
还有浮点类型:float和double类型
定长字符串,最长255个字符。n表示字符数,例如:
-- 建立user表,指定用户名为char类型,字符长度不超过10个字符 create table user( username char(10), ... --使用代码时请不要将省略号誊写上去了,它就是一个简单的省略君 );
所谓的定长:是当插入的值长度小于指定的长度时,剩余的空间会用空格填充。(这样会浪费空间)
所以,char类型适用于长度固定的数据(例如电话号,身份证号之类),这样既不会有空间的浪费,并且效率还比varchar类型高。
变长字符串,最长不超过 65535个字节,n表示字符数,通常超过255个字符,会使用text类型
例如:
-- 建立user表,指定用户名为varchar类型,长度不超过10 create table user( username varchar(10), );
所谓的不定长,是当插入的值长度小于指定的长度时,剩余的空间能够留给别的数据使用。(节省空间)
所以,varchar类型适用于长度不固定的数据,这样虽然效率不如char类型高,可是不会有空间的浪费。
最长65535个字节,通常超过255个字符列的会使用text。例如:
-- 建立user表: create table user( resume text, );
并且,text也分多种,其中bigtext存储数据的长度约为4GB。
(1)char(n)在保存数据时, 若是存入的字符串长度小于指定的长度n,后面会用空格补全,所以可能会形成空间浪费,可是char类型的存储速度较varchar和text快。
所以char类型适合存储长度固定的数据,这样就不会有空间浪费,存储效率比后二者还快!
(2)varchar(n)保存数据时, 按数据的真实长度存储, 剩余的空间能够留给别的数据用,所以varchar不会浪费空间。
所以varchar适合存储长度不固定的数据,这样不会有空间的浪费。
(3)text是大文本类型,通常文本长度超过255个字符,就会使用text类型存储。
date:年月日
time:时分秒
datetime:年月日 时分秒
timestamp:时间戳(实际存储的是一个时间毫秒值),与datetime存储日期格式相同。二者的区别是:
(1)timestamp最大表示2038年,而datetime范围是1000~9999
(2)timestamp在插入数、修改数据时,能够自动更新成系统当前时间
createtime datetime 2019-12-27 14:27:35
createtime timestamp 2019-12-27 14:27:35
id | username | password | createtime |
---|---|---|---|
1 | xxh | 123456 | 2019-12-27 14:27:35 |
后面还有讲解三,将会讲到mysql的字段(列)约束等等