Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 팀스파르타
- 총과 카드만들기
- sqld
- 순위출력
- count
- 빅데이터
- difftime
- if문 작성법
- max
- %in%
- 데이터분석가
- merge
- 상관관계
- Dense_Rank
- 그래프시각화
- loop 문
- 단순회귀 분석
- 여러 데이터 검색
- 회귀분석 알고리즘
- Sum
- 그래프 생성 문법
- 빅데이터분석
- 불순도제거
- sql
- Intersect
- 히스토그램 그리기
- 데이터분석
- 막대그래프
- 정보획득량
- 회귀분석
Archives
- Today
- Total
ch0nny_log
[빅데이터분석]SQL_TIL2 본문
* 개인정보는 모자이크 처리했습니다.
** DAY 1_복습
2024.05.10 - [sqld] - [빅데이터분석]SQL_TIL1
SQL: 데이터베이스의 데이터를 검색하고 변경하는 데이터베이스 언어
- 오라클 설치
- SQL 의 종류
- 특정 컬럼 선택하기
- 모든 컬럼 선택하기
- 컬럼별칭을 이용해서 컬럼명 변경하기
[TIL 2] 240510
- SQL을 배우는 궁극적인 목표? → 데이터에서 insight를 발견하기 위해서
- SQL 로 데이터 검색 → 파이썬과 테블로를 이용해서 데이터 시각화 → 머신러닝(기계학습)을 이용해서 데이터를 분류& 예측
예제 4. 연결 연산자 사용하기 (||)
→ 연결예산자: 데이터를 연결해서 출력하게 해주는 연산자
# 이름과 월급 데이터를 연결지어 나타내기. select ename || sal from emp;
select ename || ' 의 월급은 ' || sal from emp; #오라클은 곧은 따옴표만 인식 (' ') #싱글 쿼테이션 마크(' '): 문자임을 오라클에게 알려주는 것. #더블 쿼테이션 마크(" "): 컬럼 별칭을 사용할 때 1) 대소문자 구분, 2) 특수문자, 3)공백문자 를 사용할 때만 사용
문제 1. 다음과 같이 결과를 출력하는 SQL을 작성하시오.
select ename || '의 직업은 ' || job || ' 입니다' from emp;
문제 2. 다음과 같이 결과를 출력하는 SQL을 작성하시오.
select ename || '님은 ' || address|| ' 에서 거주하고 있습니다.' from emp19; # 연결 연살자로 연결해서 문자열을 만들었을때의 컬럼 별칭은 맨 마지막에 as로 적고 작성. select ename || '님은 ' || address|| ' 에서 거주하고 있습니다.' as "거주지 정보" from emp19;
예제 5. 중복된 데이터를 제거하여 출력하기. (distinct)
# 사업 테이블에는 직업의 종류가 몇개인가요? select job from emp; # 위의 결과를 다시 출력하는데 직업을 중복제거해서 출력하시오. select distinct job from emp;
문제1. 부서번를 출력하는데 중복을 제거해서 출력하시오.
select distinct deptno from emp;
문제2. 우리반 테이블에서 나이를 출력하는데 중복을 제거해서 출력하시오.select distinct age from emp19; # distinct다음에 age와 ename을 같이 쓴다면 어떻게 결과가 나올까? select distinct age, ename from emp19;
문제 3. 우리반 테이블에서 학생들이 사용하는 통신사는 뭐가 있는지 출력하시오.
select distinct telecom from emp19; # 현업 tip! # 중복제거를 해도 같은 값이 다른형식으로 나올 수 있다 -> 이때 사용하는 것이 SQL 전처리 과정
예제6. 데이터를 정렬해서 출력하기 (order by)
# 이름과 월급을 출력하시오. 이때 월급이 낮은 사원부터 높은 사원 순으로 출력하시오. # asc: 오름차순 select ename, sal from emp order by sal asc; # desc: 내림차순 select ename, sal from emp order by sal desc;
문제1. 우리반 테이블에서 이름과 나이를 출력하는데 나이가 높은 학생부터 낮은 학생순으로 출력하시오.
select ename, age from emp19 order by age desc;
문제2. 위의 결과에서 생일도 같이 정렬해서 출력하시오.
select ename, age, birth from emp19 order by age desc, birth asc;
문제3. 사원 테이블에서 직업과 월급을 출력하시오.
select job, sal from emp;
문제4. 직업과 월급을 출력하는데 직업을 abcd순으로 정렬해서 출력하시오.
select job, sal from emp order by job asc;
문제5. 위의 결과를 다시 출력하는데 직업을 abcd 순으로 정렬해 놓은 것을 기준으로 월급이 높은 사원 순으로 출력되게 하시오.
select job, sal from emp order by job asc, sal desc;
문제6. 우리반 테이블에서 이름과 나이를 출력하는데 성씨가 ㄱㄴㄷㄹ.. 순으로 출력되게 하시오.
select ename, age from emp19 order by ename asc; # order by 절에 컬럼명 대신 숫자(컬럼순서)를 적어도 된다. select ename, age from emp19 order by 1 asc;
문제7. 위의 결과를 이름을 ㄱㄴㄷㄹ...순으로 출력하고 나이를 높은 학생부터 출력하게 하시오.
select ename, age from emp19 order by ename asc, age desc; # 위와 같음 select ename, age from emp19 order by 1 asc, 2 desc;
예제7. where 절 배우기( 숫자 데이터 검색)
→ where 절은 테이블에서 특정행들만 선택하게 하는 절
#월급이 3000인 사원들의 이름과 월급을 출력하시오 select ename, sal from emp where sal=3000; # where절에 '검색조건'을 주고 특정 행들만 선택할 수 있다. # 코딩순서: select→ from→ where→ order by # 실행순서: from→ where→ select→ order by
예제 7-1. 직업이 SALESMAN 인 사원들의 이름과 월급과 직업을 출력하시오.
select ename, sal, job from emp where job='SALESMAN'; # 문자인 경우 꼭 '' 를 감싸준다.
문제1. 부서번호가 20번인 사원들의 이름과 월급과 부서번호를 출력하시오.
select ename, sal, deptno from emp where deptno=20;
문제2. 우리반 테이블에서 나이가 28살인 학생들의 이름과 나이와 주소를 출력하시오.
select ename, age, address from emp19 where age=28;
문제3. 위의 결과를 이름의 성씨가 ㄱㄴㄷㄹ..순으로 출력하시오.
select ename, age, address from emp19 where age=28 order by ename asc; # as로 명칭을 변경했을 경우 order by절에 변경명칭을 사용해도 괜찮다. select ename as 이름, age, address from emp19 where age=28 order by 이름 asc;
예제8. where절 배우기2 (문자와 날짜 검색)
→ 문자와 날짜는 양쪽에 싱글 쿼테이션 마크를 둘러줘야 한다. (싱글 쿼테이션 안에 있는 데이터가 문자 또는 날짜라고 오라클에게 알려주는 것)
문제1. 직업이 ANALYST인 사원들의 이름과 월급과 직업을 출력하시오.
select ename, sal, job from emp where job= 'ANALYST';
문제2. 직업이 SALESMAN 인 사원들의 이름과 월급과 직업을 출력하는데 월급이 높은 사원 부터 낮은 사원순으로 출력하면서 컬럼명이 한글로 출력되게하시오.
select ename as 이름, sal as 월급, job as 직업 from emp where job= 'SALESMAN' order by sal desc;
문제3. 우리반 테이블에서 생일이 96년 4월 17일인 학생의 이름고하 생일을 출력하시오.
select ename, birth from emp19 where birth= '96/4/17';
문제4(복습문제). 지금까지 배운내용으로 우리반에 생일이 같은 학생이 있는지 검색하세요.
select ename, birth from emp19 order by birth asc; # 30명이니 눈으로 확인
문제5 (복습문제) . 직업이 SALESMAN인 사원들의 부서번호를 출력하는데 중복을 제거하고 출력하시오.
select distinct deptno from emp where job='SALESMAN';
문제6(복습문제). 나이가 27살인 학생들의 통신사를 출력하는데 중복을 제거하여 출력하시
select distinct telecom from emp19 where age=27;
예제9. 산술 연산자 배우기(*, /, +, -)
결측치를 오라클에서는 null 값이라고 한다.
→ null 값? (1. 데이터가 없는 상태 2. 알 수 없는 값 unkown)
→ 산술 연산자 사용시 nvl 함수 고려 꼭 하기
select ename, sal,comm,sal+comm from emp # 알수없는 값 null 발생 # 이 경우는 null 값을 0으로 변경해 줘야 됨 -> "NVL함수" 사용
문제1. 이름, 월급, 커미션, 월급+ 커미션을 출력
select ename, sal,comm,NVL(comm,0) from emp # 0은 null을 대체하는 값
문제2. 이름과 커미션, 커미션+200을 출력하시오.
select ename, comm, 200+nvl(comm,0) from emp;
** 데이터 분석가들이 데이터를 구하는 방법
1. 본인 회사에 있는 데이터를 분석
2. 직접 웹 스크롤링을 해서 데이터 수집(파이썬)
3. 공공 데이터를 수집하는 사이트 (공공데이터 포털 etc)
* sqldeveloper을 이용해서 엑셀 데이터를 오라클 데이터베이스에 입력하기
1. CREATE TABLE 테이블명 +내용
2. 테이블(필터링 됨) + 클릭 하여 신규 생성된 테이블 확인
3. 생성된 테이블 오른쪽 마우스누르고 데이터 임포트
4. 소스 아래 파일 찾아보기로 csv 파일 넣고 완료까지 다음 누르기.
문제3. 2022년도 서울시 소상공인 테이블의 상권업종대분류명을 출력하는데 중복을 제거해서 출력하시오.
select distinct 상권업종대분류명 from market_2022;
문제4. 상권업종 대 분류명이 음식인 데이터의 모든 컬럼과 데이터를 검색하시오
select * from market_2022 where 상권업종대분류명='음식';
문제5. market_2017년 테이블을 생성하고 market_2017.csv 데이터를 테이블에 입력하시오.
1. CREATE TABLE 테이블명 +내용
2. 테이블(필터링 됨) + 클릭 하여 신규 생성된 테이블 확인
3. 생성된 테이블 오른쪽 마우스누르고 데이터 임포트
4. 소스 아래 파일 찾아보기로 csv 파일 넣고 완료까지 다음 누르기.
예제10번. 비교 연산자 배우기 1.(>, <, >=, <=, =, !=, <>, ^=)
→ 같지 않다(!=, <>, ^=)
#월급이 2000 이상인 사원들의 이름과 월급을 출력하시오. select ename, sal from emp where sal>=2000;
문제1. 우리반 테이블에서 나이가 30살 이상인 학생들의 이름과 나이와 주소를 출력하시오.
select ename, age, address from emp19 where age>=30;
문제2. 위 문제에서 나이가 높은 학생 부터 출력하시오.
select ename, age, address from emp19 where age>=30;
문제3. 직업이 SALESMAN이 아닌 사원들의 이름과직업을 출력하시오.
select ename,job from emp where job<>'SALESMAN'; #비교연산자는 검색 조건을 줄 수 있는 절에 사용 할 수 있다.
예제11번. 비교 연산자 배우기 2. (Between.. and)
* 오라클의 비교 연산자 4가지
1. between...and
2. like
3. in
4. is null
# 월급이 1000이상인 사원들의 이름과 월급을 출력하시오. select ename, sal from emp where sal>=1000; # 월급이 3000이하인 사원들의 이름과 월급을 출력하시오. select ename, sal from emp where sal<=3000; # 월급이 1000이상 3000이하인 사원들의 이름과 월급을 출력하시오.(숫자연산자) select ename, sal from emp where sal>=1000 and sal<= 3000; # 월급이 1000이상 3000이하인 사원들의 이름과 월급을 출력하시오.(비교연산자) select ename, sal from emp where sal between 1000 and 3000; # ★ 중요 내용: where 컬럼명 between 낮은값 and 높은값 # between... and...는 낮은값과 높은값을 포함(>= and <= 과 동일)
문제1. 우리반 테이블에서 나이대가 20대인 학생들을 출력하시오.
select ename, age from emp19 where age between 20 and 29;
문제2. 81년도에 입사한 사원들의 이름과 입사일을 출력하시오.
select ename, hiredate from emp where hiredate between '81/01/01' and '81/12/31';
문제3. 81년도에 입사하지 않은 사원들의 이름과 입사일을 출력하시오.select ename, hiredate from emp where hiredate not between '81/01/01' and '81/12/31'; # 사이 간격에 포함하지 않을 경우 between 앞에 not을 기입한다.
문제4. (난이도 상) 위의 결과를 not between을 쓰지 말고 출력하시오.
select ename, hiredate from emp where hiredate <= '81/01/01' or hiredate>='81/12/31'; # 논리 연산자 or을 사용하여 not between 을 대체할 수 있다.
*연산자 총 정리
1. 산술연산자: +, - ,* ,/
2. 비교연산자: >, <, >=, <=, =, !=, <>, ^=
2.1. 기타 비교 연산자: between...and, like, in, is null
3. 논리연산자: and, or, not
* 기타 비교 연산자 4가지
1. between...and--------> not between...and
2. like----------------------> not like
3. in------------------------> not in
4. is null------------------>is not null
문제5(복습문제). 월급이 1000에서 3000사이인 사원들의 이름과 월급을 출력하는데 월급 높은 사원들 부터 출력하시오.
select ename, sal from emp where sal between 1000 and 3000 order by sal desc; # order by는 코딩도 제일 마지막, 실행도 제일 마지막에 진행한다.
예제 12번. 비교 연산자 배우기 3(Like)
★ like 연산자와 짝꿍인 키워드
1. % 와일드카드 : % 앞뒤 자리에 뭐가 와도 관계 없고, 갯수도 관계없음.
2. _ 언더바 : 이자리에 뭐가 와도 관례없는데, 그 갯수는 한개여야됨
3. escape: %와 _를 특수문자인 %와 _로 검색하게 하는 키워드
이름의 첫글자가 S로 시작하는 사원들의 이름과 월급을 출력하시오. select ename, sal from emp where ename like 'S%'; # % 는 와일드카드(WILD CARD)라고 한다. # 카드의 의미는 이 자리에 뭐가 와도 관계가 없고 그 갯수 또한몇개가 되든 관계가 없다는 뜻이다. # 그런데 이 % 가 특수문자 %가 아니라 와일드 카드가 되려면 반드시 like 가 함께 사용되야한다
문제 1번. 우리반에서 성씨가 김씨인 학생들의 이름과 나이를 출력하시오
select ename, age from emp19 where ename like '김%';
문제 2번(데이터 검색). 서울에서 사는 학생들 이름과 주소를 출력하시오.
select ename, address from emp19 where address like '서울%';
문제 3번.우리반 학생들 중에서 통신사가 sk인 학생들의 이름과 통신사를 출력하시오.
select ename, telecom from emp19 where telecom like 'sk%' or telecom like 'SK%';
문제4. 이름의 끝 글자가 T로 끝나는 사원들의 이름을 출력하시오.
select ename from emp where ename like '%T';
문제5. 우리반 학생중에서 이메일 .net으로 끝나느 학생의 이름과 이메일을 출력하시오.
select ename, email from emp19 where email like '%.net';
문제6. 사원 테이블에서 이름의 두번째 철자가 M인 사원들의 이름을 출력하시오.
select ename from emp where ename like '%M_';
문제7. 이름의 3번째 철자가 L인 사원들의 이름을 출력하시오.
select ename from emp where ename like '__L%';
문제8. 우리반에서 네이버 이메일을 사용하는 학생의 이름과 이메을 출력하시오
문제9. 우리반에서 naver 를 포함하는 이메일을 사용하는 학생의 이름과 이메을 출력하시오
select ename, email from emp19 where email like '%naver%';
문제10. 송파구에 거주하는 학생들의 이름과 주소를 출력하시오.
select ename, address from emp19 where address like '%송파구%';
문제11. 이름의 두번째 철자가 %인 사원의 이름을 출력하시오.
select ename from emp where ename like '_m%%' escape 'm'; # m(다른문자도 상관없음)다음에 나오는 %는 와일드 카드가 아니라 특수문자%이다.
문제12. 아래의 데이터를 입력하고 이름의 두번째와 세번째 철자가 %인 사원들의 이름을 출력하시오.
insert into emp(empno, ename, sal) values(2345, 'A%%B', 4500); COMMIT;
select ename from emp where ename like '_M%M%%' escape 'M';
문제13(복습문제). market_2022 테이블에서 상호명에 스타벅스를 포함하는 데이터의 모든 컬럼을 출력하시오.
select 상호명 from market_2022 where 상호명 like '%스타벅스%';
문제 14(복습문제). 2022년도 기준으로 서울 시내에 동대문 엽기 떡볶이 매장이 몇개가 있는지 출력하시오
select count(상호명) from market_2022 where 상호명 like '%동대문엽기%';
문제15(마지막 문제). 서울 시내에는 GS편의점이 더 많은지 CU 편의점이 더 많은지 2022년도를 기준으로 알아내시오.select count(*) from market_2022 where (상호명 like 'GS%' or 상호명 like 'gs%') and 상권업종소분류코드 = 'D03A01'; 결과 : 2076개 select count(*) from market_2022 where (상호명 like 'CU%' or 상호명 like 'cu%') and 상권업종소분류코드 = 'D03A01'; 결과 : 1929개
'빅데이터 분석(with 아이티윌) > SQL' 카테고리의 다른 글
[빅데이터분석] SQL_TIL4 (0) | 2024.05.14 |
---|---|
[빅데이터분석] SQL_TIL3 (0) | 2024.05.13 |
[빅데이터분석]SQL_TIL1 (0) | 2024.05.10 |
SQLD_ 비전공자&직장인 SQL개발자(SQLD) 턱걸이 합격!_한달 공부 (0) | 2024.04.22 |
SQLD_ 엑셀보다 쉬운, SQL 2-4주차 완강 (0) | 2024.04.22 |