반응형

NULL 값은 더하거나 빼거나 곱하거나 나눌 수 없는 값

=> 필요에 따라 NULL 값을 '0' 또는 '원하는값'으로 변경할 수 있어야 한다. 

 

위의 테이블과 같이 컬럼이 비어있는 것을 "No Name"으로 채워서 처리하고 싶을 때  여러가지 방법이 있다.

 

1. CASE

: True / False를 판단하여 조건식에 맞게 값을 변환할 때 사용

사용 예시)
CASE WITH 조건식1 THEN 식1
            [WHEN 조건식2 THEN 식2 ...
              ELSE  식3]
END

 

//실제 사용예시
SELECT 
    ANIMAL_TYPE,
    CASE
        WHEN NAME IS NULL THEN "No name"
        else NAME

    END AS NAME,
    SEX_UPON_INTAKE
FROM ANIMAL_IN

 

2. COALESCE

: 입력받은 여러 개의 인자 중 NULL이 아닌 값을 반환

사용 예시)
SELECT COALESCE(ID, VALUE)
FROM 테이블

- 주의 사항 

   1. ELSE 문 꼭 사용 -> 기재하지 않으면 NULL 값

   2. NULL 값 체크 시 " = " 을 사용하지 않는다. 

 

SELECT
    ANIMAL_TYPE,
    COALESCE(NAME, "No NAME") AS NAME,
    SEX_UPON_INTAKE

FROM ANIMAL_INS

 

3. IFNULL()

: 해당 필드의 값이 NULL 반환할 때, 다른 값으로 출력할 수 있도록 하는 함수 

  하나의 필드 값 뿐 아니라, 연속적으로도 활용할 수 있다.

 

사용 예시)
SELECT IFNULL(필드명, "대체할 값") FROM 테이블명; 
SELECT
    ANIMAL_TYPE,
    IFNULL(NAME, "No name") as NAME,
    SEX_UPON_INTAKE
from ANIMAL_INS
반응형

'Database Study > SQL' 카테고리의 다른 글

[SQL]LOCK이란?  (0) 2020.06.02
[SQL]Join VS Union  (0) 2020.05.26
[MySQL]프로그래머스_입양 시각 구하기(2) (UNION/변수선언)  (2) 2020.03.10
[Oracle DB]Join 종류  (0) 2020.01.06
[Oracle DB] 커서 (CURSOR)  (0) 2020.01.06
반응형

1.조인이란?

-> 데이터베이스를 연결하여 데이터를 검색하는 방법

-> PK 혹은 FK로 두 테이블을 연결

-> 적어도 하나의 칼럼은 서로 공유되고 있어야함

 

Customer 테이블
Reservation 테이블

 

2.INNER JOIN = 교집합 

  • 기준테이블과 JOIN 한 테이블의 중복된 값을 보여줌
  • 결과값 : A의 테이블과 B테이블이 모두 가지고 있는 데이터만 검색
  • ON 절에서는 WHERE 절에서 사용할 수 있는 모든 조건을 사용할 수 있음
  • 표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용.
--문법--
SELECT *
FROM 첫번째 테이블 이름
INNER JOIN 두번쨰 테이블 이름

ON 조건

SELECT *

FROM 첫번째 테이블 이름
JOIN 두번째 테이블 이름
ON 조건

SELECT *
FROM 첫번째 테이블 이름 AS 별칭 , 
            두번째 테이블 이름 AS 별칭
WHERE 조건

--예제--
Reservation 테이블의 Name 필드와 Customer 테이블의 Name 필드가 서로 일치하는 레코드만 

INNER JOIN 으로 가져옴

1. 
SELECT *

FROM Reservation
INNER JOIN Customer
ON Reservation.Name = Customer.Name;

2. 
SELECT *

FROM Reservation
JOIN Customer
ON Reservation.Name = Customer.Name;

3.

SELECT *
FROM Reservation AS r, Customer AS c
WHERE r.Name = c.Name;

 

결과

 

3. LEFT OUTER , RIGHT OUTER 조인

  • 하나의 테이블 기준으로 합치는 조인

  • LEFT JOIN
    • 왼쪽 테이블을 중심으로 오른쪽의 테이블을 매치
    • 왼쪽 테이블의 한 개의 레코드에 여러개의 오른쪽 테이블 레코드가 일치할 경우
      >>> 해당 왼쪽 레코드를 여러번 표시
    • 왼쪽은 무조건 표시, 매치되는 레코드가 오른쪽에 없으면 null
    • ON 절의 조건을 만족하지 않는 경우, 첫 번째 테이블 필드(왼쪽)값은 그대로 가져옴.
--문법--
SELECT *
FROM 첫번째 테이블 이름
LEFT JOIN 두번째 테이블 이름
ON 조건

--예제--
Reservation 테이블의 Name 필드를 기준으로 Customer 테이블의 Name 필드와 일치하는 레코드만 LEFT JOIN으로 가져온 후, 그 중 ReserveDate 필드 값이 2019.09.13 이후인 레코드만 선택

SELECT *
FROM Reservation
LEFT JOIN Customer
ON Reservation.Name = Customer.Name
WHERE ReserveDate > '2019-09-13';

 

결과

 

 

 

  • RIGHT JOIN
    • 오른쪽 테이블 중심으로 왼쪽 테이블을 매치
    • LEFT JOIN 에서 방향을 오른쪽으로만 바꾼 것
      >>> 해당 레코드가 여러번 표시되거나, null 표시
--문법--
SELECT *
FROM 첫번째 테이블 이름
RIGHT JOIN 두번째 테이블 이름
ON 조건

--예제--
Customer 테이블의 Name 필드를 기준으로 Reservation 테이블의 Name 필드와 일치하는 레코드만을 RIGHT JOIN으로 가져오는 예제


SELECT * 
FROM Reservation
RIGHT JOIN Customer
ON Reservation.Name = Customer.Name;

결과

반응형

'Database Study > SQL' 카테고리의 다른 글

[Oracle DB] 커서 (CURSOR)  (0) 2020.01.06
[Oracle DB]PL / SQL 기초  (0) 2020.01.06
[Oracle DB] 오라클_SQL (쿼리문) 처리 및 실행 순서  (0) 2020.01.06
Select query 튜닝  (0) 2020.01.03
[MySQL]기본 쿼리 & 내장함수 & JOIN  (0) 2019.09.11
반응형

데이터베이스 기본 쿼리

 

데이터베이스 생성

create database 데이터베이스이름;

 

데이터베이스 삭제

drop database 데이터베이스이름;

 

데이터베이스 조회

show databases;

 

데이터베이스 사용

use 데이터베이스이름;

 


테이블

 

테이블 정보

desc 테이블이름;

 

테이블 삭제

drop table 테이블이름;


레코드

 

레코드 추가

insert into 테이블이름 value('A','B','C');

insert into 테이블이름(FieldA,FieldB,FieldC) value('A','B','C');

 

레코드 조회

select * from 테이블이름;

select FieldA, FieldB from 테이블이름;

select * from 테이블이름 where FieldA = 'Content';

select distinct FieldA 테이블이름;                      중복제거

select * from 테이블이름 where FieldB between 00:00:00 and 12:00;00   //00시~12시 사이

select * from 테이블이름 where FieldB in (A, B);                                //A와 B 중에서

select * from 테이블이름 where FieldB LIKE '%단어%';                       //단어가 포함된 레코드 조회

select * from 테이블이름 where FieldB is null;    not is null                 //null일때

 

레코드 삭제

delete from 테이블이름 where Field = 'Content';

 

레코드 수정

update 테이블이름 set FieldA='바꿀내용' where FieldA='기존데이터';

 


내장함수

 

1. 숫자 관련 함수 
▶ ABS(숫자) - 절대값 출력. 
▶ CEILING(숫자) - 값보다 큰 정수 중 가장 작은 수. 
▶ FLOOR(숫자) - 값보다 작은 정수 중 가장 큰 수[실수를 무조건 버림(음수일 경우는 제외)]. 
▶ ROUND(숫자,자릿수) - 숫자를 소수점 이하 자릿수에서 반올림.(자릿수는 양수,0,음수를 갖을 수 있다.) 
▶ TRUNCATE(숫자,자릿수) - 숫자를 소수점 이하 자릿수에서 버림. 
▶ POW(X,Y) or POWER(X,Y) - X의 Y승 
▶ MOD (분자, 분모) - 분자를 분모로 나눈 나머지를 구한다.(연산자 %와 같음) 
▶ GREATEST(숫자1,숫자2,숫자3...) - 주어진 수 중 제일 큰 수 리턴. 
▶ LEAST(숫자1,숫자2,숫자3...) - 주어진 수 중 제일 작은 수 리턴. 
▶ INTERVAL(a,b,c,d.....) - a(숫자)의 위치 반환 


2. 문자 관련 함수 
▶ ASCII(문자) - 문자의 아스키 코드값 리턴. 
▶ CONCAT('문자열1','문자열2','문자열3'...) - 문자열들을 이어준다. 
▶ INSERT('문자열','시작위치','길이','새로운문자열') - 문자열의 시작위치부터 길이만큼 새로운 문자열로 대치 
▶ REPLACE('문자열','기존문자열','바뀔문자열') - 문자열 중 기존문자열을 바뀔 문자열로 바꾼다. 
▶ INSTR('문자열','찾는문자열') - 문자열 중 찾는 문자열의 위치값을 출력 
▶ LEFT('문자열',개수) - 문자열 중 왼쪽에서 개수만큼을 추출.
▶ RIGHT('문자열',개수) - 문자열 중 오른쪽에서 개수만큼을 추출. 
▶ MID('문자열',시작위치,개수) - 문자열 중 시작위치부터 개수만큼 출력 
▶ SUBSTRING('문자열',시작위치,개수) - 문자열 중 시작위치부터 개수만큼 출력 
▶ LTRIM('문자열') - 문자열 중 왼쪽의 공백을 없앤다. 
▶ RTRIM('문자열') - 문자열 중 오른쪽의 공백을 없앤다. 
▶ TRIM('문자열') - 양쪽 모두의 공백을 없앤다. 
▶ LCASE('문자열') or LOWER('문자열') - 소문자로 바꾼다. 
▶ UCASE('문자열') or UPPER('문자열') - 대문자로 바꾼다. 
▶ REVERSE('문자열') - 문자열을 반대로 나열한다. 


3. 논리 관련 함수 
▶ IF(논리식,참일 때 값,거짓일 때 값) - 논리식이 참이면 참일 때 값을 출력하고 논리식이 거짓이면 거짓일 때 출력한다. 
▶ IFNULL(값1,값2) - 값1이 NULL 이면 값2로 대치하고 그렇지 않으면 값1을 출력 


4. 집계 함수 
▶ COUNT(필드명) - NULL 값이 아닌 레코드 수를 구한다. 
▶ SUM(필드명) - 필드명의 합계를 구한다. 
▶ AVG(필드명) - 각각의 그룹 안에서 필드명의 평균값을 구한다. 
▶ MAX(필드명) - 최대값을 구한다. 
▶ MIN(필드명) - 최소값을 구한다. 


5. 날짜 관련 함수 
▶ NOW() or SYSDATE() or CURRENT_TIMESTAMP() - 현재 날짜와 시간 출력 
▶ CURDATE() or CURRENT_DATE() -현재 날짜 출력 
▶ CURTIME() or CURRENT_TIME() -현재 시간 출력 
▶ DATE_ADD(날짜,INTERVAL 기준값) -날짜에서 기준값 만큼 더한다. 
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 
▶ DATE_SUB(날짜,INTERVAL 기준값) -날짜에서 기준값 만큼 뺸다. 
※ 기준값 : YEAR, MONTH, DAY, HOUR, MINUTE, SECOND 
▶ YEAR(날짜) -날짜의 연도 출력. 
▶ MONTH(날짜) -날짜의 월 출력. 
▶ MONTHNAME(날짜) -날짜의 월을 영어로 출력. 
▶ DAYNAME(날짜) -날짜의 요일일 영어로 출력. 
▶ DAYOFMONTH(날짜) -날짜의 월별 일자 출력. 
▶ DAYOFWEEK(날짜) -날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6)) 
▶ WEEKDAY(날짜) -날짜의 주별 일자 출력(월요일(0),화요일(1)...일요일(6)) 
▶ DAYOFYEAR(날짜) -일년을 기준으로 한 날짜까지의 날 수. 
▶ WEEK(날짜) -일년 중 몇 번쨰 주. 
▶ FROM_DAYS(날 수) --00년 00월 00일부터 날 수 만큼 경과한 날의 날짜 출력. 
▶ TO_DAYS(날짜) --00 년 00 월 00일 부터 날짜까지의 일자 수 출력. 
▶ DATE_FORMAT(날짜,'형식') : 날짜를 형식에 맞게 출력 

 


JOIN

 

반응형

'Database Study > SQL' 카테고리의 다른 글

[Oracle DB] 커서 (CURSOR)  (0) 2020.01.06
[Oracle DB]PL / SQL 기초  (0) 2020.01.06
[Oracle DB] 오라클_SQL (쿼리문) 처리 및 실행 순서  (0) 2020.01.06
Select query 튜닝  (0) 2020.01.03
[MySQL]JOIN (조인) 문법  (0) 2019.09.12

+ Recent posts