2강 SELECT 구
레코드 (Record) : 레코드란 여러 가지 데이터 타입을 가질 수 있는 복합형 구조의 데이터 타입이며, 하나의 행(Row)에 대응한다.
수치형 데이터 : 오른쪽 정렬
문자열형 데이터 : 왼쪽 정렬
날짜시간형 데이터 : 왼쪽 정렬
DESC : 테이블 참조
리터럴(Literal) : 자료형에 맞게 표기한 상수값 ex) '김도민', '2021-03-12'
1.
SELECT 구와 FROM 구
•
SELECT : 데이터베이스에서 데이터를 검색할 때 반드시 입력해야 하는 부분. 테이블이 갖고 있는 필드라면 쉼표로 연결해서 여러 개 쓸 수 있다.
•
: 애스터리스크, 모든 열을 의미하는 메타문자
•
FROM [테이블 이름] : 데이터를 선택할 대상 테이블을 지정
SELCET name, phone_nbr, address, sex, age
FROM Address;
SQL
복사
1.
WHERE 구
•
WHERE : SELECT 구문에서 레코드를 선택할 때 추가적인 조건을 지정할 때 사용
SELECT name, address
FROME Address
WHERE address = '인천시';
SQL
복사
•
AND : 교집합
•
OR : 합집합
•
IN : OR 조건을 많이 지정해야 할 때
SELECT name, address
FROM Address
WHERE address IN ('서울시', '부산시', '인천시');
SQL
복사
•
IS NULL : NULL 레코드를 선택할 때 사용하는 특별한 키워드
•
IS NOT NULL : IS NULL의 반대
•
NULL은 데이터값이 아니므로 데이터값에 적용하는 연산자를 적용할 수 없다.
SELECT name, address
FROM Address
where phone_nbr IS NULL;
SQL
복사
•
LIKE : 문자열의 일부분을 부분 검색
◦
% : 임의의 문자열, 빈 문자열에도 매치, %를 문자로 검색 하기 위해서 \를 앞에 붙인다 ex) '%'
◦
_ : 임의의 문자 하나
•
'''' : 문자열 상수를 검색하기 위해서는 '를 2개 연속해서 기술
•
ROWNUM : 행번호를 검색 가능하게 하는 함수 검색 조건에서 몇개의 행을 볼 것인지 정할 때 사용 가능 ex) WHERE ROWNUM <= 3;
•
REPLACE : python replace랑 같다.
1.
GROUP BY 구
•
GROUP BY : 테이블에서 단순하게 데이터를 선택하는 것뿐만 아니라 합계 또는 평균 등의 집계 연산을 SQL 구문으로 할 수있다.
SQL의 대표적인 집계 함수
•
NULL 값을 제외하고 연산
•
DISTINCT : 중복 값 제거
•
GROUP BY 구의 '()'는 키를 지정하지 않는다는 뜻, 일부 DBMS에서는 지원하지 않지만 논리적으로 이해하기는 쉬움
SELECT COUNT(*)
FROM Address
GROUP BY ();
SELECT COUNT(*)
FROM Address;
SQL
복사
1.
HAVING 구
•
HAVING : 집합에 또다시 조건을 걸어 선택하는 기능
•
WHERE 구와 차이점은 WHERE 구는 레크드에 조건을 지정하고 HABING 구는 집합에 조건을 지정
SELECT address, COUNT(*)
FROM Address
GROUP BY address
HAVING COUNT(*) = 1;
SQL
복사
1.
OREDER BY 구
•
ORDER BY : 모든 DBMS에서 SELECT 구문의 결과 순서를 보장할 때 명시적으로 순서 지정이 필요한데 그때 사용하는 기능
•
DESC : 내림차순, ASC : 오름차순(default)
•
문자열형 데이터의 대소관계는 사전식 순서에 의해 결정 ex) 알파펫 -> 한글, 자음 -> 모음
•
수치형과 문자열형 데이터는 대소관계의 계산 방법이 다르다. ex) '1' -> '10' -> '2', 1 -> 2-> 10
SELECT name, phone_nbr, address, sex, age
FROM Address
ORDER BY age DESC, phone_nbr;
SQL
복사
•
정렬 시 겹치는 레코드가 있으면 정렬 키를 추가해서 정렬 순서를 지정
•
NULL 값은 가장 먼저 표시되거나 가장 나중에 표시
1.
뷰와 서브쿼리
•
VIEW : 자주 사용하는 SELECT 구문을 데이터베이스 안에 저장하는 기능, 데이터를 보유하지 않고 SELECT구문을 저장
•
뷰 생성 :
CREATE VIEW [뷰 이름] ([필드 이름1], [필드 이름2] ...) AS
SQL
복사
CREATE VIEW CountAddress (v_address, cnt)
AS
SELECT address, COUNT(*)
FROM Address
GROUP BY address;
SQL
복사
•
뷰 사용 : SELECT 구문 처럼 사용
•
뷰는 ‘테이블의 모습을 한 SELECT 구문’이라고 말할 수 있음
SELECT v_address, cnt
FROM CountAddress;
SQL
복사
•
서브쿼리(subquery) : FROM 구에 직접 지정한 SELECT 구문
•
SQL은 서브 쿼리부터 순서대로 실행한다.
•
버전과 관계 없이 좋은 성능을 내기 위해서는 서브쿼리는 지양하고 join을 지향하는 것이 좋음.
SELECT name
FROM Address
WHERE name IN (SELECT name FROM Address2);
SQL
복사
1.
문자열 연산
Show All
Search
•
TRIM() : 문자열의 앞뒤로 여분의 스페이스가 있을 경우 이를 제거해주는 함수로 문자열 도중에 존재하는 스페이스는 제거되지 않는다.
◦
ex) TRIM('ABC ') -> 'ABC'
•
CHARATER_LENGTH() : 문자열의 길이를 계산해 돌려주는 함수
1.
날짜 연산
•
시스템 날짜
◦
CURRENT_TIMESTAMP : 실행했을 때를 기준으로 시간 표시 함수, 인수를 지정할 필요가 없음
◦
Oracle : SYSDATE
•
날짜 서식
◦
TO_DATE('2014/01/25', 'YYYY/MM/DD') : 문자열 데이터를 날짜형 데이터로 변환
◦
TO_CHAR(DATETIME, 'YYYY/MM/DD') : 날짜형 데이터 타입을 변경
•
날짜의 덧셈과 뺄셈
◦
SELECT CURRENT_DATE + INTERVAL 1 DAY; : 기준 날짜에 1일 후
◦
MySQL : DATEDIFF('2014-02-28', '2014-01-01')
◦
MySQL : TIMESTAMPDIFF(SECOND, ‘2022-11-01 11:34:36’, ‘2022-12-03 05:09:15’)
▪
SECOND, MINUTE, HOUR로 설정해 시간 차이를 구할 수 있음