본문 바로가기

[코테를 위한 Oracle 정리] 9. 테이블 JOIN 손에 잡히는 10분 SQL 12,13장 참고동등 조인 : Equi-Join두 테이블에 있는 공통 열의 값이 같은 것을 결과로 가져온다.JOIN을 한 테이블은 실제로 존재하지 않는다. 객체(Entity)가 아니라는 뜻과 같다. 쿼리가 수행되는 동안에만 유지된다.JOIN을 하려면 포함하려는 테이블과 그 테이블 사이의 관계를 명시하면 된다.SELECT vend_name, prod_name, prod_priceFROM Vendors, ProductsWHERE Vendors.vend_id = Products.vend_id;WHERE 절에 관계를 매치시키고 있다. JOIN 시에는 완전한 열 이름을 써서 테이블을 밝혀야 정확히 참조할 수 있다.카티전 곱 : Cartesian Product = 상호 조인 : Cross..
[코테를 위한 Oracle 정리] 8. 서브쿼리 손에 잡히는 10분 SQL 11장 참고SELECT order_num FROM OrderItemsWHERE prod_id = 'RGAN01'-- [1]SELECT cust_idFROM OrdersWHERE order_num IN (20007,20008);이렇게 결과를 보고직접 넣어도 되지만 서브쿼리를 이용하면 이렇게 하지 않아도 된다--[2]SELECT cust_idFROM OrdersWHERE order_num IN (SELECT order_num FROM OrderItems WHERE prod_id = 'RGAN01');[1]과 [2]의 결과는 같다.서브쿼리는 항상 안에 있는 쿼리를 먼저 처리하고 그 다음 바깥쪽에 있는 쿼리를 처리한다.두 개의 값..
[코테를 위한 Oracle 정리] 7. 그룹핑 : GROUP BY, HAVING 손에 잡히는 10분 SQL 10장 참고GROUP BYSELECT vend_id, COUNT(*) as num_prodsFROM PRODUCTSGROUP BY vend_id vend_id가 같으면 count 값도 증가한다.해당 vend_id의 제품이 몇 개 있는 지를 알 수 있다.특징데이터를 GROUP BY 뒤에 오는 열을 기준으로 그룹핑 한 후 계산한다중첩(nested) 그룹을 만들기 위해서는 GROUP BY 뒤에 원하는 만큼 열을 적으면 된다마지막에 지정된 그룹에서 요약된다GROUP BY 절에 쓸 수 있는 열그룹함수는 안 됨별칭 사용 불가SELECT 에 수식을 사용했다면 GROUP BY에서도 똑같이 써줘야 한다그룹 함수를 제외하고는 SELECT 에 있는 열은 GROUP BY에도 존재해야 한다NULL 값..
[코테를 위한 Oracle 정리] 6. 그룹 함수를 사용해 데이터 요약하기 손에 잡히는 10분 SQL 9장 참고합계, max, min, 평균 등 직접 데이터를 가져와 계산하지 않고 요약 정보를 가져오는 방법을 알아본다그룹 함수AVG(열) : 평균where 로 조건을 걸면 해당 조건 안에서의 평균값을 구한다COUNT() : 행의 개수를 센다COUNT() : NULL 값인 행을 포함하여 행의 수를 센다COUNT(열) : NULL 값을 가진 행은 무시하고 행의 수를 센다MAX(열) : 열에서 가장 큰 값 반환숫자, 날짜, 문자 모두 지원. 문자의 경우 정렬했을 때 가장 마지막 행 반환.NULL을 무시한다MIN(열) : 열에서 가장 작은 값 반환숫자, 날짜, 문자 모두 지원. 문자의 경우 정렬했을 때 첫 번째 행 반환.NULL을 무시한다SUM(열) : 합계를 구한다NULL을 무시한다중..
[코테를 위한 Oracle 정리] 5. 데이터 조작 : 내장 함수 손에 잡히는 10분 SQL 8장 참고 및 본인 추가 같은 기능을 하는 함수여도 DBMS마다 함수나 문법이 매우 다르다.문자열 조작UPPER() : 대문자로 변환LOWER() : 문자열을 소문자로 변환RTRIM() : 문자열의 오른쪽에 있는 공백 문자를 삭제LTRIM() : 문자열의 왼쪽에 있는 공백 문자를 삭제LEFT(), RIGHT(): ORACLE에서는 없다. SUBSTR로 대체한다LENGTH() : 문자열의 길이를 반환SUBSTR(문자열, 시작, 가져올 문자 길이) : 문자열 일부 추출하기SUBSTR(PROD_ID,3,4) 라면 3번째부터 4개를 가져온다는 뜻이다select prod_id,SUBSTR(prod_id,2,2)from products;수치, 수학 계산ABS() : 절댓값 반환SQRT()..
[코테를 위한 Oracle 정리] 4. 열 계산 및 연결하기 손에 잡히는 10분 SQL 7장 참고계산 필드가 필요한 경우각자 다른 테이블에 있는 데이터를 하나의 열(필드)로 만들고 싶은 경우합계, 평균, 열간의 덧셈/뺄셈 등 계산 값이렇게 계산된 열들은 데이터베이스에 실제로 존재하는 필드는 아니다.필드 연결하기여러 값을 합쳐 한 개의 긴 값을 만드는 것Oracle에서는 || (파이프 2개)를 사용해서 연결한다.SELECT VEND_NAME || '(' || VEND_COUNTRY || ')', VEND_NAME, VEND_COUNTRYFROM VENDORSORDER BY VEND_NAME;다른 DBMS는 +나 CONCAT과 같은 함수를 사용해야 한다.하지만 결과 사진과 같이 공백이 생겨있다. 대부분의 데이터베이스는 열 길이에 맞춰 텍스트를 저장하기 때문에 이를 잘..
[코테를 위한 Oracle 정리] 3. 필터링 : WHERE 손에 잡히는 10분 SQL 4,5,6장 참고 WHERE절로 검색 조건을 지정하여 필요한 데이터로 필터링할 수 있다.SELECT PROD_NAME, PROD_PRICE FROM PRODUCTS WHERE PROD_PRICE = 3.49; WHERE은 FROM 과 ORDER BY 사이에 온다. 가격이 3.49인 행만 출력된다. 클라이언트 프로그램에서 물론 이를 필터링할 수 있지만 DBMS는 데이터를 빠르고 효율적으로 필터링하는되 최적화되어 있기에 쿼리로 필터링하는 것이 더 좋다. 연산자= : 같다 : 같지 않다!= : 같지않다 (위와 같은 역할을 한다. ORACLE에서 둘 다 사용 가능하다)BETWEEN a AND b: 두 값의 사이(시작 값과 종료 값을 포함한다)IS NULL : 값이 NULL 이다 나머지..
[코테를 위한 Oracle 정리] 2. 정렬 : ORDER BY 손에 잡히는 10분 SQL 3장 참고 정렬하지 않는다면 데이터가 테이블에 삽입되거나 업데이트 되는 순서대로 출력된다.SQL에서는 ORDER BY 절을 통해 결과를 정렬한다.SELECT PROD_NAMEFROM PRODUCTSORDER BY PROD_NAME;ORDER BY 는 SELECT 문의 가장 마지막에 와야 한다.위의 쿼리는 SELECT절에서 가져온 열로 정렬했지만 그렇지 않은 열로도 정렬할 수 있다.여러 열 정렬정렬 우선순위는 열을 적은 순서대로이다.SELECT PROD_ID ,PROD_NAME, PROD_PRICE FROM PRODUCTSORDER BY PROD_NAME, PROD_PRICE;SELECT PROD_ID ,PROD_NAME, PROD_PRICE FROM PRODUCTSORDER B..