G·Graph Daily Lab
DAY 32 / 100
내 학습 기록
DAY 32개념·실험Cypher와 GQL

조건을 걸고 결과를 고르기

찾은 일치 가운데 필요한 것만 남기고, 원하는 열을 원하는 순서로 내보내는 절들을 익힙니다.

약 20분조작형 실험 확인 퀴즈
A SMALL DETOUR

이번 회차, 내 속도로.

기초를 더 짚거나 궁금한 주제로 잠깐 넓혀 보세요. 최대 3단계를 거쳐 DAY 32로 돌아옵니다.

난이도·관심 주제 고르기
이번 회차는 어느 속도로 볼까요?
더 살펴볼 주제 1~2개 선택

1/2개 선택 · 새 보충·심화 수업과 본과정 다시 읽기를 선택할 수 있어요.

이렇게 다녀와요 1단계 · 약 12분

  1. 출발 · DAY 32WHERE·RETURN·ORDER BY
  2. 1. 관심 주제OPTIONAL MATCH·null추가 13 · 새 추가 수업
  3. 복귀 · DAY 32원래 회차 이어가기
  • OPTIONAL MATCH·null · DAY 31·32에서 MATCH와 WHERE를 배운 뒤, 관계가 없는 노드가 결과에서 조용히 사라지는 문제를 다루러 옵니다.

선택과 경로 기록은 이 브라우저에 저장됩니다. 본과정의 회차 완료와는 별도입니다.

복귀: DAY 32 → 본과정 다음 회차: DAY 33

핵심 개념

Cypher 질의는 절(clause)을 차례로 거칩니다. MATCH가 후보를 찾고, WHERE가 조건으로 거르고, RETURN이 내보낼 열을 고르고, ORDER BY가 정렬하고, LIMIT이 개수를 자릅니다. MATCH (p:Person)-[r:WORKS_AT]->(l:Lab) WHERE r.since >= 2020 RETURN p.name, r.since ORDER BY r.since DESC LIMIT 3은 2020년 이후 합류한 사람을 최근 순으로 3명까지 돌려줍니다.

WHERE에는 노드 속성과 관계 속성(r.since)을 모두 쓸 수 있고, AND·OR·NOT과 문자열 조건(STARTS WITH, CONTAINS)도 씁니다. 패턴 안의 {city:'대전'}은 같음 조건만 표현하는 줄임말이라 범위 조건은 WHERE로 적습니다. WHERE는 바로 앞 MATCH 패턴의 일부로 적용됩니다.

RETURN에서는 AS로 열 이름을 바꾸고 DISTINCT로 중복 행을 없앨 수 있습니다. ORDER BY는 기본이 오름차순이고 DESC를 붙이면 내림차순입니다. Neo4j 문서는 행 순서를 보장하는 절이 ORDER BY뿐이라고 밝힙니다. ORDER BY 없이 LIMIT만 쓰면 ‘상위 3명’이 아니라 순서가 정해지지 않은 3행을 받습니다.

null을 조심해야 합니다. 없는 속성을 읽으면 null이 되고, null과 비교한 결과도 null입니다. WHERE는 참이 아닌 것을 모두 거르므로 WHERE p.age < 30은 나이가 기록되지 않은 사람을 오류 없이 조용히 뺍니다. 빠진 값을 찾으려면 p.age IS NULL을 따로 씁니다.

WHERE로 거르고 RETURN으로 열을 고르며, 순서가 필요하면 반드시 ORDER BY와 LIMIT을 함께 씁니다.

작은 예제로 따라가기

01

WORKS_AT의 since가 민수 2021, 지아 2015, 서준 2022, 하린 2019, 도윤 2016, 유나 2023이면 WHERE r.since >= 2020을 통과하는 사람은 민수·서준·유나 3명입니다.

02

ORDER BY r.since DESC를 붙이면 유나(2023), 서준(2022), 민수(2021) 순서가 됩니다.

03

LIMIT 2를 더하면 유나와 서준만 남습니다. ORDER BY를 빼면 어떤 두 명이 나올지 보장되지 않습니다.

직접 실험해 보기

WHERE 조건을 ‘없음 → since ≥ 2020 → city='대전'’으로 바꾸고 ORDER BY 토글과 LIMIT을 조절하며, Code의 쿼리와 결과 표의 행 수가 어떻게 바뀌는지 기록하세요.

LIVE EXPERIMENT · WHERE · ORDER BY

조건을 걸고 정렬해 몇 행만 고르기

MATCH (p:Person)-[r:WORKS_AT]->(l:Lab)
RETURN p.name AS name, l.name AS lab,
       l.city AS city, r.since AS since
202120152022201920162023그래프실언어실민수지아서준하린도윤유나
MATCH 6→WHERE 6→순서 그대로→LIMIT 후 6
결과
#namelabcitysince
1민수그래프연구실대전2021
2지아그래프연구실대전2015
3서준그래프연구실대전2022
4하린언어연구실서울2019
5도윤언어연구실서울2016
6유나언어연구실서울2023

그래프에서 진한 엣지는 결과 행, 하늘색은 WHERE는 통과했지만 LIMIT에 잘린 행, 흐린 것은 WHERE에서 걸러진 행이다. ORDER BY가 없으면 결과 순서는 보장되지 않는다(여기서는 저장 순서).

이번에는 직접 풀어 보세요

정답을 보기 전에 계산과 이유를 적어 보세요. 해설과 비교하고 확인 표시를 남기면 완료할 수 있습니다.

문제 1
힌트 보기

범위는 WHERE에서 AND로 두 조건을 잇습니다. 양 끝값이 포함되는지 확인하세요.

풀이와 비교하기

MATCH (p:Person)-[r:WORKS_AT]->(:Lab) WHERE r.since >= 2016 AND r.since <= 2021 RETURN p.name, r.since ORDER BY r.since입니다. 결과는 도윤(2016), 하린(2019), 민수(2021) 순서의 3행입니다.

풀이와 확인 표시는 이 브라우저에 저장됩니다.

YOUR NOTES

오늘 이해한 것과 다시 볼 것

계산이 달라진 이유, 헷갈린 개념, 다음에 확인할 질문을 남겨 보세요.

메모는 이 브라우저에 저장됩니다. 홈에서 전체 기록을 내려받을 수 있습니다.

오늘의 이해 확인

ORDER BY 없이 LIMIT 3만 쓰면 무엇을 얻나요?

완료 조건: 확인 퀴즈 정답 · / 직접 풀기 0/1

FURTHER READING

더 깊이 읽기

예제와 실험 데이터는 이 과정을 위해 만든 것입니다. 원문은 선택 자료이며, 강의와 직접 풀기만으로도 다음 회차를 이어갈 수 있습니다.

Cypher Manual: WHERENeo4jCypher Manual: Working with nullNeo4jCypher Manual: IntroductionNeo4j

이 자료는 개념 학습용입니다. 실제 데이터베이스·라이브러리·플랫폼의 동작과 설정은 제품과 버전마다 다를 수 있습니다.