관리 메뉴

제뉴어리의 모든것

2024-08-18 MySql 관련 공부 본문

MySql

2024-08-18 MySql 관련 공부

제뉴어리맨 2024. 8. 18. 00:46

 

 

Distinct와 Group By의 차이

Distinct는 단순히 중복을 제거한다는 의미가 강함.

Group by는 중복이라는 개념보다는 그룹화하여, 그룹화된 내부적으로 집계 혹은 통계를 내는 용도라고 생각하면 될듯.

 

 

SELECT 시 COUNT를 사용하여 특정필드의 값이 존재하는 ROW의 갯수 세기

현재 테이블 상태

현재 테이블이 위와 같을때,

select count(*) from buy where temp is not null;

와 같이 사용하여 temp 필드의 값이 null 아닌 row의 갯수를 구할수도 있지만,

select count(temp) from buy;

와 같이 구할 수도 있다!

 

 

MySQL 프로시저 관련 공부 쿼리 내용

# 아래 쿼리를 실행하기 위한 대상 테스트 테이블

CREATE TABLE `buy` (
  `ai` int NOT NULL AUTO_INCREMENT,
  `city` varchar(45) NOT NULL,
  `address` varchar(45) DEFAULT NULL,
  `temp` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`ai`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb3;

-- 더미 데이터
-- 	1	경기	삼정동1	유일값
-- 	2	경기	구룡동2	
-- 	3	서울	삼정동1	
-- 	4	부산	이룡포4	
-- 	5	충남	이룡포2	



# 프로시저 생성 1
USE alone_sql; -- db 선택
DROP PROCEDURE IF EXISTS auto_10_row_proc; -- 존재하다면 프로시저 날리기, 괄호 없어야함

-- 구분자 $$ 로 번경, sql의 끝과 프로시저 끝을 구분하기 위함
DELIMITER $$ 

CREATE PROCEDURE auto_10_row_proc()
BEGIN
	SELECT * FROM buy;
END $$

-- 구분자 ;로 되돌리기
DELIMITER ; 
# ~ 프로시저 생성 1

# 프로시저 1 실행
call auto_10_row_proc();




# 프로시저 생성 2
USE alone_sql; -- db 선택
DROP PROCEDURE IF EXISTS select_row_where_city_proc; -- 존재하다면 프로시저 날리기, 괄호 없어야함

-- 구분자 $$ 로 번경, sql의 끝과 프로시저 끝을 구분하기 위함
DELIMITER $$ 

CREATE PROCEDURE select_row_where_city_proc(in cityName varchar(10))
BEGIN
	select * from buy where city = cityName;
END $$

-- 구분자 ;로 되돌리기
DELIMITER ; 
# ~ 프로시저 생성 2


# 프로시저 2 실행
call select_row_where_city_proc('서울');




# 프로시저 생성 3 (출력매개변수)
USE alone_sql; -- db 선택
DROP PROCEDURE IF EXISTS get_maxAi_from_buy; -- 존재하다면 프로시저 날리기, 괄호 없어야함

-- 구분자 $$ 로 번경, sql의 끝과 프로시저 끝을 구분하기 위함
DELIMITER $$ 

CREATE PROCEDURE get_maxAi_from_buy(out maxAi INT)
BEGIN
	-- max() 인자로 들어 온 컬럼들 중 최고값을 리턴
	select max(ai) into maxAi from buy;
END $$

-- 구분자 ;로 되돌리기
DELIMITER ; 
# ~ 프로시저 생성 3


# 프로시저 3 실행
call get_maxAi_from_buy(@maxAi);
select concat("최고 ai값 => ", @maxAi);




# 프로시저 생성 4 
USE alone_sql; -- db 선택
drop procedure if exists print_message;

delimiter $$
create procedure print_message(
	in ai_id INT
)
BEGIN
	declare cityName varchar(10);
    select city into cityName from buy where ai = ai_id;
	if cityName = '경기' or cityName = '서울' then
		select '수도권에 사시는 군요' as '메시지';
	else
		select '지방 사시는 군요' as '메시지';
	end if;
    -- end if 써주어야 하며 세미클론도 꼭 써주도록
END $$

delimiter ;
call print_message(1);




# 별개 내용
SHOW PROCEDURE STATUS; -- 등록 된 프로시저 목록 조회

'MySql' 카테고리의 다른 글

select 쿼리 수행 순서  (0) 2021.02.14
프로시저로 반복 데이터 Insert  (0) 2021.02.12
외래기 지정시 옵션  (0) 2021.02.10
[SQL] GROUP, HAVING  (0) 2021.01.21
LEFT JOIN 과 RIGHT JOIN  (0) 2021.01.20