본문 바로가기

Computer Science/SQL

SQL 정리-(1)


데이터베이스 : 정리된 방식으로 데이터를 저장하는 공간. DBMS로 생성되고 조작되는 저장공간


스키마 : 데이터베이스와 테이블 구조, 속성에 대한 정보를 가진 집합 


테이블 : 구조화된 특정한 타입의 데이터 목록. 다른 테이블과 구별되는 고유한 이름을 가지고 어떤 데이터가 저장되는지를 정의하는 특성과 속성을 가짐 


컬럼 : 테이블에 있는 하나의 필드. 모든 테이블은 한 개 이상의 컬럼으로 구성됨 


데이터 타입 : 컬럼에 저장할 수 있는 데이터를 제한할 수 있게 허용되는 데이터의 유형. (숫자형 또는 문자형 등)


행 : 테이블에 있는 데이터를 담고 있음. 테이블에 있는 레코드 


주 키 : 각 행을 다른 행과 구별해주는 컬럼


* 주 키의 특징 

  • 같은 주 키 값을 갖는 행이 1개만 존재
  • 모든 행은 주 키 값을 가져야 함 (주 키는 NULL 값을 허용하지 않음)
  • 주 키 컬럼에 있는 값은 수정되거나 업데이트 될 수 없음 
  • 주 키 값은 재사용될 수 없음(단, 테이블에서 어떤 행이 삭제된 경우 추후에 재사용 가능)
SQL : 구조화된 질의 언어

데이터 가져오기 

SELECT 

테이블에서 정보를 가져오기 위해 사용 
  • 단일 컬럼 가져오기 
SELECT prod_name FROM Products;

Products 테이블에서 prod_name의 컬럼을 가져오기
  • 다중 컬럼 가져오기
SELECT prod_id, prod_name, prod_price FROM Products;

Products 테이블에서 prod_id, prod_name, prod_price 컬럼을 가져오기 

  • 모든 컬럼 가져오기 
모든 컬럼을 가져올 때는 와일드카드(*) 사용 

SELECT * FROM Products;

테이블의 모든 컬럼이 반환되는데, 일반적으로 이미 삽입된 순서대로 이루어짐 

  • 중복행 출력 방지하기 
SELECT DISTINCT vend_id FROM Products; 

DISTINCT 키워드는 중복되는 값을 제거하고 보여줌 

  • 결과 제한하기
원하는 특정 몇 행만 가져오는 키워드가 있지만 실행 환경 마다 사용되는 문법이 다름 

처음 5행을 가져오기 위해 사용된 예시

Microsoft SQL Server , Microsoft Access 

SELECT TOP 5 prod_name FROM Products; 

ORACLE

SELECT prod_name FROM Products WHERE ROWNUM <=5;

MySQL, MariaDB, PostgreSQL,SQLite

SELECT prod_name FROM Products LIMIT 5;


가져온 데이터 정렬하기


데이터는 정렬하지 않으면 테이블에 있는 순서대로 출력하게 되는데, 처음에 데이터가 테이블에 삽입되는 순서대로 있음


ORDER BY 컬럼 명 


위 절은 컬럼으로 결과를 정렬하라고 명시한 것


SELECT prod_name FROM Products ORDER BY prod_name;

prod_name 컬럼으로 결과를 정렬하기 


  • 여러 개의 컬럼으로 정렬하기 
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;
prod_price 와 prod_name 컬럼으로 결과를 정렬하는데 prod_price가 같을 때 prod_name으로 정렬하기 

  • 컬럼의 위치로 정렬하기 
SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2, 3; 
2 번째 컬럼과 3번째 컬럼으로 결과를 정렬하기 


  • 정렬 순서 지정하기 
ORDER BY 절은 기본 값이 오름차순으로 되어 있음. 내림차순으로 정렬하기 위해서는 DESC 키워드를 사용 

SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC;

SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name;


여러 컬럼으로 정렬하려면 제품 가격을 기준으로 내림차순 정렬한 결과를 보여주는데, 같은 가격의 제품이 있으면 제품명으로 오름차순 정렬하여 출력


데이터 필터링

  • WHERE 절 사용하기 

WHERE 절로 검색 조건을 지정하여 데이터를 필터링할 수 있음 


SELECT prod_name, prod_price FROM Products WHERE prod_price=3.49;


prod_price 값이 3.49인 레코드만 가져오도록 함 


 * WHERE 절 연산자 


 연산자

설명 

 =

같다. 

<> 

같지 않다. 

 !=

같지 않다. 

 <

~보다 작다. 

 <=

~보다 작거나 같다. 

 !<

~보다 작지 않다. 

 >

~보다 크다. 

 >-

~보다 크거나 같다. 

 !>

~보다 크지 않다. 
 BETWEEN두 개의 특정한 값 사이 
 IS NULL

값이 NULL 


  • 일치 하지 않는 값 확인하기 

SELECT vend_id, prod_name FROM Products WHERE vend_id <> 'DLL01';


판매처가 DLL01이 아닌 모든 제품을 가져오기 


  • 특정 범위의 값 확인하기

SELECT prod_name, prod_price FROM Products WHERE prod_price BETWEEN 5 AND 10; 


5 달러와 10달러 사이의 제품과 가격 컬럼 가져오기 


WHERE 절 조합하기


  • AND 연산자 사용하기 
SELECT prod_id, prod_price, prod_name FROM Products WHERE vend_id='DLL01' AND prod_price <=4;

판매처가 DLL01이고 가격이 4달라 이하이거나 같은 제품의 명, 가격, id 컬럼 가져오기 


  • OR 연산자 사용하기 
SELECT prod_name, prod_price FROM Products WHERE vend_id = 'DLL01' OR vend_id = 'BRS01';

판매처가 DLL01 이거나 BRS01인 제품의 명, 가격 컬럼 모두 가져오기

참고로 SQL은 OR 연산자보다 AND 연산자를 우선적으로 처리하게 되어 있음. 괄호를 통해 우선순위를 둘 것 


  • IN 연산자 사용하기
IN 연산자는 조건의 범위를 지정할 때 사용 

SELECT prod_name, prod_price FROM Products WHERE vend_id IN ('DLL01', 'BRS01') ORDER BY prod_name; 

판매처가 DLL01이거나 BRS01인 제품의 가격과 제품 명을 prod_name을 나열 기준으로 가져오기 

  • NOT 연산자 사용하기 
NOT은 다른 연산자와 함께 사용해야 하며 어떤 조건이 오더라도 뒤에 있는 값을 무효화 함

SELECT prod_name FROM Products WHERE NOT vend_id='DLL01' ORDER BY prod_name;

  • LIKE 연산자 사용하기
와일드카드 : 데이터에서 부분적으로 일치하는 값이 있는지 확인할 때 사용되는 특수 문자
와일드카드를 사용하기 위해서는 LIKE 연산자를 함께 사용해야 함 

% 와일드 카드 
%는 임의의 수의 문자를 의미 

SELECT prod_id, prod_name FROM Products WHERE prod_name LIKE 'FISH%';

제품명에서 FISH로 시작하는 값을 가져오기 
단, % 와일드카드를 사용해도 NULL인 행은 가져오지 않음 

_ 와일드 카드 
단 한개의 문자열을 대신할 수 있음

[] 와일드 카드
문자열 집합을 지정할 때 사용. 지정된 위치에서 문자열 집합 중 하나와 일치하는지 확인 

SELECT Cust_contact FROM Customers WHERE cust_contact LIKE '[JM]%' ORDER BY cust_contact;
J 또는 M으로 시작하는 연락처 가져올 때 사용 <-> 반대로 사용할 떈 '[^JM]%' 사용 




출처: 손에 잡히는 10분 SQL 

반응형

'Computer Science > SQL' 카테고리의 다른 글

SQL 정리-(5)  (0) 2018.11.28
SQL 정리-(4)  (0) 2018.11.28
SQL 정리-(3)  (0) 2018.11.26
SQL 정리-(2)  (0) 2018.11.22