안녕하세요 열코입니다.


SELECT는 SQL에서 가장 일반적으로 사용되는 문으로, 데이터 베이스에서 데이터를 검색해서 가져오는데 사용됩니다.

SELECT문을 통해 전체 테이블을 가져오거나 규칙을 지정하여 테이블의 일부만 가져올 수 있습니다.

반환 된 데이터는 결과 테이블에 저장되며 이 테이블을 결과 집합이라고 합니다.


기본적인 사용 구문


SELECT 필드명1, 필드명2, 필드명3 ... FROM 테이블명 


필드(컬럼)명은 하나 또는 여러개가 될 수 있으며 콤마(,)로 구분해서 사용합니다.

또한 테이블의 전체를 가져오려면 필드명에 *를 사용합니다. 


SELECT * FROM 테이블명


SELECT문에서 SELECT와 FROM은 필수적으로 사용되는 절이며, 나머지 기타 절은 선택사항입니다.

(기타절 : WHERE, GROUP BY, HAVING, ORDER BY)



☞ WHERE절 사용법

WHERE절은 검색 이외에 갱신(UPDATE), 삭제(DELETE)문에서도 사용할 수 있으며 행을 식별하는 

탐색 조건을 지정합니다. 탐색조건은 하나이상이 될 수 있으며 다음과 같이 사용 가능합니다.


SELECT 필드명 FROM 테이블명 WHERE 조건


위와 같이 WHERE을 SELECT문에 배치해서 사용합니다. WHERE에서 사용되는 조건은 보통 

비교 연산자 및 NOT 키워드를 사용합니다.

한가지 예를 들면 다음과 같은 테이블이 있다고 가정합니다.


[테이블 명 : 학생]

이름

 나이

점수

A

 24

90

B

 28

85

C

 34

80


이름, 나이, 점수 순으로 필드가 존재하는 위와 같은 테이블에서

85점 이상의 사람의 이름을 검색하고 싶을 때

다음과 같이 쿼리문을 작성합니다.


SELECT 이름 FROM 학생 WHERE 점수 >= '85'


결과는 다음과 같습니다.


이름

A

B


SQL에서 WHERE문에서 사용할 수 있는 비교 연산자는 다음과 같습니다.

<(초과), >(미만), =(같다), <=(이상), >=(이하), !=(같지않다)



또한 다른 언어들과 마찬가지로 AND와 OR 연산자를 지원합니다.

- AND는 AND앞과 뒤의 조건을 모두 만족해야 할 때 사용하며,

- OR는 OR 앞과 뒤 중 하나또는 모두 만족 할 때 사용됩니다.


더 나아가 여러 탐색 조건을 수행 할 수 있습니다.

- BETWEEN ~ AND : 두개의 다른 값 사이의 값이 충족되도록 조건을 지정합니다.

- IN : 값을 나열하여 나열한 값 사이에 있는 행을 모두 찾도록 조건을 지정합니다.

- EXISTS : 특정 행이 존재하는지 조건을 지정합니다.

- IS NULL : 널 값에 대한 테스트를 위해 사용합니다.



☞ ORDER BY 사용법

SELECT를 이용하여 출력 할 때 ORDER BY를 이용하여 테이블을 정렬 할 수 있습니다.

기준 튜플을 지정하고 오름차순, 내림차순을 설정할 수 있습니다.

예를 들어 다음과 같은 테이블이 존재한다고 가정합니다.


[테이블명 : 회원]

이름

전화번호

나이

A

010-1234-5678

15

B

010-2342-2341

27

C

010-3246-5436 

21

D

010-8923-8435

33

E

010-2464-9314

12


위 테이블에서 나이가 20살 이상인 사람들의 이름과 전화번호, 나이를 출력하려고 합니다.

다음과 같은 쿼리문을 사용하면 되겠죠?


SELECT * FROM 회원 WHERE 나이 >= '20'


쿼리문 실행 결과 아래와 같이 출력될 것입니다.



[테이블명 : 회원]

이름

전화번호

나이

B

010-2342-2341

27

C

010-3246-5436 

21

D

010-8923-8435

33


하지만 별로 보기가 좋지 않네요,

나이를 오름차순으로 정렬 하고 싶습니다.

다음과 같이 order by를 사용하여 정렬 할 수 있습니다.


SELECT * FROM 회원 WHERE 나이 >= '20' ORDER BY 나이


아래 결과를 확인해보세요.


[테이블명 : 회원]

이름

전화번호

나이

C

010-3246-5436

21

B

010-2342-2341

27

D

010-8923-8435

33


나이를 오름차순으로 정렬하여 출력한 결과입니다.

훨씬 보기 깔끔하네요~


내림차순으로 정렬하고 싶으면 맨 끝에 DESC를 추가하면 됩니다.


SELECT * FROM 회원 WHERE 나이 >= '20' ORDER BY 나이 DESC



이렇게 말이죠.



이상 'SELECT 사용법'에 대해 알아보았습니다.

질문 또는 오타나 잘못된 정보가 있는 경우 댓글로 달아주세요!

공감♡ 버튼을 눌러주시면 더욱 유용하고 좋은 포스팅으로 찾아 뵙겠습니다.







* 데이터베이스 책 추천


* 해당 책 제목을 누르면 구매 사이트로 이동합니다.



1. 가장 쉬운 데이터베이스 설계 책 - 적절한 데이터베이스 디자인을 위한 지침서


가장 쉬운 데이터베이스 설계 책


☞ 설계 초보자를 위한 책

☞ DB설계자, PL, PM이 꼭 읽어야 할 책

☞ 개발 프로세스의 논리적 설계 부분




2. 웹 프로그래머를 위한 데이터베이스를 지탱하는 기술


데이터베이스를 지탱하는 기술


☞ DB기반 기술을 알고 싶은 초보자를 위한 책

☞ 대용량 데이터를 빠르고 안정적으로 처리하는 방법

☞ DB 관련 지식을 정리하고 싶거나 전체적인 모습을 파악하고 싶은 사람 추천




3. 그림으로 공부하는 오라클 구조


오라클 구조


☞ 오라클 구조 및 DB 기술이 궁금한 분을 위한 책

☞ 오라클 고유의 아키텍쳐와 동작을 그림으로 이해




4. 손에 잡히는 10분 SQL


손에 잡히는 10분 SQL


☞ 쿼리를 공부하고 싶은 초바자를 위한 책

☞ 10분 만에 간편하게 배우는 SQL 주요 문법




5. 새로쓴 대용량 데이터베이스 솔루션 Vol.1


새로쓴 대용량 데이터베이스 솔루션 Vol.1


☞ 초보자 및 고급 모두 꾸준히 봐야 할 책, 쿼리 위주의 공부

☞ 데이터베이스 기술의 바이블

☞ DB분야 10년간 최고 베스트셀러




6. MySQL 성능 최적화


MySQL 성능 최적화


☞ 초보자 및 고급 모두 꾸준히 봐야 할 책

☞ MySQL을 사용하는 모든 DBA와 개발자를 위한 솔루션 가이드





7. 오라클 실습 - 전문가로 가는 지름길


☞ 일반인을 위한 오라클 지침서





정규화란? 

관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스


* 정규화의 목적 

- 중복성 및 종속성 제거 : 유연성 향상, 데이터 보호, 테이블 규칙성, 테이블 간의 관계 설정 

- 데이터베이스 변경시 이상(anomaly)현상 제거 


1) 삽입 이상

삽입 이상


위와 같은 정규화 되지않은 데이터베이스에서 새로운 교수인 C를 데이터베이스에 삽입하려 할 때 그가 아직 맡은 강의가 없기 때문에 강의 코드를 null로 하지 않는 이상 테이블에 추가 할 수 없음 


2) 삭제 이상

삭제 이상


위와 같은 정규화 되지않은 데이터베이스에서 C 교수의 운영체제 과목이 종료되어서 삭제하려고 할 때 그의 강의가 기록된 레코드를 삭제해야 하는데, 교수 레코드 자체가 사라지게 된다.


3) 갱신 이상

갱신 이상


위와 같은 정규화 되지않은 데이터베이스에서 B 교수의 전화번호가 변경되어 레코드를 수정하려 할 때 성공적인 갱신이 이루어지지 않을 수 있다.



☞ 이러한 문제들을 해결하기 위해 테이블의 구성을 논리적으로 변경하는 것을 정규화라고 한다.


* 정규화 과정

비공식적으로 관계형 데이터베이스 테이블이 제 3 정규화가 되었으면 '정규화 되었다' 라고 한다.


제 1 정규화(1NF; First Normal Form) - 중복되는 그룹 제거


정규화 되지 않은 테이블


위와 같은 테이블은 강의명 칼럼에 두개의 값을 가진다. 위 테이블을 제 1 정규화하면 다음과 같다.


제 1 정규화 된 테이블


제 2 정규화(2NF; Second Normal Form) - 부분 함수 종속성 제거

모든 기본 키의 특정 칼럼에 종속된 칼럼을 제거한다. 수강 과목은 이름 또는 학교에 종속되어 있으므로 이를 제거한다.(새로운 테이블 생성)

다음과 같은 테이블있다고 가정한다.


제 1 정규화 된 테이블


위 테이블은 제 1 정규화가 되었지만 여전히 갱신 이상의 위험이 존재한다.(중복성)

위 테이블의 후보 키는 { 이름 } 이 될 수있다. { 학교 }는 오로지 이름에만 종속된다.

이를 제거하면 다음과 같이 테이블을 분리할 수 있다.


제 2 정규화 된 테이블


제 3 정규화(3NF; Third Normal Form) - 이행 함수 족속성 제거

제 2 정규화로 갱신 이상을 제거했지만 그렇지 않은 테이블도 존재한다.

아래 테이블은 학번은 이름에 종속, 성적은 학번과 이름에 종속, 등급은 성적에 종속됨

이를 이행함수 종속성이라 한다.

제 2 정규화 된 테이블


위의 테이블은 중복되는 테이블이 없고, 함수 족속성도없는 제1, 2 정규화가 된 테이블이다.

하지만 여전히 이상현상이 존재한다. 

만약 100점이 A라는 등급을 주고싶지만 학번과 이름이 기본키가 되는 테이블에서 null값을 삽입 할 수 없다. (삽입 이상) 그리고 B등급의 점수를 70점으로 하향하고 싶다면 해당 성적의 학생을 모두 변경해야함.(갱신 이상) 마지막으로 B 학생의 테이블을 삭제한다면? A등급에 해당하는 점수가 모두 삭제된다.(삭제 이상) 이를 해결하는 방법은 아래와 같다.


제 3 정규화 된 테이블


다음과 같이 테이블을 분리하면 간단하게 해결된다.

이외에도 BCNF, 4NF, 5NF, 6NF 등이 있다.(이는 대부분 3NF이다)


오타 및 질문사항은 댓글로 남겨주세요!





Server에서 MySQL Console 관리자 ID로 접속 후, 다음 명령어 실행
GRANT ALL PRIVILEGES ON *.* TO 아이디@'ip주소' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;
아이디, 비밀번호는 Server 관리자 아이디 입력
ip주소는 Server에서 접속 받을 Client 주소를 입력해야 합니다.
입력 후 Client에서 접속 확인!



[1과목 : 데이터 베이스]


1. 카디널리티(Cardinality)는 튜플(행)의 수를 의미합니다. 


2. 버블 정렬은 2개의 숫자씩 짝을 비교해서 정렬하는 방법입니다. 

    다음은 [9, 6, 7, 3, 5]의 버블 정렬(오름차순) 수행 과정입니다. 

    PASS 1) 

       1) 6, 9, 7, 3, 5 

       2) 6, 7, 9, 3, 5 

       3) 6, 7, 3, 9, 5 

       4) 6, 7, 3, 5, 9 

    PASS 2) 

       5) 변화없음 

       6) 6, 3, 7, 5, 9 

       7) 6, 3, 5, 7, 9 

       8) 변화없음 

    PASS 3) 

       9) 3, 6, 5, 7, 9 

       10) 3, 5, 6, 7, 9 

       11) 이후 변화없음(정렬완료) - but, 반복문은 PASS 5까지 수행


3. 카티션 프로덕트(카티션 곱)의 수행 결과 차수끼리의 합, 카디널리티(튜플)의 곱입니다.

    R x S 의 차수 = (R의 차수 : 4 + S의 차수 : 6) = 10

    R x S 의 카디널리티(튜플) = (R의 카디널리티 : 5 x S의 카디널리티 : 7) = 35


4. 색인 순차 파일(indexed sequential file)의 파일 구성은 기본구역(Prime area), 색인구역(Index area), 오버플로우구역(Overflow area)로 구성되어있습니다.


5. 물리적 설계 단계에서는 논리적 구조로 표현된 데이터를 디스크 등의 물리적 저장장치에 저장할 수 있는 물리적 구조의 데이터로 변환하는 과정입니다. 

- 데이터베이스 파일의 저장 구조 및 액세스 경로 결정

- 저장 레코드의 형식, 순서, 접근 경로와 같은 정보를 사용하여 데이터가 컴퓨터에 저장되는 방법 묘사

- 저장 레코드의 양식 설계, 레코드 집중(Record Clustering)의 분석 및 설계, 접근 경로 설계 등

목표 DBMS에 맞는 스키마 설계는 논리적 설계 단계에서 처리합니다.


6. 차수는 자식 노드 수 중 최대 수 이므로 2입니다.


7. 다음 문제는 개체 무결성에 대한 설명입니다.

참조 무결성이란 관련된 테이블의 레코드 간의 관계를 유효하게 하는 규칙입니다. 참조 무결성을 설정할 수 있는 조건은 기본 테이블에서 일치하는 필드가 '기본 키'이거나, 고유 인덱스를 갖고 있거나, 관련 필드의 데이터 형식이 같아야 합니다.

- 보안 무결성이란 권한을 가진 사용자가 인가된 방법으로 정보를 변경 할 수 있도록 하는 것을 말합니다.


8.  다음은 슈퍼 키에 대한 설명입니다. (복합 키, 연결 키 라고도 합니다.)

- 후보 키란 한 테이블에서 유일성과 최소성을 만족하는 키입니다.

- 기본 키란 후보 키 중에서 선정되어 사용되는 키입니다. Null이 될 수 없으며 중복될 수 없습니다.

- 대체 키란 후보 키 중 기본키로 선택되지 않는 나머지 키입니다.

- 외래 키란 한 테이블에 속한 속성, 외래 키가 다른 참조 테이블의 기본 키일 때 그 속성키를 외래 키라고 합니다.


9. 다음은 Select 문 사용 방법입니다. 

- SELECT '필드 명' FROM '테이블 명' WHERE '필드 명' IS NOT NULL;

'NULL값이 아니다' 라는 조건은 is not null을 사용하시면 됩니다.


10.  DROP TABLE '테이블 명' CASCADE 의 의미는 해당 테이블 명의 테이블을 삭제하고 CASCADE 옵션은 해당 테이블을 참조하는 테이블도 같이 삭제하라는 의미입니다.


11. 병행 제어의 목적입니다.

- 데이터베이스의 공류를 최대화합니다.

- 시스템의 활용도를 최대화합니다.

- 사용자에 대한 응답 시간을 최소화합니다.

- 단위 시간당 트랜잭션 처리 건수를 최대화합니다.

- 데이터베이스의 일관성을 유지합니다.


12. 로킹 단위가 커지면 로크의 수가 적어져(오버헤드 감소) 제어가 간단해지지만 병행성 수준이 감소합니다. 반대로 로킹 단위가 작아지면 로크의 수가 많아져(오버헤드 증가) 제어가 어려워지지만 병행성 수준이 증가합니다.


13. Having 절을 Group by 절에 의해 생성 된 결과 값에 조건(WHERE)을 걸 때 사용합니다.


14. 데이터 중복으로 인하여 관계 연산을 처리하기 곤란한 현상을 이상(Anomaly)이라고 합니다.


15. 방향 그래프의 최대 간선 수는 n x (n-1) 입니다. (n은 정점의 개수)

- 무 방향 그래프의 경우 n x (n-1) / 2입니다. (방향이 없기 때문에 중복된 간선으로 간주)


16. GRANT : 특정 사용자에게 권한 부여

사용방법 : GRANT '부여 할 권한' ON '테이블 명'(DB명) to '사용자 명';

문제에서 테이블 데이터를 갱신(수정)하는 권한을 부여 : UPDATE


17. postfix(후위 표기법) 연산 순서

문제 : 3 4 * 5 6 * +

1) 왼쪽에서 부터 숫자를 스택(STACK)에 집어넣는다. (스택 : 3, 4)

2) 연산자(*)가 나오면 스택의 마지막 숫자 2개를 꺼내 연산 후 다시 집어넣는다. (3*4 = 12)

3) 숫자가 나왔으므로 1) 반복 (스택 : 12, 5, 6)

4) 연산자가 나왔으므로 2) 반복 (5*6 = 30 을 스택에 집어넣음 , (스택 : 12, 30))

5) 연산자가 나왔으므로 2) 반복 (12+30 = 42)


18. 이행 함수(A->B 이고 B->C 이면 A->C) 종속성을 제거하는 단계는 제 3 정규화 단계입니다.

- 제 1 정규화 단계 : 중복되는 모든 항목 제거

- 제 2 정규화 단계 : 부분함수 종속성 제거


19. Inorder(중위 순회)은 다음의 순서로 진행됩니다.

1) 왼쪽 서브 트리를 중위 순회한다.

2) 노드를 방문한다.

3) 오른쪽 서브 트리를 중위 순회한다.

- 쉽게말해 왼쪽으로 최대한 이동한 후 더이상 갈 곳이 없으면 값 반환 후 오른쪽으로 1칸 이동합니다. 이후 다시 왼쪽으로 최대한 이동해서 반복합니다.(LVR)


20. 관계 대수(Relational Algebra)란 원하는 데이터를 얻기 위해 어떻게 질의를 수행 할 것인지 연산을 순서대로 명시하는 절차적 언어 입니다.



2018.04.28 필기 기출 해설 - 2. 전자 계산기 구조

2018.04.28 필기 기출 해설 - 3. 운영체제

2018.04.28 필기 기출 해설 - 4. 소프트웨어 공학

2018.04.28 필기 기출 해설 - 5. 데이터 통신



오타 및 질문사항은 댓글로 남겨주세요!


to Top