MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解—讲解二[通俗易懂]

MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解—讲解二[通俗易懂]前言:今天给大家讲的是:MySQL数据库表的模糊/多行/分组/排序/分页查询以及mysql数据类型的讲解,当然如果你对数据库的基础操作–对库的创建/对表的增删改查有兴趣,可以去看看我的这篇文章–…

MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解---讲解二

前言:今天给大家讲的是:MySQL数据库表的模糊/多行/分组/排序/分页查询以及mysql数据类型的讲解,当然如果你对数据库的基础操作–对库的创建/对表的增删改查有兴趣,可以去看看我的这篇文章—MySQL数据库表的基础操作(增删改查)—讲解一


5、查询表记录

将该数据库导入mysql中
先将其存入.sql的文档,确定路径中无中文,然后打开数据库,用source xxx/db10.sql
或者粗暴点,直接复制粘贴在数据库中(不过很low一般不采用)

-- 创建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);

代码100分

5.3、模拟查询

Like操作符用于在WHERE子句中搜索列中的指定模式
可以和通配符(%)配合使用,其中(%)表示0或多个任意的字符。“_”表示一个任意的字符。
语法:SELECT 列 | * FROM 表名 WHERE 列名 LIKE 值
例如:

代码100分-- 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 "刘__";

5.4、多行函数查询

多行函数也叫做聚合函数,根据某一列或所有列进行统计。
常见的多行函数有:

  • COUNT( 列名|* ):统计结果集中某一列或所有列的行数。
  • MAX( 列 ):统计结果集中某一列值中的最大值
  • MIN( 列 ):统计结果集中某一列值中的最小值
  • SUM( 列 ):统计结果集中某一列所有值的和
  • AVG( 列 ):统计结果集中某一列值的平均值

提示:多行函数不能在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;

5.5、分组查询

GRUOP BY语句根据一个或多个列对结果集进行分组。
在分组的列上我们可以使用COUNT, SUM, AVG, MAX, MIN等函数。
语法:SELECT 列 | * FROM 表名 [WHERE子句] GROUP BY 列;

对emp表按照部门对员工进行分组,查看分组后效果。

代码100分-- 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表按照职位进行分组,并统计每个职位的人数,显示职位和对应人数

-- 33.对emp表按照职位进行分组,并统计每个职位的人数,显示职位和对应人数
select * from emp group by job;
select job, count(*) from emp group by job;

对emp表按照部门进行分组,求每个部门的最高薪资(不包含奖金),显示部门名称和最高薪资

-- 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) 是统计这一个组的人数、和、平均值、最大值、最小值。

5.6、排序查询

使用 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;

5.7、分页查询

在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;

5.8、其他函数

查询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;

6、mysql的数据类型

6.1、数值类型

MySQL中支持多种整型,其实很大程度上是相同,只是存储值得大小范围不同而已。

  • tinyint:占用1个字节,相对于java中的byte
  • smallint:占用2个字节,相对于java中的short
  • int:占用4个字节,相对于java中的int
  • bigint:占用8个字节,相对于java中的long

还有浮点类型:float和double类型

  • float:4字节单精度浮点类型,相对于java中的float
  • double:8字节双精度浮点类型,相对于java中的double

6.2、字符串类型

6.2.1 char(n)

定长字符串,最长255个字符。n表示字符数,例如:

-- 创建user表,指定用户名为char类型,字符长度不超过10个字符
create table user(
    username char(10),
    ...  --使用代码时请不要将省略号誊写上去了,它就是一个简单的省略君
);

所谓的定长:是当插入的值长度小于指定的长度时,剩余的空间会用空格填充。(这样会浪费空间)

因此,char类型适用于长度固定的数据(例如电话号,身份证号之类),这样既不会有空间的浪费,而且效率还比varchar类型高。

6.2.2 varchar(n)

变长字符串,最长不超过 65535个字节,n表示字符数,一般超过255个字符,会使用text类型

例如:

-- 创建user表,指定用户名为varchar类型,长度不超过10
create table user(
    username varchar(10),
);

所谓的不定长,是当插入的值长度小于指定的长度时,剩余的空间可以留给别的数据使用。(节省空间)

因此,varchar类型适用于长度不固定的数据,这样虽然效率不如char类型高,但是不会有空间的浪费。

6.2.3 text(长文本类型)

最长65535个字节,一般超过255个字符列的会使用text。例如:

-- 创建user表:
create table user(
    resume text,
);

而且,text也分多种,其中bigtext存储数据的长度约为4GB。

char(n)、varchar(n)、text都可以表示字符串类型,其区别在于:

(1)char(n)在保存数据时, 如果存入的字符串长度小于指定的长度n,后面会用空格补全,因此可能会造成空间浪费,但是char类型的存储速度较varchar和text快。

因此char类型适合存储长度固定的数据,这样就不会有空间浪费,存储效率比后两者还快!

(2)varchar(n)保存数据时, 按数据的真实长度存储, 剩余的空间可以留给别的数据用,因此varchar不会浪费空间。

因此varchar适合存储长度不固定的数据,这样不会有空间的浪费。

(3)text是大文本类型,一般文本长度超过255个字符,就会使用text类型存储。

6.3、日期类型(了解)

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的字段(列)约束等等

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9413.html

(0)
上一篇 2023-02-09
下一篇 2023-02-09

相关推荐

  • 使用setuptools进行Python包安装

    使用setuptools进行Python包安装在Python开发过程中,我们经常需要使用第三方库。而安装这些库需要保证正确的依赖关系和版本选择,这可能会导致一些问题。setuptools是一个流行的Python包管理工具,它可以自动解决依赖关系并为您管理包的版本。它还可以轻松地构建和分发您自己的Python包。在本文中,我们将介绍如何使用setuptools来安装和管理Python包。

    2024-09-03
    30
  • win7原版系统安装教程_windows怎么安装

    win7原版系统安装教程_windows怎么安装
    场景 PostgreSQL PostgreSQL是一个功能强大的开源对象关系数据库管理系统(ORDBMS)。 用于安全地存储数据; 支持最佳做法,并允许在处…

    2023-04-08
    162
  • 向JavaScript数组的头部添加元素

    向JavaScript数组的头部添加元素JavaScript中的数组是一个非常常用的数据结构,不仅可以存储一组数据,还可以对这些数据进行各种操作。在实际开发中,我们有时需要把新的元素添加到数组的头部,这篇文章将介绍如何实现这个功能。

    2024-06-07
    57
  • python读取数据库

    python读取数据库一、access 1、获取表 http://blog.sina.com.cn/s/blog_92ab5a530102wjxe.html 参考这个链接。我把操作录制下来如下所示 import pypy…

    2023-03-24
    166
  • MySQL(4):卸载MySQL

    MySQL(4):卸载MySQLMySQL的安装是比较复杂的,一旦安装出现错误或者出现其他问题,我们想要完全卸载MySQL也是非常麻烦的,下面简单说下怎样可以完全干净的卸载MySQL 卸载步骤 第一步:用管理员的身份打开命令窗口,…

    2023-03-21
    152
  • 干货 | RDS For SQL Server单库上云

    干货 | RDS For SQL Server单库上云数据库作为核心数据的重要存储,很多时候都会面临数据迁移的需求,例如:业务从本地迁移上云、数据中心故障需要切换至灾备中心、混合云或多云部署下的数据同步、流量突增导致数据库性能瓶颈需要拆分…… 本文将会…

    2023-02-01
    191
  • 单个表上亿行数据的主键、索引设计,及分页查询「终于解决」

    单个表上亿行数据的主键、索引设计,及分页查询「终于解决」单个表数据量超过1亿的,需要精心设计表的主键、索引,其分页查询也不能乱写,否则性能不佳。
    此文章特介绍作者心得。

    2023-04-21
    154
  • 解读数仓中的数据对象及相关关系[通俗易懂]

    解读数仓中的数据对象及相关关系[通俗易懂]摘要:为实现不同的功能,GaussDB(DWS)提供了不同的数据对象类型,包括索引、行存表、列存表及其辅助表等。这些数据对象在特定的条件下实现不同的功能,为数据库的快速高效提供了保证,本文对部分数据对

    2023-06-18
    144

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注