Welcome!!!

F

伞兵一号,申请出战

MySQL(四)

MySQL(四)

查询关键字之having过滤

# having作用
	类似于where,都是做数据筛选
    只不过having用于分组后的数据筛选
    
# 统计每个部门年龄在30岁以上的员工的平均薪资并且保留平均薪资大于10000的部门
	'''拆分法,即把一条长查询差分成多条短查询,再合并'''
	# 1.先查出每个部门年龄在30岁以上的员工的平均薪资
    select avg(salary) from emp where age > 30 group by post;
    # 2.再保留平均薪资大于10000的部门
    select avg(salary) from emp where age > 30 group by post having avg(salary) > 10000;
    
# 字段起别名	
	对于上述代码,我们可以avg(salary) as 'avg_salary'
    即给结果字段avg(salary)命名为avg_salary
    后续可以使用avg_salary > 10000替代avg(salary) > 10000

查询关键字之distinct去重

# 作用
	查询结果有一毛一样的数据只保留一个
# 使用
	# 查询所有员工的年龄,相同的只保留一个
	select distinct age from emp;
"""
等我们学到django orm之后 数据会被封装成对象 
那个时候主键很容易被我们忽略 从而导致去重没有效果!!!
"""

查询关键字之order by排序

# 作用
	控制查询结果的顺序
# 使用
	order by 字段名 asc/desc(升序(默认)/降序)
    '''order by 字段名 后面不写东西默认是升序的'''
    
    # 查询所有年龄,去重,并按照升序排列
    select distinct age from emp order by age;
    
    # 查询所有员工,降序排列,如果年龄相同按工资升序排列
    select * from emp order by age desc,salary asc;

查询关键字之limit分页

# 作用
	限制展示条数
# 使用
	limit 条数
	limit 起止位置(不包含),条数
    
    # 查询年龄,去重,取3条数据
    select distinct age from emp limit 3;
    # 查询年龄,去重,从第5条数据开始取3条数据
    select distinct age from emp limit 5,3;
    
"""
当数据特别多的时候 经常使用limit来限制展示条数 节省资源 防止系统崩溃
"""

查询关键字之regexp正则

# 作用
	其实这个可以放到where里讲
    作用类似于like,匹配字符的
# 使用
	where 字段名 regexp 正则串
    # 查找名字j开头n或者y结尾的人的信息
    select * from emp where name regexp '^j.*(n|y)$';
    

查询全家福

select
	要查询的字段名
from
	待查询的表
where
	条件
group by
	分组字段
having 
	筛选数据
distinct
order by 
limit

多表查询思路

# 多表查询的思路总共就两种
	1.子查询
    	一张表一张表的查
        eg:
        # 用户登录后查看购物车里的东西(用户表,购物车表(user_id为主键))
        1.用户登录(根据用户名密码获取用户id)
        2.查询购物车(根据用户id取购物车表里查数据)
        '''
        根据已有数据,抽丝剥茧一样,一张表查完了,用查到的数据再去查下一张表
        '''
    2.连表操作
    	就是上一篇讲的拆表的逆向思维
        把多张表合成一张表,然后直接查
        # 连表查购物车
        1.用户表和购物车表通过user_id连起来
        2.通过用户名密码直接查
        
# 代码实操
	create table user(
        id int primary key auto_increment,
        username varchar(32),
        pwd varchar(32)
    );
    create table shop_car(
        id int primary key auto_increment,
        shop_info varchar(32),
        user_id int,
        foreign key(user_id) references user(id)
    );
    insert into user(username,pwd) values('petter','123');
    insert into shop_car(shop_info,user_id) values('大白菜一斤',1),('粉条一斤',1),('猪肉一斤',1);
    
# 子查寻
	1.先根据账号密码查用户id
    select id from user where username = 'petter' and pwd = '123';
    2.根据用户id查询购物记录
    select * from shop_car where user_id = (select id from user where username = 'petter' and pwd = '123');
    
# 连表查询
	笛卡尔积(了解知识)
    select * from user,shop_car; # 会将所有的数据全部对应一遍
    select * from user,shop_car where user.id = shop_car.user_id;
    
	1.inner join(内连接)
    select * from shop_car inner join user on shop_car.user_id = user.id;
    '''只连接两张表中有对应关系的数据'''
    2.left join(左连接)
    select * from shop_car left join user on shop_car.user_id = user.id;
    '''左表数据全展示,右表只展示有关联的数据,左表有右表没有的数据用null填充'''
    3.right join(右连接)
    select * from shop_car right join user on shop_car.user_id = user.id;
    '''右表数据全展示,左表只展示有关联的数据,右表有左表没有的数据用null填充'''
    4.union(全连接)
    select * from shop_car union user on shop_car.user_id = user.id;
    '''两张表的数据全展示出来,没有的用null天成'''

子查询

笛卡尔积

连表查询

可视化软件之Navicat

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