위와 같은 테이블에서 각 clubName 마다 몇명 씩 있는지 보려면 쿼리문을 어떻게 작성해야 할까?
SELECT C.clubName, COUNT(SC.stdName) AS amount
FROM clubtbl C
LEFT JOIN stdclubtbl SC ON C.clubName = SC.clubName
GROUP BY C.clubName;
SELECT C.clubName, COUNT(SC.stdName) AS amount :
clubtbl 테이블의 clubName과 각 클럽에 속한 학생 수(stdclubtbl의 stdName의 개수)를 선택
( COUNT(SC.stdName) AS amount는 각 클럽에 속한 학생 수를 계산하여 amount라는 별칭으로 표시)
FROM clubtbl C:
clubtbl 테이블을 기준 테이블로 설정
(C는 clubtbl 테이블의 별칭(alias))
LEFT JOIN stdclubtbl SC ON C.clubName = SC.clubName :
clubtbl과 stdclubtbl을 LEFT JOIN
ON C.clubName = SC.clubName 조건을 사용하여 두 테이블을 clubName 컬럼을 기준으로 연결
(SC는 stdclubtbl 테이블의 별칭입니다.)
LEFT JOIN은 기준 테이블인 clubtbl의 모든 행을 유지하고, stdclubtbl에 일치하는 행이 없으면 NULL 값을 사용
GROUP BY C.clubName:
clubName을 기준으로 결과를 그룹화
(각 클럽별로 학생 수를 집계한다.)
+++
use sqldb;
select stdName, addr from stdtbl
UNION All
select clubName, roomNo From clubtbl;
+++
select name, concat(mobile1, mobile2) as '전화번호' from usertbl
where name not in (select name from usertbl where mobile1 is null);
+++
drop PROCEDURE if EXISTS ifProc;
delimiter $$
create PROCEDURE ifProc()
BEGIN
DECLARE var1 INT;
SET var1 = 100;
IF var1 = 100 THEN
select '100입니다.';
ELSE
select '100이 아닙니다.';
end if;
end $$
delimiter ;
call ifProc();
+++
drop PROCEDURE if exists ifProc2;
use employees;
delimiter $$
create PROCEDURE ifProc2()
BEGIN
DECLARE hireDATE DATE;
DECLARE curDATE DATE;
DECLARE days INT;
select hire_date into hireDATE
from employees.employees
where emp_no = 10001;
set curDATE = CURRENT_DATE();
SET days = DATEDIFF(curDATE,hireDATE);
if(days/365) >= 5 then
select CONCAT('입사한지 ', days , '일이나 지났습니다. 축하합니다!');
ELSE
select '입사한지 ' + days + '일밖에 안되었네요. 열심히 일하세요.' ;
end if;
end $$
delimiter ;
call ifProc2();
반응형
'산대특 > 게임 데이터베이스 프로그래밍' 카테고리의 다른 글
[MySQL] 프로시저 (0) | 2024.05.31 |
---|---|
[MySQL] movies + 피벗 테이블 만들기 (0) | 2024.05.29 |
[MySQL] 다이어 그램 생성해보기 및 추가 실습 해보기 (0) | 2024.05.24 |
[MySQL] 웹사이트에서 MySQL 데이터 조회 해보기 (0) | 2024.05.23 |
[MySQL] DB, Table 생성 및 CREATE, DROP, SELECT 해보기 (0) | 2024.05.23 |