위와 같은 테이블에서 각 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();

 

반응형

+ Recent posts