Learn & Record

[코리아IT아카데미] SQL 문법 MariaDB (비교연산자, 논리연산자, LIKE, IN, IS, BETWEEN) 본문

Dev/SQL

[코리아IT아카데미] SQL 문법 MariaDB (비교연산자, 논리연산자, LIKE, IN, IS, BETWEEN)

Walker_ 2024. 2. 1. 13:27

1. 필드 비교

 - WHERE 절은 읽을 레코드의 조건을 지정

SELECT * FROM tcity WHERE AREA > 1000;
SELECT NAME, AREA FROM tcity WHERE AREA > 1000;

 

 

 

 

 

 

2. 조건문 사용 비교연산자

 - A=B (같다), < <= > >= (대소비교), <> != (다르다, 같지 않다)

 - 숫자는 상수를 그냥 쓰지만, 문자열과 날짜 상수는 ' ' 작은 따옴표로 감싸야 함

 

3. SQL은 소문자와 대문자 구분 없이 인식된다. (카멜법 사용 X) 

 

4. 연습문제

1. 인구가 10만명 미만인 도시의 이름을 출력
2. 전라도에 있는 도시의 정보 출력
3. 월급이 400만원 이상인 직원의 이름 출력

SELECT NAME FROM tcity WHERE popu < 10;
SELECT * FROM tcity WHERE region = '전라';
SELECT NAME FROM tstaff WHERE salary >= 400;

 

5. NULL 비교

 - NULL : 값이 입력되어 있지 않은 특수한 상태를 표현 / 필드 선언 시 NULL 가능성 미리 지정

 - 값을 알 수 없거나 아직 결정할 수 없다는 뜻이며 0이나 빈 문자열과 다름

 - NULL은 값이 아니라 상태이기에 = 연산자로 비교불가. IS 또는 IS NOT 으로 비교

SELECT * FROM tstaff WHERE score IS NULL;
SELECT * FROM tstaff WHERE score IS NOT NULL;

 

6. 논리연산자

 - 두 개 이상의 조거늘 동시에 검색할 때는 [ AND, OR ] 연산자 사용

 - AND = 두 조건 모두 참, OR = 두 조건 중 하나라도 참인 조건 검사

 - 3개 이상의 조건문을 지정할 때 조건의 우선순위 주의. AND가 OR 보다 우선순위 높음. 애매할 경우 괄호 사용

 - NOT 연산자 : 뒤에 표현식이 참이면 거짓으로, 거짓이면 참으로 변환

 - 모르간의 법칙 : [ A AND B] 의 부정은 [ !A OR !B ]

SELECT * FROM tcity WHERE popu >= 100 AND AREA >= 700;
SELECT * FROM tcity WHERE popu >= 100 OR AREA >= 700;

SELECT * FROM tcity WHERE region = '경기' OR popu >= 50 AND AREA >= 500;
SELECT * FROM tcity WHERE region = '경기' AND popu >= 50 OR AREA >= 500;

SELECT * FROM tcity WHERE (AREA >= 500 OR region = '경기') AND popu >= 50;
SELECT * FROM tcity WHERE region = '경기' AND (popu >= 50 OR AREA >= 500);

SELECT * FROM tcity WHERE region != '경기';
SELECT * FROM tcity WHERE NOT(region = '경기');

 

7. 연습문제 2

1. 직원 목록에서 월급이 300미만이면서 성취도는 60이상인 직원이 누구인지 조사하라
2. 영업부의 여직원 이름을 조사하라

SELECT NAME FROM tstaff WHERE salary < 300 AND score >= 60;
SELECT NAME FROM tstaff WHERE gender = '여' AND depart = '영업부';

 

8. LIKE

 - 비교연산자가 완전히 일치하는 조건식을 표현하는데 비해 LIKE 연산자는 패턴으로 '부분 문자열' 검색

% 복수개의 문자와 대응. %자리에는 임의 개수의 임의 문자 가능
_ 하나의 문자와 대응. _자리에는 하나의 임의 문자 가능
[] []안에 포함된 문자 리스트 중 하나의 문자와 대응
[^] [^]안에 포함된 문자 리스트에 포함되지 않은 하나의 문자와 대응
SELECT * FROM tcity WHERE NAME LIKE '%천%'; // 천이 들어가있는 도시 찾음
SELECT * FROM tcity WHERE NAME NOT LIKE '%천%'; // 천이 없는 도시 찾음
SELECT * FROM tcity WHERE NAME LIKE '천%'; // 천으로 시작하는 도시 찾음
SELECT * FROM tcity WHERE NAME LIKE '%천'; // 천으로 끝나는 도시 찾음

 

9. 연습문제 3

1. 직원 목록에서 '정'씨를 조사하라
2. 이름에 '신'자가 포함된 직원을 조사하라
3. 성이 '신'자가 아니면서, 이름에 '신'이 들어가는 직원을 조사하라

SELECT NAME FROM tstaff where name LIKE '정%';
SELECT NAME FROM tstaff WHERE NAME LIKE '%신%';
SELECT NAME FROM tstaff WHERE (NAME NOT LIKE '신%') AND (NAME LIKE '%신%');

 

10. BETWEEN

 - BETWEEN a AND b 문은 "BETWEEN 최소값 AND 최대값" 형식으로 두 값 사이의 범위를 제한

 - 문자열이나 날짜에도 사용 가능. 대소만 가릴 수 있다면 어떤 타입이든지 <, > 부등 비교가 가능

SELECT * FROM tcity WHERE popu BETWEEN 50 AND 100;
SELECT * FROM tcity WHERE popu >= 50 AND popu <= 100;

SELECT * FROM tstaff WHERE NAME BETWEEN '가'AND '사';
SELECT * FROM tstaff WHERE joindate BETWEEN '20150101' AND '20180101';

 

11. 연습문제 4

1. 면적 500 ~ 1000 사이의 도시목록을 조사하라
2. 월급이 200만원대인 직원의 목록을 구하라

SELECT NAME FROM tcity where area BETWEEN 500 AND 1000;
SELECT NAME, salary FROM tstaff WHERE salary BETWEEN 200 AND 299;

 

12. IN

 - 불연속적인 값 여러개의 목록을 제공하여 이 목록과 일치하는 레코드 검색

 - 연산자 뒤의 괄호 안에 콤마로 구분된 값 목록을 나열하여 이 중 하나에 해당하는지 점검

 - IN 연산자의 반대는 NOT IN

 - LIKE 와 IN 은 연달아서 사용 불가. 각각 LIKE 조건은 OR 연산자로 연결

SELECT * FROM tcity WHERE region IN ('경상', '전라');
SELECT * FROM tcity WHERE region NOT IN ('경상', '전라');
SELECT * FROM tcity WHERE (name LIKE '이%') OR (name LIKE '안%');

 

13. 연습문제 5

1. 총무부와 영업부 직원의 목록을 조사하라
2. 인사과나 영업부에 근무하는 대리의 목록을 조사하라
3. 차장급 이상의 여직원 목록을 조사하라

SELECT NAME FROM tstaff WHERE depart IN ('총무부', '영업부');
SELECT NAME FROM tstaff WHERE depart IN ('인사과', '영업부') AND (grade = '대리');
SELECT NAME, grade FROM tstaff WHERE grade IN ('차장', '부장', '이사') AND (gender = '여');

 

14. 연습문제 6

1. 고객 테이블에서 고객아이디, 고객이름, 등급 속성을 검색해보자.
2. 고객 테이블에 존재하는 모든 속성을 검색해보자. (*을사용하지 말고 작성할 것.)
3. 고객 테이블에 존재하는 모든 속성을 검색해보자. (*을사용해서 작성할 것.)
4. 제품 테이블에서 제조업체를 검색해 보자.
5. 제품 테이블에서 제품명과 단가를 검색하되, 단가를 가격이라는 새 이름으로 출력해보자.
6. 제품 테이블에서 제품명과 단가 속성을 검색하되, 단가에500원을 더해 '조정 단가'라는 이름으로 출력해보자.

SELECT * FROM `고객`;
SELECT `고객아이디`, `고객이름`, `등급` FROM `고객`;
SELECT `고객아이디`, `고객이름`, `나이`, `등급`, `직업`, `적립금` FROM `고객`;
SELECT * FROM `고객`;
SELECT * FROM `제품`;
SELECT `제조업체` FROM `제품`;
SELECT `제품명`, `단가` AS `가격` FROM `제품`;
SELECT `제품명`, `단가`+500 AS `조정 단가` FROM `제품`;

 

15. 연습문제 7

SELECT * FROM `제품`;
SELECT `제품명`, `재고량`, `단가` FROM `제품` WHERE `제조업체` = '한빛제과';
SELECT * FROM `고객`;
SELECT * FROM `주문`;
SELECT `주문제품`, `수량`, `주문일자` FROM `주문` WHERE (`수량` >= 15) AND (`주문고객` = 'apple');
SELECT `주문제품`, `수량`, `주문일자`, `주문고객` FROM `주문` WHERE (`수량` >= 15) OR (`주문고객` = 'apple');
SELECT `제품명`, `단가`, `제조업체` FROM `제품` WHERE `단가` BETWEEN 2000 AND 3000;
SELECT `고객이름`, `나이`, `등급`, `적립금` FROM `고객` WHERE `고객이름`  LIKE '김%';
SELECT `고객아이디`, `고객이름`, `등급` FROM `고객` WHERE `고객아이디` LIKE '_____';
# SELECT `고객아이디`, `고객이름`, `등급` FROM `고객` WHERE LENGTH `고객아이디` = 5;
# SELECT `고객아이디`, `고객이름`, `등급` FROM `고객` WHERE `고객아이디` LIKE 'a____';
SELECT `고객이름` FROM `고객` WHERE `나이` IS NULL;
SELECT `고객이름` FROM `고객` WHERE `나이` IS NOT NULL;