ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL关键字查询

2022-05-07 01:02:51  阅读:164  来源: 互联网

标签:dep 查询 关键字 emp MySQL male id


目录

数据建表准备

CREATE TABLE emp (
	id INT NOT NULL UNIQUE auto_increment,
	emp_name VARCHAR ( 20 ) NOT NULL,
	gender enum ( 'male', 'female' ) NOT NULL DEFAULT 'male',
	age INT ( 3 ) UNSIGNED NOT NULL DEFAULT 28,
	hire_date date NOT NULL,
	post VARCHAR ( 50 ),
	post_comment VARCHAR ( 100 ),
	salary DOUBLE ( 15, 2 ),
	office INT,
	depart_id INT 
);
INSERT INTO emp ( emp_name, gender, age, hire_date, post, salary, office, depart_id )
VALUES
	( 'nick', 'male', 18, '20170301', '老男孩驻上海虹桥最帅', 7300.33, 401, 1 ),
	( 'jason', 'male', 78, '20150302', 'teacher', 1000000.31, 401, 1 ),
	( 'sean', 'male', 81, '20130305', 'teacher', 8300, 401, 1 ),
	( 'tank', 'male', 73, '20140701', 'teacher', 3500, 401, 1 ),
	( 'oscar', 'male', 28, '20121101', 'teacher', 2100, 401, 1 ),
	( 'mac', 'female', 18, '20110211', 'teacher', 9000, 401, 1 ),
	( 'rocky', 'male', 18, '19000301', 'teacher', 30000, 401, 1 ),
	( '成龙', 'male', 48, '20101111', 'teacher', 10000, 401, 1 ),
	( '歪歪', 'female', 48, '20150311', 'sale', 3000.13, 402, 2 ),
	( '丫丫', 'female', 38, '20101101', 'sale', 2000.35, 402, 2 ),
	( '丁丁', 'female', 18, '20110312', 'sale', 1000.37, 402, 2 ),
	( '星星', 'female', 18, '20160513', 'sale', 3000.29, 402, 2 ),
	( '格格', 'female', 28, '20170127', 'sale', 4000.33, 402, 2 ),
	( '张野', 'male', 28, '20160311', 'operation', 10000.13, 403, 3 ),
	( '程咬金', 'male', 18, '19970312', 'operation', 20000, 403, 3 ),
	( '程咬银', 'female', 18, '20130311', 'operation', 19000, 403, 3 ),
	( '程咬铜', 'male', 18, '20150411', 'operation', 18000, 403, 3 ),
	( '程咬铁', 'female', 18, '20140512', 'operation', 17000, 403, 3 );

一.查询关键字之having过滤

having 与 where 功能是一致的都是对数据进行筛选
where用在分组之前的筛选
having用在分组之后的筛选
为了更好的区分 所以将where说成筛选 haivng说成过滤

统计每个部门年龄在30岁以上的员工的平均薪资并且保留平均薪资大于10000的部门

针对聚合函数 如果还需要在其他地方作为条件使用 可以先起别名

二.查询关键字值distinct去重

# 去重的前提是 数据必须一样才生效(如果数据有主键那么就无法去重)
select distinct age from emp;

三.查询关键字值order by排序

# 1.按照薪资高低排序
# 默认是升序(从小到大)
select * from emp order by salary asc;
# 关键字asc 可以省略 
select * from emp order by salary desc;
# 降序(从大到小) 
# 3.统计各部门年龄在10岁以上的员工平均工资 并且保留平均工资大于1000的部门并按照从大到小的顺序排序

升序

降序

先按照年龄升序排序 如果年龄相同 则再按照薪资降序排序**

统计各部门年龄在10岁以上的员工平均工资 并且保留平均工资大于1000的部门并按照从大到小的顺序排序

四.查询关键字之limit分页

# 分页即限制展示条数

# 1.限制只展示五条数据
select * from emp limit 5;
'只显示1~5的主键id'
# 2.分页效果
select * from emp limit 5,5;
'只显示6~10的主键id'
"""
当数据特别多的时候 经常使用limit来限制展示条数 节省资源 防止系统崩溃
"""

*查询工资最高的人的详细信息

五.查询关键字之regexp正则

已正则方式查找j开头带有n或y结尾的名字

六.多表查询

# 多表查询的思路总共就两种
1.子查询:
将一条SQL语句的查询结果加括号当做另外一条SQL语句的查询条件
2.连表操作
先将多张表拼接到一起 形成一张大表 然后基于单表查询获取数据

1.一条SQL语句的查询结果 我们也可以看成是一张虚拟表
2.如果一条SQL语句中设计到多张表的字段名称编写 建议使用表名前缀做区分

1.连表操作有四个关键字

inner join		内连接
select * from emp inner join dep on emp.dep_id=dep.id;
'只连接两张表中有对应关系的数据'

left join		左连接
select * from emp left join dep on emp.dep_id=dep.id;
'以左表为基准 展示所有的数据 没有对应项则用NULL填充'

right join		右连接
select * from emp right join dep on emp.dep_id=dep.id;
'以右表为基准 展示所有的数据 没有对应项则用NULL填充'

union					全连接
select * from emp left join dep on emp.dep_id=dep.id
    union
select * from emp right join dep on emp.dep_id=dep.id;
'左右两表数据全部展示 没有对应项则用NULL填充'

七.可视化软件Navicat

Navicat可以充当很多数据库软件的客户端 提供了图形化界面能够让我们更加快速的操作数据库
# 下载
  navicat有很多版本 并且默认都是收费使用
  正版可以免费体验14天 
  针对这种图形化软件 版本越新越好(不同版本图标颜色不一样 但是主题功能是一样的)
# 使用
	内部封装了SQL语句 用户只需要鼠标点点点就可以快速操作
  连接数据库  创建库和表 录入数据 操作数据
  外键 SQL文件 逆向数据库到模型 查询(自己写SQL语句)
  # 使用navicat编写SQL 如果自动补全语句 那么关键字都会变大写
  SQL语句注释语法(快捷键与pycharm中的一致 ctrl+?)
  	# 
    --
# 运行SQL文件

标签:dep,查询,关键字,emp,MySQL,male,id
来源: https://www.cnblogs.com/xwkg/p/16240844.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有