저번엔 관계형 데이터 베이스가 무엇인지, 데이터 저장은 어떻게 되는지에 대해 알아보았다.
이번엔 DB에 저장된 데이터를 접근해서 가져올 수 있는 방법에 대해 알아보겠다.
우선 데이터 처리 개념의 CRUD에 대해 간단히 설명하겠다.
- Create
- Read
- Update
- Delete
CRUD
테이블에서 데이터의 생성, 조회, 수정, 삭제를 뜻한다.
기본적으로 CRUD를 통해 데이터를 처리한다.
CRUD를 사용하는 것은 아니고 데이터 처리 기법을 나타내는 개념이다.
당연히 있어야 하는 기본적인 기능들을 지칭한다고 생각하면 좋겠다.
DB에서 데이터 처리를 위해선 자바소스코드가 아닌 SQL을 사용해야 한다.
추가적으로 해당 글에서 query라고 말하는데 이는 SQL 코드를 뜻한다고 생각하면 좋겠다.
SQL에서 CRUD는 아래와 같이 사용할 수 있다.
Create | Insert |
Read | Select |
Update | Update |
Delete | Delete |
이번엔 테이블에서 데이터를 조회 및 선택할 수 있는 select에 대해 알아보겠다.
우선 테이블에 들어있는 데이터를 먼저 보고 시작하겠다.
TABLE
해당 테이블에는 5개의 행이 있다. (5명의 유저)
데이터가 많이 있는 것은 아니지만 그래도 select문을 통해 원하는 데이터를 조회해보겠다.
SELECT
기본적인 select문의 사용방법에 대해 알아보겠다.
키워드 입력값
SELECT columns FROM table WHERE condition;
바로 사용해 보겠다.
Select 예제 1
Select 문에서 Where 절은 실행에 있어서 필수가 아니긴하다.
해당 쿼리문은,
user 테이블의 모든 usercode, name, email, username, password, role 컬럼의 값들은 선택해 조회한다.
선택한 컬럼들중 user 테이블에 있는 모든 값이 조회되었다. (반환)
총 5개의 튜플이 반환되었다. (5 rows)
각 튜플은 선택한 컬럼중에서 각각의 사용자에 대한 정보를 담고 있다.
각각의 컬럼에 대한 모든 데이터가 조회되었다.
그러나 이때 WHERE 절을 사용해 조회하는 데이터의 조건을 걸 수도 있다.
조건을 통해 원하는 데이터만 가져오는 것이다.
Select 예제 2
user 테이블에서
원하는 컬럼들을 선택하고
username이 jaean인 튜플만 선택하라고 조건을 주었다.
WHERE 절에서 원하는 조건을 줄 수 있다.
if 문과 비슷하게 생각할 수도 있겠다.
위와 같이 하면 DB에 존재하는 user 테이블에서 jaean이라는 username을 가진 사용자의 데이터를 조회할 수 있는 것이다.
이처럼 기본적인 Select 문은 selece ? from ? where ? 로 사용한다.
CASE
추가적으로 이때 CASE 라는 것도 존재한다.
WHERE 절은 튜플단위의 if 문이라면
CASE 문은 컬럼단위의 if 문이다.
CASE column WHEN condition THEN trueResult ELSE falseResult;
본인은 로그인을 구현할 때 CASE 문을 사용하였다.
하지만 CASE 문에 대해서는 나중에 자세히 알아보겠다.
하지만 이는 매우매우 기본적인 방법이고 SQL에는 더 많은 기능(키워드)들이 있다.
키워드들을 사용하면 더 유용한 SQL 코드를 만들 수 있다.
Other
이번에는 SELECT와 함께 사용하기 좋은 키워드를 위주로 알아보겠다.
- AS
- Like
- Distinct
우선 AS에 대해 알아보겠다.
AS는 쿼리문에서 테이블의 이름을 임시로 바꿀 때 사용한다.
테이블의 이름이 길 때 사용하기 좋다.
As
AS 키워드를 통해
해당 쿼리에서 user 테이블의 이름을 Me로 바꾸었다.
컬럼에 AS를 사용하면 반환되는 컬럼의 이름이 바뀐다.
이때 주의해야 할 점으로 쿼리의 실행순서를 먼저 알아야한다는 것이다.
보통 코드는 위에서 아래로 순서를 가지며 실행되는데 SELECT 문은 아니다.
1. FROM 절
2. WHERE 절
3. SELECT 절
SELECT 쿼리는 위와 같은 순서로 실행이된다.
그래서 FROM 절에서 user 테이블의 이름을 Me로 바꾸었으니
SELECT 절에서 선택되는 컬럼들은 Me 테이블의 컬럼들임을 명시해주어야 한다는 것이다.
사실 선택된 테이블이 하나일 때는 명시해주지 않아도 된다.
그런데 AS 사용후엔 항상 이렇게 기입해주는게 좋다.
만약 선택된 테이블이 여러개라면 컬럼을 선택할 때 항상 무슨 테이블의 컬럼인지 꼭 명시해주어야 한다
아니면 쿼리 실행시 에러로 ambiguous 머라고 뜨는데 이는 해당 컬럼을 무슨 테이블에서 찾아야하는지 모른다는 소리다.
LIKE
LIKE는 부분적으로 일치하는 값이 컬럼을 찾을 때 사용한다.
주로 WHERE 절에서 많이 사용한다.
바로 사용해 보겠다.
WHERE 절에서 = 대신 LIKE를 사용했다.
LIKE를 통해 =를 대체하는것 이상으로도 사용할 수 있다.
_ | 글자 수를 정함 |
% | 정하지 않음 |
_를 먼저 사용해 보겠다.
LIKE _
user 테이블에서 name이 4자리인 튜플의 username과 name을 선택하는 쿼리이다.
LIKE "____" 와 같이 _의 개수로 글자의 자리수가 정해진다.
tt 유저의 이름이 test임으로 글자수가 4라서 조회되었다.
이제 %를 사용해 보겠다.
LIKE %
user 테이블에서 비밀번호가 1로 끝나는 튜플의 username과 password를 선택하였다.
%를 문자열 앞에 붙이면 "*1"와 같이 1로 끝나는 모든 문자를 뜻하게된다.
chacha와 jaean1의 비밀번호가 1로 끝난다.
%를 문자열 뒤에 붙이면 해당 문자열로 시작하는 모든 문자를 뜻하게된다. (문자열*)
user 테이블에서 username이 j로 시작하는 모든 문자열을 선택했다.
jaean과 jaean1이 j로 시작한다.
이때 주의할 점으로 LIEK는 문자열에만 사용가능한 것이 아니다.
select username from user where usercode like 14;
해당 쿼리 실행시
jaean이 반환될 것이다. int에도 사용이 가능하다.
DISTINCT
Distinct는 중복을 제거하는 용도로 사용된다.
값의 중복이 있는 테이블에서 값의 종류를 중복없이 알고 싶을 때 사용할 수 있다.
파이썬에서 list를 set으로 형변환하는 것과 같은 결과를 보인다.
해당 테이블에서는 사용 목적이 잘 맞는다고 할 순 없지만 그래도 사용해 보겠다.
해당 쿼리를 실행하면 아래와 같은 결과가 반환된다.
결과로 admin과 user가 반환되었다.
이는 user 테이블에서 role 컬럼에 대한 값을 중복없이 선택된 것이다.
현재 role 컬럼에는 admin과 user라는 값만 존재하기 때문이다.
LIMIT
마지막으로 LIMIT에 대해 알아보겠다.
LIMIT도 기능이 간단하다.
반환되는 튜플의 개수에 대한 제한을 걸어주는 것이다.
해당 예제에서는 설명하지 않았던 부분들을 많이 사용했는데 설명을 한번 들으면 바로 알 수 있을 만큼 간단하다.
* 는 해당 테이블의 모든 컬럼을 뜻한다. (select all)
ORDER BY usercode DESC는 반환되는 튜플들을 usercode를 기준으로 Descending하게 정렬한다는 뜻이다.
(usercode를 기준으로 내림차순 정렬)
그리고 마지막으로 LIMIT 3를 통해 반환되는 튜플의 개수를 3으로 제한을 걸었다.
여기까지 기본적으로 SELECT의 사용법에 대해 알아보았다.
처음 알아보기엔 되게 내용이 많지만 그래도 이정도만 숙달해도 어느정도 노가다를 할 수 있다.
'Data Base > Data Base 기초' 카테고리의 다른 글
[DB] 함수 종속성과 정규화(1NF, 2NF, 3NF, BCNF, 4NF, 5NF) (1) | 2023.12.17 |
---|---|
[DB] Join 문 (Natural Join, Outer Join, Self Join) (0) | 2022.07.13 |
[DB] Join 문 (Inner Join, Cross Join, Using) (0) | 2022.07.12 |
[DB] SQL Select 문 (Subquery) (0) | 2022.07.11 |
[DB] 관계형 데이터베이스 개념, 생성 (RDBMS) (0) | 2022.07.03 |