字段名 字段类型 check(字段>n and 字段

需求: emp表 eid 主键约束,自增 ename 非空约束 esex默认值’男’并检查 男|女

SQL实现

– 删除存在的emp表

drop table emp;

create table emp(

eid int primary key auto_increment,

ename varchar(10) not null,

esex char(1) default ‘男’ check(esex=‘男’ or esex=‘女’)

);

– 查看emp表结构

desc emp;

| | |

| — | — |

| | |

DQL查询表中数据

========================================================================

数据查询语言(Data Query Language,DQL):DQL主要用于数据的查询,

其基本结构是使用SELECT子句,FROM子句和WHERE子句的组合来查询一条或多条数据

DQL是实际开发过程中使用最多的

简单查询

查询不会对数据库中的数据进行修改, 只是一种显示数据的方式

语法格式

select 字段名 from 表名

需求1: 查询emp中所有的数据

– 将要查询的字段全部列出

select eid ,ename, sex, salary, hire_date, dept_name from emp;

–查询所有的字段可以使用 * , * 代表所有的字段

select * from emp;

需求2: 查询emp表中所有的记录, 只显示eid和ename字段

select eid, ename from emp;

需求3: 查询所有的员工信息, 将字段名显示为中文

select

eid as ‘编号’, – as可以省略

ename as ‘姓名’,

sex as ‘性别’,

salary as ‘薪资’,

hire_date as ‘入职日期’,

dept_name as ‘部门名称’

from emp;

需求4: 查询有多少个部门

– 查询所有的部门(出现重复部门)

select dept_name from emp;

– 使用去重查询 关键字 distinct

select distinct dept_name from emp;

将所有的员工薪资加1000显示

– 支持算术运算符 + - * / % 的运算

select eid, ename, salary, salary+1000 from emp;

条件查询

·如果查询语句中没有设置条件, 就会查询所有的行信息

·在实际应用中, 一定要指定查询的条件, 对记录进行过滤

语法格式

select 列名 from 表名 where 条件

需求1: 精确查询

#1 查询员工姓名为黄蓉的员工信息

#2 查询薪水价格为5000的员工信息

#3 查询薪水价格不是5000的所有员工信息

#4 查询薪水价格大于6000元的所有员工信息

#5 查询薪水价格在5000到10000之间所有员工信息

#6 查询薪水价格是3600或7200或者20000的所有员工信息

SQL实现

#1 查询员工姓名为黄蓉的员工信息

select * from emp where ename = ‘黄蓉’;

#2 查询薪水价格为5000的员工信息

select * from emp where salary = 5000;

#3 查询薪水价格不是5000的所有员工信息

select * from emp where salary != 5000;

select * from emp where salary <> 5000;

#4 查询薪水价格大于6000元的所有员工信息

select * from emp where salary > 6000;

#5 查询薪水价格在5000到10000之间所有员工信息

select * from emp where salary >= 5000 and salary <= 10000;

select * from emp where salary between 5000 and 10000;

#6 查询薪水价格是3600或7200或者20000的所有员工信息

select * from emp where salary = 3600 or salary = 7200 or salary = 20000;

select * from emp where salary in (3600, 7200, 20000);

需求2: 模糊查询

#1 查询含有’八’字的所有员工信息

#2 查询以’孙’字开头的所有员工信息

#3 查询第二个字为’兔’的所有员工信息

#4 查询没有部门的员工信息

#5 查询有部门的员工信息

SQL实现

#1 查询含有’八’字的所有员工信息

select * from emp where ename like ‘%八%’;

#2 查询以’孙’字开头的所有员工信息

select * from emp where ename like ‘孙%’;

#3 查询第二个字为’兔’的所有员工信息

select * from emp where ename like ‘_兔%’;

#4 查询没有部门的员工信息

select * from emp where dept_name is null;

#5 查询有部门的员工信息

select * from emp where dept_name is not null;

排序

通过order by子语句, 可以将查询出的结果进行排序(排序只是显示效果, 并不会影 响真实的数据

select 字段名 from 表名 [where 条件] order by 字段名[asc | desc];

– asc 升序(默认)

– desc 降序

1)单列排序

· 只按照某一个字段进行排序

需求1: 查询所有的员工信息, 使用saraly进行排序

SQL实现

– 升序排序(默认 asc)

select * from emp order by salary;

– 降序排序(desc)

select * from emp order by salary desc;

组合排序

·同时对多个字段进行排序, 如果第一个字段相同, 就按照第二个字段排序, 以此类推

需求2: 查询所有的员工信息, 使用salary升序排列,salary相同按照入职日期降序排序

SQL实现

– 组合排序

select * from emp order by salary, hire_date desc;

函数

MySQL中提供了大量函数来简化用户对数据库的操作,比如字符串的处理、日期的运算、数值的运算等等。使用函数可以大大提高SELECT语句操作数据库的能力,同时也给数据的转换和处理提供了方便。

函数只是对查询结果中的数据进行处理,不会改变数据库中数据表的值。MySQL中的函数主要分为单行函数和多行函数两大类

单行函数

单行函数是指对每一条记录的值进行计算,并得到相应的计算结果,然后返回给用户,也就是说,每条记录作为一个输入参数,经过函数计算得到每条记录的计算结果。常用的单行函数主要包括字符串函数、数值函数、日期与时间函数、流程函数以及其他函数

使用单行函数, 是对行中字段的操作, 操作多少行, 返回多少行数据

多行函数

我们之前做的查询都是横向查询,它们都是根据条件一行一行的进行判断,而使用多行函数查询是纵向查询,它是对某一列的值进行计算,然后返回一个单一的值

·多行函数会忽略null空值

·多行函数也称为分组函数, 聚合函数

单行函数

– 字符串函数的操作

#1 查询emp表所有数据, 将eid, ename, sex显示格式为 编号: x 姓名: xx 性别: x

#2 查询emp表所有数据, 将ename第二个字符都换为 某

#3 查询emp表所有数据, 显示ename的长度

#4 查询emp表所有数据, 将 ename有英文的改为都是大写

#5 查询emp表所有数据, 将 ename有英文的改为都是小写

#6 查询emp表所有数据, ename只显示姓

SQL实现

#1 查询emp表所有数据, 将eid, ename, sex显示格式为 编号: x 姓名: xx 性别: x

select concat(‘编号:’, eid), concat(‘姓名:’, ename), concat(‘性别:’, sex) from emp;

#2 查询emp表所有数据, 将ename第二个字符都换为 某

select eid, insert(ename, 2, 1, 某’), sex from emp;

#3 查询emp表所有数据, 显示ename的长度

select eid, ename, length(ename), sex from emp;

#4 查询emp表所有数据, 将 ename有英文的改为都是大写

select eid, ename, upper(ename), sex from emp;

#5 查询emp表所有数据, 将 ename有英文的改为都是小写

select eid, ename, lower(ename), sex from emp;

#6 查询emp表所有数据, ename只显示姓

select eid, ename, substring(ename, 1, 1), sex from emp;

MySQL提供的一张虚拟表中进行演示,该表名为“dual”,是MySQL为了满足用“SELECT ••• from•••”的习惯而增设的一张虚拟表。 在使用dual表时,如果没有where子句,则可以省略“from dual”, 没有实际意义, 查询的字段不属于任何表的时候, 就可以使用dual这张虚拟表

– 数值函数的操作

select abs(-1), ceil(3.2), floor(3.7), round(3.5), mod(10,3), pi(), pow(2,5), sqrt(25) from dual;

select abs(-1), ceil(3.2), floor(3.7), round(3.5), mod(10,3), pi(), pow(2,5), sqrt(25);

– 日期与时间函数的操作

select curdate(), curtime(), now(), sysdate();

select curdate(), curtime(), now(), sleep(2), sysdate();

– 流程函数的操作

#1 查询emp表所有数据, 薪资 >= 10000 高工资 <10000 低工资

#2 查询emp表所有数据, 计算出员工的年薪 薪资*12 加年终奖(每人30k)

#3 查询emp表所有数据, 薪资 >= 15000 优秀 >=9000 坚持住 >=5000 加油哦

= 3000 加把劲 其他 努力奋斗吧骚年

#1 查询emp表所有数据, 薪资 >= 10000 高工资 其他 低工资

select eid, ename, salary, if(salary >= 10000, ‘高工资’, ‘低工资’) from emp;

#2 查询emp表所有数据, 计算出员工的年薪 薪资*12 加年终奖(每人30k)

select eid, ename, salary, salary * 12+30000 ‘年薪’ from emp; – 需要考虑null

select eid, ename, salary, ifnull(salary, 0) * 12+30000 ‘年薪’ from emp;

#3 查询emp表所有数据, 薪资 >=3000 加把劲 >=5000 加油哦 >=9000 坚持住 >= 15000 优秀 其他 不及格

select eid, ename, salary,

case

when salary >= 15000 then ‘优秀’

when salary >= 9000 then ‘坚持住’

when salary >= 5000 then ‘加油哦’

when salary >= 3000 then ‘加把劲’

else ‘努力奋斗吧骚年’

end

from emp;

多行函数

多行函数会忽略null空值

·多行函数也称为分组函数, 聚合函数

需求:

#1 查询员工的总数

#2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值, 显示为总薪水, …

#3 查询薪水大于4000员工的个数

#4 查询部门为’教学部’的所有员工的个数

#5 查询部门为’市场部’所有员工的平均薪水

#6 查询部门的个数

SQL实现

#1 查询员工的总数

– 使用某个字段查询,聚合函数会忽略null, 需要注意为null的字段

select count(eid) from emp;

– 所有字段匹配查询

select count(*) form emp;

– 增加一列

select 1 from emp;

– 效率更高推荐使用

select count(1) from emp;

#2 查看员工总薪水、最高薪水、最小薪水、薪水的平均值, 显示为总薪水, …

select

sum(salary) ‘总薪水’,

max(salary) ‘最高薪水’,

min(salary) ‘最小薪水’,

avg(salary) ‘平均薪水’

from emp;

#3 查询薪水大于4000员工的个数

select count(1) from emp where salary > 4000;

#4 查询部门为’教学部’的所有员工的个数

select count(1) from emp where dept_name = ‘教学部’;

#5 查询部门为’市场部’所有员工的平均薪水

select avg(salary) from emp where dept_name = ‘市场部’;

#6 查询部门的个数

select dept_name from emp; – 9个

select count(dept_name) from emp; – 8个

– 部门去重之后, 统计个数

select count(distinct dept_name) from emp; – 3个

分组

·分组查询指的是使用group by语句, 对查询的信息进行分组, 相同数据作为一组

语法格式

select 分组字段/聚合函数 from 表名 group by 分组字段 [having 条件]

需求1: 通过性别分组

SQL实现

按照性别分组查询

select * from emp group by sex; – 能查到结果, 但是没有意义

select sex from emp group by sex; – 正确操作

需求1:

#1 查询每个部门的名称

#2 查询每个部门的平均薪资

#3 查询每个部门的平均薪资, 部门名称不能为空

SQL实现

#1 查询每个部门的名称

select dept_name from emp group by dept_name;

#2 查询每个部门的平均薪资

select dept_name, avg(salary) from emp group by dept_name;

#3 查询每个部门的平均薪资, 部门名称不能为空

select dept_name from emp where dept_name is not null group by dept_name;

需求2:

#4 查询每个部门的平均薪资, 只显示平均工资在4000以上的

SQL实现

select dept_name, avg(salary) from emp where avg(salary) > 4000 group by dept_name;

– Invalid use of group function 报错

需要在分组后, 对数据进行过滤, where的作用是在分组前过滤

select语句的执行顺序

from – where – group by – having –- select – order by

3)分组操作中的having子语句, 适用于对分组后的数据进行过滤的, 作用类似于 where

#4 查询每个部门的平均薪资, 只显示平均工资在4000以上的

select dept_name, avg(salary) from emp group by dept_name having avg(salary) > 4000;

where 和 having的区别

group by 和 having练习

#1 统计每个部门中的最小工资, 列出最小工资小于2000的部门名称

#2 统计平均工资大于3000的部门名称

#3 统计人数小于4的部门的平均工资

#4 统计每个部门最高工资, 排除最高工资小于3000的部门

#1 统计每个部门中的最小工资, 列出最小工资小于4000的部门名称

– 每个部门的最小工资

select dept_name, min(salary) from emp group by dept_name;

select dept_name, min(salary) from emp group by dept_name having min(salary) < 4000;

#2 统计平均工资大于6000的部门名称

– 每个部门的平均工资

select dept_name, max(salary) from emp group by dept_name;

select dept_name, max(salary) from emp group by dept_name having max(salary) > 6000;

#3 统计人数小于4个人部门的平均工资

– 每个部门的平均工资和人数

select dept_name, avg(salary), count(1) from emp group by dept_name;

select dept_name, avg(salary), count(1) from emp group by dept_name having count(1) < 4;

#4 统计每个部门最高工资, 排除最高工资小于10000的部门

– 每个部门的最高工资

select dept_name, max(salary) from emp group by dept_name

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)

独家面经总结,超级精彩

本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!

Java面试准备

准确的说这里又分为两部分:

Java刷题算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

发知识点,真正体系化!**

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java) [外链图片转存中…(img-oPQ5fjJF-1712335642946)]

独家面经总结,超级精彩

本人面试腾讯,阿里,百度等企业总结下来的面试经历,都是真实的,分享给大家!

[外链图片转存中…(img-cM2bJrMO-1712335642947)]

[外链图片转存中…(img-2gCDg5vr-1712335642947)]

[外链图片转存中…(img-hXhPA6a0-1712335642947)]

[外链图片转存中…(img-ubEUov5r-1712335642948)]

Java面试准备

准确的说这里又分为两部分:

Java刷题算法刷题

Java刷题:此份文档详细记录了千道面试题与详解;

[外链图片转存中…(img-LLJcqosm-1712335642948)]

[外链图片转存中…(img-aB5gJEdJ-1712335642948)]

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。