본문 바로가기
학원 수업

6일차 - SQL '테이블 구조'

by Hiolet 2021. 10. 6.

아침에 알람소리 듣고도 더 자서 늦게 일어났다. 깜짝 놀라서 부랴부랴 준비하고 집에 있던 김밥 입에 욱여넣으면서 옷 입고 나왔더니 버스 시간 보다 조금 여유가 있어서 안심했다. 

근데 버스에서 잠들어서 한 정겨장 더 가서 내렸다...심지어 누가 하자벨 눌러놔서 다행히 내릴 수 있었음...

정말 잠이 모자라서 자는 잠은 몸이 '야 너 잠이 이만큼 부족하니까 내가 강제로 전원 끄고 수면 다 채우면 깨워 줌' 같은 재질인데 다른거 하기 귀찮고 잠으로 시간 때우려고 자는 잠은 몸이 여유로워서 '너 하고 싶은거 다해~' 같은 재질이라 한정없이 자게 되는 것 같다.

피곤할 수록 긴장해서 주변 환경을 더 예민하게 받아들이는데 몸이 편하면 그게 안 된다. 

내일은 꼭 가는 버스 안에서 영어 공부해야지.

 

오늘 오전의 html 공부를 했다.

오후에 SQL 수업 시작.

테이블 구조

desc 명령

 

mysql을 열고 desc 테이블명;을 넣으면 테이블에 정의된 열이 나온다.

맨 아래에 4 rows in set은 행이 4개가 있다는 말.

desc 명령으로 테이블 구조를 알 수 있는데 field는 열 이름을 나타낸다.

type은 자료형이다. 자료형에서 int, varchar을 배웠다.

int는 java에서 배운 그대로 정수 자료형이고 varchar는 문자열 자료형으로 보면 되는데 저장공간이 가변적이기 때문이다.

자료형 뒤에 오는 괄호 안에 저장할 문자의 값을 지정하는데 varchar(20) 로 20을 적어 놓으면 20문자를 저장할 수 있다.

보통 저장할 문자의 max값을 넣고 자유롭게 쓴다고 한다.

예를 들어 이름은 거의 3글자이지만 4글자가 있을 수도 있기 때문에 varchar형으로 지정해야 한다.

저장공간을 고정시키는 문자 자료형은 char를 쓰면 된다.

char(3) 이렇게 쓰면 되고 3글자만 저장할 수 있다. 저장공간이 변하지 않기 때문에 속도면에서 varchar보다 장점이 있다.

값이 조금이라도 변한다 싶으면 varchar, 고정된 값을 무조건 넣어야 한다 싶으면 char 근데 잘 모르겠으면 varchar. varchar 파티 예약 

key는 기본키, 대체키, 외래키  그리고 하나 더 있는데 까먹었다... 가 있다.

기본키는 중복 안되고 null값이 올 수 없다.

테이블에는 기본키가 한 개 존재하지만 이게 열 하나를 뜻하는 것은 아니다. 

대체키는 다른 열의 키를 기본키로 대체할 수 있는 키. 

외래키는 참조하는 테이블의 기본키  분명 한글인데  왜 때문에 이해 안되죠?  

테이블이 갈라지는 경우가 있다고 한다. 이럴 때 분리된 데이터를 합쳐서 사용하려면 연결고리가 있어야 하는데 그게 외래키.

외부에 있는 키이고 다른 테이블의 기본키를 가지고 와서 내 테이블의 기본키로 쓰는 것이다.

제 1정규형~ 제 6정규형라는게 있는데 사실 외래키는 제대로 이해가 안 되고 나중에 더 자세히 배운다고 했다. 

 

테이블의 열 이름을 알려면 테이블 구조를 알아야 한다.

그래서 desc 명령을 사용한다. (표준 sql은 아님. 하지만 오라클에서 사용 가능) 

알아낸 열 이름을 이용해서 조건을 붙이고 내가 원하는 행만 불러오게 해봤다.

 


 

select 열 from 테이블명 where 조건식

여기서 말하는 조건식은 열에 대한 조건식이다.

ex) 열 = 값 (java에서 =는 대입연산자이지만 sql에서 where 뒤에 조건식에 쓰는 =는 비교연산자)

*다른 곳에서 대입연산자로 쓰일 때도 있다.

where조건식으로 내가 원하는 데이터를 가지고 올 수 있다. (검색 조건 지정하기)

 

아래의 샘플 테이블에서 1번과 3번 행에서 넘버와 이름만 가지고 오고 싶다면?

 

1번 3번을 조건식에 이용한다면(1번, 3번을 포함하는 방법) select no, name from sample21 where no=1 or no=3;

 

2번을 조건식에 이용한다면(2번을 제외하는 방법) select no, name from sample21 where no<>2;

* 값이 같지 않다는 연산자는 <>, != 연산자에서 !는 값을 반대로 생각하면 된다. 

 

이렇게 같은 결과지만 다른 코드로 값을 도출할 수 있다. 원하는 결과값이 나온다면 틀린 코드는 없다.

프로그래밍 언어는 다 그런 것 같다. html도 css도 같은 시안인데 서로 다른 코드가 나오니까.

틀린 코드는 따로 없지만 잘 만든 코드는 따로 있지.

메모리를 최소한으로 줄이고 결과값이 나오는 것이 잘 만든 코드.
간략하게 만들 수 있음에도 복잡하게 만들면 잘 만든 코드라고 할 수 없다.

저기 예제에서 1번과 3번을 포함한 방법 코드는 필요한 조건이 많을수록 or를 계속 써야 하기 때문에 코드가 지저분해질 수 있다.

 

이처럼 내가 원하는 행을 찾을 때 where구를 사용한다.
열은 몇십개도 많다고 보지만 행 갯수은 제한이 없다.

그래서 행이 무수히 많아져도 손쉽게 where를 써서 원하는 행을 찾을 수 있다.

 

만약 내가 찾는 행이 없다면 Empty set이라고 뜬다. 결과가 없다는 뜻이다. 

 

*테이블에서 값을 가지고 올 때 from은 생략 할 수 없다. 

 


 

테이블 생성하기 - create table 테이블이름 (열이름 자료형, 열이름 자료형 · · · ·)

테이블을 만들어 봤다!!

열이름과 자료형은 테이블을 만들 때 생성할 때 필수다. 안 넣으면 오류가 뜬다. 

이제 샘플이 아닌 내가 만든 테이블을 desc로 구조를 확인 할 수 있다.

테이블 삭제는 drop table 테이블이름; 으로 할 수 있다.

저번에 인포트한 데이터베이스를 삭제할 때도 drop을 써서 삭제한적 있다.

 


 

눈으로 보는 것보다 움직이면서 습득하해야한다. 한 번이라도 배운 코드를 손으로 써봐야 진짜 내께 된다.

문법은 외워야 한다!!
아무것도 외우지 않은 상태에서 이해하려고 하면 안 된다. 문법공부를 해야 하고 단어를 외어야 한다.
많이 사용해봐야지 익숙해지기 때문에 이해만 해가지고 공부하겠다는 건 택도 없다. 반드시 외울 수 있도록!

'학원 수업' 카테고리의 다른 글

7일차 - SQL '패턴 매칭'  (0) 2021.10.09
7일차 - java '연산자'  (0) 2021.10.07
5일차 - java '형변환'  (0) 2021.10.05
4일차 - java '변수' / MySQL 'select ~ from'  (0) 2021.10.05
3일차 - 이클립스 컴파일 하기  (0) 2021.10.01