7/9 - SQL
설치
-ctrl+a 이후 번개모양 누르기
데이터 베이스 생성 후 스키마 클리후 우클릭 리스레시
스키마 만들기 - 67페이지
-에러 방지를 위해 dataset2_ansi에서 ansi를 지우고 import함
SQL 실습
-- select : 선택하다 필드를
SELECT * FROM customers;
select customerNumber, customerName, contactFirstName FROM customers;
select
customerNumber
, customerName
, contactFirstName
from
customers
;
-- where 조건 : 필터링
select *
from
customers
where country = 'USA'
;
# pandas로 SQL 쿼리 변환
- SQL 쿼리를 pandas 코드로 변환
- 특정 조건을 만족하는 행 선택
```python
import pandas as pd
# 예시 데이터프레임 생성
data = {
'customer_id': [1, 2, 3, 4, 5],
'state': ['A', 'B', 'C', 'D', 'E']
}
customers = pd.DataFrame(data)
# state가 'D' 이하인 행 선택
result = customers[customers['state'] <= 'D']
print(result)
// sql을 판다스로 변환해주는 연습하기
like 연산자를 이용해 Gift라는 특정한 단어를 가진 고객의 이름(customerName)을 추출함
%위치에 따라 조회되는 목록이 다르다.
MySQL 정규표현식(자주자주 보면서 익숙해지기... 까다로워서 한 번에 마스터 불가능, 안쓰면 까먹는다)
정규표현식의 개념
정규표현식은 특정 문자열 패턴을 설명하기 위한 특수한 텍스트 문자열입니다. 정규표현식의 주요 구성 요소는 다음과 같습니다:
- . : 임의의 한 문자 (개행 문자를 제외)
- ^ : 문자열의 시작
- $ : 문자열의 끝
- [abc] : a, b, c 중 하나의 문자
- [a-z] : a부터 z까지의 문자 중 하나
- [0-9] : 0부터 9까지의 숫자 중 하나
- * : 0개 이상의 앞 문자가 나타남
- + : 1개 이상의 앞 문자가 나타남
- ? : 0개 또는 1개의 앞 문자가 나타남
- | : OR 연산자 (ex: a|b는 a 또는 b)
- {n} : 정확히 n번 나타남
- {n,} : n번 이상 나타남
- {n,m} : n번 이상, m번 이하 나타남
-- between 연산자
select *
from
payments
where
amount between 10000 and 50000
and paymentDate between '2003-05-20' and '2003-06-05'
and checkNumber like '%JM%'
;
- 1은 첫번쨰 필드(오름차순), 2는 두번째 필드(내림차순)으로 정렬하라는 의미
-- group by와 having
select * from orders;
select
distinct status -- 중복 값 제거
from orders
;
select
status
, COUNT(*) AS "갯수"-- 집계함수
from
orders -- distinct와 group by를 쓰는 것은 동일하다.
group by
status
having 갯수 >= 5 -- DBMS마다 달라요... 정석은 갯수가 아니라 COUNT를 그대로 써줘야함
order by 2 desc
;
이 SQL 쿼리는 customers 테이블에서 각 나라(country)와 도시(city)별로 고객 수를 집계합니다. 쿼리의 구조와 기능을 단계별로 설명하면 다음과 같습니다:
- SELECT country, city, COUNT(*):
- country와 city 컬럼의 값을 선택하고 각 그룹(나라와 도시)의 행 수를 셉니다.
- COUNT(*)는 각 그룹에 속하는 행의 총 개수를 반환합니다.
- FROM customers:
- 데이터를 가져올 테이블을 지정합니다. 여기서는 customers 테이블입니다.
- GROUP BY country, city:
- 데이터를 country와 city 기준으로 그룹화합니다.
- 그룹화된 각 country와 city 조합마다 COUNT(*)가 적용되어 해당 조합에 속하는 행의 개수를 셉니다.
이 쿼리는 결국 각 나라와 도시마다 몇 명의 고객이 있는지 집계한 결과를 반환합니다.