일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 외부키
- 메세지수정
- querydsl
- 검색
- application.yml
- 2 > /dev/null
- ㅔㄴ션
- 커밋메세지수정
- subquery
- 서브쿼리
- AuthenticationEntryPoint
- EC2
- 참조키
- 테스트메소드
- docker명령어
- foreignkey
- appspec.yml
- 적용우선순위
- 테스트
- 컨테이너실행
- Query
- 추후정리
- ubuntu
- MySQL
- 네이티브쿼리
- appspec
- 포트
- 메소드명
- 예약
- WeNews
Archives
- Today
- Total
제뉴어리의 모든것
2024-08-18 MySql 관련 공부 본문
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 |