[오라클] LIKE 연산자 / CREATE / INSERT / DELETE / 특수문자 허용하기

심심이·2024년 2월 18일
0

oracle

목록 보기
8/40

LIKE 연산자

문자열에서 와일드카드(%)를 사용하여 원하는 문자가 포함된 자료를 쉽게 검색할 수 있다.

  • LIKE 연산자와 함께 사용되어지는 % 와 _ 를 wild character 라고 부른다.
  1. % : 글자수와는 관계없이 글자가 있든지 없든지 관계없다
  2. _ : 반드시 아무글자 1개만
  • LIKE 연산자는 대소문자를 구분한다!!

  • LIKE는 해당 문자를 포함한 자료를 검색하지만, NOT LIKE를 사용하면 해당 문자를 포함하지 않는 데이터를 조회할 수 있다.

like 는 in과 같이 사용하는 것이 불가능하다.

-- -- 실습하기 위해 테이블에 열을 새로 추가해서 진행한다.

ALTER TABLE employees
ADD jubun varchar2(13);
-- Table EMPLOYEES이(가) 변경되었습니다.

-- employees 테이블에서 여자 1990년생과 남자 1991년생의 사원들만 
-- 사원번호, 사원명, 주민번호를 나타내세요.

SELECT 
    employee_id AS "사원번호", 
    first_name || ' ' || last_name AS "사원명", 
    jubun AS "주민번호"
FROM employees
WHERE 
    jubun LIKE '90____2%' OR 
    jubun LIKE'91____1%';

-- employees 테이블에서 first_name 컬럼의 값이 'j'로 시작하는 사원들만 
-- 사원번호, 이름, 성, 기본급여를 나타내세요.

SELECT 
    employee_id, 
    first_name, 
    last_name, 
    salary
FROM employees
WHERE first_name LIKE 'J%'; -- 대소문자 구분 

-- employees 테이블에서 first_name 컬럼의 값이 's'로 끝나는 사원들만 
-- 사원번호, 이름, 성, 기본급여를 나타내세요.

SELECT 
    employee_id, 
    first_name, 
    last_name, 
    salary
FROM employees
WHERE first_name LIKE '%s'; -- 대소문자 구분 


-- employees 테이블에서 first_name 컬럼의 값중에 'ee'라는 글자가 들어있는 사원들만 
-- 사원번호, 이름, 성, 기본급여를 나타내세요.

SELECT 
    employee_id, 
    first_name, 
    last_name, 
    salary
FROM employees
WHERE first_name LIKE '%ee%';


-- employees 테이블에서 first_name 컬럼의 값중에 'ee'가 두개 이상 들어있는 사원들만 
-- 사원번호, 이름, 성, 기본급여를 나타내세요.

SELECT 
    employee_id, 
    first_name, 
    last_name, 
    salary
FROM employees
WHERE first_name LIKE '%e%e%';


-- employees 테이블에서 last_name 컬럼의 값이 첫글자는 'F' 이고 두번째 글자는 아무거나 이고
-- 세번째 글자는 소문자 'e' 이며 4번째 부터는 글자가 있든지 없든지 상관없는 사원들만 
-- 사원번호, 이름, 성, 기본급여를 나타내세요. 

SELECT 
    employee_id, 
    first_name, 
    last_name, 
    salary
FROM employees
WHERE last_name LIKE 'F_e%';

CREATE / 테이블 만들기

CREATE TABLE 테이블명(컬럼명1 유형, 컬럼명2 유형);

CREATE TABLE 
	tbl_watch
    (watchname Nvarchar2(10), 
    bigo Nvarchar2(100));
    
-- 가변길이 문자열 varchar2(10) 은 최대 10 byte 까지만 허용. 
-- 한글자가 2byte므로 글자수 제한을 계산해야 해서 불편
-- Nvarchar2(10) 은 최대 10 글자수로, 10 글자 까지만 허용 (byte 가 아님!!)

--Table TBL_WATCH이(가) 생성되었습니다.

ALTER TABLE ADD / 테이블 열(컬럼) 추가하기

ALTER TABLE 테이블명
ADD 컬럼명 유형;

ALTER TABLE employees
ADD jubun varchar2(13);
-- Table EMPLOYEES이(가) 변경되었습니다.

INSERT

INSERT INTO 테이블명(컬럼명1, 컬럼명2)
VALUES (값1, 값2)
입력할 열(칼럼)의 개수와 값의 개수를 동일하게 입력/데이터 타입 일치시킴

INSERT INTO 
    tbl_watch(watchname, bigo)
VALUES
    ('금시계', '순금 99.99% 함유 고급시계');

-- 1 행 이(가) 삽입되었습니다.
commit; -- 파일(DISK) 에 적용(저장) 시킨다. (!!) 데이터를 입력해 줄때도 반드시 커밋해줘야 한다.


DELETE

  • 특정 행 삭제

    DELETE FROM 테이블명
    WHERE 삭제할 데이터 조건;

  • 모든 행 삭제

    DELETE FROM 테이블명

--------------- 특정행 삭제하기 ------------------------------------

commit; -- 커밋 완료
    
SELECT *
FROM tbl_watch;

DELETE FROM tbl_watch
WHERE watchname = '은시계';

commit; -- 삭제도 마찬가지로 커밋해주기


---------------------- 모든행 삭제하기 --------------------

DELETE FROM tbl_watch;  --모든 행 삭제, 행은 없고 열만 남은 상태가 된다. 
rollback; --롤백 완료. 커밋해주지 않은 상태에서 되돌릴 수 있다.

wild character 의 escape (탈출)시켜서 특수문자 허용하기

  • like 연산자를 사용하다 보면 특수문자가 겹쳐서 표현이 안 될 때가 있는데 이럴때 escape 하면 특수문자를 사용할 수 있다.
-- tbl_watch 테이블에서 bigo 컬럼에 99.99% 라는 글자가 포함되어있는 행만 출력
SELECT *
FROM tbl_watch
WHERE bigo LIKE '%99.99%'; -- '%99.99%%' 로 입력하면 99.99점 까지도 같이 출력함. 틀린 풀이

SELECT *
FROM tbl_watch
WHERE bigo LIKE '%99.99\%%' ESCAPE '\';
--  escape 문자로 '\' 을 주었으므로 '\' 다음에 나오는 % 1개만 
--  wild character 기능에서 탈출시켜 버리므로 % 는 진짜 글자 퍼센트(%) 로 된다.


SELECT *
FROM tbl_watch
WHERE bigo LIKE '%99.99_%%' ESCAPE '_'; 
--  escape 문자로 '_' 을 주었으므로 '_' 다음에 나오는 % 1개만 
--  wild character 기능에서 탈출시켜 버리므로 % 는 진짜 글자 퍼센트(%) 로 된다.
--  escape 문자는 2,3 등의 숫자나 a, b 등의 알파벳, ㅎ,ㄱ 등의 한글도 가능하다. 
--  하지만 숫자나 문자의 사용은 지양하고 주로 특수기호를 사용한다.(\)
profile
개발하는 심심이

0개의 댓글