字段名 字段类型 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、安卓逆向、云计算 好文链接
上一篇
发表评论