MySQL关键字查询
目录
- 数据建表准备
- 一.查询关键字之having过滤
- 二.查询关键字值distinct去重
- 三.查询关键字值order by排序
- 四.查询关键字之limit分页
- 五.查询关键字之regexp正则
- 六.多表查询
- 七.可视化软件Navicat
数据建表准备
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文件