SQL 기초 이해-2 /현업자 특강
SQL 사용 전 설정
SQL 문 작성할 때
새 SQL 편집기 클릭
Choose catalog/schema 설정
사용할 스키마 설
패턴 매칭에 의한 검색
- ‘LIKE’를 사용해 문자열 일부분을 비교하는 ‘부분 검색’해보기 • Syntax 열 LIKE 패턴 • = 연산자로 검색하는 경우 셀의 데이터 값이 완전히 동일한지 확인하는데, ‘특정 문자나 문자열을 포함하는지‘ 검색하기를 배울 것
- LIKE 술어를 사용하면 열 값이 부분적으로 일치하는 경우에도 ‘참‘
- LIKE 술어는 이항 연산자처럼 항목을 지정합니다. 왼쪽에는 매칭 대상을 지정하고, 오른쪽은 패턴을 문자열로 지정
- 단, 수치형(숫자) 상수는 지정 불가
- 패턴을 지정할때 “메타문자(와일드카드)”를 사용 가능
LIKE 술어의 메타문자
메타문자
- 와일드카드라고 불림
- 임의의 문자 또는 문자열을 나타냄
- % : 임의의 문자열
- _(언더바): 임의의 문자 (하나)
→이메일을 검색할 때 특정 도메인을 찾거나 제품명 찾을 때 활용 가능
만약에
select * from SAMPLE25 where TEXT like 'SQL%'; 라는 식을 작성할 경우
이 값이 나옴
3행이 나오지 않는 이유: SQL 앞에도 문자가 있기 때문
3행도 함께 검색하고 싶다면 “%SQL%”로 와일드 카드를 검색해야 함
- ‘%’는 빈 문자열에도 매치됨 → SQL 앞이나 뒤에 아무것도 없어도 해당이 됨
- ‘%SQL%라고 해도 1번 문장이 추출되는 이유임
이스케이프 문자
만약 LIKE로 % 문자를 검색하고 싶다면? -이스케이프 문자
WHERE text LIKE ‘%\%%’
**주의할 점
- (’) 단일 콤마를 써야 함
‘% /%%’; → 오른쪽 왼쪽 짝 콤마로 나오면 오류가 나옴
- 이스케이프 문자 사용
(\) 백슬래시를 이스케이프 문자로 사용함
\ + 문자
이스케이프란?
특정 문자가 특별한 의미를 갖지 않고 문자 그대로 해석되는 것 %가 와일드 연산자가 아닌 “%”그대로 검색하려면 \이스케이프 문자를 사용해야 함
문자열 상수’의 이스케이프
메타문자를 검색할 때처럼 문자열 상수를 검색할 때도 같은 문제 발생
- 표준 SQL에서는 ‘를 연속해서 사용하는 것으로 이스케이프 처리
정렬과 연산
ORDER BY
ORDER BY 구를 통해 검색 결과의 행 순서를 바꿀 수 있음
- SYNTAX
- 순서를 지정하지 않은 경우에는 데이터베이스 내부에 저장된 순서대로 반환
- odrer by 는 where 뒤에 지정함 (where 구가 없다면, from 구 뒤에 지정)
오름차순
- select * from 테이블 order by age asc;
- asc가 디폴트라 생략 가능
내림차순
- select * from 테이블 order by age desc;
정렬할 때 애트리부트 타입이 문자형(VAR)인지, 수치형(INT)인지 확인하고 정렬해야 함
✅order by 문자열 데이터는 영어라면 알파벳순/ 한글은 자음, 모음순으로 비교해 정
ORDER BY구는 실제 저장된 순서에 영향을 주지는 않음 (출력만 정렬돼서 나오는 것)
SELECT는 데이터를 검색하는 명령어로 데이터를 참조해 출력해서 보여줄 뿐, 변경은 할 수 없음
✅NULL 값에 항상 주의해야 함→전처리할 때 결측치, 이상치 처리를 해야 함
- 보통 NULL값이 맨 위(가장 작은 값 ASC하면 상단)에 올라가거나 맨 아래에 올라감
- 데이터 처리를 하기 전 WHERE 구를 통해 ISNULL로 결측치 처리를 해야 함
ORDER BY 복수 열 지정
부터 정리하렴 ^^
데이터의 양이 많을 경우에는, 하나의 열만으로는 행을 특정짓기 어려울 때 ex) “상품코드와 해당 상품의 하위번호“ 까지 고려해야 하는 경우
SELECT 열명 FROM 테이블명 WHERE 조건식 ORDER BY 열명1 [ASC|DESC], 열명2 [ASC|DESC] …
→ 복수의 열을 (콤마)를 통해 지정하면, 먼저 온 열부터 정렬하고 값이 같은 부분은 다음 열을 통해 정렬
LIMIT - 반환할 행의 최대 수 지정
SELECT 명령문에서 결과값으로 반환되는 행을 제한
• Syntax
• SELECT 열명 FROM 테이블명 LIMIT 행수 [OFFSET 시작행]
SELECT * FROM SAMPLE33 LIMIT 3;
→ 상위 3건만 취득
LIMIT으로 지정하는 것은 ‘최대 행수’로 만약 갖고 있는 행보다 큰 수를 입력한다면 지닌 행수만 반환됨
Where 구를 통해서 WHERE no <= 3 과 같은 조건을 붙인다면 동일한 결과를 얻을 수도 있음
✅하지만, WHERE 과는 내부 처리 순서가 전혀 다름
(WHERE 구로 검색한 후, ORDER BY로 정렬한 뒤에, 최종적으로 LIMIT를 처리함)
*MY SQL 과 오라클의 LIMIT 방식이 다름
- SQL Server 에서는 SELECT TOP 3 * from smaple33;
- • Oracle 에서는 SELECT * FROM sample33 WHERE ROWNUM <= 33;
OFFSET 지정 - 건너뛸 행의 수 지정
SELECT * FROM SAMPLE33 LIMIT 3 OFFSET 0;
-> 123 이 답으로 나옴
'LIMI 3': 최대 3개의 행을 반환
'OFFSET 0' : 결과의 처음부터(0번쨰 행) 3개의 행을 반환
SELECT * FROM SAMPLE33 LIMIT 3 OFFSET 3;
-> 456 이 답으로 나옴
'LIMI 3': 최대 3개의 행을 반환
'OFFSET 3' : 결과의 3개의 행을 건너뛰고 4번째부터 3개의 행을 반환
수치연산
산술연산자
SELECT 구를 통한 연산하기
- 가격*수량으로 금액 계산해보기
열에 별명 짓기
새로 나온 값(어트리부트) 이름 짓기
price * qunatity를 amount라고 짓기
SELECT *, price * quantity as amount from sample34;
Select 구에서는 ,(콤마)로 구분하여서 복수의 식을 지정할 수 있고 각각의 식에 별명을 붙일 수 있dma • 기본적으로 중복되지 않도록 별명을 붙입니다. • 키워드 AS는 생략 가능 대신 큰 따옴표 필요
SELECT *, price * quantity "amount" from sample34;
- as는 에일리어스, 알리아스(alias)라고 불림
- 별명을 한글로 지정하는 경우에 여러가지 오작동을 할 수 있으므로 “”로 감싸거나, 영어로 짓기를 권장
더블 쿼트 (큰따옴표”)로 감싸면 → 데이터 베이스 객체명을 의미
싱글 쿼트 (작은 따옴표 ‘)로 감싸면 → 문자열 상수를 의미
WHERE 구에서 연산하기
SELECT구 뿐만 아니라 WHERE구에서 연산 가능
ex. 가격 * 구량으로 금액을 계산해, 2000원 이상에 해당하는 행을 검색할 수 있음
'sesac' 카테고리의 다른 글
SeSAC 전z전능 분석가 성동2기 데이터 분석가 | SQL 교육(4)_GROUP BY, IN, JOIN (0) | 2024.07.09 |
---|---|
SeSAC 전z전능 분석가 성동2기 데이터 분석가 | SQL 교육(3)_문자열 연산, 날짜연산, 데이터 추가, 집계 (0) | 2024.07.08 |
SeSAC 전z전능 분석가 성동2기 데이터 분석가 | SQL 교육(1)_SQL 설치 및 조건 찾기 (MY SQL, SQL 불러오기) (1) | 2024.07.05 |
SeSAC 전z전능 분석가 성동2기 데이터 분석가 | 엑셀 교육(1)_엑셀과 가설검정 (0) | 2024.06.24 |
SeSAC 전z전능 분석가 성동2기 데이터 분석가 #21 | 파이썬 교육(4)_데이터 분석 및 시각화 (0) | 2024.06.24 |