티스토리 뷰
[Oracle] Query문을 작성해 보자! (3) - 기초 쿼리문 ( SELECT, DISTINCT, ASC, DESC,CONCATENATION(합성 연산자))
Chokeys 2023. 6. 27. 00:32
내가 생각하기에 기본쿼리문이라고 하면 4개를 말한다. 데이터를 조회할 수 있는 " SELECT ", 데이터를 추가할 수있는 " INSERT ", 데이터를 수정할 수 있는 " UPDATE ", 마지막으로 데이터를 삭제할 수 있는 "DELETE" 이 네가지가 쿼리문을 작성하는데 가장 필수적인 요소라고 생각한다.
이 친구들은 DML (Data Manipulation Language) 이라고도 부른다. 데이터 조작 언어는 테이블에 데이터를 검색, 삽입, 수정, 삭제하는 데 사용된다.
각각의 기능들에 대하여 쿼리문을 직접 작성해 보며 하나하나 내용을 정리하려고 한다. 그럼 가보자!!
[기본 세팅]
저번 글에서 정리했던 테이블, 기본키, 시퀀스를 써서 member3라는 테이블을 하나 만들고, 시퀀스를 추가하였다. 기본키는 중복되어서는 안되는 값인 id로 지정하였다.
★ 아참 그리고 SQL마다 조금씩 쿼리문이 다르다.
이 글에서는 일단은 Oracle 기준으로 쿼리문을 작성할 계획이다. 차이점을 예를들면 MySql 에는 LIMIT라는 함수가 있어서 조회되는 데이터의 수를 5개, 10개 이렇게 제한할 수 있는데, 오라클에는 LIMIT 연산자가 없어 대신 ROWNUM을 써서 그 역할을 수행한다.
1. SELECT (데이터 조회)
데이터를 조회하는 기능을 수행한다. SELECT는 하나만으로도 한 페이지를 꽉 채울만큼 여러가지 조회 방법을 가진다. 조건에 맞는 데이터만 찾을 수 도 있고, 데이터의 개수를 제한 해서 조회도 가능하다. 또 오름차순이나 내림차순으로 조회하는것도 가능하다.
1-1. SELECT 기본구조
SELECT m.id FROM MEMBER3 m;
" SELECT [조회할 컬럼명] FROM [테이블명] "
SELECT에는 1번처럼 원하는 컬럼만 선택해서 조회할 수 있는 부분조회가 있고. 2번처럼 전체 데이터를 조회할 수 있는 전체조회가 있다. 두개 다 실행시켜 보자.
1. 전체 조회(*)
: 테이블에 있는 모든 컬럼에 대하여 값을 조회한다.
지금은 아무런 데이터도 들어가 있지 않아 빈 테이블만 조회된다. 데이터를 조회 해보기 위해서 일단 값을 몇개 추가해보았다.
이렇게 SELECT와 FROM사이에 (*) 를 적으면 테이블 안에 전체 데이터를 조회 해준다. 보통은 전체 데이터를 조회하고 그 중에서 찾고자 하는 컬럼을 선택해 부분조회를 많이한다.
2. 부분 조회
: 테이블에 전체 데이터를 조회하는것이 아니라 일부분만 조회하는것이다. 즉, 내가 원하는 컬럼만 선택해서 조회할 수 있다. 그림에서 보는 것처럼 테이블 MEMBER3 이름 뒤에 적혀있는 m이(보통 테이블명은 대문자, 약어는 소문자로 표시한다) MEMBER3 테이블의 약자(별칭)이다. 테이블명이 길면 전부 쓰기가 힘드니 저렇게 줄여서 쓸 수 있게 해놓았다. 근데 꼭 테이블명의 앞자리를 적는건 아니고 자기가 알아보기 쉽게 적으면된다.
테이블명 뒤에 약자인 m을 적으면, m.id, m.NAME 이렇게 간단하게 컬럼을 지정할 수 있다. 컬럼명 적을때 id 이렇게 적어도 되고 ID이렇게 적어도된다. 대소문자 구분이 없다는 말! 가독성 때문에 대소문자 구분해서 쓴다.(일종의 규칙)
이렇게 id와 name만 있는 테이블이 조회되는것을 볼 수있다.
3. 조건 조회(WHARE)
테이블에 있는 데이터를 조건으로도 조회가 가능하다. WHERE 뒤에 연산기호 (<, >, =, <=, <=) 를 이용하여
id = 도깨비 , age >=25 이런식으로 조건에 해당하는 값만 조회할 수 있다.
기본 구조
" SELECT [조회할 컬럼명] FROM [테이블명] WHERE [조건] "
WHERE age = 25 라는 조건을 줘서, 나이가 25살인 멤버만 조회하는 쿼리문을 작성해보았다.
WHERE age > 25 라는 조건을 줘서, 나이가 25살 이상인 멤버만 조회하여 다른 결과를 보여준다.
조건절 연산자 (AND/ OR / IN / LIKE / BETWEEN / NOT )
조건문을 하나만 가지고 조회를 하기에는 내가 원하는 데이터를 상세하게 뽑아내기가 힘들 수도 있다. 그래서 조건문에는 여러가지 연산자들이 존재한다. 연산자를 씀으로써 조건을 보다 상세하게 입력할 수 있다.
① AND : and 연산자는 '그리고' 라는 뜻으로 사용되어 조건1 과 조건 2 모두 만족하는 데이터만 조회해준다.
② OR : or 연산자는 '또한'이라는 뜻으로 사용되어 조건1과 조건2 둘 중 하나만 참이더라도 해당하는 데이터를 조회해주는 연산자이다.
③ IN : in연산자는 or조건 여러개가 한 그룹으로 묶여있는 형태이다. 그 중 하나라도 참이면 조건에 맞는 데이터를 조회한다.
④ LIKE : like연산자는 문자패턴과 일치하는 데이터를 조회해준다.
⑤ BETWEEN : between 연산자는 값1 이상 값2 이하인 데이터들을 조회해준다.(즉, 해당하는 범위의 값)
⑦ IS NULL : 컬럼의 값이 null인 행을 찾아 조회해준다.
⑧ IS NOT NULL : 컬럼의 값이 null이 아닌 행을 찾아 조회해준다.
조건 연산자 같은 경우 종류가 많아 따로 글을 작성하였다. 아래 글에서 좀 더 자세하게 예시와 같이 정리해놓았다.
[ Where 조건문 정리 ]
[Oracle] Query문을 작성해 보자! (4) - Where 조건문의 다양한 연산자 ( AND/ OR / IN / LIKE / BETWEEN / NOT )
조건문에 쓰이는 연산자들이 꽤 많아 따로 정리해야 할 것 같아 글을 작성한다. 대표적으로 AND, OR, IN, LIKE, BETWEEN, NOT 연산자들이 존재하고, 각각 어떻게 사용하는지 쿼리문과 그림을 보면서 정리
gnngtkwk.tistory.com
4. 오름차순 / 내림차순
데이터를 오름차순, 내림차순으로 정렬하여 조회할 수도 있다. 컬럼명을 하나 선택하여 그 컬럼을 기준으로 숫자가 더 높은 행(튜플)을 맨 앞에 놓을 수 도있고 반대로 맨 뒤로 보낼 수도있다. 이름순, 나이순 등으로 데이터를 정렬하여 조회하고 싶을때 사용한다.
- ASC : 오름차순 - DESC : 내림차순
WHERE은 넣지 않아도된다 (그냥 마음대로 쓴거라...) 데이터를 정렬하여 조회하고 싶을때 사용한다.
" SELECT [조회할 컬럼명] FROM [테이블명] WHERE [조건] ORDER BY [컬럼명] ASC or DESC "
나이를 기준으로 오름차순 하여 정렬하였다. ORDER BY 뒤에 적힌 AGE가 기준이 되어 나이가 가장 작은 25가 맨위로 오고, 나이가 가장 많은 37가 제일 밑에 위치한다. 뒤에 ASC or DESC 를 따로 적어주지 않으면 기본값인 ASC가 적용이 되어 오름차순으로 정렬이 되어진다.
반대로 DESC를 적어주면 데이터를 내림차순으로 정렬하여 조회한다. 나이가 가장 많은 37이 맨 위에 위치하는 것을 확인할 수 있다.
5. 중복 제거(DISTINCT)
DISTINCT 쿼리문을 사용하면 중복되는 값들을 제외하고 데이터를 조회할 수 있다.
[기존 테이블]
SELECT DISTINCT REGION FROM MEMBER3 ;
" SELECT DISTINCT [조회할 컬럼명] FROM [테이블명] ;
왼쪽이 REGION 컬럼의 모든 값이고, 오른쪽이 REGION 컬럼을 기준으로 중복된 값을 제외시킨 결과다.
'서울특별시', '경상남도' 등 4개정도의 중복된 값을 제외시키고서 데이터를 조회해준다.
그러면 컬럼이 하나가 아니라 두개 이상이면 어떻게 될까?
SELECT DISTINCT REGION, AGE FROM MEMBER3;
그림과 같이 '지역' 이 중복이 되는데도 그대로 나오고, '나이' 가 중복이 되는데도 그대로 나온다. 저렇게 컬럼을 두개 적게되면 두 컬럼을 하나의 그룹으로 묶어서 중복을 계산하기 때문에 두 컬럼의 값이 똑같이 일치해야만 제외시킨다.
6. 합성 연산자(CONCATENATION)
CONCATENATION은 ' | | ' (수직바) 문자를 이용하여, 하나의 칼럼과 다른 칼럼을 연결하여 하나의 칼럼처럼 출력할 경우에 사용한다.(컬럼의 이름을 합친다는 말!)
AGE 컬럼에 붙이기 위한 새로운 컬럼 STR을 추가했다. 이제는 '||' 를 이용해서 컬럼과 데이터의 값을 합치는 작업을 해볼것이다.
SELECT AGE || ' ' || STR "AGE_STR" FROM MEMBER3 m ;
짜잔! 컬럼명이 두개 합쳐지고 데이터 또한 합쳐진 결과가 나왔다. 여기서 다시 봐야할건 AGE 컬럼 같은 경우는 NUMBER 타입이었지만, STR 문자열과 합쳐지면서 최종적으로 문자열이 되었다는 점.
점점 쿼리문이 길어져서... 이미지를 캡쳐해서 가져오는게 좀 더 가독성이 좋을것 같다. 위 그림과 같이 각각의 컬럼명을 명시해주고 데이터를 조회하면 "AGE_STR" 컬럼이 추가된 모양의 MEMBER3 테이블을 불러올 수 있다.
<몇가지 체크>
데이터 조회시 컬럼의 이름을 원하는 이름으로 바꿔서 조회할 수 있다.
저렇게 컬럼명 뒤 " " 사이에 원하는 컬럼명을 넣으면, 적었던 컬럼명으로 바껴서 조회가 된다.(' ' 한자리 따음표 (x), 이것만큼은 두자리 따음표 " "(o) )
원래 정석은 AS뒤에 바꿀 컬럼명을 적는건데 생략해도 된다.
FROM 테이블명 적을시 뒤에 약자를 붙여서 편하게 사용할 수있다.
저렇게 테이블명 뒤에 약자를 적어서 축약형태로 쓸 수가 있다. 약자 뒤에 점(.)을 붙이면 해당하는 테이블의 컬럼명이 자동으로 보여진다. 나중에 테이블 2개를 JOIN해서 테이블을 만들거나 데이터를 조회할 때 유용하게 쓰인다.
대부분 알고 있을만한 내용이지만 그래도 없는것 보다는 있는게 낫다는 생각에 추가해보았다.
오늘은 SELECT로 할 수 있는 많은 실험을 해보았다. 백엔드로서 가장 중요한 SQL문을 말하라 한다면 당연히 SELECT 쿼리문 일것이다. 물론 INSERT, UPDATE등도 많이 쓰이지만 프로젝트를 진행하면서 SELECT를 가장 많이 쓴거 같다. 내 생각이니 틀릴 수도 있지만... 그냥 제일 많이 쓰는 것 같다. 그래서 SELECT만 따로 빼서 이렇게 글도 작성하였다. 이것말고도 Group by라던지 함수를 이용한 조회라던지 있지만, 그 내용들은 다음 포스팅에서 정리하려고 한다.
깊이있는 공부 중요하다. 근데 나는 컴퓨터가 아니다. 백과사전 처럼 달달달 외울 수 없기에 이렇게 정리하고 다시 보고 반복한다. 기본기만이라도 바르게 할 수 있는 개발자가 되어야겠다. 기초를 튼튼히!!
[도움 주신 사이트]
'분류 전체보기' 카테고리의 글 목록
끊임없이 제 자신을 계발하는 개발자입니다👨🏻💻
yermi.tistory.com
SQL 특징, SQL의 종류, Select 문, Select 산술연산, as 별칭 부여, || 연결 연산자, where 조건절, in, between,
---------------------------SQL---------------------------------- --SQL 이란 --Staructured QUERY LANGUAGE(구조화된 질의언어) --데이터베이스를 대상으로 질의를 수행할 수 있다. --데이터의 조회, 데이터의 추가, 데이터
cmelcmel.tistory.com
'SQL' 카테고리의 다른 글
- Total
- Today
- Yesterday
- 오라클 ROLE
- 합성 연산자
- 파이썬
- 테이블 명 변경
- 오라클 데이터 추가
- SQL
- oracle
- 오라클 데이터 수정
- 오라클 RESOURCE
- Database Express Edition(XE)
- NEXTVAL
- 오라클 시스템 권한
- 윈도우11 사용자 계정이름 변경
- h2 db
- Python
- for while 차이
- 오라클 XE 설치에러
- Where
- 오라클 SYSTEM 계정
- 반목분
- 다중 컬럼 서브 쿼리
- CURRVAL
- for 구구단
- 오라클 인스톨 rollback
- 오라클
- 오라클 데이터 삭제
- 파이썬 리턴 값 주석
- 중첩 서브 쿼리
- SQL Developer
- 오라클 CONNECT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |