서브쿼리는 다른 쿼리 내부에 포함되어있는 SELECT문이다. 서브쿼리는 쿼리를 구조화시켜, 쿼리의 각 부분을 명확하게 구분할 수 있게 해주고, 복잡한 JOIN이나 UNION보다 좀 더 읽기 수월하다. 서브쿼리는 반드시 소괄호 ()로 감싸져야한다. 서브쿼리에서는 ORDER BY 를 설정해도 효과가 없다 SQL standard에서 정한 DB 테이블의 정의에서는, 테이블을 채우고 있는 데이터의 order는 아무런 의미가 없기 때문 서브쿼리 내 ORDER BY 뒤에 LIMIT를 설정하거나 ORDER BY를 제일 바깥 최상위 절로 옮기면 된다. (추천) FROM절에서 사용되는 서브쿼리는 AS를 사용해 이름을 지정해주어야한다. SELECT E.id, E.name, E.salary, D.id AS deptId, D...
INNER JOIN 첫번째 테이블과 두번째 테이블에 조건을 만족하는 데이터만 출력 SELECT * FROM TABLE_A INNER JOIN TABLE_B ON 조건 OUTERJOIN LEFT JOIN 첫 번째 테이블을 기준으로 두 번째 테이블에 조건을 만족하는 데이터가 없더라도 출력 첫 번째 테이블의 필드 값은 그대로 가져오고 두 번째 테이블의 필드 값은 NULL로 표시 SELECT * FROM TABLE_A LEFT JOIN TABLE_B ON 조건 RIGHT JOIN LEFT JOIN과 반대로 두번쨰 테이블을 기준으로 한다. SELECT * FROM TABLE_A RIGHT JOIN TABLE_B ON 조건 ❓JOIN할 때 ON과 WHERE의 차이 ON : JOIN 전에 조건을 필터링 WHERE :..
WHEN에 적은 조건식에 따라 결과식을 다르게 조회할 수 있다. CASE문은 SELECT절 뿐만 아니라 WHERE, ORDER BY 등 SQL 모든 구문에서 활용할 수 있다. SELECT CASE WHEN [조건식1] THEN [결과식1] WHEN [조건식2] THEN [결과식2] ... ELSE [조건식N] END -- 예시 SELECT CASE WHEN deptId = 1 THEN '홍보' WHEN deptId = 2 THEN '기획' ELSE '무소속' END AS `부서명`
유형별로 정보를 알고싶을 때는 데이터를 그룹화할 수 있는 GROUP BY를 사용한다. GROUP BY : 특정 컬럼을 그룹화 HAVING : 그룹화한 결과에 거는 조건 ❓ WHERE과 HAVING의 차이 WHERE은 그룹화 하기 전 조건, HAVING은 그룹화 한 후의 조건이다. 조건은 생략 가능하다. SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼; SELECT 컬럼 FROM 테이블 GROUP BY 그룹화할 컬럼 HAVING 조건식;
DB 다루기 DB 생성 : create database DB 삭제 : drop database --전체 데이터베이스 보기 SHOW DATABASES; -- 만약 기존에 sqlDB가 존재하면 삭제 DROP DATABASE IF EXISTS sqlDB; -- 새 데이터베이스 생성 CREATE DATABASE sqlDB; -- 데이터베이스 선택 USE sqlDB; 테이블 다루기 TB 생성 : create table TB 삭제 : drop table TB 수정 : alter table 테이블 생성, 삭제 -- 테이블 생성 CREATE TABLE 테이블명 ( 칼럼명1 타입1, 칼럼명2 타입2, 칼럼명3 타입3 ); -- 테이블 삭제 DROP TABLE 테이블명 NOT NULL : 필드에 NULL값 저장할 수 없음..