首页 > 数据库技术 > 详细

数据库之表的查询方式

时间:2019-08-21 17:32:22      阅读:91      评论:0      收藏:0      [点我收藏+]

一:where查询方式

(1)书写顺序:

 例如:

select id,name from emp where id > 3 and id < 6;

(2)执行顺序:

   (1)from :确定查询那个表

   (2)where:筛选数据查找条件

  (3)select:从筛选出来的数据条件中取出数据

 

(3)练习:

技术分享图片
create table emp(
  id int not null unique 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),
);


#三个部门:教学,销售,运营
insert into emp(name,sex,age,hire_date,post,salary,office,depart_id) values
(jason,male,18,20170301,张江第一帅形象代言,7300.33,401,1), #以下是教学部
(egon,male,78,20150302,teacher,1000000.31,401,1),
(kevin,male,81,20130305,teacher,8300,401,1),
(tank,male,73,20140701,teacher,3500,401,1),
(owen,male,28,20121101,teacher,2100,401,1),
(jerry,female,18,20110211,teacher,9000,401,1),
(nick,male,18,19000301,teacher,30000,401,1),
(sean,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)
;
表格建立及数据插入
技术分享图片
# 1.查询id大于等于3小于等于6的数据
select * from emp where id >= 3 and id <= 6;
select name,salary from emp where id between 3 and 6;  # 查询id(3-6)之间姓名 薪资

# 2.查询薪资是20000或者18000或者17000的数据
select * from emp where salary = 20000 or salary = 18000 or salary = 17000;
select name,id from emp where salary in (20000,18000,17000); 查看薪资在(20000 180000 17000)姓名 ID


# 3.查询员工姓名中包含o字母的员工姓名和薪资

select name,id from emp where name like %o%;   # 模糊匹配 匹配出所有含有o字母

# 4.查询员工姓名是由四个字符组成的员工姓名与其薪资
select name,salary from emp where name like ____;
select name,salary,id from emp where  char_length(name) = 4;


# 5.查询id小于3或者大于6的数据
select * from emp where id > 3 or id < 6;
select * from emp where id not between 3 and 6;

# 6.查询薪资不在20000,18000,17000范围的数据
select * from emp where salary not in(20000,18000,17000);

# 7.查询岗位描述为空的员工名与岗位名
select * from emp where post_comment = Null; # 不会报错 但是会匹配不到数据

select * from emp where post_comment is Null; # null 需要用is
where 练习

 

二:分组

书写顺序:

例如:

select * from emp group by post;

执行顺序:
(1):from

(2):where

(3):group by

(4):select

例如:

技术分享图片
select * from emp group by post;
PS:
(1)分组获取的以组为单位    获取的是组内的第一条数据
(2)在MySQL分组之后 只能获取分组后组内的字段信息 无法获取其余字段信息
(3)上述可以通过聚合函数 获取其余字段信息
(4)如果分组之后 依然可以获取到其余字段信息 说明没有设置严格模式
# 严格模式设置
set global sql_mode = "strict_trans_tables,only_full_group_by";
select * from emp group by post; # 报错
select name from emp group by post; # 报错
select post from emp group by post; # 查询成功
分组查询基础

 

(2)聚合函数:

例如:

技术分享图片
# 1.获取每个部门的最高工资
select post,max(salary) from emp group by post;
 
# 每个部门的最低工资
select post,min(salary) from emp group by post;

# 每个部门的平均工资
select post,avg(salary) from emp group by post;

# 每个部门的工资总和
select post,sum(salary) from emp group by post;

#  每个部门的人数
select post,count(id) from emp group by post;
select post,count(salary) from emp group by post;
select post,count(null) from emp group by post; # 无法统计
PS:在统计分组个数的时候 可以将非空字段当做参数传入count 完成计数
聚合函数

 

(3)concat/group_concat:

作用:

  (1)group_concat:在分组之后用来进行数据的拼接

  (2)concat:分组之后进行数据的拼接

例如:

技术分享图片
# 3.查询分组之后的部门名称和每个部门下所有的姓名
select post,name from emp group by post;  # 报错
select post,group_concat(name) from emp group by post;

# 查询分组之后的部门名称和每个部门下所有的姓名 并将选出的数据名添加_SR
select post,group_concat(name,_SR) from emp group by post;

# 查询分组之后的部门名称和每个部门下所有的姓名与薪水 并将选出的数据进行拼接
select post,group_concat(name,:,salary) from emp group by post;

# 查询分组之后的部门名称和每个部门下所有的姓名与薪水 并将选出的数据进行拼接且通过as重命名表名
select concat(NAME,:,name) as 姓名,concat(SLA,:,salary) as 薪水 from emp where id between 3 and 6;
group_concat/concat

 

(4)having:

作用:对分组筛选的数据在进行筛选

例如:

技术分享图片
1、统计各部门年龄在30岁以上的员工平均工资,并且保留平均工资大于10000的部门
select post from emp where age > 30 group by post having avg(salary) >10000;
PS:
(1):having只能用在分组后面
(2):having不能单独使用
select post from emp where age > 30 having avg(salary) >10000;  # 报错 
select post from emp having avg(salary) >10000;                    # 报错
having 使用方式

 

(4)distinct:

作用:去除筛选字段中重复的数据

例如:

select distinct id,age from emp;  # 无法筛选 因为此时age中有重复数据
select distinct post from emp;
PS:只要数据中有一个字段数据重复 都无法筛选数据

 

数据库之表的查询方式

原文:https://www.cnblogs.com/SR-Program/p/11389006.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!