mysql例题一综合案例(多条件组合查询)(代码片段)

两掺豆腐脑丶 两掺豆腐脑丶     2022-12-15     405

关键词:

MySQL例题一 综合案例

多条件组合查询练习

  1. 易错知识点

/* NULL和空值
-NULL也就是在字段中存储NULL值,空值也就是字段中存储空字符(’’)。

select length(NULL), length(''), length('1'),length('2');

+--------------+------------+-------------+-------------+
| length(NULL) | length('') | length('1') | length('2') |
+--------------+------------+-------------+-------------+
| NULL         |          0 |           1 |           1 |
+--------------+------------+-------------+-------------+
1 row in set

从上面看空值(’’)的长度是0,是不占用空间的;而NULL长度是NULL,其实它是占用空间的。
NULL列需要行中的额外空间来记录它们的值是否为NULL。

总结
1、空值不占空间,NULL值占空间。当字段不为NULL时,也可以插入空值。

2、当使用 IS NOT NULL 或者 IS NULL 时,只能查出字段中没有不为NULL的或者为 NULL 的,不能查出空值。

3、判断NULL 用IS NULL 或者 is not null,SQL 语句函数中可以使用IFNULL()函数来进行处理,判断空字符用 =’‘或者<>’'来进行处理。

4、在进行count()统计某列的记录数的时候,如果采用的NULL值,会别系统自动忽略掉,但是空值是会进行统计到其中的。

5、MySql中如果某一列中含有NULL,那么包含该列的索引就无效了。这一句不是很准确。

6:实际到底是使用NULL值还是空值(’’),根据实际业务来进行区分。个人建议在实际开发中如果没有特殊的业务场景,可以直接使用空值。

参考

NULL和空值 https://blog.csdn.net/u010648555/article/details/94555199
MySQL (37k) 关键字
https://blog.csdn.net/weixin_45851945/article/details/114287877

*/

/*创建外键格式
CONSTRAINT fk_dept_personnel foreign key (d_id) references personnel(id)
CONSTRAINT 别名 foreign key (外键表值) references 主表(主表值)
*/
– COMMENT 创表时设置备注
– auto_increment 设置自增(整型)
– default 设置默认值
– IF EXISTS 判断是否存在(如果存在)

  1. 创建数据库基本操作语句

– 创建练习题数据库 字符集为utf8

create DATABASE Exercises_One CHARSET=utf8;

– 切换到Exercises_One下

use Exercises_One;

创建表之前先删除同名表(结构和数据)一般情况下同数据库下不能出现重名表

DROP TABLE IF EXISTS personnel;
create table personnel (
	id int(11) not null auto_increment COMMENT '主键id',
	name varchar(255) DEFAULT NULL COMMENT '名字 默认为空',
	age int(11) default null COMMENT '年龄 默认为空',
	salary int(10) default null COMMENT '工资 默认为空',
	leader int(11) default null COMMENT '领导 默认为空',
	menpai varchar(255) default null COMMENT '门派 默认为空',
primary key (id) COMMENT '主键'
)charset=utf8;

select * from personnel;
– 插入数据

INSERT INTO personnel VALUES(DEFAULT,'张丰',25,10000,0,'武当');
INSERT INTO personnel VALUES(DEFAULT,'张无忌',25,8000,0,'华山');
INSERT INTO personnel VALUES(DEFAULT,'岳不群',25,6500,0,'嵩山');
INSERT INTO personnel VALUES(DEFAULT,'东方不败',25,12000,0,'日月神教');
INSERT INTO personnel VALUES(DEFAULT,'令狐葱',25,4000,0,'武当');
INSERT INTO personnel VALUES(DEFAULT,'景天',25,2000,0,'华山');
INSERT INTO personnel VALUES(DEFAULT,'龙葵',25,10000,0,'嵩山');
INSERT INTO personnel VALUES(DEFAULT,'茂茂',25,10000,0,'日月神教');
INSERT INTO personnel VALUES(DEFAULT,'白豆腐',25,6500,0,'长白山');
INSERT INTO personnel VALUES(DEFAULT,'Farke',25,10000,0,'武当');
INSERT INTO personnel VALUES(DEFAULT,'Alex',25,10000,0,'Java');

– update set 根据id修改age

update personnel set age=27 WHERE id=2;
update personnel set age=28 WHERE id=3;
update personnel set age=23 WHERE id=4;
update personnel set age=29 WHERE id=5;
update personnel set age=30 WHERE id=6;
update personnel set age=28 WHERE id=7;
update personnel set age=28 WHERE id=8;
update personnel set age=26 WHERE id=9;
update personnel set age=23 WHERE id=10;

– 创建表之前先删除同名表(结构和数据)一般情况下同数据库下不能出现重名表

DROP TABLE IF EXISTS dept;
create table dept(
d_id int(11) not null auto_increment PRIMARY key COMMENT '主、外键',
d_name varchar(255) not null  COMMENT '部门名字',
adress VARCHAR(255) not null COMMENT '地址',
CONSTRAINT fk_dept_personnel foreign  key (d_id) references personnel(id)
)CHARACTER set=utf8;

select * from dept ;
select * from personnel;
– 插入数据

INSERT INTO dept VALUES(DEFAULT,'武当','河南');
INSERT INTO dept VALUES(DEFAULT,'华山','湖北');
INSERT INTO dept VALUES(DEFAULT,'嵩山','深圳');
INSERT INTO dept VALUES(DEFAULT,'日月神教','广州');
INSERT INTO dept VALUES(DEFAULT,'长白山','乌鲁木齐');
INSERT INTO dept VALUES(DEFAULT,'雇佣兵','新疆');

– 创建表之前先删除同名表(结构和数据)一般情况下同数据库下不能出现重名表

DROP TABLE IF EXISTS leaders;
create table leaders(
 l_id int(10) primary key  not null auto_increment COMMENT'主键',
 l_name varchar(255) default null COMMENT '名字 默认为空',
 CONSTRAINT fk_dleaderst_personnel foreign  key (l_id) references personnel(leader)
)CHARSET=utf8;

– 1.查询所有人员信息

select * from personnel;

– 2.只查询人员的姓名和年龄

select name,age from personnel;

– 3.查询年龄为28岁的有哪些人员

select * from personnel where age=28;

– 4.查询60岁以下的人员有哪些人员

select * from personnel where age<60;

– 5.查询27岁以上并且工资大于8000的人员有哪些

select * from personnel where age>27 and salary>8000;

– 6.查询姓[张]的人员有哪些
– 'like和 %'组合使用 模糊查询

select * from personnel where name LIKE'张%';

– 正则表达式 REGEXP

select * from personnel where name REGEXP '^张';

– 7.查询哪些人员属于 武当/华山/嵩山

**select * from personnel where menpai in('武当','华山','嵩山');**

select * from personnel where menpai='华山'; 
select * from personnel where menpai='武当'; 
select * from personnel where menpai='嵩山'; 

– 8.查询工资在 5000-8900 的人员有哪些
– 逻辑运算符 <= >=

select * from personnel where 5000<=salary and salary>=8900;

– 9.查询所有人员,要求按工资倒序排列
– 倒叙order bay 正序desc

select * from personnel ORDER BY salary;
-- select * from personnel DESC salary;

– 10.查询令狐冲的领导人是谁
– 需要关联表,这里暂无信息

select * from personnel where id = (select leader from personnel where name = '令狐葱');

– 11.查询人员表中最高工资是多少
– MAX()最大值

select MAX(salary) from personnel;

– 12.查询人员表中最低工资是多少
– MIN()最小值

select  MIN(salary) FROM personnel;

– 13.查询所有人员的平均工资是多少
– AVG()平均数

select AVG(salary) from personnel;

– 14.查询所有人员的工资总和是多少
– SUM()总数

select SUM(salary) from personnel;

– 15.查询目前有多少个人员
– COUNT()统计总数

select COUNT(*) from personnel;
select COUNT(name) from personnel;
select COUNT(id) from personnel;

– 16.查询当前武林中有哪些门派
– DISTINCT 清楚重复(去重)

select DISTINCT menpai from personnel ;

– GROUP BY 分组

select DISTINCT menpai from personnel GROUP BY  menpai;

– 17.查询 武当派 最高工资是谁

select  MAX(salary),NAME from personnel where menpai='武当';

– 18.查询各门派的平均工资是多少
– GROUP BY 分组查询
– ORDER BY排列

select  menpai,AVG(salary) from personnel GROUP  BY menpai;

– 19.查询当前武林中有哪些门派的平均工资大于8000 并按工资倒序排列
– HAVING
– DESC 倒序排列 组合 ORDER BY 使用
– HAVING 字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和HAVING字句前。而 HAVING子句在聚合后对组记录进行筛选。我的理解就是真实表中没有此数据,这些数据是通过一些函数生存。

select menpai,AVG(salary)>8000 from personnel  GROUP BY menpai HAVING AVG(salary)>8000 ORDER BY AVG(salary) DESC;

– 20.查询当前人员表的中的第3条数据到第7条数据
– LIMIT 分页查询 可指定开始结束位置

select * from personnel LIMIT 2, 5;

– 21.查询哪些门派下没有弟子

select * from personnel GROUP BY menpai HAVING COUNT(*) =1;

select *from personnel GROUP BY menpai HAVING COUNT(*)=1;

– 22.查询武当派下有哪些弟子

select * from personnel where menpai='武当';

– 23.查询 各门派 的 工资总和 按倒序/正序排列
– 按什么什么排列 就要想起来分组和排序结合使用
– 正序 ASC

select menpai,SUM(salary) from personnel GROUP BY menpai ORDER BY SUM(salary) ASC;

– 倒叙 DESC

select menpai,SUM(salary) from personnel GROUP BY menpai ORDER BY SUM(salary) DESC;

– 24.删除工资重复的人员,请保留年龄最大的一个人

DELETE FROM personnel where id in(
    SELECT id FROM (SELECT id from personnel where salary in(SELECT salary FROM personnel GROUP BY salary HAVING count(*)>1)
    AND age not in (SELECT MAX(age) FROM personnel GROUP BY salary HAVING count(*)>1)) as temp
);

– 25.将武当派 张三丰 修改为 张丰

update  set name='张三丰' where name='张丰';

select * from personnel;
select * from dept;

– 26.将所有门派大哥工资上调10%,但不包括Alex.
– != 非 不包含

update personnel set salary = salary+salary*0.1 where leader = 0 and name !='Alex';

– 27.查看哪些人员的门派已登记地理位置.
– 多表多列查询
– DISTINCT 清楚重复(去重)

select DISTINCT adress,d_name from personnel,dept where menpai=d_name;

– 28.查询所有人员门派的位置信息,不存在位置信息则不显示
– LEFT JOIN左连接 on后跟链接判断条件

select name,adress from personnel LEFT JOIN dept on menpai=d_name ;

– 29.在湖北省内的门派中的人员有哪些.

select name,adress from personnel LEFT JOIN dept on menpai=d_name where adress='湖北';

– 30.在陕西省内门派中的工资小于5000,年龄大于20岁的人员有哪些,按主键倒序排列

SELECT * FROM personnel INNER JOIN dept on personnel.menpai = dept.d_name
AND dept.adress = '湖北' and personnel.salary <5000 AND personnel.age >20 ORDER BY personnel.id DESC;

**mysql例题一(根据不同问题,多条件查询)**(代码片段)

MySQL例题一多方面练习1.易错知识点/*NULL和空值-NULL也就是在字段中存储NULL值,空值也就是字段中存储空字符(’’)。selectlength(NULL),length(''),length('1'),length('2');+--------------+------------+------- 查看详情

mysql学习笔记-多表查询(上)(代码片段)

...三种一对多(多对一)多对多一对一1.一对多(多对一)案例:部门与员工的关系,一个部门对应多个员工,一个员工对应一个部门。实现:在多的一方建立外键,指向一的一方的主键2.多对多案例:学生与课程的关系,一个学... 查看详情

javaee框架技术之15ssm综合案例订单管理查询(代码片段)

day02_SSM综合案例一、课程目标1.【掌握】订单管理查询2.查询所有订单信息3.理解关系--mybatis;一对多一对一4.理解订单详情二、订单管理2.1查询所有订单2.1订单表关系结构图2.2创建相应的实体类//会员类@Data@AllArgsConstruct... 查看详情

javaee框架技术之15ssm综合案例订单管理查询(代码片段)

day02_SSM综合案例一、课程目标1.【掌握】订单管理查询2.查询所有订单信息3.理解关系--mybatis;一对多一对一4.理解订单详情二、订单管理2.1查询所有订单2.1订单表关系结构图[外链图片转存失败,源站可能有防盗链机制,建议将... 查看详情

51.多条件组合查询

主要知识点: bool组合查询 bool和filter组合查询 bool,filter嵌套查询 直接用filter查询,并以_score排序     一、bool组合查询 GET/website/article/_search "query":"bool":"must":["match":"title":"elastic 查看详情

jsp+servlet+javabean+mysql实现页面多条件模糊查询(转载)

需求:一般列表页上面会有一个查询框,有各种的查询条件组合,一般都采用模糊查询方式,以下以自己做的实例来说明一下实现方法:需要实现的界面原型:要满足条件:1、单选分类,点GO按扭2、单独输入标题关键字,点GO按... 查看详情

mysql基础:多表查询(代码片段)

...三种:一对多(多对一)多对多一对一一对多(多对一)案例:部门与员工的关系关系:一个部门对应多个员工,一个员工对应一个部门实现:在多(N)的一方建立外键,指向一的一方的主键多对多案例:学生与课程的关系关... 查看详情

关于sql多条件查询问题:若其中一条件为空值如何设置忽略该条件而用其它条件组合查询??

最好列举一段代码,多谢了!!在Oracle多条件查询中包含了空值条件,可采用like关系运算符。例如:select*fromempwheredeptnoliketo_char(变量1)||'%'andenamelike变量2||'%'andsalliketo_char(变量3)||'%';如果变量1、变量2、变量3中... 查看详情

多条件组合测试用例(转)

...询:ABCDE  -确保最大组合的正确性。 二、如果输入条件达到更多,可以考虑以下方法  1.单个条件遍历  2.默认条件查询  3.根据需求或者业务规则选取重点条件组合查询  4.全条件组合查询  5.根据查询所拼SQL... 查看详情

sql数据分析之子查询的综合用法和案例题耐心整理

...在前面​​​​一、子查询基础用法​​​​二、子查询综合用法(难题)​​零、写在前面本文所有代码均是在SQLZOO平台进行,数据也该平台下的world表和一些其他平台提供的数据表,所有代码均已通过测试。一、子查询基础... 查看详情

存储过程多条件查询(代码片段)

11.存储过程23------------------------------------4--用途:[综合查询]多条件查询/GBC查询5--时间:2011-2-148:18:316--名称:dangqinghua7------------------------------------8ALTERPROC[dbo].[DKI_GeneralSearch]9@SqlWhereNVARCHAR(40 查看详情

14、matchall等查询类型,多条件组合查询和利用filter进行查询的优化

...子查询都会计算一个document针对它的相关度分数,然后bool综合所有分数,合并为一个分数,当然filter是不会计算分数的当我们不关心检索词频率TF(TermFrequency)对搜索结果排序的影响时,可以使用constant_score将查询语句query或者... 查看详情

黑马程序员最新版javaweb综合案例(前后端完整版)(代码片段)

JavaWeb综合案例学习视频链接:黑马程序员最新版JavaWeb基础教程,Javaweb从入门到企业实战完整版完整代码链接:https://github.com/HaiLei-Fly/JavaWeb-brand1、功能介绍案例功能:用户登录(账号密码登录)用户注册(... 查看详情

php+mysql多条件多值查询

...和(一个或多个值)来查mysql数据库一张表的数据。where条件里面,status和from两个字段都要满足条件比如,结果数据应该只能是属于从checkbox得到的status的一个或几个值,而且from字段也要只是checkbox得到的一个或几个值,不能有... 查看详情

servlet+jdbc+html+mysql+------查询综合案例(代码片段)

分享第二十四篇励志语句对自己狠一点,逼自己努力,再过五年你将会感谢今天发狠的自己,恨透今天懒惰自卑的自己,既然认准了一条路,那就坚持走下去,命运不会辜负每一个认真而努力的人。 目录... 查看详情

lucene多条件查询”搜索—booleanquery

...。*在本节中所讨论的所有查询类型都可以使用BooleanQuery综合起来。*BooleanQuery本身来讲是一个布尔子句的容器,它提供了专门的API方法往其中添加子句 查看详情

javaweb010--springbootweb综合案例(部门管理&员工管理)

目录SpringBootWeb综合案例一、准备工作1、需求说明&环境搭建①、需求说明②、环境搭建2、开发规范①、接口文档②、开发规范--Restful(表述性状态转换)③、开发规范--统一响应结果④、开发流程二、部门管理1、查询... 查看详情

mysql多条件动态查询

...何满足在用户往input框内输入值,然后以用户输入的值为条件让mysql去执行对应的多条件查询?(就是用户可以四个input框都有值,也可以只有其中一个有值)select*fromtablewhere(name1like'%key1%'orname2like'%key2%'orname3like'%ke... 查看详情