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文件