Python攻城师的成长————MySQL数据库关键字
今日学习目标
- 熟悉关键字用法,掌握多表查询思路
文章目录
- 今日学习目标
- 学习内容
- 一、查询关键字
- 查询关键字之having过滤
- 查询关键字之distinct去重
- 查询关键字之order by排序
- 查询关键字之limit分页
- 查询关键字之regexp正则
- 二、多表查询思路
- 多表查询的思路
- 三、可视化软件navicat
学习内容
- 查询关键字
- 多表查询思路
- 可视化软件navicat
一、查询关键字
关键字功能讲解依靠例题讲解,争取做到通俗易懂。
例题数据
create table emp(id int primary key auto_increment,name varchar(20) not null,sex 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
);create table emp(id int primary key auto_increment,name varchar(20) not null,sex 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(name,sex,age,hire_date,post,salary,office,depart_id) values
('jason','male',18,'20170301','张江第一帅形象代言',7300.33,401,1), #以下是教学部
('tom','male',78,'20150302','teacher',1000000.31,401,1),
('kevin','male',81,'20130305','teacher',8300,401,1),
('tony','male',73,'20140701','teacher',3500,401,1),
('owen','male',28,'20121101','teacher',2100,401,1),
('jack','female',18,'20110211','teacher',9000,401,1),
('jenny','male',18,'19000301','teacher',30000,401,1),
('sank','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过滤
where 和 having都是用来筛选数据的,但是where 用于分组之前的筛选、having用于分组之后的筛选eg:
统计各部门年龄在30岁以上的员工平均薪资,并保留平均工资大于10000的部门
select post,avg(salary) from emp where age > 30 group by post having avg(salary)>100000;
查询关键字之distinct去重
去重的前提是存在一模一样的数据
如果存在主键无法去重
#对有重复的展示数据进行去重操作
select distinct id,age from emp;
select distinct post from emp;
查询关键字之order by排序
order by 默认是升序 默认关键字是asc
select * from emp order by salary asc;
select * from emp order by salary desc;order by 排序支持多个字段组合
select * from emp order by age,salary;
select * from emp order by age asc,salary desc;
查询关键字之limit分页
#只跟一个数字select * from emp limit 5; #从头开始展示几行数据#求薪资最高的员工所有数据
1、先按照薪资降序排序
2、再使用limit限制取一行
select * from emp order by salary desc limit 1;
查询关键字之regexp正则
select * from emp where name regexp '^j.*(n|y)$';#以j开头的所有任意字符,以n和y结尾的名字
二、多表查询思路
多表查询的思路
子查询
就相当于是我们日常生活中解决问题的方式(一步步解决)
将一条SQL语句的查询结果加括号当做另外一条SQL语句的查询条件eg:以昨天的员工表和部门表为例 查询jason所在的部门名称
子查询的步骤
1.先查jason所在的部门编号
2.根据部门编号去部门表中查找部门名称连表操作
先将多张表拼接到一起 形成一张大表 然后基于单表查询获取数据
eg:以昨天的员工表和部门表为例 查询jason所在的部门名称
连表操作
1.先将员工表和部门表按照某个字段拼接到一起
2.基于单表查询
实际演练
create table dep(id int primary key auto_increment,name varchar(32) ); create table emp(id int primary key auto_increment,name varchar(32),gender enum('male','female','others') default 'male',age int,dep_id int ); insert into dep values(200,'技术'),(201,'人力资源'),(202,'销售'),(203,'运营'),(205,'安保'); insert into emp(name,age,dep_id) values('jason',18,200),('tony',28,201),('oscar',38,201),('jerry',29,202),('kevin',39,203),('jack',48,204);
使用子查询 获取jason所在的部门名称
先获取jason的部门编号
select dep_id from emp where name='jason';
将结果加括号作为查询条件
select name from dep where id=(select dep_id from emp where name='jason');
使用连表操作 获取jason所在的部门名称
select dep.name from emp inner join dep on emp.dep_id=dep.id where emp.name='jason'
笛卡尔积(了解知识)
select * from emp,dep; # 会讲所有的数据全部对应一遍select * from emp,dep where emp.dep_id=dep.id; # 效率低下1.一条SQL语句的查询结果 我们也可以看成是一张虚拟表
2.如果一条SQL语句中设计到多张表的字段名称编写 建议使用表名前缀做区分
连表操作有四个关键字
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填充
分析总结:
我们学会了连表操作之后 其实就可以将N多张表拼接到一起
思路:我们可以将两张表拼接之后的结果起别名当做一张表使用然后再去跟另外一张表拼接
三、可视化软件navicat
Navicat可以充当很多数据库软件的客户端 提供了图形化界面能够让我们更加快速的操作数据库
内部封装了SQL语句 用户只需要鼠标点点点就可以快速操作
连接数据库 创建库和表 录入数据 操作数据
外键 SQL文件 逆向数据库到模型 查询(自己写SQL语句)
使用navicat编写SQL 如果自动补全语句 那么关键字都会变大写
对于基础使用个人比较推荐看一下这篇博客
Python攻城师的成长————MySQL数据库关键字相关推荐
- Python攻城师的成长————网络编程(socket套接字、通信循环、链接循环、黏包问题)
今日学习目标 学习什么是socket套接字,并依靠它去处理TCP协议等网络编程问题 文章目录 今日学习目标 学习内容 一. socket套接字 1.什么是socket 2.套接字发展史及分类 3.套接 ...
- Python攻城师的成长————模块突破(collections、time与datetime、random随机数模块)
今日学习目标: 学习并应用collections.time与datetime.random随机数模块知识 今日学习内容: collections模块 time与datetime模块 random随机数 ...
- Python攻城师的成长————Django框架(csrf相关装饰器、基于中间件思想编写项目、auth认证模块)
今日学习目标 逐步掌握csrf相关装饰器.基于中间件思想编写项目.auth认证模块知识点 文章目录 今日学习目标 学习内容 一. csrf相关装饰器 二.基于中间件思想编写项目 三.auth认证模块 ...
- Python攻城师的成长————面向对象的三大特征(继承、多态)
学习目标: 了解继承与多态的概念,重点是要学会运用继承去处理问题 学习内容: 继承 在面对对象程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类,而被继 ...
- Python攻城师的成长————ORM查询
今日学习目标 熟悉掌握ORM语法操作 文章目录 今日学习目标 学习内容 一.神奇的双下划线查询 二.orm创建外键关系 三.外键字段的增删改查 四.正反向的概念 五.ORM多表查询 正向查询 反向查询 ...
- Python攻城师的成长————css语法、伪元素选择器(部分)
今日学习目标 熟悉并掌握css中各种修改属性的方法. 文章目录 今日学习目标 学习内容 一.伪元素选择器 css操作文本内容 选择器优先级 二.css修改属性 css修改文字属性 css修改字体属性 ...
- Python攻城师————MySQL数据库(自增、外键、关键字)
今日学习目标 正式学习MySQL数据库语句. 文章目录 今日学习目标 学习内容 一.自增特性 二.约束条件之外键 外键的定义 外键约束创建 三.查询关键字 查询关键字之select与from 查询关键 ...
- Python攻城师————前端学习(jQuery框架、第三方框架bootstrap框架)
今日学习目标 继续学习jQuery框架剩余的内容. 文章目录 今日学习目标 学习内容 一.jQuery操作标签 class操作 样式操作 位置操作 文本值操作 属性操作 文档处理操作 二.jQuery ...
- 如何成为一名优秀的web前端工程师(前端攻城师)
程序设计之道无远弗届,御晨风而返.---- 杰佛瑞 · 詹姆士 我所遇到的前端程序员分两种: 第一种一直在问:如何学习前端? 第二种总说:前端很简单,就那么一点东西. 我从没有听到有人问:如何做一名优 ...
最新文章
- Spring集成spymemcached
- SSH登录太慢(等很久才提示输入密码)的问题
- 【Coursera】主成分分析
- linux shell基础(1)
- 3DMM及eos人脸重建
- Maxon无刷直流电机学习分享
- 中国移动DNS IP地址大全(32个省)
- 如何把二维表转成一维表
- vsftpd 虚拟用户
- Autosar CPU core trust/Nontrust配置
- 使用性能利器 Redis实现网站的加速
- 志强系列的服务器能吃鸡吗,性能芯变化!三款至强E5 V3服务器体验
- 『Less』学习笔记
- 【AI能否取代设计师】「Stable Diffusion」AI绘画黑科技将告诉你答案
- linux查看历史开机时间,查看linux系统的开机时间/重启历史记录
- PDF生成插件--TcPDF
- python批量文件重命名
- Android简易计算器的制作
- 获取CheckedListBox选中的项
- BootDo:修改启动时的象形文字