SQL 심화
DISTINCT을 사용한 중복 제거
SELECT DISTINCT Country FROM Customers;
Country 컬럼에서 중복을 제거하고 고유한 값들만 반환
COUNT(DISTINCT column)을 사용한 중복 개수 반환
SELECT COUNT(DISTINCT Country) FROM Customers;
Country 컬럼에서 중복을 제거한 개수를 반환
서브쿼리를 사용한 중복 개수 반환
SELECT Count(*) AS DistinctCountries
FROM (SELECT DISTINCT Country FROM Customers);
서브쿼리를 사용해 Country의 고유한 값만 추출한 후, 이를 COUNT(*)로 세어 개수를 반환
위의 COUNT(DISTINCT Country)와 동일한 결과를 출력하지만, 가독성을 높이거나 추가적인 연산이 필요할 때 유용
WHERE 제약 조건
= | Equal |
> | Greater than |
< | Less than |
>= | Greater than or equal |
<= | Less than or equal |
<> | Not equal. Note: In some versions of SQL this operator may be written as != |
BETWEEN | Between a certain range |
LIKE | Search for a pattern |
IN | To specify multiple possible values for a column |
1. 정렬 (ORDER BY)
- ORDER BY를 사용하여 결과를 정렬할 수 있음
- 기본값은 오름차순(ASC)
- 내림차순 정렬은 DESC 사용
2. 문자열 검색 (LIKE & % 와일드카드)
- LIKE를 사용하여 특정 패턴을 포함하는 데이터 검색
- %는 0개 이상 문자를 의미, _는 한 개의 문자를 의미
3. NULL 값 처리 (IS NULL)
- IS NULL : NULL 값 찾기
- IS NOT NULL : NULL이 아닌 값 찾기
4. 조건 연산자 (AND, OR, NOT)
- AND : 두 조건이 모두 참이어야 함
- OR : 하나라도 참이면 결과 반환
- NOT : 조건을 부정
5. 별칭 (ALIAS)
- 테이블이나 컬럼에 별칭을 부여하여 가독성 증가
6. JOIN (테이블 조인)
(1) INNER JOIN (기본 조인)
- 두 테이블에서 공통된 값이 있는 행만 반환
(2) LEFT JOIN (왼쪽 기준 조인)
- 왼쪽(LEFT) 테이블의 모든 행을 포함하며, 오른쪽(RIGHT) 테이블에 일치하는 데이터가 없으면 NULL 반환
(3) RIGHT JOIN (오른쪽 기준 조인)
- 오른쪽(RIGHT) 테이블의 모든 행을 포함하며, 왼쪽(LEFT) 테이블에 일치하는 데이터가 없으면 NULL 반환
(4) CROSS JOIN (모든 조합)
- 두 테이블의 모든 행을 곱집합으로 반환 (모든 조합 생성)
7. 조인 시 ON 사용
- ON을 사용하여 두 테이블 간의 관계를 지정
- WHERE과 비슷하지만, 조인 시에는 ON을 사용하는 것이 일반적
MVC 패턴
Model (모델) : 데이터 및 비즈니스 로직 처리
View (뷰) : 사용자 인터페이스(UI) 표시
Controller (컨트롤러) : 사용자의 입력을 받아 Model과 View를 연결
1. DAO (Data Access Object, 데이터 접근 객체)
- 데이터베이스와 직접 연결되어 데이터를 삽입, 조회, 수정, 삭제(CRUD)하는 객체
- SQL 쿼리를 실행하여 데이터를 가져오고, Model이나 DTO에 전달
2. DTO (Data Transfer Object, 데이터 전송 객체)
- 데이터를 계층 간 전송할 때 사용하는 객체
- 비즈니스 로직을 포함하지 않고, 순수한 데이터만 가짐
- DB에서 가져온 데이터를 가공하여 클라이언트에 전달하거나, 클라이언트에서 받은 데이터를 서버에서 가공하기 위해 전달할 때 사용
3. Service (서비스)
- 비즈니스 로직을 담당하는 계층
- Controller와 DAO 사이에서 데이터를 가공하고 처리
- 데이터 검증, 트랜잭션 처리, 비즈니스 규칙 적용
4. Controller (컨트롤러)
- 사용자의 요청을 받아 처리하는 역할
- Service (비즈니스 로직)와 연결하고, View에 데이터를 넘겨줌
- DTO를 사용해 데이터를 받아 DAO를 통해 DB에 저장
Annotation
@Autowired (의존성 주입, DI)
- Spring이 자동으로 객체를 주입해주는 어노테이션
- new 키워드를 사용하지 않아도 Spring 컨테이너가 자동으로 객체를 주입
@Component (빈 등록)
- Spring이 자동으로 객체를 생성하고 관리하도록 하는 어노테이션
- @Component를 붙이면 Spring이 해당 클래스를 Bean으로 등록
JS 비동기 처리
fetch()
- fetch(url)을 사용하면 HTTP 요청을 보낼 수 있음
- 기본적으로 비동기 함수이므로, .then() 또는 async/await을 사용해야 함
- 응답은 Response 객체로 반환됨
- response.json()을 사용하면 응답 데이터를 JS 객체로 변환 가능
async / await
- await fetch(url) → 비동기 요청이 끝날 때까지 기다림
- await response.json() → JSON 변환도 비동기이므로 await 필요
- try/catch → 에러가 발생하면 catch에서 처리
'[LG 유플러스] 유레카 > Today I Learned' 카테고리의 다른 글
[TIL][03.06] @CrossOrigin, WebMvcConfigurer, 쿠키, 세션 스토리지, 로컬 스토리지, fetch, axios, jwt (0) | 2025.03.07 |
---|---|
[TIL][03.05] secu.properties, MVC, 자원 자동 해제, 의존성 주입, Http Session (0) | 2025.03.06 |
[TIL][02.28] DBMS, SQL, 제약조건, JDBC (0) | 2025.03.03 |
[TIL][02.27] Git, conflict, tag, fork, reset, rebase, merge, revert, GitHub (0) | 2025.02.27 |
[TIL][02.26] Git, GitHub, git명령어, branch, Merge, Conflict (0) | 2025.02.27 |