안녕하세요~

지난 글에서는 서울 근교 데이트 코스로 오랑주리라는 정원형 카페를 소개해드렸는데요~

 

 

서울 근교 데이트 코스 추천 : 식물원 카페 오랑주리 Orangerie

안녕하세요~ 이전에는 서울 데이트 코스로 망리단길을 알아봤었는데요~ 서울 데이트 코스 추천 : 망리단길 안녕하세요~ 오늘은 서울 데이트 코스를 추천해드리려고 해요. 서울 데이트 코스를 찾아보면 매번 비슷..

devwith.com

오늘은 인천 송도 데이트 코스 추천드리려고요!

 

오늘의 추천 장소는 이름만 들어도 안다는 센트럴파크! 와 일몰이 아름다운 오션 스코프예요

 

 

1. 오션 스코프

퇴근 후 하늘로 향한 3단 컨테이너 오션 스코프의 계단을 올라가면 인천대교와 근방에 지는 아름다운 노을을 감상할 수 있어요!

 

그냥 봤을 때는 이게 무슨 컨테이너가 덩그러니 있지 싶지만!

이게 바로 오션 스코프더라고요

 

 

총 3개의 컨테이너가 있고 낮은 것, 중간 것, 높은 것 이렇게 세 가지가 있어요!

 

 

내부에는 계단이 있고 그곳을 다 올라가면 저 멀리 인천대교가 보이고 해가 지는 것을 감상할 수 있어요

 

 

겉으로 볼 때는 이게 뭔가 싶지만 인천에서 이런 컨테이너 조형물로 전망대를 만들었다는 게 어떻게 보면 굉장히 지역적으로 잘 나타낸 것이 아닌가 싶더라고요!!

 

 

이렇게 해가 지는 오션 스코프 전망대를 봤다면 그다음 데이트 코스로 이동을 해볼게요

 

 

2. 센트럴파크

두 번째 송도 데이트 코스 추천은 센트럴파크예요~

어떻게 보면 센트럴파크 안에 오션 스코프가 있는 거라 한 장소라고 생각할 수 있지만 센트럴파크역에서 거리로 보면 오션 스코프는 거의 끝쪽에 있어서 따로 나눠봤어요

 

 

그리고 일몰을 감상하고 와야 센트럴파크의 야경이 아름답다는 걸 알 수 있거든요~ㅎㅎ

송도 센트럴파크의 야경은 언제 봐도 아름답네요~

 

 

한 가지 알아두면 좋은 것이 있어요!

송도 센트럴파크는 전 세계에서 흔하지 않은 해수공원이에요!

그리고 빗물을 공원의 조경용 수로 재활용해서 예산도 많이 절감된다고 하더라고요

 

늦은 저녁 산책도 괜찮지만 보트까지 타보면 좋겠죠??ㅎㅎ

 

 

그리고 좋아하는 장소인 수상택시 타러 가는 길목의 다리!

저기서 보는 공원의 야경이 너무 아름다워요~

 

 

이렇게 퇴근 후 송도의 일몰을 즐기는 오션 스코프와 야경을 즐기며 여유로운 데이트를 즐길 수 있는 센트럴파크까지 알아봤어요~

 

송도 데이트 코스 추천이 괜찮았는지 모르겠네요!

제가 생각했을 땐 야경이 이쁜 곳 중 베스트 3안에는 들어갈 것 같아요~

 

인천에 놀러 가신다면 송도 데이트 코스 꼭 들러보세요~~

 

안녕하세요~

 

이전에는 서울 데이트 코스로 망리단길을 알아봤었는데요~

 

 

서울 데이트 코스 추천 : 망리단길

안녕하세요~ 오늘은 서울 데이트 코스를 추천해드리려고 해요. 서울 데이트 코스를 찾아보면 매번 비슷하고 뻔한 장소들이 나오는데요. 제가 오늘 추천하는 서울 데이트 코스는 망리단길입니다! 망리단길 - '망원..

devwith.com

오늘은 서울을 떠나서 멀지 않은 곳에 있는 서울 근교 데이트 코스 추천드리려고요~

 

서울 근교 데이트 코스 추천 : 식물원 카페 오랑주리(ORANGERIE) 

 

마장 호수 근처에 예쁜 카페가 있을까 찾던 중에 아주 예쁜 카페를 발견했어요!!

 

통유리로 된 온실 정원과 야외 테라스가 있고 앞쪽으로는 계곡이 있어서 산책하기 좋은 곳이더라고요

 

 

 

 

카페 입구로 걸어가는 길 양쪽에는 들꽃도 피어있고 하늘도 보이는 게 꼭 하늘에 있는 정원으로 올라가는 느낌이에요~

 

 

 

 

오랑주리 카페는 단독 건물인데 규모가 꽤 크더라구요.

이곳저곳에서 후기를 찾아봤는데 생긴 지 얼마 안 된 카페더라구요~

그래서 그런지 아주 깔끔하고 이곳저곳에 정원을 관리하시는 관리사분들도 많이 보였어요

 

 

계단을 따라 올라가면 오랑주리 카페의 정물이 두둥! 엄청 모던한 정문이에요

 

 

 

 

정문을 지나서 안으로 들어가면 정말 다른 세상에 온 것 같이

와~~~ 하는 탄성이 나오더라구요.

좌측 통유리 쪽은 좌석들이 있고 오른쪽의 넓은 공간은 다 정원으로 되어 있더라구요.

 

 

 

 

정원 쪽의 카운터에서 커피와 차를 주문하고 창밖을 보면 정말 마음도 편해지고

왜 사람들이 서울 근교 데이트 코스로 이곳을 추천하는지 알겠더라구요.

 

 

요즘 날씨가 그렇게 좋지는 않았지만 이날은 차 한잔하면서 서울 근교 데이트하기 좋은 날이었네요~

 

 

 

차를 한잔하고 정원을 천천히 둘러보러 가봤어요~

 

건물 내부에 진짜 계곡 같은 곳이 있다는 게 더 놀라워요

진짜 물도 흐르고 풀도 우거져있네요

 

 

 

 

카운터 앞쪽의 로비예요.

가볍게 차 한잔 하거나 산책하다가 쉴 수 있는 공간이더라구요

 

 

 

로비의 다른 쪽인데 담장의 꽃을 보면서 담소 나누기 좋은 장소인 것 같아요

 

 

 

 

정원의 안쪽으로 더 가까이 들어가 보면 물도 가까이 보이고 식물도 더 가까이 볼 수 있어요

 

 

 

 

물속에는 금붕어가!! 진짜로 돌아다니고 있어요!!

처음에는 그냥 조각인 줄 알았는데 헤엄치더라구요

 

 

오늘은 서울 근교 데이트 코스 추천으로 파주 마장 호수 근처의 오랑주리 카페를 알아봤는데요.

정말 서울에서의 데이트와는 다르게 여유 있고 신선한 느낌이었네요

 

연인들끼리의 데이트 코스로 추천도 하지만 가족 나들이로도 좋은 것 같네요~

그럼 다음에도 좋은 정보로 돌아오겠습니다~~

  1. 밥그릇 2019.09.13 15:22

    저도 담에 가봐야겠어요

안녕하세요~

오늘은 서울 데이트 코스를 추천해드리려고 해요.

 

서울 데이트 코스를 찾아보면 매번 비슷하고 뻔한 장소들이 나오는데요.

제가 오늘 추천하는 서울 데이트 코스는 망리단길입니다!

 

망리단길 - '망원동'과 '경리단길'의 합성어. 망원동 일대의 상권이 활발해지면서 생성된 말

홍대나 합정에서 관광객들이 늘어나면서 상권이 발달하다보니 기존의 물가가 많이 상승하게됐는데요..ㅠㅠ

청년 사업자분들이 권리금이 저렴한 봉천동이나 망원동 같은 오래된 지역에 가게를 열면서 이색적이고 독창적인 가게들이 많이 생겨나게됐어요. 이런 가게들이 20-30대 사이에서 SNS에 오르내리면서 많이 유명해지게 됐어요

그러면서 '사로수길', '망리단길' 같은 데이트 코스가 생겨났네요

그래서 오늘은 '망리단길'에 대해 알아볼께요~~

 

망리단길은 서울 망원역에서 망원시장을 지나 맞다은 포은로와 망원로 인근에 형성된 상권

 

'망리단길'을 SNS에서 검색해보면 많이 오르내리는 곳이 있는데 그중에서도 많이 나오는 3군대를 알아볼께요~

 

1. ZAPANGI 카페

SNS에서 많이 보던 자판기인데요!

무려 저 자판기가 카페의 입구더라구요!

 

 

 

내부는 오히려 심플하게 노출 콘크리드로 되어있는데 핑크와 화이트의 조합이 너무 잘 어울리는것 같아요

 

 

 

이쁜 디저트도 많네요~

 

연인끼리 꼭꼭 가보시길 추천 드려요!!

 

 

 

2. 원기정

원기충전! 원기정!

재미있는 타이틀을 가진 원기정이에요~

 

 

 

내부도 엄청 심플하고 조용히 식사하기 좋은것 같아요

 

 

 

늦게까지 놀기전에 덮밥을 먹고 원기회복! 좋아요~~

 

 

 

3. 비어티플

망원동 전경을 볼 수 있는 비어티플

조명과 뷰가 좋은 루프탑바에요~

 

 

내부에는 바가 있는데 전체적인 조화가 너무 이쁜곳이에요

 

 

 

루프탑에서 망원동 일대 야경을 보면서 맥주를 한잔하면 술보단 분위기에 취할것 같네요~

 

 

 

오늘은 서울 데이트 코스 망리단길에 대해 알아봤습니다~

다음에도 이색적인 데이트 코스로 뵈요~~

  1. 하밍 2019.09.09 22:08

    루프탑 분위기 대박이네요!

  2. 밥그릇 2019.09.10 01:30

    서울가면 가봐야겠어요 !

 

안녕하세요~!

지난번엔 국내 가을 축제를 알아봤는데요.

오늘은 축제보다는 국내 가을 여행지를 알아보려고해요.

 

 

첫번째 국내 가을 여행지! 경기 양주 천일홍 축제

부담없이 떠날 수 있는 경기도 양주!

대표적인 가을꽃인 천일홍과 핑크뮬리를 볼 수 있어요

알록달록한 꽃들을 보기만해도 기분이 좋아질거에요.

연인끼리 간다면 인생 사진을 남길 수 있을거에요

축제도 즐기고 선선한 가을 바람도 느끼면서 산책하기 좋은 것 같아요

인생 사진을 원하신다면 강추!

 

 

 

 

두번째 국내 가을 여행지! 민둥산 억새꽃 축제

모두 정선은 알고 계실거에요~

정선에서도 민둥산은 가을에 가면 정말 좋은 곳인데요!

높이가 무려 1,118m인데 규모가 엄청나요~

억새꽃 은빛으로 물든 길을 거닐다 정상에 도착하면 답답했던 마음 타악! 트이더라구요!

연인 또는 가족끼리 억새꽃길을 걸으러 가보시는것을 추천합니다!

 

 

 

 

세번째 국내 가을 여행지! 고창 선운사

전라북도 고창에는 변산반도, 서해바다, 내장산이 있어서 입지가 아주 좋은곳이에요

고창 선운사에서 가을 낮에는 동백꽃과 단풍이 개울가를 따라서 아주 이쁘게 피어있어서 산책하기 좋고

 

 

 

고창 선운사 근처에 있는 보리나라 학원농장은 드라마 '도깨비' 촬영지인데요.

가을 밤 남자 주인공, 여자 주인공이 되어 청보리 밭을 거닐어 보는것도 좋겠네요

연인들에게 강추!!

  1. 밥그릇 2019.09.07 12:30

    좋은정보 잘보고 갑니다~!

  2. 하밍 2019.09.07 13:07

    억새에 단풍에.. 넘 예쁘겠네요^^

안녕하세요~

 

바람이 점점 시원해지는것을 보니 가을이라는 것이 실감되네요

 

올해가 시작된지 얼마 안된것 같은데 벌써 9월인것을 보니 시간이 참 빠른것 같아요

 

가을에는 전국적으로 축제도 많이 하는데요.

 

그래서 오늘은 2019년 9월 축제 정보를 알아볼께요!

 

 

 

2019년 9월 축제, 가평 자라섬 전국 막걸리 페스티벌

올해가 벌써 5회째 진행되는 있는 막걸리 축제인데요.

전국의 막걸리를 시음해보고 현장에서 구매도 가능하다고 해요!

정말 종류가 다양하다고 하는데 저는 이렇게 많은 막걸리가 있다고 생각하지 못했는데

한번쯤 가서 우리나라에서 제조되는 막걸리들을 보시는것도 좋네요

 

 

 

 

2019년 9월 축제, 평창효석문화제

효석문화제는 우리가 많이 알고 있는 메밀꽃 필 무렵의 배경지인 봉평에서 진행되는 축제에요.

 

 

소설에서 등장하는 메밀꽃밭도 보고 자연과 어우러진 여러가지 자연 체험 프로그램 등이 있어서

체험하면서 축제를 즐기기 좋은것 같아요

 

 

 

2019년 9월 축제, 신촌맥주축제

가을 밤 신촌에서 즐기는 시원한 맥주!

다양한 수제맥주를 만나 볼 수 있는 이색 페스티벌이에요

 

 

다양한 먹거리와 볼거리 즐길거리가 신촌거리에 넘쳐나는 축제에요.

연인과 친구와 가족들과 함께 즐겨봐요~~

  1. 하밍 2019.09.04 21:52

    9월에도 축제가 많네요~

  2. 밥그릇 2019.09.04 22:08

    우와 막걸리 축제라니 !!

이번에는 크롬 계정 기본값 변경하는 방법을 알아볼께요~

 

크롬은 구글 계정하고 연동해서 사용하고, 연동시 편리함이 아주 극대화되요

 

예를 들어서 지메일, 구글 드라이브, 다른 컴퓨터에서 계정 연동 시 브라우저의 동기화 부분까지 아주 편리한데요.

 

그런데 많은 분들이 개인용과 업무용을 구분해서 사용하거나 그 외 다른 목적으로 한개 이상의 계정을 만들어서 사용하고 있어요

 

사용 빈도가 높은 계정을 크롬의 기본값으로 설정해서 사용하는데요. 계속 로그인 / 로그아웃을 하다보면 꼬여서 기본 계정이 다른것으로 바뀌기도해요.

 

그럼 이렇게 기본 계정이 바뀌면 크롬 계정 기본값 변경을 어떻게 해야하는지 설명해 볼게요~

 

 

 

 

 

 

계정 프로필을 눌러보면 현재 크롬에 로그인된 계정들을 확인할 수 있어요

그리고 어떤 계정이 기본 계정인지 확인 할 수 있어요

먼저 로그인된 계정을 아래 로그아웃 버튼으로 다 로그아웃을 할께요

 

 

 

 

 

 

모든 계정이 로그아웃되면 프로필 부분이 로그인으로 변경되는데요.

로그인 버튼을 클릭해주세요.

 

 

 

 

 

 

크롬에서 로그아웃은 했지만 계정 기록은 남아있는 상태에요.

계정 삭제를 눌러서 모든 계정을 삭제 해주세요.

계정 삭제를 누른다고 계정이 삭제되는것이 아니에요~~

크롬에서 계정 기록만 삭제하는거니깐 혹시라도 걱정하셨다면 안심하셔도되요

 

 

 

 

 

삭제 이후에는 새로 로그인 할 수 있는 창이 보이는데요.

여기서부터 중요해요!!

제일 처음 로그인하는 계정이 기본값으로 설정되요!

그러니깐 처음 로그인하는 계정은 꼭 기본값으로 사용할 계정으로 로그인 해주세요~!

 

 

 

 

 

 

 

로그인 후에 보면 기본값으로 사용할 계정이 로그인 됐지만 다른 계정은 보이지 않아요

그럼 계정 추가 버튼을 눌러서 다른 계정을 추가해볼께요.

 

 

 

 

그럼 두번째 계정을 로그인 할 수 있는 창이 나와요

두번째 계정을 로그인 해주세요~

 

 

 

 

두개의 계정이 보이고 기본값이 바뀌었네요~~

생각보다 어렵지 않아요~~~

 

이상으로 크롬 계정 기본값 변경하는 방법을 알아봤어요~

다음에도 좋은 정보 찾아올께요~

크롬 브라우저에서 한국어가 아닌 다른 언어를 사용하는 웹사이트를 방문하게 됐을 때

자동 번역하는 기능을 잘 사용하고 있었는데

갑자기 번역 버튼도 안 보이고 번역도 안되더라고요.

이곳저곳 정보를 찾기 힘들었는데 겨우 찾았네요.

그래서 저처럼 어려움을 겪으시는 분이 있을까 봐 정보 남겨봐요~

 

보통은 다른 언어를 사용하는 웹사이트에 들어가게 되면 주소창에 크롬 번역 버튼이 있는데요.

크롬 번역 버튼

이 버튼이 어느날 갑자기 안보이더라고요!!!

당황스럽고... 어떻게 번역을 하지 생각했는데 두 가지 방법으로 해결이 가능한데요

 

 

 

첫 번째! 우클릭 > 한국어로 번역

번역할 페이지에서 마우스 우클릭 시 나오는 메뉴에서 한국어로 번역하기를 선택하면 해당 페이지가 번역됩니다. 제일 간단하고 편하네요~~ 강추!!

 

 

 

 

 

한국어 번역을 선택하게 되면 번역 중 안내가 나오면서 순식간에 번역이 끝나네요~

 

 

 

 

 

두 번째! 고급 설정!

 

이건 조금 복잡한 방법인데요.

이것 때문에 제가 보는 모든 영어권 페이지들이 크롬 번역 버튼을 안 보이게 했더라고요.

 

언제인지 기억은 못하겠지만 크롬 자동 번역이 싫었는지 해당 언어 번역 안함을 선택했었나 봐요. 

이렇게 되면 크롬 번역 버튼이 보이지 않게 되는데요.

이것을 다시 보이게 하려면 아래 방법을 따라 하시면 돼요!

 

 

 

크롬 브라우저에서 우측 상단 메뉴 버튼 선택 > 설정으로 이동해주세요!

 

 

 

 

 

설정 페이지 하단에 고급 버튼을 눌러주세요~

 

 

 

 

 

고급 버튼을 누르면 하단에 다른 여러 설정들이 나오는데요

언어 메뉴를 선택해주세요!

 

 

 

 

 

언어를 선택하게 되면 아래와 같이 사용 가능한 언어 목록이 나오게 되는데요.

 

 

 

 

 

언어명 우측의 메뉴 버튼을 눌러보면 

* 이 언어로 된 페이지에 대한 번역 옵션 제공

이것을 체크해주시면 해당 언어로 된 웹페이지는 크롬 번역 버튼이 다시 보여요~

 

 

 

 

모두 도움이 되셨길 바래요~

이상 크롬 번역 버튼 설정법이었어요~

  1. 하밍 2019.08.26 22:33

    좋은정보 잘보고갑니다^^

  2. 밥그릇 2019.08.26 22:59

    유용한 포스팅이네요 잘 보구 가요 !

  3. 냥녕이 2019.08.27 10:45

    오 찾고 있던 거였는데 감사합니다ㅠㅠ

  1. 서브쿼리

서브쿼리는 SELECT 명령에 의한 데이터 질의로, 상부가 아닌 하부의 부수적 질의를 의미합니다.

서브쿼리를 지정하는 방법은 간단하게 SELECT 쿼리를 괄호로 묶어서 SELECT / FROM / WHERE 구 등에서 사용할 수 있습니다.

  1. 스칼라 값

서브쿼리를 다른 구에서 사용하는 것을 설명하기전에 스칼라 값이라는 것에 대해 설명해 보겠습니다.

서브쿼리를 사용할 때는 그 쿼리가 어떤 값을 반환하는지 주의할 필요가 있습니다. SELECT 쿼리를 실행 시 여러가지 패턴들이 나올수 있지만 일반적인 패턴에 대해 아래 표에 설명하겠습니다.


#

쿼리

설명

1

SELECT MIN(컬럼) FROM 테이블명

하나의 값을 반환

2

SELECT 컬럼 FROM 테이블명

하나의 컬럼에 복수의 레코드

3

SELECT MIN(컬럼1), MAX(컬럼2) FROM 테이블명

하나의 레코드 복수의 컬럼

4

SELECT 컬럼1, 컬럼2 FROM 테이블명

복수의 레코드 복수의 컬럼

[표 11. SELECT 쿼리 실행 시 반환되는 일반적인 패턴]


[표 11]에서 보면 다른 패턴과 다르게 1번 패턴은 하나의 값만을 반환합니다. 이렇게 SELECT 쿼리가 하나의 값만 반환하는 것을 단일값 또는 스칼라 값 이라고 합니다.

  1. WHERE 구에서 사용

WHERE 구에서 서브쿼리는 조건식에서 변수와 같이 사용이 가능합니다.

예를 들어 하나의 테이블에서 특정 컬럼의 최소 값을 찾아서 해당 레코드를 삭제해야 하는 경우를 생각해 보겠습니다. 이때 테이블에 데이터가 적고 한눈에 확인이 가능한 정도라면 눈으로 찾을 수 있겠지만 보통은 그렇게 찾을 수 없습니다. 이때 서브쿼리를 활용한다면 보다 쉽게 쿼리 작성이 됩니다.

먼저 서브쿼리는 해당 컬럼의 최소값을 찾을 것입니다.


1

SELECT MIN(컬럼) FROM 테이블;

[표 12. 최소값을 찾는 서브쿼리]


[표 12]와 같이 서브쿼리 작성이 되었다면 실제 레코드 삭제 부분에 적용해 보겠습니다.


1

DELETE FROM 테이블 WHERE 컬럼 = (SELECT MIN(컬럼) FROM 테이블);

[표 13. 최소값을 가진 레코드를 삭제하는 쿼리]


생각보다 간단하죠? 서브쿼리의 스칼라값을 조건식의 변수로 지정하여 사용하는 방법입니다. 하지만 데이터베이스별로 해당 쿼리가 실행이 되지 않을 수 있습니다.

동일한 테이블 내에서 추가나 갱신할 경우 서브쿼리가 제한될 수 있으니 사용하시는 데이터베이스 메뉴얼을 확인하길 바랍니다.

  1. SELECT 구에서 사용

SELECT 구에서 서브쿼리를 지정할 때는 스칼라 서브쿼리가 필요합니다.


1

SELECT

(SELECT COUNT(*) FROM 테이블명) AS sq;

[표 14. SELECT 구에서 서브쿼리 사용 방법]


[표 14]에서는 주의할 점이 있습니다. 서브쿼리가 아닌 상부의 SELECT 구에 FROM 구가 없다는 것입니다. 이것이 MySQL에서는 실행이 되지만 ORACLE과 같이 데이터 베이스에 따라 실행이 되지 않을 수 있습니다. 그럴때는 FROM 구를 정의해 줘야 합니다. 예를 들어 Oracle을 보면 FROM DUAL로 지정하면 실행할 수 있습니다. 다른 데이터베이스를 사용하신다면 메뉴얼을 확인하길 바랍니다.

  1. SET 구에서 사용

UPDATE의 SET구에서도 서브쿼리를 사용할 수 있습니다. SET 구에서도 서브쿼리를 사용할 때 스칼라 서브쿼리를 지정할 필요가 있습니다.


1

UPDATE 테이블 SET 컬럼 = (SELECT MAX(컬럼) FROM 테이블);

[표 15. SET구에서 서브쿼리 사용 방법]

  1. FROM 구에서 사용

지금까지는 FROM 구에서 테이블명을 지정하였습니다. 하지만 FROM 구에도 서브쿼리를 지정할 수 있습니다. 위에서는 서브쿼리를 사용할 때 스칼라 서브쿼리를 사용하라고 했었지만 FROM 구에서 사용되는 서브쿼리는 스칼라 값을 반환하지 않아도 됩니다.


1

SELECT * FROM (SELECT * FROM 테이블2);

[표 16. FROM 구에서 서브쿼리 사용 방법]


구조가 조금 특이하게 SELECT 쿼리 안에 SELECT 쿼리가 들어 있는 것처럼 보입니다. 이런것은 ‘네스티드 구조' 또는 ‘중첩구조', ‘내표 구조'라고 합니다.

[표 16]은 2단계 중첩 구조입니다. 중첩 구조는 몇단계를 구성해도 상관은 없습니다. 하지만 3단계 이상은 추천하지 않습니다.

  1. INSERT에서 사용

INSERT 쿼리에서도 VALUES 구의 일부로 서브쿼리를 사용할 수 있고, VALUE 구 대신 SELECT 쿼리를 사용하는 두가지 방법이 있습니다.


첫째, VALUES 구의 일부로 사용될 때

이때는 서브쿼리는 스칼라 서브쿼리를 사용해야 하고 자료형도 일치해야 합니다.


1

INSERT INTO 테이블 VALUES (

  (SELECT COUNT(*) FROM 테이블2), ...

);

[표 17. VALUES 구의 일부로 서브쿼리 사용 방법]


둘째, VALUES 구 대신 서브쿼리가 사용될 때

흔히 ‘INSERT SELECT’라 불리는 쿼리입니다. INSERT SELECT 쿼리는 SELECT 쿼리의 결과를 INSERT INTO로 지정된 테이블에 전부 추가합니다. 여기서 주의할 것은 SELECT 쿼리에서 반환하는 컬럼의 수와 자료형이 INSERT할 테이블과 일치해야 합니다. 그래서 INSERT SELECT는 테이터의 복사나 이동을 할 때 자주 사용됩니다.


1

INSERT INTO 테이블 SELECT * FROM 테이블2;

[표 18. VALUES 구 대신 SELECT 쿼리를 사용하는 방법]


  1. 집계 함수

이번에는 대표적인 집계 함수 COUNT, SUM, AVG, MIN, MAX와 GROUP BY를 사용하여 그룹화하는 방법을 알아보겠습니다.

SQL은 집합을 다루는 집계함수를 제공합니다. 일반적으로 함수는 파라미터로 하나의 값을 지정합니다. 하지만 집계함수의 경우는 파라미터로 집합을 지정합니다.

여기서 얘기하는 집계함수의 파라미터로 집합을 지정한다는 말이 쉽게 이해하기 어려울 수 있습니다. 이것에 대해서는 COUNT에서 한번 설명해 보겠습니다.

    1. COUNT

COUNT 함수는 파라미터로 주어진 집합의 개수를 반환합니다.


1

SELECT COUNT(컬럼명) FROM 테이블명 WHERE 조건식;

[표 1. COUNT 함수의 사용 방법]


간단합니다. 뭘 어떻게 더 설명하기 어려울 정도로 간단합니다.


추가로 설명을 하면 COUNT 집계를 사용할때 컬럼의 값 중 NULL이 있을 경우 NULL은 포함하지 않습니다. 또한 중복 데이터의 경우는 별도로 중복제거를 하지 않는다면 포함하여 집계합니다.

그러면 중복을 제외하고 집계해야하는 상황에서는 어떻게 해야할까요?

DISTINCT를 지정한 컬럼은 중복값을 제외하고 결과를 반환하는 함수입니다.

그래서 DISTINCT를 사용한 결과를 집계 함수에 적용하면 중복값을 제거한 집계 결과를 확인할 수 있습니다.


1

SELECT COUNT(DISTINCT 컬럼명) FROM 테이블명 WHERE 조건식;

[표 2. DISTINCT 를 이용한 COUNT 함수 사용 방법]

    1. SUM

집합 연산 중에서 합계를 구하기 위해 자주 사용하는 것이 SUM 함수입니다.

SUM 함수를 사용하면 지정한 컬럼의 합계를 구할 수 있습니다. 집계 가능한 범위는 수치형 데이터만 가능합니다. 문자열이나 날짜형의 데이터를 지정할 수 없습니다.

SUM도 COUNT와 마찬가지로 NULL 값을 제거한 뒤에 합계를 반환합니다.


1

SELECT SUM(컬럼명) FROM 테이블명 WHERE 조건식;

[표 3. SUM 함수 사용 방법]

    1. AVG

평균값을 구하기 위해서는 SUM / COUNT 와 같이 지정하면 구할 수 있지만 굳이 저렇게 사용하지 않아도 간단히 평균값을 구할 수 있습니다. 바로 AVG 함수를 이용하면 됩니다. AVG 함수는 지정한 컬럼의 평균값을 구하는 함수로서 SUM과 마찬가지로 수치형만 가능합니다.

AVG 함수도 NULL값은 제거한 뒤에 계산을 합니다. 하지만 NULL을 0으로 간주해서 평균을 내고 싶다면 CASE를 이용해서 NULL을 0으로 변환한뒤 AVG를 사용하면 됩니다.


1

SELECT AVG(컬럼명) FROM 테이블명 WHERE 조건식;

[표 4. AVG 함수 사용 방법]

    1. MIN / MAX

MIN, MAX 함수는 컬럼에서 최소값과 최대값을 구할 수 있습니다.

위의 다른 함수와 달리 문자열과 날짜형에도 사용할 수 있고 NULL 값은 무시합니다.


1

SELECT MIN(컬럼명), MAX(컬럼명) FROM 테이블명;

[표 5. MIN, MAX 함수 사용 방법]

    1. GROUP BY

GROUP BY 에 컬럼을 지정하여 그룹화하면 지정된 컬럼의 값이 같은 레코드들이 하나의 그룹으로 묶입니다.

각 그룹에 묶인 값들은 동일합니다. 그래서 GROUP BY를 사용하면 DISTINCT와 같이 중복을 제거하는 효과가 있습니다.

그렇다면 DISTINCT와 GROUP BY는 무슨 차이가 있을까요?

두가지 함수 모두 중복값을 제거 한다는것은 동일하지만 GROUP BY는 집계 함수와 쓰이지 않으면 별 의미가 없습니다. GROUP BY로 그룹화하고 각각의 그룹을 집계 함수에서 파라미터로 사용해야 GROUP BY가 의미가 있습니다.


1

SELECT SUM(컬럼명) FROM 테이블명 GROUP BY 컬럼명;

[표 6. GROUP BY 사용 방법]

    1. HAVING

그러면 그룹화를 시키고 집계 함수를 사용할 때 WHERE 구의 조건식에는 집계 함수를 사용할 수는 없을까요? 네 없습니다. 그룹화가 필요한 집계 함수는 WHERE 구에서 지정할 수 없습니다.

이게 무슨 말일까요 아래 표를 보고 설명 드리겠습니다.


1

SELECT SUM(컬럼명) FROM 테이블명 WHERE COUNT(컬럼명) = 1 GROUP BY 컬럼명;

[표 7. WHERE 구에서 집계 함수 사용]


[표 7]에서 사용한 문법 사용대로 한다면 에러가 발생합니다.

그 이유는 GROUP BY와 WHERE 구의 처리 순서 때문입니다. WHERE 구의 처리는 GROUP BY 보다 빠릅니다. 그래서 그룹화가 되기전에 조건절에서 컬럼을 집계하려고 하면 에러가 발생하는 것입니다.

쿼리의 내부처리 순서를 다시 한번 살펴 보겠습니다.


순위

1

WHERE

2

GROUP BY

3

SELECT

4

ORDER BY

[표 8. 쿼리의 내부 처리 순서]


지금까지 HAVING을 설명하기전 다른것은 왜 안되는지에 대해 먼저 살펴 보았습니다.

우리가 원하는대로 집계한 결과에서 조건에 맞는 값을 가져오기 위해서는 HAVING을 사용하면 됩니다.


HAVING은 GROUP BY 구 뒤에 기술하고 WHERE와 동일하게 조건식 지정이 가능합니다. 즉, 그룹화된 컬럼을 이용하여 조건식에서 집계 함수를 사용할 수 있다는 것입니다.

[표 8]에서 설명한 쿼리의 내부처리 순서에 HAVING이 들어간다면 2번째인 GROUP BY 다음에 들어가게 됩니다.


순위

1

WHERE

2

GROUP BY

3

HAVING

4

SELECT

5

ORDER BY

[표 9. HAVING을 추가한 쿼리의 내부 처리 순서]


1

SELECT SUM(컬럼명) FROM 테이블명 GROUP BY 컬럼명 HAVING COUNT(컬럼명) = 식;

[표 10. HAVING을 이용한 조건식 사용법]


  1. INSERT

이전 글들은 SELECT를 활용해서 데이터를 검색하는 것이었다면 지금은 데이터를 입력할 때의 방법을 설명하겠습니다.


우리가 게시판을 하나 만들었다고 한다면 최초 서비스가 올라갔을 때는 게시글이 하나도 없을 것입니다. 그러면 우리는 ‘글쓰기' 또는 ‘만들기’와 같은 버튼을 클릭했을 때 데이터 추가 기능을 사용할 것입니다. 여기서 사용하는 것이 INSERT라고 생각하면 됩니다.

    1. INSERT로 레코드 추가하기

RDBMS에서는 INSERT 명령으로 레코드 단위로 데이터를 추가합니다.


1

INSERT INTO 테이블명 VALUES (값1, 값2, 값3 ...);

[표 1. INSERT를 사용하는 방법]


해당 쿼리의 형식으로 실행 시 지정한 테이블에 레코드가 추가됩니다.


INSERT 쿼리는 실행을 하면 처리 상태만 표시되고 SELECT와 같이 실행했을 때 결과를 보여주지 않습니다. 제대로 들어갔는지 확인하기 위해서는 SELECT 쿼리를 실행하여 확인하면됩니다.


스크린샷 2017-02-21 오후 3.06.33.png

[그림 1. INSERT 쿼리 실행과 검색]

    1. 값을 저장할 컬럼 지정하기

INSERT 쿼리 실행 시 테이블명만 지정하고 컬럼명을 지정하지 않을 경우는 모든 컬럼의 값을 VALUES 부분에 모든 컬럼에 대한 값을 지정해야 합니다.

하지만 테이블을 지정하고 괄호로 값을 넣을 컬럼명을 지정할 경우 해당 컬럼에만 값이 들어갑니다.


1

INSERT INTO 테이블명 (컬럼1, 커럼2 …) VALUES (값1, 값2, 값3 ...);

[표 2. 컬럼을 지정하여 값 지정]


스크린샷 2017-02-21 오후 3.14.44.png

[그림 2. 컬럼을 지정하여 실행한 결과]

    1. NOT NULL

레코드를 추가할 때 NULL을 지정하고 싶을 경우에는 VALUES에서 NULL로 값을 지정할 수 있습니다.


1

INSERT INTO 테이블명 VALUES (NULL, NULL, NULL ...);

[표 3. NULL값을 지정]


스크린샷 2017-02-21 오후 3.15.27.png

[그림 3. NULL 값을 지정하여 실행한 결과]


지금 샘플 테이블에는 모든 컬럼이 NULL을 허용하고 있습니다. 그런데 만약 컬럼 중 NOT NULL 제약이 걸려있는 것이 있다고 하면 샘플로 실행한 쿼리는 에러가 발생합니다. 그 이유는 NOT NULL 제약이 걸려 있는 컬럼은 NULL 값을 허용안되기 때문입니다.

    1. DEFAULT

DEFAULT는 명시적으로 값을 지정하지 않았을 경우 사용하는 초기값을 말합니다. 이것은 테이블을 정의할 때 지정할 수 있습니다.


DEFAULT는 두가지 방법으로 사용할 수 있습니다.

DEFAULT를 명시하는 방법과 암묵적으로 디폴트를 사용하는 방법이 있습니다.

보통 INSERT 사용 시 디폴트가 지정되어 있는 컬럼을 제외하고 쿼리를 실행 합니다. 그렇게 실행을 하더라도 컬럼의 값이 디폴트로 저장이 되기 때문입니다.

  1. DELETE

서비스를 하다보면 데이터를 삭제해야 하는 경우가 있습니다.

예를 들어 게시판의 글 중에 글을 하나 삭제한다고 했을 때 ‘삭제' 또는 ‘지우기'같은 버튼을 클릭 했을 때 데이터 삭제 기능을 사용할 것입니다.

    1. DELETE로 레코드 삭제하기

RDBMS에서 데이터를 삭제할 경우에는 DELETE 쿼리를 실행합니다.


1

DELETE FROM 테이블명 WHERE 조건식;

[표 4. DELECT를 사용하는 방법]


[표 4]에서 WHERE 조건식이 없다면 테이블의 모든 레코드를 삭제하게 됩니다. 그래서 조건에 부합하는 레코드만 삭제되도록 조건식을 넣어줘야 합니다.


아마 컬럼의 데이터만 삭제할 수 있지 않을까? 라고 생각하시는 분들이 있습니다. 결론은 안된다. 입니다. 컬럼 단위로 삭제가 아닌 레코드 단위이고 조건에 일치하는 모든행을 삭제하므로 사용시 주의해야 합니다.


스크린샷 2017-02-21 오후 3.40.30.png

[그림 4. DELETE 쿼리를 실행한 결과]

  1. UPDATE

데이터 갱신 작업은 시스템에서 자주 발생합니다.

예를 들어 게시판에서 게시글을 수정할 때 ‘수정' 또는 ‘갱신'과 같은 버튼을 클릭 시 내부적으로 데이터 갱신 기능을 사용할 것입니다.

    1. UPDATE로 데이터 갱신하기

RDBMS에서는 UPDATE 쿼리로 데이터를 갱신할 수 있습니다. 이것은 테이블의 셀 값을 갱신하는 명령입니다.


1

UPDATE 테이블명 SET 컬럼명 = 값 WHERE 조건식;

[표 5. UPDATE의 사용 방법]


DELETE와 달리 셀 단위로 데이터를 갱신할 수 있습니다. WHERE 조건식을 일치하는 모든 레코드를 갱신할 수 있습니다. 만약 WHERE 조건식을 제외한다면 테이블의 모든 레코드가 갱신됩니다.


스크린샷 2017-02-21 오후 3.49.38.png

[그림 5. UPDATE 쿼리를 실행한 결과]

    1. 복수의 컬럼 갱신

위에서는 컬럼 하나에 대한것만 갱신을 하였습니다. 이번에는 복수의 컬럼을 갱신할 때 UPDATE를 어떻게 사용해야하는지 보겠습니다.


1

UPDATE 테이블명 SET 컬럼명1 = 값1, 컬럼명 2 = 값2, …  WHERE 조건식;

[표 6. 복수의 컬럼을 지정한 UPDATE 사용 방법]


스크린샷 2017-02-21 오후 4.33.05.png

[그림 6. 복수의 컬럼을 지정한 UPDATE 쿼리 실행 결과]


만약 NULL로 데이터를 초기화하려고 한다면 컬럼명 = NULL 로 지정하면 됩니다. 이런것을 NULL 초기화라고 합니다. 대신 갱신하려는 컬럼이 NOT NULL 제약 조건이 걸려있는것은 아닌지 확인하고 실행하면 됩니다.

  1. 물리 삭제, 논리 삭제

실제 서비스를 진행하면서 데이터를 삭제할 때 데이터를 삭제해 버리는 경우와 별도 삭제 플래그를 넣어서 실제 레코드는 삭제되지 않지만 플래그 값을 기준으로 삭제를 판단하는 경우가 있습니다. 여기서 말하는 삭제하는 것을 물리삭제, 삭제 플래그를 지정하는 것을 논리 삭제라고합니다.

왜 이렇게 사용한다라고 말을 하기보다는 데이터 특성이나 서비스 운영 정책에 따라 달라지기 때문에 뭐라 단정지어서 말하기 어렵습니다.

어느 테이블의 경우는 데이터를 삭제를 해야하고 어느 테이블은 삭제 플래그를 넣고 데이터는 유지하는 것처럼 섞여서 사용되기 때문에 내부 서비스 정책 및 용도에 맞게 선택하여 사용하면 될 것 같습니다.



+ Recent posts