PLOD

SQL QUERY [SELECT] 본문

개발 공부/Database

SQL QUERY [SELECT]

훌룽이 2022. 9. 23. 14:50

SQL(Structured Query Language)

MySQL 같은 DBMS를 사용하면 쿼리문을 사용하지 않고 테이블을 생성하고 제거할 수 있지만 쿼리문을 사용하여 DB를 관리하는 것이 쉽기 떄문에 SQL쿼리문은 알아 두어야 한다. 

SELECT(검색)

테이블에 있는 데이터를 불러오는 쿼리이다. 

select * from emp;

EMP테이블에 있는 모든 데이터를 조건없이 불러온다 

SELECT ENAME FROM EMP;

EMP테이블에 있는 데이터 중 ENAME(사원이름)  attribute 값만 추출해서 출력해 준다. 

위의 데이터 문을 활용하면 원하는 테이블의 원하는 데이터 값만 추출해서 출력 할 수 있다. 

SELECT 컬럼명1,컬럼명2  FROM 테이블명;

이런식으로 사용하면 된다. 

*WHERE (조건)

select empno,ename,job, sal,mgr,deptno
from emp where job = 'MANAGER';

WHERE 구문을 추가하여 해당 조건이 참인 데이터만 불러온다 . 위의 데이터 문에서 JOB(직무)이 'MANAGER'인

데이터만 출력해준다. WHERE 조건에서 특정 컬럼의 내용을 지칭할 때는 그냥 따옴표(' ')를 사용한다.(NUMBER 값은 따옴표  필요 없음, VARCHAR만 해당)

ORDER BY(오름차순,내림차순)

-- ORDER BY
SELECT *
FROM EMP
ORDER BY HIREDATE ASC;

-- 오름차순 정렬
SELECT * FROM EMP ORDER BY SAL
LIMIT 5;					

-- 내림차순 정렬
SELECT * FROM EMP ORDER BY SAL DESC
LIMIT 5;

ORDER BY 구문을 사용하면 출력한 데이터를 원하는 값의 데이터를 원하는 순서로 정렬할 수 있다 

예를 들면 ASC를 붙이면 오름차순 DESC를 사용하면 내림차순으로 정렬해 준다. 

ORDER BY  뒤에 LIMIT [숫자]를 사용하면 출력되는 데이터의 양을 선택 할 수 있다.

 

ex) 프로그래머스 - 인기있는 아이스크림

https://school.programmers.co.kr/learn/courses/30/lessons/133024

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT FLAVOR FROM FIRST_HALF 
ORDER BY TOTAL_ORDER DESC, SHIPMENT_ID ASC

AS(컬럼 별칭)

AS(Alias) 와 집계함수를 사용하면 Attribute의 이름을 바꿔서 데이터를 더 쉽게 관리 하고 보기 편하게 할 수 있다.

별칭을 사용할 때는 쌍따옴표(" ")를 사용한다.

SELECT EMPNO,ENAME,SAL, (SAL * 12) AS 연봉
FROM EMP
ORDER BY 연봉;

집계함수는 평균을 구하는 AVG, 최소값을 구하는 MIN, 최대값을 구하는 MAX,  행의 개수를 구하는 COUNT등이 있다.

BETWEEN

BETWEEN은  ** 이상 ** 이하 에 있는 값을 출력하게 해준다

-- BETWEEN
select ename,job,sal,deptno from emp 
where sal between 1300 and 1700;

IN(in-list)

IN은 쿼리에 특정 값이 포함될 때 출력 할 수 있다. 여러 값들 중 하나와 일치하는 값일 때 출력한다.

-- IN
select empno,ename,job,sal,hiredate from emp 
where empno in (7902,7788,7566);

DISTINCT(중복값 제거)

DISTINCT는 같은 컬럼에 있는 동일한 값은 한번만 출력하게 해주는 명령이다. DISTINCT는 SELECT 바로 뒤에 사용된다.(컬럼 사이에 끼우면 ERROR) ,DISTINCT는 여러 컬럼에 할당할 수 있는데 중복값을 제외 했을 때 가장 많은 튜플을 가지고 있는 컬럼 위주의 개수로 출력한다.

SELECT DISTINCT ENAME,JOB,SAL
FROM EMP;

 

ex) 프로그래머스 - 중복제거하기

https://school.programmers.co.kr/learn/courses/30/lessons/59408

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT COUNT(DISTINCT NAME) AS count FROM ANIMAL_INS
WHERE NAME IS NOT NULL;

LIKE

LIKE 문자의 패턴이 일치하는 값을 출력하게 해주는 명령이다. 패턴에 사용하는 만능문자는 '%' ,  '_' 가 있다. 먼저 '% '는 CHARACTER 개수가 0개 이상인 여러개의 모든 문자(숫자,특수문자)를 의미한다.  '_' 는 CHARACTER 개수가 1개 , 모든 문자를 의미한다.('_'는 몇 번째 글자수를 알 때 ,'%'는 글자수를 모를 때 사용한다.)

-- LIKE
select empno, ename,job,sal,hiredate,deptno 
from emp
where hiredate like '%82%';

SELECT ENAME,SAL FROM EMP
WHERE ENAME LIKE 'M%';

SELECT ENAME, JOB FROM EMP
WHERE ENAME LIKE '%L%'

SELECT ENAME, SAL FROM EMP
WHERE ENAME LIKE '%N';

코딩테스트 연습 - 강원도에 위치한 생산공장 목록 출력하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT FACTORY_ID,FACTORY_NAME,ADDRESS FROM FOOD_FACTORY
WHERE ADDRESS LIKE '강원도%';

escape 

특수문자가 포함된 컬럼의 레코드를 검색하려면 escape 문자를 사용하여 검색해야 한다. 

CREATE TABLE TEST(
    NAME VARCHAR(10)
);

INSERT INTO TEST VALUES ('ABC');
INSERT INTO TEST VALUES ('A%BC');
INSERT INTO TEST VALUES ('A_BC');
INSERT INTO TEST VALUES ('ABC123');

SELECT * FROM TEST
WHERE NAME LIKE '_$%%' ESCAPE '$';

IS NULL

IS NULL 명령어는 WHERE에서 값이 NULL인 값을 출력할 수 있다. 반대로 IS NOT NULL은 값이 NULL 값이 아닌 값을 출력하게 해준다.

-- IS NULL

SELECT EMPNO, ENAME, JOB, SAL, COMM, DEPTNO
FROM EMP
WHERE COMM IS NULL;

-- NOT NULL

SELECT EMPNO, ENAME, JOB, COMM, DEPTNO
FROM EMP
WHERE COMM IS NOT NULL;

||'  '||(컬럼 모아 출력)

컬럼끼리 분리하지 않고 데이터의 내용을 모아서 출력해야 되는 경우가 간혹 있다. 그런 경우에 ||' '||를 사용하여 다른 컬럼의 내용을 출력할 수 있게 해준다.

SELECT ENAME||' '||JOB "EMPLOYEE AND TITLE"
FROM EMP;

SELECT EMPNO ||' '||ENAME||' '||JOB||' '||DEPTNO||' '||HIREDATE||' '||SAL||' '||MGR||' '||COMM 
AS RESULT FROM EMP;

지금까지 SQL에서 select 구문을 배워보았다. SQL 질의문을 사용할 때 문법은 아래의 문법을 참고해서 작성해보면 대충 다 맞더라.

NOT(논리 부정 )

NOT을 사용하면 where 절의 조건문에서 false에 해당하는 조건들을 효과적으로 출력할 수 있다. NOT 연산자는  IN,BETWEEN, IS NULL 연산자와 함께 복합적으로 사용하는 경우가 많다. 

SELECT * FROM EMP WHERE NOT SAL = 3000;

SELECT * FROM EMP
WHERE SAL NOT BETWEEN 1000 AND 2000;

SELECT * FROM EMP
WHERE MGR IS NOT NULL;

날짜 자료형(date)

SELECT 문 사용시 날짜(DATE) 조건을 사용하여 데이터를 검색 할 수 있다. WHERE 조건문에서 특정 날짜와 일치하거나 ,부등호(<,>) BETWEEN 명령어를 사용하여 특정 날짜 이전 또는 이후 범위를 지정하여 레코드를 조회할 수 있다. 

코딩테스트 연습 - 조건에 부합하는 중고거래 댓글 조회하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

SELECT B.TITLE , B.BOARD_ID, R.REPLY_ID , R.WRITER_ID,
R.CONTENTS , DATE_FORMAT(R.CREATED_DATE,"%Y-%m-%d") FROM USED_GOODS_BOARD B,
USED_GOODS_REPLY R
WHERE B.BOARD_ID = R.BOARD_ID AND B.CREATED_DATE BETWEEN '2022-10-01' AND '2022-10-31' 
ORDER BY R.CREATED_DATE, B.TITLE ASC

만약 연도에 상관없이 3월에 태어난 사람들을 출력하고 싶을 때는 WHERE 절에 DATE_FORMAT(R,CREATE_DATE,'%m') = '03'을 사용하여 출력하면 된다.

 


select (컬럼명 OR *(전체 출력))
from (테이블 명)
[where ~] (FILTER (출력)조건)
[group by ~] (컬럼명)
[having ~] (그룹 조건)
[order by ~] (출력 방법(오름차순, 내림차순))


 

'개발 공부 > Database' 카테고리의 다른 글

[DB Modeling] Re-introduction to Database  (0) 2022.10.25
SQL QUERY [JOIN]  (0) 2022.09.25
SQL QUERY [DDL, DML]  (0) 2022.09.23
[DB] 데이터베이스의 정의와 용어  (0) 2022.09.23
[DB]DB와 DBMS  (0) 2022.09.23
Comments