[ DB / Oracle ] 데이터 조회(SELECT)에 조건(WHERE) 추가
2024. 1. 15. 18:55ㆍ· LANGUAGE/└ Database
환경 : DBeaver
(참고) 데이터 조회에 사용될 테이블 및 데이터
-- Create a new sequence and table
CREATE SEQUENCE music_seq START WITH 1;
CREATE TABLE music (
music_id NUMBER PRIMARY KEY, --번호
music_title VARCHAR2(200) NOT NULL CHECK(REGEXP_LIKE(music_title, '^[^%^]+$')), --음악 제목
artist_name VARCHAR2(100) NOT NULL, --가수 이름
release_date char(10) NOT NULL, -- 발매일
genre VARCHAR2(50) NOT NULL, -- 장르
duration_minutes NUMBER(3) NOT NULL, -- 노래 길이
album_name VARCHAR2(150), -- 앨범 제목
price NUMBER(5,2) NOT NULL CHECK(price >= 0) --가격
);
-- Optionally delete existing data
-- DELETE FROM music;
DROP SEQUENCE music_seq;
DROP TABLE music;
-- Insert data (8 ea)
INSERT INTO music(music_id, music_title, artist_name, release_date, genre, duration_minutes, album_name, price) VALUES (music_seq.nextval, 'Bohemian Rhapsody', 'Queen', '1975-10-31', 'Rock', 6, 'A Night at the Opera', 1.99);
INSERT INTO music(music_id, music_title, artist_name, release_date, genre, duration_minutes, album_name, price) VALUES (music_seq.nextval, 'Billie Jean', 'Michael Jackson', '1983-01-02', 'Pop', 4, 'Thriller', 1.49);
INSERT INTO music(music_id, music_title, artist_name, release_date, genre, duration_minutes, album_name, price) VALUES (music_seq.nextval, 'Shape of You', 'Ed Sheeran', '2017-01-06', 'Pop', 3, '÷', 1.29);
INSERT INTO music(music_id, music_title, artist_name, release_date, genre, duration_minutes, album_name, price) VALUES (music_seq.nextval, 'Stairway to Heaven', 'Led Zeppelin', '1971-11-08', 'Rock', 8, 'Led Zeppelin IV', 2.49);
INSERT INTO music(music_id, music_title, artist_name, release_date, genre, duration_minutes, album_name, price) VALUES (music_seq.nextval, 'Dancing Queen', 'ABBA', '1976-08-15', 'Disco', 4, 'Arrival', 1.79);
INSERT INTO music(music_id, music_title, artist_name, release_date, genre, duration_minutes, album_name, price) VALUES (music_seq.nextval, 'Sweet Child o'' Mine', 'Guns N'' Roses', '1987-06-15', 'Rock', 5, 'Appetite for Destruction', 2.29);
INSERT INTO music(music_id, music_title, artist_name, release_date, genre, duration_minutes, album_name, price) VALUES (music_seq.nextval, 'Despacito', 'Luis Fonsi ft. Daddy Yankee', '2017-01-13', 'Reggaeton', 3, 'Vida', 1.99);
INSERT INTO music(music_id, music_title, artist_name, release_date, genre, duration_minutes, album_name, price) VALUES (music_seq.nextval, 'Imagine', 'John Lennon', '1971-10-11', 'Rock', 3, 'Imagine', 1.49);
(+) 발매일을 char(10) 로 받아 기입하였음
WHERE 절에 조건을 삽입하여 원하는 결과만 볼 수 있다.
[ 2달러 미만인 음악만 조회 ]
SELECT * FROM music WHERE price < 2;
[ 1~1.5 달러만 조회 ]
SELECT * FROM music WHERE price > 1 AND price < 1.5;
SELECT * FROM music WHERE price BETWEEN 1 AND 1.5;
(+) <,> 연산자를 두 번 사용하여 풀어 적어주는 방법
(+) BETWEEN a AND b 를 사용하여 적어주는 방법
[ 15번 도서만 조회 ]
SELECT * FROM music WHERE music_id = 15;
(+) (주의) '='은 대입 연산자가 아니다!
[ 15번 제외 나머지 도서만 조회 ]
SELECT * FROM music WHERE music_id != 15;
[ 문자 조건 ]
[ 장르가 'Rock' 인 음악 조회 ] (오라클은 문자도 = 로 비교)
SELECT * FROM music WHERE genre = 'Rock';
[ D로 시작하는 음악 조회 ]
SELECT * FROM music WHERE music_title LIKE 'D%'; --방법1
SELECT * FROM music WHERE INSTR(music_title, 'D') = 1; --방법2

(+) LIKE 연산자를 사용하여 시작 자리에 D가 오고 그 뒤는 상관없다는 표시로 %를 사용하였음
(+) INSTR() 함수는 지정한 글자가 어느 위치에 있는지 알아내는 명령
여기서는 D가 첫 번째 자리에 있는 음악만 출력하도록 사용하였음.
→ 시작 검사에는 LIKE 연산자가 매우 빠른 속도로 실행된다.
→ INSTR() 함수는 전반적으로 실행속도가 비슷하다.
[ 대소문자 상관 없이 제목에 c가 들어있는 음악 ]
SELECT * FROM music WHERE LOWER(music_title) LIKE '%c%';
SELECT * FROM music WHERE INSTR(LOWER(music_title), 'c') > 0;
(+) LOWER()를 사용하여 대소문자를 무관하게 만들기
개인 공부 기록용입니다:)
728x90
'· LANGUAGE > └ Database' 카테고리의 다른 글
[ DB / Oracle ] 정렬 (ORDER BY) (0) | 2024.01.17 |
---|---|
[ DB / Oracle ] 데이터 조회(SELECT)에 조건(WHERE) 추가(2) (0) | 2024.01.16 |
[ DB / Oracle ] 데이터 조회 (SELECT) (1) | 2024.01.14 |
[ DB / Oracle ] sql 실습 (1) | 2024.01.13 |
[ DB / Oracle ] 날짜 데이터 (date / timestamp) (0) | 2024.01.13 |