where->group by->having->distinct->order by->limit->select"이다."/> where->group by->having->distinct->order by->limit->select"이다.">

 >  기사  >  데이터 베이스  >  단일 테이블 쿼리란 무엇입니까?

단일 테이블 쿼리란 무엇입니까?

藏色散人
藏色散人원래의
2020-07-01 09:23:255838검색

단일 테이블 쿼리는 하나의 테이블에 있는 데이터를 쿼리하는 것을 말합니다. 실행 순서는 "from->where->group by->having->distinct->order by->limit->select"입니다. .

단일 테이블 쿼리란 무엇입니까?

데이터베이스 작업에서 단일 테이블 쿼리는 테이블의 데이터를 쿼리하는 것입니다. 자세한 구문은 다음과 같습니다.

select distinct 字段1,字段2... from 表名
	where 分组之前的过滤条件
	group by 分组字段
	having 分组之后的过滤条件
	order by 排序字段
	limit 显示的条数;

구문 순서는 동일하지만 실행 순서는 다릅니다. 문법 순서에 따라 실행되지만 이 순서대로 실행됩니다.

from--->where--->group by--->having-->distinct--->order by--->limit--->select

왜 이런 실행 순서가 구현되는지에 대해서는 말하지 않을 것이며 명확하게 설명할 자신도 없습니다. 초보자라면 이 실행 순서만 기억하면 됩니다. 더 알고 싶다면 구글에 접속해 보세요.

단일 테이블 쿼리를 이해하기 전에 먼저 직원 테이블을 생성해 보겠습니다:

emp表:
员工id      id                  int             
姓名        emp_name            varchar
性别        sex                 enum
年龄        age                 int
入职日期    hire_date           date
岗位        post                varchar
职位描述    post_comment        varchar
薪水        salary              double
办公室      office              int
部门编号    depart_id           int	

테이블 생성:

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),
office int, 
depart_id int
);

데이터 삽입:

insert into emp(name,sex,age,hire_date,post,salary,office,depart_id) values
('niange','male',23,'20170301','manager',15000,401,1), 
('monicx','male',23,'20150302','teacher',16000,401,1),
('wupeiqi','male',25,'20130305','teacher',8300,401,1),
('yuanhao','male',34,'20140701','teacher',3500,401,1),
('anny','female',48,'20150311','sale',3000.13,402,2),
('monke','female',38,'20101101','sale',2000.35,402,2),
('sandy','female',18,'20110312','sale',1000.37,402,2),
('chermy','female',18,'20130311','operation',19000,403,3),
('bailes','male',18,'20150411','operation',18000,403,3),
('omg','female',18,'20140512','operation',17000,403,3);

where 조건 필터링

은 where 절에서 사용할 수 있습니다:
1. 비교 연산자: >, 95ec6993dc754240360e28e0de8de30a=, 9bfa661c0ebd62c5f7d180e0bd343b78, !=.
2. 1~5 사이 값은 1~5입니다.
3. in(1,3,8) 값은 1, 3 또는 8입니다.
4. 'monicx%'와 마찬가지로
%는 임의의 문자 수를 나타냅니다.
_는 하나의 문자를 나타냅니다.

5. 논리 연산자 and, or, not은 여러 조건에서 직접 사용할 수 있습니다.

6, 정규식

2에서 5 사이의 직원 ID 이름 찾기:


이름에 문자 y가 포함된 직원 이름과 급여 쿼리:


쿼리 직원 이름은 4글자와 급여로 구성됩니다.


직무 설명이 비어 있는 직원 이름과 직위 이름을 쿼리합니다.


문자 m으로 시작하고 the로 시작하는 이름을 쿼리합니다. e 또는 x로 끝나는 편지 직원! 이때 정규식을 사용할 수 있습니다. MySQL은 정규식을 표현하기 위한 regexp를 제공합니다.


group by group

먼저 mysq의 sql_mode를 only_full_group_by로 설정합니다. 이는 앞으로는 그룹화를 위한 기반만 얻을 수 있다는 의미입니다.

set global sql_mode="strict_trans_tables,only_full_group_by";

where 이후에 그룹화가 발생합니다. 즉, where 이후에 얻은 기록을 기반으로 그룹화가 이루어집니다.

그룹핑이란 직원 정보 테이블에 따라 직위를 그룹화하거나 성별에 따라 그룹화하는 등 모든 기록을 동일한 특정 분야에 따라 분류하는 것을 의미합니다.

그룹화하는 방법은 무엇인가요?
예를 들어, 각 부서의 최고 급여를 가져옵니다.
예: 각 부서의 직원 수를 가져옵니다.
"every""라는 단어 뒤의 필드는 그룹화의 기초입니다.
참고: 어떤 필드로든 그룹화할 수 있지만 게시물별로 그룹화한 후에는 게시물 필드만 볼 수 있습니다.

그러나 그룹 내 정보를 보려면 aggregation(함께 모아서 하나의 콘텐츠로 합성) 기능

每个部门的最高工资
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;

group_concat(그룹화한 후 해당 콘텐츠를 가져오기 위해 사용)을 사용해야 합니다. 필드.)


다음과 같이 사용할 수 있습니다.

다음 코드로 직접 시도해 볼 수 있습니다.

select post,group_concat(name) from emp group by post;
select post,group_concat(name,"_NB") from emp group by post;
select post,group_concat(name,": ",salary) from emp group by post;
select post,group_concat(salary) from emp group by post;

현명한 반 친구들은 없이도 사용할 수 있다고 말할 것입니다. 그룹화? 아니요! 그러나 mysql은 또 다른 작동 방법을 제공합니다. 연결되어 있습니다.


 # 补充as语法
    mysql> select emp.id,emp.name from emp as t1; # 报错
    mysql> select t1.id,t1.name from emp as t1;

group by 그게 ​​전부입니다. 그래도 이해가 되지 않는다면 다음과 같은 간단한 연습을 해보세요.

    1. 查询岗位名以及岗位包含的所有员工名字
        select post,group_concat(name) from emp group by post;
    2. 查询岗位名以及各岗位内包含的员工个数
        select post,count(id) from emp group by post;
    3. 查询公司内男员工和女员工的个数
        select sex,count(id) from emp group by sex;
    4. 查询岗位名以及各岗位的平均薪资
        select post,avg(salary) from emp group by post;
    5. 查询岗位名以及各岗位的最高薪资
        select post,max(salary) from emp group by post;
    6. 查询岗位名以及各岗位的最低薪资
	select post,min(salary) from emp group by post;
    7. 查询男员工与男员工的平均薪资,女员工与女员工的平均薪资
        select sex,avg(salary) from emp group by sex;
    8、统计各部门年龄在30岁以上的员工平均工资
       select post,avg(salary) from emp where age >= 30 group by post;

having 필터

having은 그룹화 후 추가로 필터링된다는 점을 제외하면 where와 동일한 구문 형식을 갖습니다.

where不能用聚合函数,但having是可以用聚合函数,这也是它们最大的区别。

统计各部门年龄在24岁以上的员工平均工资,并且保留平均工资大于4000的部门。


注意:having只能与 select 语句一起使用。
having通常在 group by 子句中使用。

如果不使用 group by子句,不会报错,但会出现以下的情况。


distinct去重

order by 排序

select * from emp order by salary asc; #默认升序排
select * from emp order by salary desc; #降序排
select * from emp order by age desc; #降序排
select * from emp order by age desc,salary asc; #先按照age降序排,再按照薪资升序排


limit 限制显示条数

如查要获取工资最高的员工的信息,我们可以用order by和limit也可以做到。


如果查一个表数据量大的话可以用limit分页显示。

select * from emp limit 0,5;


select * from emp limit 5,5;


ps:看到这里如果上面的东西你都明白的话,单表查询你基本上已经熟悉它了。

위 내용은 단일 테이블 쿼리란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.