create table member (
id SERIAL primary key, -- 자동 증가하는 식별
name varchar(50) not null, -- 이름 (필수)
email varchar(100) unique, -- 이메일 (중복 불가)
address varchar(100), -- 주소 (중복 가능)
created_at timestamp default now() -- 생성 시간 (기본값: 현재 시간)
);
insert into member (name, email, address)
values
('홍길동', 'gildong@test.com', '서울'),
('김철수', 'kimcs@test.com', '서울'),
('이영희', 'lee@test.com', null),
('홍길동', 'hong@test.com', null);
현재 member 테이블
| PK | name | address | |
|---|---|---|---|
| 1 | 홍길동 | gildong@test.com | 서울 |
| 2 | 김철수 | kimcs@test.com | 서울 |
| 3 | 이영희 | lee@test.com | null |
| 4 | 홍길동 | hong@test.com | null |
select * from member where address = '서울';
select * from member where name = '홍길동';
# 이름은 '홍길동' 이고, 주소가 입력되지 않은 회원 찾기
select * from member
where name = '홍길동' and address is null;
# 이름이 '홍길동' 이거나, 주소가 비어있는 회원 모두 찾기
select * from member
where name = '홍길동' or address is null;
# 이름이 '홍길동' 이고, 주소가 서울 인 회원 찾기
select * from member
where name = '홍길동' and address like '서울';
PostgreSQL 은 대소문자 구분이 엄격한 편임
| 문법 | 설명 |
|---|---|
| LIKE | 대소문자 구분 |
| ILIKE | 대소문자 구분 없음 |
-- 이메일에 T 가 들어가는 회원 조회
select * from member where email like '%T%';
-- 이메일에 T 또는 t 가 들어가는 회원 조회 (대소문자 무시)
select * from member where email ilike '%T%';
-- 이름을 기준으로 오름차순 정렬
select * from member order by name asc;
-- 생성일 기준으로 최신순 정렬(역정렬)
select * from member order by created_at desc;
-- 가장 최근 등록된 2명 최신순 조회
select * from member
order by created_at desc
limit 2;
-- 2번째 부터 2명 조회 (OFFSET 은 시작 위치)
select * from member
order by created_at desc
limit 2 offset 1;
-- 주소가 없는(null) 사용자 조회
select * from member where address is null;
-- 주소가 존재하는 사용자만 조회
select * from member where address is not null;