백엔드/Oracle

Oracle : SQL ( SELECT - 1 )

두개의 문 2023. 7. 5. 14:17
외부에서 다운받은 파일 열고 DB에 데이터 저장하기 

 

 - 상단 File - Open File : 해당 파일 열기 

 - 상단 스키마 아이콘 클릭 - Select Data Source : 연결되어있는 계정 선택 → 변경된 제목 확인 가능 

 

- DB에 데이터 저장할 때 : 저장할 데이터 영역 지정 후, 오른쪽 클릭 - 실행 - SQL 스크립트 실행 클릭 

클릭 , 아래와 같은 화면 출력됨 (많은 스크립트 양일 경우, 시간이 걸릴 있다는 화면 ) : Yes 클릭하면 DB 데이터 저장됨 

 

 


SELECT문 

 

   - 내가 원하는 자료를 테이블로부터 검색하는 쿼리 구문 

   - 형식 

SELECT 컬럼리스트 
        FROM DB명.테이블명 또는 테이블명 
        WHERE 조건식
        ORDER BY 정렬식 ; 

   - 해석 순서 

    ① FROM 테이블명으로부터 

    ② WHERE 조건식 : 어떤 조건을 가지고 

    ③ 검색결과를 컬럼리스트 순서로 

    ④ ORDER BY 정렬식으로 정렬해서

    ⑤ 검색해라 

  

   - SELECT 명령어로 할 수 있는 것

     • 원하는 조건으로 원하는 컬럼 데이터를 가져올 수 있음 

       : SELECT ~ FROM ~ WHERE

     • 가져온 데이터를 원하는 순서로 정렬 가능 

       : ORDER BY 

     • 원하는 종류로 데이터를 모아볼 수 있음 

       : GROUP BY 

     • 원하는 종류 별로 원하는 조건으로 한정된 종류만 검색 가능 

       : GROUP BY ~ HAVING 

     • 이 결과들을 이용하여 UPDATE 질의(Query)를 할 수 있음 

       : INSERT INTO ~ SELECT ~

         UPDATE ~ WHERE ~

         DELETE ~ WHERE ~  

 

   - SELECT의 구문별 설명

     • FROM 검색할 테이블 지정 

     • WHERE : 원하는 데이터 찾아내기 위한 제한 조건 지정 

     • ORDER BY : 검색한 결과를 원하는 순서로 정렬할 때 지정 

       ➊ ASC : 오름차순(기본값)

       ❷ DESC : 내림차순 

       → 여러 개의 정렬 지정 가능 

           예 ) ORDER BY name, age

                 : 먼저 이름으로 정렬한 후, 중복된 이름일 경우, 나이로 정렬

     

 

 


연습 

 


-- 1. 전체 레코드를 가져오기 ( 테이블 작성 시 만든 컬럼 순서로 가져오기 : 컬럼명 대신 * 사용 )
--    → 오라클의 경우, DB에 넣는 순서가 순차적으로 진행되지 않아 일정하지 않을 수 있음      
--    ( 실제 개발에서는 쓰지 말기 -> 자료수가 많을 경우, 컴퓨터 과부하 걸릴 수도 있음 )
SELECT * FROM SUBWAY_STATISTICS;


-- 2. 내가 원하는 순서(컬럼) 또는 원하는 컬럼만 가져오기 
--    DESC 테이블명 → 테이블의 구조(스키마) 알아보기 
--    → SQL문이 부적합하다는 에러 발생 
DESC SUBWAY_STATISTICS ;


--    실무에서는 쓰지 말기 
SELECT 
	seq_id, STATION_NAME , boarding_date, gubun, board_time
	FROM SUBWAY_STATISTICS ss ;


-- 3. 조건에 맞는 자료 검색 (실제 제일 많이 활용)
--	"지하철명이 '잠실(216)'인 자료 조회"
--    	• = 연산자 : 특정값과 같다 
SELECT ss.* 
	FROM SUBWAY_STATISTICS ss 
	WHERE ss.STATION_NAME = '잠실(216)' ; 

-- 3-1. 참 | 거짓을 판별하는 조건연산자
-- 	    	= : 같으면 true, 다르면 false
--  != 또는 <> : 다르면 true, 같으면 false
--          > : 왼쪽이 클 경우, true 
-- 			< : 오른쪽이 클 경우, true
--         >= : 왼쪽이 크거나 같은 경우, true 
--  	   <= : 오른쪽이 크거나 같은 경우, false 

-- 	"'잠실(216)이 아닌 데이터 조회" : != 와 <> 같은 의미 
SELECT ss.*
	FROM SUBWAY_STATISTICS ss 
	WHERE ss.STATION_NAME != '잠실(216)'
		OR 
		  ss.STATION_NAME <> '잠실(216)';


--	 "'승차'한 고객만 검색"
SELECT ss.*
	FROM SUBWAY_STATISTICS ss 
	WHERE ss.GUBUN = '승차';


--	 "'승차'한 고객의 인원 구하기"
--    	• count 함수 이용  
SELECT count(*)
	FROM SUBWAY_STATISTICS ss 
	WHERE ss.GUBUN = '승차';


-- 4. 뒤에서 공부할 GROUP BY구문을 이용해서 BOARDING_TIME에 대한 종류값을 구해보자 
--  SELECT와 GROUP BY 뒤에 조건의 컬럼명을 적어주자 
SELECT BOARD_TIME 
	FROM SUBWAY_STATISTICS ss 
	GROUP BY BOARD_TIME ;


-- 	"9시 이후 승하차한 전체 인원 수 검색"
SELECT *
	FROM SUBWAY_STATISTICS ss 
	WHERE ss.BOARD_TIME >= 8 ;


-- 	"승하차 인원이 500명보다 큰 경우 검색"
SELECT * FROM SUBWAY_STATISTICS ss WHERE ss.PASSENGER_NUMBER > 500;


-- 5. 복합연산자 중에 논리연산 
-- 	  ① AND(논리곱) : 동시에 일어나는 경우를 나타내는 경우 - true AND true 인 경우, true 
-- 	  ②  OR(논리합) : 둘 중 하나만 일어나도 되는 경우 - true OR false 인 경우, true     
--    ③ NOT(논리부정) : 이전 값의 결과를 반대로 만드는 경우 - NOT true인 경우, false 

-- 	"'잠실(216)'에서 7시에 승차한 경우 조회"
-- ※ Oracle에서 별칭 이용할 경우, AS 키워드와 큰따옴표 이용 
SELECT count(*) AS "잠실역에서 7시에 승차한 승객의 수"
	FROM SUBWAY_STATISTICS ss 
	WHERE ss.STATION_NAME = '잠실(216)' AND ss.GUBUN = '승차' AND ss.BOARD_TIME = 7 ;

-- 지하철역 종류 조회
SELECT ss.STATION_NAME  FROM SUBWAY_STATISTICS ss GROUP BY ss.STATION_NAME ;
	
--	 "'선릉(220)'에서 9시에 승차한 인원수 조회"
SELECT count(*) 
	FROM SUBWAY_STATISTICS ss 
	WHERE ss.STATION_NAME = '선릉(220)' AND ss.GUBUN = '승차' AND ss.BOARD_TIME = 9 ;

-- 	"'선릉(220)'에서 승차 또는 하차한 인원수 조회"
SELECT count(*)
	FROM SUBWAY_STATISTICS ss 
	WHERE (ss.STATION_NAME = '선릉(220)' AND ss.GUBUN = '승차')
		  OR 
		  (ss.STATION_NAME = '선릉(220)' AND ss.GUBUN = '하차');  

SELECT count(*)
	FROM SUBWAY_STATISTICS ss 
	WHERE ss.STATION_NAME = '선릉(220)' ;

-- 	"'선릉(220)에서 하차한 경우 또는 '잠실(226)에서 승차한 경우 조회"
SELECT * 
 	FROM SUBWAY_STATISTICS ss 
 	WHERE (ss.STATION_NAME = '선릉(220)' AND ss.GUBUN = '하차')
 	  	  OR 
 	  	  (ss.STATION_NAME= '잠실(216)' AND ss.GUBUN ='승차');
 	  	 
--	 "'잠실(216)'에서 7시 또는 9시에 탑승한 경우 조회"
SELECT *
	FROM SUBWAY_STATISTICS ss 
	WHERE ss.STATION_NAME = '잠실(216)' 
		  AND ss.GUBUN = '승차'
	      AND ( ss.BOARD_TIME = 7 OR ss.BOARD_TIME = 9 ) ;
    
    
-- 6. Like 연산자 (문자열 연산자)
--    : 대표 문자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플을 검색하기 위해 사용 
-- 	   ① % : 모든 문자 대표   
--	   ② _ : 문자 하나 대표 
--	   ③ # : 숫자 하나 대표 
--     ※ LIKE 연산자의 경우, 대소문자 구분함 : 'List%' != 'list%' 	
--		 → 대소문자 관계없이 검색하기 위해서는 SQL LOWER(), UPPER() 함수를 이용하여 컬럼의 값을 변환한 후 검색하기  		    
--    ( 예시 ) 
-- 	  LIKE '잠실%'	: '잠실'로 시작하는 모든 문자열 
-- 	  LIKE '%잠실' 	: '잠실'로 끝나는 모든 문자열 
-- 	  LIKE '%잠실%' 	: '잠실'을 포함하는 모든 문자열 
-- 	  LIKE '%잠%(%' 	: '잠'을 포함하고 그 뒤에 '('을 포함하는 모든 문자열 
--    대소문자 관계없이 검색할 경우, 
--	    		    : lower(name) LIKE lower('%jane%')
--    특정 값을 뺀 나머지 검색 
--     				: LIKE '문자열패턴'의 결과에 NOT 연산하기 
--       			   STATION_NAME NOT LIKE '잠실%'  	     

-- 	"'잠실'로 시작하는 데이터 검색 (LIKE 이용)"
SELECT * FROM SUBWAY_STATISTICS ss WHERE STATION_NAME LIKE '잠실%';

-- 	"'나루'를 포함한 데이터 검색"
SELECT * FROM SUBWAY_STATISTICS ss WHERE STATION_NAME LIKE '%나루%';			     
	     
-- "'잠실'과 '5'가 포함된 데이어 검색"
SELECT * FROM SUBWAY_STATISTICS ss WHERE STATION_NAME LIKE '잠실%5%';

 

 

▷ 컬럼명을 보충 설명해주는 별칭 사용하기 

 

-- ※ Oracle에서 별칭 이용할 경우, AS 키워드를 사용하거나 한칸 공백을 주면 됨
--   별칭의 경우, 큰따옴표를 사용해 묶어줌 (큰따옴표 사용 시 공백 가능)
-- • Oracle에서 dual은 임시 테이블을 의미   
SELECT SYSDATE AS "현재시간" FROM dual;
SELECT sysdate "현재 시간은 " FROM dual;

 

 

 

'백엔드 > Oracle' 카테고리의 다른 글

Oracle : SQL - 내장 함수  (0) 2023.07.07
Oracle : SQL ( SELECT -2 )  (0) 2023.07.06
45 - SQL : DML  (0) 2023.06.30
44 - Oracle : SQL 기본  (0) 2023.06.29
Oracle 사용자 계정 및 샘플 테이블 생성  (0) 2023.06.27