[ 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