MySQL 그룹 링크 사용 방법 자세히 알 아 보기
그룹
말 그대로 데 이 터 를 무엇으로 나 누 는 지,각 조 는 어떤 특징 이 있 는 지.
1.우 리 는 가장 간단 한 것 부터 시작한다.
select count(*) from tb1 group by tb1.sex;
모든 데이터 의 항목 수 를 조회 하고 성별 에 따라 그룹 을 나 눕 니 다.이렇게 조회 한 결과 집합 은 count(*)열 만 있 습 니 다.
2.그리고 이 그룹 을 분석 해 보 겠 습 니 다.우 리 는 select 와 from 사이 에 무엇 을 넣 을 수 있 습 니까?
데이터 그룹 을 나 누 면 데이터 의 대부분 필드 는 존재 하 는 의 미 를 잃 게 됩 니 다.여러 데이터 의 같은 열 은 하나의 값 만 표시 합 니 다.도대체 누구의 값 을 표시 하 는 지 생각해 보 세 요.이 값 이 유용 합 니까?
사 고 를 통 해 알 수 있 듯 이 by 의 열 만 넣 을 수 있 습 니 다.그 다음 에 sql 의 함수 조작 입 니 다.예 를 들 어 count(),sum()...(by 뒤에 그룹 을 나 누 는 근거 로 취 합 함수 에 포함 되 어 결과 로 합 니 다)
예:각 대학의 학생 이 몇 명 인지 조회 합 니 다.(대학의 가 치 는 대학의 id)
SELECT a.COLLEGE AS 학원,COUNT(*)AS 학생 수 FROM basealumni a GROUP BY a.COLLEGE;
3.where,having,group by 와 공동으로 사용
처음에 group by 를 배 웠 을 때 저 는 잘못된 부분 에 빠 졌 습 니 다.바로 group by 는 where 와 함께 사용 할 수 없고 having 만 사용 할 수 있 습 니 다.
책 을 열심히 읽 지 않 아 요.사실 다 같이 사용 할 수 있어 요.where 는 group by 앞 에 만 있 고 having 은 group by 뒤에 만 있어 요.
where,필터 조건 의 키 워드 는 group by 이전 데이터 만 필터 링 할 수 있 습 니 다.
having 도 필터 조건 의 키워드 역할 은 where 와 같 지만 그룹 을 나 눈 데이터 입 니 다.그룹 을 나 눈 결과 집합 을 필터 링 하 는 것 입 니 다.
having 이 나타 나 는 것 은 사실 한 문장 에 두 개의 where 문제 가 발생 하 는 것 을 해결 하기 위해 서 라 고 생각 합 니 다.
예:
30100 대학의 각 학과 학생 이 몇 명 인지 알 아 보 세 요.
SELECT a.MAJOR AS 전공,COUNT(*)AS 학생 수 FROM basealumni a WHERE a.COLLEGE = 30100 GROUP BY a.MAJOR;
각 대학의 학생 이 몇 명인 지 알 아 보고 학생 수가 3 명 이상 이면 된다.
SELECT a.COLLEGE AS 학원,COUNT(*)AS 학생 수 FROM basealumni a GROUP BY a.COLLEGE HAVING COUNT(*)>3;
필터 실행 순서:① 먼저*를 선별 하고 ② 선별 결 과 를 그룹 으로 나 누 며 ③ 조별 결 과 를 선별 합 니 다.
4.Group By All 의 사용,하하 하,자주 인터넷 에서 찾 아 보기,나 는 이 문법 을 도태 시 키 기로 결 정 했 습 니 다~
사실은 앞 where 이후 에 그룹 을 나 누 려 는 결 과 는 where 의 데이터 에 부합 되 지 않 는 것 으로 나 타 났 습 니 다.물론 연산 을 하지 않 고 연산 결 과 는 0 또는 null 로 표시 되 었 습 니 다.이 문법 은 쓸모 가 없 을 것 같 아서 응용 장면 이 생각 나 지 않 습 니 다~
2.깊이 학습 연결
연결 은 4 가지,내부 연결,전체 연결,왼쪽 외 연결,오른쪽 외 연결 로 나 뉜 다.
1.연결 되 어 있 는 곳
① from 과 where 사이 에 표 와 표 의 연결 을 한다.
② where 와 having 사이 에 having 은 group by 의 결과 집합 을 선별 하 는 것 이다.즉,group by 의 결과 집합 을 표 로 한 다음 에 다른 표 와 연결 한 다음 에 더 선별 할 수 있다.
2.연결 유형 해석
시 계 를 하나의 집합 으로 보고 연결 을 매 핑 으로 본다 면 그들의 결 과 는...
내부 연결:일일이 비 추기;모든 연결:피리 칼 곱 하기;왼쪽 외부 연결:일일이 맵+왼쪽 표 가 오른쪽 표 에 대응 하 는 null;오른쪽 외부 연결:일일이 맵+오른쪽 표 는 왼쪽 표 의 null 에 대응 합 니 다.
키워드:
내부 연결:inner join;전체 연결:cross join;왼쪽 외부 연결:left join;오른쪽 연결:right join.
문법:
표 a left join 표 b on a.열 1=b.열 2
3.연결 의 사용
이전에 group by 를 배 운 예 에서 결과 집 은 bug 가 존재 합 니 다.
예:각 대학의 학생 이 몇 명 인지 조회 합 니 다.(대학의 가 치 는 대학의 id)연결 이 없 을 때 학원 수가 0 인 것 은 표시 되 지 않 습 니 다.현재 표 에 이 대학의 정보 가 없 기 때 문 입 니 다.
그럼 여기 서 왼쪽 연결(왼쪽 연결)을 해 보 겠 습 니 다.
SELECT c.ID, a.COLLEGE, COUNT(a.COLLEGE) FROM (SELECT ID FROM dic_college) c LEFT JOIN ( SELECT COLLEGE FROM base_alumni ) a ON c.ID = a.COLLEGE GROUP BY c.ID
내 가 있 는 이곳 은 완전한 문구 다.나 는 이 문장 을 쓰기 전에 많은 충돌 을 만 났 다.
해독:
우 리 는 먼저 학원 표 와 학우 정보 표(학생 표)를 왼쪽 으로 연결 합 니 다.
우리 가 원 하 는 것 은 학원 이기 때문에 학원 은 메 인 시계 로 서 left join 의 앞 에 c LEFT JOIN A ON...
그런 후에 우 리 는 많은 필드 가 있다 는 것 을 발견 했다.그래서 우 리 는 불필요 한 필드 를 없 애 면 우리 가 관찰 하 는 데 편리 할 뿐만 아니 라 sql 의 집행 효율 도 향상 시 켰 다.
① 학원 표를 한 필드 로 만 들 기(SELECT ID FROM diccollege) c
② 학생 표를 한 필드 로 만 들 기(SELECT COLLEGE FROM basealumni ) a
이때 조회 결 과 는 이 렇 습 니 다.
SELECT * FROM (SELECT ID FROM dic_college) c LEFT JOIN ( SELECT COLLEGE FROM base_alumni ) a ON c.ID = a.COLLEGE
이 때 이 결과 집합 을 그룹 으로 나 눕 니 다:GROUP BY c.ID,검색 필드 를 변경 합 니 다.
위의 결 과 는 c.ID 와 a.ColLEGE 가 일일이 대응 합 니 다.이때 count(*)의 데 이 터 는 총 줄 수 입 니 다.우리 의 메 인 표 는 학원 표 이기 때문에 이 데 이 터 는 count(c.ID)의 데이터 와 같 습 니 다.
그러나 a.ColLEGE 가 빈 줄 로 된 데이터 의 중간 값 은 모두 1 입 니 다.이것 은 우리 가 원 하 는 것 이 아니 기 때문에 count(*)를 count(a.ColLEGE)로 바 꾸 면 데이터 가 나 옵 니 다.
이것 이 야 말로 모든 학원 에서 각 대학의 학생 수 를 조회 하 는 정 답 이다!물론 위의 캡 처 는 데이터 의 앞 줄 일 뿐 뒤 에는 데이터 가 있다.
4.테스트 를 통 해
왼쪽 연결 과 오른쪽 연결...
SELECT * FROM a LEFT JOIN b ON b.ID = a.FK_ID;
SELECT * FROM b RIGHT JOIN a ON b.ID = a.FK_ID;
이 두 문장의 결 과 는 같 지만,그것 두 문장 은 다른 차 이 를 발견 하지 못 했다.
모든 연결 은 교차 연결 입 니 다.연결 을 사용 하지 않 는 것 과...
SELECT * FROM c,a WHERE c.ID = a.FK_ID;
SELECT * FROM c CROSS JOIN a ON c.ID = a.FK_ID;
이 두 문장 도 차이 가 없다.
이상 은 MYSQL 그룹 과 링크 에 대한 자세 한 내용 입 니 다.만약 에 여러분 이 모 르 는 부분 이 있 으 면 아래 댓 글 에서 토론 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redash를 사용할 때 몰랐던 SQL을 쓰는 법을 배웠습니다.최근 redash에서 sql을 쓸 기회가 많고, 이런 쓰는 방법이 있었는지와 sql에 대해 공부를 다시하고 있기 때문에 배운 것을 여기에 씁니다. Redash란? 월별로 데이터를 표시하고 싶습니다 주별로 데이터를 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.