アカデミー33日目-Oracle
2021.05.13
ex03_select.sql
せんたくぶん
select構文
-- [] : 생략가능
[WITH <Sub Query>] -- with절
SELECT column_list -- seles절
FROM table_name -- ...
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING serach_condition]
[ORDER BY order_expression [ASC|DESC]];
★★★★selectを構成するすべてのお寺に実行順があります.(変わらず)->必ず暗記せよ!!!!★ ★ ★ ★ 実行順序
-- SELECT 컬럼리스트 : 데이터를 가져올 컬럼을 지정한다.(지정된 컬럼(열)을 가져오는 역할)
SELECT column_list
-- FROM 테이블명 : 데이터를 가져올 테이블을 지정한다.(데이터 소스를 지정)
FROM table_name;
-- hr -> 미리 샘플 (테이블+데이터) 제공
-- 현재 계정이 소유하고 있는 테이블 목록 가져오기
select * from tabs;
-- 다양한 스타일로 코드 작성 가능
select * from employees;
select *
from employees;
select *
from employees;
select
*
from
employees;
-- select문 작성 -> 실행 -> 서버전달 -> 처리 -> 결과값 반환 -> 클라이언트 반환 -> 결과값 -> ResultSet
-- full select
select * -- 2. 어떤 컬럼을 가져올거냐? -> *(wildcard) 모든 컬럼
from employees; -- 1. employees 테이블로부터 데이터를 가져오겠다.
-- 원하는 컬럼만 가져오기
select first_name
from employees;
select first_name, last_name, salary, department_id, email
from employees;
-- ORA-00942: table or view does not exist
-- 테이블명에 오타가 났을 때 에러
select *
from employee;
-- ORA-00936: missing expression
-- 컬럼명(식별자)에 오타가 났을 때 에러
select firstname *
from employees;
構造の検証
select *
from tblCountry;
-- 우리는 tblCountry를 처음 봤음 -> tblCountry 구조 모름.. 모르면 컬럼을 다룰 수 없음 -> 구조 확인!!!! -> 구조란? : 컬럼 구성
-- 구조 확인하는 방법 1. 접속 - hr - 테이블목록 - TBLCOUNTRY클릭
desc tblCountry; -- 2. 표준 SQL(X), SQL(X), Sql*plus(전용 명령어), SQL Developer(Sqlplus 명령어 지원)
-- 동일한 컬럼을 여러번 반복해도 된다.
select name, name, name, name
from tblcountry;
-- 동일한 컬럼을 가져 오는 경우 -> 가공을 한다.
-- || : 문자열 더하기 연산자(concat연산자)
select name, '나라명: ' || name
from tblcountry;
select *
from tblCountry; -- A (모든 컬럼 가져오기 -> 어떤 컬럼이 들어있는지 기억을 못함.)
select name, capital, population, continent, area
from tblCountry; -- B (권장 -> 어떤 컬럼이 들어있는지 확인하기 좋음.) ★
-- A와 B의 결과는 동일 > B권장 > 가독성 차이
desc tblcountry;
-- 원본 테이블의 컬럼 순서와 select절의 순서는 전혀 무관하다. -> 보통은 지키는 경우가 많다. > 가독성
select capital, population, continent, area, name
from tblCountry;
ex04_operator.sql
演算子、Operator
-- 산술 연산자 + 문자열 연산자 + 상수 컬럼
-- 수정x, 원본을 건드린 것이 아님..
select first, last, last || first, weight + 2, 10 + 1, '자바'
from tblcomedian;
select 10, '자바' -- 상수 컬럼
from tblcomedian;
select last || first from tblcomedian;
-- select last + first from tblcomedian; -- 에러 ORA-01722: invalid number (문자열 + 연산자 사용 불가)
select concat(first, last) from tblcomedian; -- concat 연산자 (||랑 같은 연산자)
select *
from tblcomedian;
-- 비교 연산의 결과는 논리형인데.. 논리형이 없어서 결과셋에 담지를 못한다.(표현을 못한다.)
-- -> 비교 연산은 컬럼 리스트에 작성할 수 없다.(select절에 넣지 말 것!)
-- select first, weight > 65 from tblcomedian; -- 에러
select first, weight from tblcomedian where weight > 65; -- 몸무게 65키로 이상인 항목만 가져온다.
別名(Alias)-- (null) : 비어있는 셀
-- 컬럼명 -> 식별자 -> weight or weight-5 (컬럼명(식별자)에 - 사용 불가!!)
select name, weight, weight - 5 from tblMen;
-- 컬럼의 별칭(Alias) 만들기
-- 1. 중복된 컬럼명을 구분하기 위해서
-- 2. 가공된 컬럼명을 유효하기 위해서
-- 3. 사용 불가능한 문자를 사용할 수 있게 > 사용하지 말 것
-- 4. 예약어를 사용할 수 있게.. > 절대 사용하지 말 것!!
-- 별칭 : 영어 + 숫자 + _ -> 조합으로만 쓸 것!
select name, name as nick from tblMen;
select last || first as name, weight - 5 as weight from tblComedian;
select name as 사용자이름 from tblMen;
select name as 사용자 이름 from tblMen; -- 식별자에 공백을 넣을 수 없다.
select name as "사용자 이름" from tblMen; -- 식별자에 공백을 넣고 싶으면 ""으로 묶으면 가능.. -> 쓰지 말기
select name as "select" from tblMen; -- 식별자를 예약어 사용하지 말 것
このクリップでsqlを実行ex05_where.sql
せんたくぶん
[WITH <Sub Query>]
SELECT column_list
FROM table_name
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING serach_condition]
[ORDER BY order_expression [ASC|DESC]];
-----------------------------------------------------------
SELECT column_list
FROM table_name
WHERE search_condition;
★★★★★selectを構成するすべてのお寺に実行順があります.(不変)->無条件暗記(理解)★★★★★FROMテーブル名
WHERE検索条件;
WHERE節
-- select절과 from절만 있는 코드 : 컬럼(열) 선택 가능 + 레코드(행) 선택 불가능 -> 항상 14개의 레코드(행) 반환
select *
from tblCountry
where capital = '서울'; -- 조건절(비교문, 논리문) 원하는 행을 걸러낸다.
select *
from tblCountry
where area > 20;
select * from tblInsa where city = '서울'; -- 20/60
select * from tblInsa where buseo = '영업부'; -- 16/60
select * from tblInsa where basicpay >= 2500000; -- 6/20
select name, buseo, jikwi, basicpay from tblInsa where basicpay >= 2500000; -- 원하는 행 + 열
select * from tblInsa
where city = '서울'; -- 동등비교연산자
select * from tblInsa
where city <> '서울';
論理演算子
-- 논리 연산자
-- and(자바에선 &&), or(자바에선 ||), not(자바에선 !)
select * from tblInsa
where city = '서울' and buseo = '영업부'; -- 둘 다 만족하는 것
select * from tblInsa
where city = '서울' or buseo = '영업부'; -- 둘 중에 하나 또는 둘 다 만족하는 것
-- 서울이 아닌 사람
select * from tblInsa
-- where city <> '서울';
where not (city = '서울'); -- 이런식 잘 사용 안함.
-- tblComedian
-- 몸무게가 60kg 이상이고, 키가 170cm 미만인 사람을 가져오시오.
select * from tblComedian where weight >= 60 and height < 170;
-- tblInsa
-- 급여(basicpay)과 수당(sudang)을 모두 합한 금액이 250만원 이상인 직원을 가져오시오.
select * from tblInsa where (basicpay + sudang) > 2500000;
間廟
-- 몸무게가 60kg~70kg 사이에 있는 사람만
select last || first as name, weight from tblComedian;
select last || first as name, weight from tblComedian
where weight >= 60 and weight <= 70; -- 3명
select last || first as name, weight from tblComedian
where weight between 64 and 66; -- 3명 (가독성이 높음)
-- 비교 연산에 사용되는 자료형
-- 1. 숫자형(number)
desc tblInsa;
select name, sudang from tblInsa where sudang > 150000;
select name, sudang from tblInsa where sudang >= 150000 and sudang <= 160000;
select name, sudang from tblInsa where sudang between 150000 and 160000;
-- 2. 문자형
-- - 자바 : char(O), string(X)
-- - c > 'a' "홍길동" > "아무개"
select name from tblInsa where name > '박';
select first_name from employees where first_name > 'M';
select first_name from employees where first_name >= 'M' and first_name <= 'O';
select first_name from employees where first_name between 'M' and 'O';
-- 3. 날짜/시간형
-- - 자바 : Calendar > Calendar -> tick > tick
desc tblInsa;
select ibsadate from tblInsa where ibsadate > '2010-01-01';
select ibsadate from tblInsa where ibsadate <= '2010-01-01';
select ibsadate from tblInsa where ibsadate >= '2010-01-01' and ibsadate <= '2010-12-31';
select ibsadate from tblInsa where ibsadate between '2010-01-01' and '2010-12-31';
in
-- tblInsa. 홍보부 + 개발부 + 총무부
select * from tblInsa;
select * from tblInsa where buseo = '홍보부';
select * from tblInsa where buseo = '홍보부' or buseo = '개발부' or buseo = '총무부'; -- 27명
select * from tblInsa where buseo in ('홍보부', '개발부', '총무부'); -- 27명 (가독성 높음)
-- tblInsa. (부장,과장) + (서울,인천) + 급여(250~260만원)
select * from tblInsa
where jikwi in ('부장', '과장') and city in ('서울', '인천')
and basicpay between 2500000 and 2600000;
like
アレイ文字列コンポーネント
select name from tblInsa;
select name from tblInsa where name like '홍길동';
select name from tblInsa where name = '홍길동';
select name from tblInsa where name like '홍__'; -- 홍OO
select name from tblInsa where name like '__신'; -- OO신
select name from tblInsa where name like '_길_'; -- O길O
select name from tblInsa where name like '김___'; -- 김OOO
select name from tblInsa where name like '김_'; -- 김O
select first_name from employees;
select first_name from employees where first_name like 'E____'; -- Ellen, Eleni
select first_name from employees where first_name like 'E%'; -- E~ 글자 갯수와 상관없이 E로 시작하는 모든 글자
select first_name from employees where first_name like '%e';
select first_name from employees where first_name like '%e%'; -- 이름에 e가 들어간 사람
select first_name from employees where first_name like '%ea%'; -- 이름에 ea가 들어간 사람
select first_name from employees where first_name like '%e%a%';
RDBMSのnull
空の条件
select * from tblCountry;
-- 인구수가 기재되지 않은 나라?
-- select * from tblCountry where population = null; -- X
select * from tblCountry where population is null; -- O
-- 인구수가 기재된 나라?
-- select * from tblCountry where population <> null; -- X
select * from tblCountry where not population is null; -- O
select * from tblCountry where population is not null; -- 더 많이 사용
-- 할 일
select * from tblTodo;
-- 아직 실행하지 못한 일은?
select * from tblTodo where completedate is null;
-- 실행을 완료한 일은?
select * from tblTodo where completedate is not null;
-- 도서관 -> 도서 대여 테이블(대여 날짜, 반납 날짜)
-- 아직 반납이 안된 대여 기록?
select * from 도서대여 where 반납날짜 is null;
-- 반납이 완료된 대여 기록?
select * from 도서대여 where 반납날짜 is not null;
-- 여자친구 없는 애들
select * from tblMen where couple is null;
-- 있는 애들
select * from tblMen where couple is not null;
-- 남자친구 없는 애들
select * from tblWomen where couple is null;
-- 있는 애들
select * from tblWomen where couple is not null;
ex06_column.sql
distinct
select * from tblCountry;
-- tblCountry에는 어떤 대륙이 있나요? -> 분류 질문
select continent from tblCountry;
select distinct continent from tblCountry;
select * from tblInsa;
-- tblInsa. 어떤 부서가 있나요?
select buseo from tblInsa;
select distinct buseo from tblInsa;
-- 중복값이 단 1개도 없어도 동작된다. > 중복값이 없는 컬럼에 distinct를 적용하는건 의미가 없다.
select distinct name from tblInsa;
-- 행으로 중복 체크를 한다.
-- 개발부 황진이
-- 개발부 채정희
select buseo, name from tblInsa;
select distinct buseo, name from tblInsa; -- 60명
-- 총무부 사원
-- 총무부 사원
-- 총무부 사원
select buseo, jikwi from tblInsa; -- 60명
select distinct buseo, jikwi from tblInsa; --23
表記
Reference
この問題について(アカデミー33日目-Oracle), 我々は、より多くの情報をここで見つけました https://velog.io/@hi-dae-in/학원-33일차-Oracleテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol