MySQL关键字查询

数据建表准备

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文件
posted @ 2022-05-07 00:38  笑舞狂歌  阅读(148)  评论(0编辑  收藏  举报