SQL | 기초 문법2

소리·2023년 10월 31일
0

Logical Operations

SELECT column1, column2, ...
FROM tablename
WHERE column +
  • AND : 조건을 모두 만족하는 경우 TRUE

  • OR : 하나의 조건이라도 만족하는 경우 TRUE

  • NOT : 조건을 만족하지 않는 경우 TRUE

    	WHERE NOT condition
  • BETWEEN value1 and value2 : 조건 값이 범위 사이에 있으면 TRUE
  • IN (value1, value2) : 조건 값이 목록에 있으면 TRUE
  • LIKE pattern : 조건값이 패턴에 맞으면 TRUE
	pattern : '%가수%' - '가수'라는 단어를 포함한
    			'G%' - G로 시작하는 단어
             '%엔터테이먼트' - 엔터테이먼트로 끝나는 단어
             '___%' - 최소 3글자 이상
             '%, %' - ,로 나뉘는 단어 하나 이상(?!)
    
  • 정렬 ORDER BY
    역순 ORDER BY column DESC

UNION

: 여러 개의 SQL 문을 합쳐서 하나의 SQL 문으로 만들어주는 방법 (주의 : 칼럼의 개수가 같아야 함)

  • UNION : 중복값을 제거하여 알려준다.
  • UNION ALL: 중복된 값도 모두 보여준다.
#TABLE A와 TABLE B의 중복된 값을 포함/미포함 해서 알려준다.
각각 조건을 달 수 있다.

SELECT column1, column2, ... FROM tableA WHERE condition
UNION | UNION ALL
SELECT column1, column2, ... FROM tableB WHERE condition;

예)

#가수가 직업인 연예인의 이름, 직업을 검색하는 쿼리와,
1980년대에 태어난 연예인의 이름, 생년월일, 나이를 검색하는 쿼리를 UNION으로 실행

SELECT name, job_title FROM celeb WHERE job_title LIKE '%가수%'
UNION
SELECT name, birthday FROM celeb
WHERE birthday BETWEEN '1980-01-01' AND '1989-12-31';

#가져오는 칼럼의 수가 각각 같아야만 함!

JOIN

문법)
SELECT column1, column2, ...
FROM tableA
INNER JOIN | LEFT JOIN | RIGHT JOIN tableB
ON tableA.column = tableB.column
WHERE condition;

예)
SELECT celeb.id, celeb.name, snl_show.id, snl_show.host
FROM celeb
INNER JOIN snl_show
ON celeb.name = snl_show.host;
  • FULL OUTER JOIN 이 있으나, MySQL에서는 FULL JOIN을 지원하지 않으므로 다음과 같은 쿼리로 결과를 만들 수 있다.
SELECT column1, column2, ...
FROM tableA
LEFT JOIN tableB ON tableA.column = tableB.column
UNION
SELECT column1, column2, ...
FROM tableA
RIGHT JOIN tableB ON tableA.column = tableB.column
WHERE condition
  • SELF JOIN 은 일반적인 JOIN 처럼 두개 이상의 테이블을 연결하여 데이터를 함께 표시하는 대신 자기 자신 안에 있는 똑같은 데이터를 가져가 붙인다. 테이블에 한 번만 연결하여 수행 참고
SELECT
 cust.customer_id,
 cust.firstname,
 cust.lastname,
 cust.birthdate,
 cust.spouse_id,
 spouse.firstname AS spouse_firstname,
 spouse_lastname AS spouse_lastname
FROM customer AS cust
INNER JOIN customer AS spouse #같은 테이블인데 별명을 다르게 지어줌
   ON cust.spouse_id = spouse.customer_id

CONCAT

: 여러 문자열을 하나로 합치거나 연결

SELECT CONCAT ('string1', 'string2', ..);

ALIAS

: 칼럼이나 테이블 이름에 별칭 생성

#칼럼 별명
SELECT column as alias
FROM tablename;

#테이블 별명
SELECT column 
FROM tablename as alias;

예제)

#name을 이름으로, agency는 소속사로 별칭을 만들어 검색
SELECT name as '이름', agency as '소속사' FROM celeb;

#name과 job을 합쳐서 profile이라는 별칭을 만들어 검색
SELECT CONCAT(name, ' : ', job) as profile FROM celeb;

#테이블 이름 줄이기
SELECT s.season, s.episode, c.name, c.joi_title
FROM celeb AS c, snl_show AS s
WHERE c.name = s.host;

#AS 생략도 가능
SELECT CONCAT(s.season, '-', s.episode, '(', s.broadcast_date, ')') '방송정보', CONCAT(c.name, '(', c.job, ')') '출연자정보'
FROM celeb c, snl_show s
WHERE c.name = s.host;

DISTINCT

: 검색한 결과의 중복 제거

#연예인 소속사 종류를 검색 - 중복 제외
SELECT DISTINCT agency FROM celeb;

LIMIT

: 검색 결과를 정렬된 순으로 주어진 숫자만큼만 조회

SELECT column1, column2, ...
FROM tablename
WHERE condition
LIMIT number;
profile
데이터로 경로를 탐색합니다.

0개의 댓글