no image
[MySQL] SELECT 문
이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. ORDER BY : 결과의 정렬을 위함 LIMIT : 결과의 개수를 제한 DISTINCT : 중복된 데이터를 제거 GROUP BY : 지정한 열의 데이터들을 같은 데이터끼리 묶어서 결과를 추출, 주로 집계 함수와 함께 사용됨, HAVING 절을 통해 조건식을 추가할 수 있음 HAVING : WHERE 절과 비슷해 보이지만, GROUP BY 절과 함께 사용됨 기본적인 SELECT 절의 형식은 아래와 같다. 이 중에서 몇 가지 생략은 가능하지만 순서는 무조건 지켜야 한다. SELECT ~ FROM ~ ORDER BY ~ LIMIT는 가능하지만 SELECT ~ FROM ~ LIMIT ~ ORDE..
2023.03.10
no image
[컴퓨터 구조] 고급 언어와 저급언어, 컴파일과 인터프리터
이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 고급 언어와 저급 언어 우리 프로그램을 만들기 위해서 사용하는 언어는 컴퓨터가 이해하는 언어가 아닌 사람이 이해하기 쉽게 만들어진 언어이다. 사람이 이해하기 쉽게 만들어진 언어를 고급 언어라고 한다. 반대로 컴퓨터가 직접 이해하고 실행할 수 있는 언어를 저급 언어라고 한다. 컴퓨터가 이해하고 실행할 수 있는 언어는 오직 저급 언어뿐이다. 그래서 고급 언어로 작성된 소스 코드는 반드시 저급 언어, 즉 명령어로 변환되어야 한다. 저급 언어는 아래와 같이 두 가지 종류가 있다. 기계어 어셈블리어 기계어 0과 1의 명령어 비트로 이루어진 언어이다. 2진수 또는 16진수로 표현된..
2023.03.09
no image
[MySQL] SELECT ~ FROM ~ WHERE
이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. member 테이블 buy 테이블 USE문 USE market_db; market_db 데이터 베이스를 사용(선택)하겠다는 뜻 기본적인 SELECT ~ FROM ~ WHERE문 SELECT * FROM member WHERE mem_name = '블랙핑크'; mem_name이 블랙핑크인 결과만 추출 SELECT * FROM member WHERE mem_number = 4; mem_number가 4인 결과만 추출 관계 연산자, 논리 연산자의 사용 관계 연산자 SELECT mem_id, mem_name FROM member WHERE height = 165 AND mem_number > 6;..
2023.03.08
no image
[컴퓨터 구조] 컴퓨터가 문자를 표현하는 방법
이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 문자 집합과 인코딩 문자 집합(character set) 컴퓨터가 이해할 수 있는 문자의 모음 인코딩 (encoding) 코드화하는 과정 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정 디코딩(decoding) 코드를 해석하는 과정 0과 1로 표현된 문자 코드를 문자로 변환하는 과정 아스키 코드 아스키 코드란? 초창기 문자 집합 중 하나 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자 7비트로 하나의 문자 표현(8비트 중 1비트는 오류 검출을 위해 사용되는 패리티 비트) 아스키 코드는 7bit를 표현할 수 있으므로 2⁷인 128개의 문자를 표현할 수 있다. ..
2023.03.07
no image
[MySQL] 테이블 만들기, 행(데이터) 삽입하기
이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 데이터베이스 삭제 drop database if exists mk_db; -- 만약 mk_db가 있으면 삭제해라 데이터베이스 mk_db가 있으면 삭제하라는 뜻이다. 테이블 생성 create table member -- member 테이블 생성 ( mem_id char(8) not null primary key, -- char형 8글자, null 허용 않음, 기본키 mem_name char(10) not null, -- char형 10글자, null 허용 않음 mem_number int not null, -- int형, null 허용 않음 addr char(2) not null, -- cha..
2023.03.06
no image
[MySQL] 테이블 보기, 기본적인 추출
이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 위와 같은 테이블을 생성했다고 하자. 테이블 이름은 member이다. 테이블의 모든 행 조회하기 SELECT의 기본 형식은 SELECT 열 이름 FROM 테이블 이름 [WHERE 조건]이다. *는 모든 열을 의미한다. *을 열 이름에 넣으면 모든 열을 보여달란 뜻이 된다. 이렇게 코드를 입력하면 member 테이블의 모든 행이 출력된다. 테이블 중 특정 열만 출력하기 member 테이블에서 이름과 주소만 출력하려면 아래와 같이 입력하면 된다. 이렇게 입력하면 아래와 같은 결과가 나온다. 특정 데이터에 대한 정보만 추출하기 아이유에 대한 정보만 추출하려면 WHERE 다음에 특정 조건을 입력하..
2023.03.06
no image
[MySQL] DBMS와 SQL
이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 데이터베이스(Database)를 한 마디로 정의한다면 데이터의 집합이라고 한다. DBMS의 정의 데이터베이스를 데이터의 집합이라고 정의한다면, 데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)이라고 한다. 데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능해야 한다. 엑셀과 같은 프로그램은 데이터의 집합을 관리하고 운영한다는 면에서 DBMS로 볼 수 있지만, 대용량 데이터를 관리하거나 여러 사용자와 공유하는 개념과는 거리가 있어 DBMS라고 부르지 않는다. SQL DBMS는 데이터의 집합인 데이터베이스를 잘 관..
2023.03.05
no image
[컴퓨터 구조] 0과 1로 숫자를 표현하는 방법
이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다. 정보 단위 컴퓨터는 0 또는 1밖에 이해하지 못한다. 0과 1을 나타내는 가장 작은 정보 단위를 비트(bit)라고 한다. 1비트는 0 또는 1을 표현할 수 있고(2가지), 2비트는 00, 01, 10, 11 이렇게 4가지를 표현할 수 있다. 3비트는 000, 001, 010, 011, 100, 101, 110, 111 이렇게 8가지를 표현할 수 있다. 따라서 n비트는 2ⁿ가지를 나타낼 수 있다. 비트 다음으로 큰 정보 단위는 바이트이다. 바이트는 8개의 비트를 묶은 것이다. 즉, 1바이트는 8비트와 같다. 그다음으로 큰 정보단위는 킬로바이트(KB)이다. 1킬로바이트는 1..
2023.03.04

이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


  1. ORDER BY : 결과의 정렬을 위함
  2. LIMIT : 결과의 개수를 제한
  3. DISTINCT : 중복된 데이터를 제거
  4. GROUP BY : 지정한 열의 데이터들을 같은 데이터끼리 묶어서 결과를 추출, 주로 집계 함수와 함께 사용됨, HAVING 절을 통해 조건식을 추가할 수 있음
  5. HAVING : WHERE 절과 비슷해 보이지만, GROUP BY 절과 함께 사용됨

 

기본적인 SELECT 절의 형식은 아래와 같다.

이 중에서 몇 가지 생략은 가능하지만 순서는 무조건 지켜야 한다.

SELECT ~ FROM ~ ORDER BY ~ LIMIT는 가능하지만

SELECT ~ FROM ~ LIMIT ~ ORDER BY는 불가능하다.

 

 

member 테이블

 

buy 테이블

 


 

ORDER BY 절

결과가 출력되는 순서를 조절한다.

member 테이블에서 데뷔일자가 빠른 순서대로 출력하려면 아래처럼 작성한다.

SELECT mem_id, mem_name, debut_date FROM member ORDER BY debut_date;

 

내림차순으로 정렬하고 싶다면, 뒤에 DESC를 붙여준다. (오름차순은 ASC)

SELECT mem_id, mem_name, debut_date FROM member ORDER BY debut_date DESC;

 

ORDER BY 절은 WHERE절과 같이 사용할 수 있다.

아래의 코드는 키가 164 이상인 그룹을 내림차순으로 정렬하는 코드이다.

SELECT mem_id, mem_name, debut_date, height
   FROM member 
   WHERE height  >= 164
   ORDER BY height DESC;

 

정렬 기준은 1개 열이 아니라 여러 개 열로 지정할 수 있다.

잇지와 트와이스의 키가 167로 동일한데 트와이스가 데뷔일자가 오래되었으니, 트와이스를 잇지보다 위로 정렬하고 싶다면 아래의 코드로 작성하면 된다.

SELECT mem_id, mem_name, debut_date, height
   FROM member 
   WHERE height  >= 164
   ORDER BY height DESC, debut_date ASC;

정렬 기준이 여러개일 때
첫 번째 정렬 기준으로 정렬 된 후, 두 번째 정렬 기준으로 정렬된다.
위 예제에서 167로 동일한 결과가 있을 때 두 번째 정렬 기준으로 정렬되는 것이다.

 

LIMIT

LIMIT는 출력하는 개수를 제한한다.

아래의 코드는 member 테이블을 조회하는데 전체 중 앞에서 3건만 조회하는 코드이다.

SELECT * FROM member LIMIT 3;

 

LIMIT 형식은 LIMIT 시작, 개수이다. 지금과 같이 LIMIT 3만 쓰면 LIMIT 0, 3과 동일하다

즉, 0번째부터 3건이라는 의미이다.

필요하다면 중간부터 출력도 가능하다.

다음과 같이 평균 키가 큰 순으로 정렬하되, 3번째부터 2건만 조회할 수 있다.

SELECT mem_name, height
   FROM member
   ORDER BY height DESC
   LIMIT 3,2;

 

 

DISTINCT

조회된 결과에서 중복된 데이터를 1개만 남기는 구문이다.

이렇게 여러 개 중복된 데이터를 한 개로 남기는 코드는 아래와 같다.

SELECT DISTINCT addr FROM member;

 

 


 

GROUP BY 절

GROUP BY 절은 말 그대로 그룹으로 묶어주는 역할을 한다.

위와 같이 그룹별로 합계나 평균 최소값등을 구하고 싶을 때는 집계 함수를 사용한다.

 

집계 함수

 

각 mem_id별로 구매한 개수를 합쳐서 출력하기 위해서는 SUM()과 GROUP BY 절을 사용하면 된다.

 

SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;

 

별칭을 사용하여 결과를 보기 좋게 할 수 있다.

 

SELECT mem_id "회원 아이디", SUM(amount) "총 구매 개수"
   FROM buy GROUP BY mem_id;

별칭
별칭에 작은따옴표를 사용해도 되지만, 작은따옴표는 INSERT 등에서 문자를 입력할 때 사용하므로 별칭에는 큰 따옴표를 사용하는 것이 좋다.

 

회원이 구매한 금액의 총합을 출력하려면 아래와 같이 코드를 입력하면 된다.

 

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
   FROM buy GROUP BY mem_id;

 

전체 회원이 구매한 물품 개수의 평균을 구하려면 아래와 같이 작성하면 된다.

SELECT AVG(amount) "평균 구매 개수" FROM buy;

 

회원이 한 번 구매 시 평균 몇 개를 구매했는지 구하려면 아래와 같이 작성하면 된다.

 

SELECT mem_id, AVG(amount) "평균 구매 개수" 
	FROM buy
	GROUP BY mem_id;

 

전체 몇 명의 회원이 있는지 확인하려면 아래와 같이 작성하면 된다.

 

SELECT COUNT(*) FROM member;

 

연락처가 있는 회원만 카운트하려면 전화번호의 열 이름을 지정하면 된다. 그러면 NULL 값인 항목은 제외하고 카운트하여 결국 연락처가 있는 회원의 인원만 나온다.

 

SELECT COUNT(phone2) "연락처가 있는 회원" FROM member;

 

 

HAVING 절

SUM()으로 회원별 총구매액을 구하면 아래와 같다.

 

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
   FROM buy 
   GROUP BY mem_id;

 

총구매액이 1000 이상인 회원에게만 사은품을 증정한다고 하면 아래와 같이 작성하면 된다.

 

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
   FROM buy 
   GROUP BY mem_id   
   HAVING SUM(price*amount) > 1000 ;

WHERE과 HAVING
HAVING은 WHERE와 비슷한 개념으로 조건을 제한하는 것이지만, 집계 함수에 대해서 조건을 제한하는 것이라고 생각하면 된다.
HAVING절은 꼭 GROUP BY 절 다음에 나와야 한다.

 

만약 총구매액이 큰 사용자부터 나타내려면 ORDER BY를 사용하면 된다.

 

SELECT mem_id "회원 아이디", SUM(price*amount) "총 구매 금액"
   FROM buy 
   GROUP BY mem_id   
   HAVING SUM(price*amount) > 1000
   ORDER BY SUM(price*amount) DESC;

이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


고급 언어와 저급 언어

우리 프로그램을 만들기 위해서 사용하는 언어는 컴퓨터가 이해하는 언어가 아닌 사람이 이해하기 쉽게 만들어진 언어이다. 사람이 이해하기 쉽게 만들어진 언어를 고급 언어라고 한다.

반대로 컴퓨터가 직접 이해하고 실행할 수 있는 언어를 저급 언어라고 한다.

컴퓨터가 이해하고 실행할 수 있는 언어는 오직 저급 언어뿐이다.

그래서 고급 언어로 작성된 소스 코드는 반드시 저급 언어, 즉 명령어로 변환되어야 한다.

 

저급 언어는 아래와 같이 두 가지 종류가 있다.

  • 기계어
  • 어셈블리어

 

기계어

  • 0과 1의 명령어 비트로 이루어진 언어이다.
  • 2진수 또는 16진수로 표현된다.
  • 기계어는 오로지 기계를 위해 만들어진 언어이기 때문이 사람이 이해하기 어렵다.

 

어셈블리어

  • 기계어를 사람이 조금 더 이해하기 쉬운 형태로 번역한 것이 어셈블리어이다.
  • 어셈블리어는 0과 1로 이루어진 기계어를 읽기 편하게 만든 저급 언어일 뿐 개발자가 어셈블리어를 이용해 복잡한 프로그램을 만들기란 쉽지 않다.
  • 하드웨어와 밀접하게 맞닿아 있는 프로그램을 개발하는 임베디드 개발자, 게임 개발자, 정보 보안 분야등의 개발자는 어셈블리어를 많이 사용한다.

 


 

컴파일 언어와 인터프리터 언어

고급 언어로 작성된 소스 코드는 결국 저급 언어로 변환되어 실행해야 하는데, 고급 언어에서 저급 언어로 변환되는 방법은 크게 2가지가 있다. 그 방법은 아래와 같다.

  • 컴파일 방식
  • 인터프리터 방식

 

컴파일 언어

  • 컴파일 방식을 사용하는 언어를 컴파일 언어라고 한다.
  • 컴파일 언어는 컴파일러에 의해 소스 코드 전체가 저급 언어로 변환되어 실행되는 고급 언어이다.
  • 컴파일 언어로 작성된 소스 코드는 코드 전체가 저급 언어로 변환되는 과정을 거친다. 이 과정을 컴파일이라고 한다.
  • 컴파일을 수행해 주는 도구를 컴파일러라고 한다.
  • 컴파일러가 소스 코드 내에서 오류를 하나라도 발견하면 해당 소스 코드는 컴파일에 실패한다.
  • 컴파일이 성공적으로 수행되면 개발자가 작성한 소스 코드는 컴퓨터가 이해할 수 있는 저급 언어로 변환된다. 이렇게 컴파일러를 통해 저급 언어로 변환된 코드를 목적 코드라고 한다.
  • 대표적인 컴파일 언어로는 C, C++, JAVA 등이 있다.

 

목적 파일 VS 실행 파일
목적 코드로 이루어진 파일을 목적 파일이라고 부른다. 마찬가지로 실행 코드로 이루어진 파일을 실행 파일이라고 부른다.
윈도우의 .exe 확장자를 가진 파일이 대표적인 실행 파일이다.
목적 파일과 실행 파일은 같은 의미가 아니다.
목적 코드가 실행 파일이 되기 위해서는 링킹이라는 작업을 거쳐야 한다.
즉, 고급 언어가 컴파일을 거쳐 목적 코드가 되고, 목적 코드가 링킹을 거쳐 실행 파일이 되는 것이다.
링킹(Linking)
링킹은 여러 개의 코드와 데이터를 모아서 연결하여 메모리에 로드될 수 있고 실행될 수 있는 한 개의 파일로 만드는 작업이다. 이 파일이 메모리에 로딩되어 실행된다. 링크는 컴파일 시에 수행되는 경우도 있고, 로딩시에 수행되는 경우도 있고, 실행시에 수행되는 경우도 있다.

 

인터프리터 언어

  • 인터프리터 방식을 사용하는 언어를 인터프리터 언어라고 한다.
  • 인터프리터 언어는 인터프리터에 의해 소스 코드가 한 줄씩 실행되는 고급 언어이다.
  • 소스 코드가 전체가 저급 언어로 변환되는 컴파일 언어와는 달리, 인터프리터 언어는 소스 코드를 한 줄씩 차례로 실행한다.
  • 소스 코드를 한 줄씩 저급 언어로 변환하여 실행해 주는 도구를 인터프리터라고 한다.
  • 인터프리터는 소스 코드를 한 줄씩 실행하기에 소스 코드 전체를 저급 언어로 변환하는 시간을 기다릴 필요가 없다.
  • 또한 소스코드 N번째 줄에 문법 오류가 있더라도, N-1번째 줄까지는 정상적으로 수행된다.
  • 대표적인 인터프리터 언어로는 파이썬이 있다.

 

인터프리터 언어가 컴파일 언어보다 빠르다고 생각할 수도 있지만, 일반적으로 인터프리터 언어는 컴파일 언어보다 느리다. 컴파일을 통해 나온 결과물, 즉 목적 코드는 컴퓨터가 이해하고 실행할 수 있는 저급 언어인 반면, 인터프리터 언어는 소스 코드 마지막에 이를 때까지 한 줄 한 줄씩 저급언어로 해석하며 실행해야 하기 때문이다.

 

컴파일 언어와 인터프리터 언어의 경계는 모호하다.
C, C++는 명확하게 컴파일 언어로 구분되지만, 많은 프로그래밍 언어는 컴파일 언어와 인터프리터 언어 간의 경계가 모호한 경우가 많다.
파이썬도 컴파일을 하지 않는 것은 아니며, 자바도 저급 언어가 되는 과정에서 컴파일과 인터프리트를 동시에 수행한다.
"고급 언어가 저급 언어로 변환되는 대표적인 방법에는 컴파일 방식과 인터프리트 방식이 있다." 정도로만 이해하는 것이 좋다.

이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


member 테이블

 

buy 테이블

 


 

USE문

USE market_db;

market_db 데이터 베이스를 사용(선택)하겠다는 뜻

 


 

기본적인 SELECT ~ FROM ~ WHERE문

SELECT * FROM member WHERE mem_name = '블랙핑크';

 

mem_name이 블랙핑크인 결과만 추출

 


SELECT * FROM member WHERE mem_number = 4;

 

mem_number가 4인 결과만 추출

 

 


 

관계 연산자, 논리 연산자의 사용

관계 연산자

SELECT mem_id, mem_name FROM member WHERE height <= 162;

 

키가 162 이하인 mem_id와 mem_name을 추출

 


논리 연산자

SELECT mem_name, height, mem_number FROM member WHERE height >= 165 AND mem_number > 6;

SELECT mem_name, height, mem_number FROM member WHERE height >= 165 OR mem_number > 6;

 


 

BETWEEN ~ AND

SELECT mem_name, height FROM member WHERE height >= 163 AND height <= 165;

 

위 코드와 아래의 코드는 같은 뜻이다.

 

SELECT mem_name, height FROM member WHERE height BETWEEN 163 AND 165;

 

163과 165사이의 height과 mem_name 데이터를 추출하라는 뜻이다.

 

 


 

IN()

SELECT mem_name, addr FROM member WHERE addr = '경기' OR addr = '전남' OR addr = '경남';

 

위 코드는 아래 코드와 같다.

 

SELECT mem_name, addr FROM member WHERE addr IN('경기', '전남', '경남');

조건식에서 여러 문자 중 하나에 포함되는지 비교할 때는 IN()이 간결하다.

 


 

LIKE(문자열의 일부 글자 검색)

문자열의 일부 글자를 검색하려면 LIKE를 사용한다.

SELECT * FROM member WHERE mem_name LIKE '우%';

 

mem_name이 '우'로 시작되긴 하는데 정확히 기억 안 난다면 위와 같이 작성하면 된다.

 


언더바(_)

SELECT * FROM member WHERE mem_name LIKE '__핑크';

 

위처럼 언더바를 두 개 사용하면 앞 두 글자는 상관하지 않고 검색하게 된다.

 

 


 

서브 쿼리

SELECT 안에 또 다른 SELECT가 들어갈 수 있다. 이것을 서브 쿼리 또는 하위 쿼리라고 부른다.

mem_name이 에이핑크인 회원의 평균 height보다 큰 데이터를 검색하고 싶다고 가정하면

SELECT * FROM member WHERE height > (SELECT height FROM member WHERE mem_name = '에이핑크');

위와 같이 에이핑크의 평균 height인 164보다 높은 데이터를 추출할 수 있다.

 

이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


문자 집합과 인코딩

 

문자 집합(character set)

  • 컴퓨터가 이해할 수 있는 문자의 모음

인코딩 (encoding)

  • 코드화하는 과정
  • 문자를 0과 1로 이루어진 문자 코드로 변환하는 과정

디코딩(decoding)

  • 코드를 해석하는 과정
  • 0과 1로 표현된 문자 코드를 문자로 변환하는 과정

 


 

아스키 코드

아스키 코드란?

  • 초창기 문자 집합 중 하나
  • 알파벳, 아라비아 숫자, 일부 특수 문자 및 제어 문자
  • 7비트로 하나의 문자 표현(8비트 중 1비트는 오류 검출을 위해 사용되는 패리티 비트)
  • 아스키 코드는 7bit를 표현할 수 있으므로 2⁷인 128개의 문자를 표현할 수 있다.
  • 인코딩이 간단
  • 한글을 포함한 다른 언어 문자, 다양한 특수 문자를 표현 불가
패리티 비트(parity bit)
8비트 구조에서 패리티 비트는 7비트 크기의 아스키 코드를 제외한 나머지 1비트다.
패리티 비트는 전송 과정에서 1비트 오류를 검출하기 위해, 패리티 비트를 포함해 1의 개수가 짝수나 홀수개가 되도록 한다.
짝수 패리티 방식은 1의 개수를 짝수로 만드는 것이다. 만약 1의 개수가 짝수가 아니면 오류가 발생한 것이다.
홀수 패리티 방식은 1의 개수를 홀수로 만드는 것이다. 만약 1의 개수가 홀수가 아니면 오류가 발생한 것이다.

 

아스키 코드는 0 ~ 127까지 총 128개의 숫자 중 하나의 문자를 일대일로 대응시킨 것이다.

예를 들어, 알파벳 A는 십진수 65로 변환되고 65를 이진수로 변환하여 1000001로 인코딩 된다.

코드 포인트
문자 인코딩에서 글자에 부여된 고유한 값을 코드 포인트라고 한다.
문자 A의 코드 포인트는 65이다.

 

아래는 아스키 코드표이다.

https://velog.io/@exploit017

 


 

한글 인코딩(완성형과 조합형)

한글 인코딩에는 두 가지 방식이 있다.

  • 완성형 인코딩 : 초성, 중성, 종성의 조합으로 이루어진 완성된 하나의 글자에 고유한 코드를 부여하는 방식
  • 조합형 인코딩 : 초성을 위한 비트열, 중성을 위한 비트열, 종성을 위한 비트열을 할당하여 그것들의 조합으로 하나의 글자 코드를 완성하는 인코딩 방식

 


 

EUC- KR

  • 완성형 인코딩 방식
  • 초성, 중성, 종성이 모두 결합된 한글 단어에 2바이트 크기의 코드를 부여
  • 2바이트 == 16비트 == 4자리 16진수로 표현
  • 2,350개 정도의 한글 단어를 표현 가능
  • 쀍, 쀓, 믜 등 모든 한글을 표현할 수 없음
  • 언어별 인코딩 방식을 따로 제공

 

출처 :&nbsp;https://ithub.tistory.com/277

'가'는 위 표에 의하여 16진수인 b0a1로 변환되고 다시 2진수인 1011000010100001로 변환된다.

 


 

유니코드와 UTF-8

유니코드

  • 통일된 문자 집합
  • 한글, 영어, 화살표와 같은 특수 문자, 이모티콘 등등 다양한 문자 지원
  • UTF-8, UTF-16, UTF-32 등 여러 인코딩 방식이 있다.
  • UTF-8 방식이 가장 대중적이다.

 

UTF-8

  • 가변 길이 인코딩 : 인코딩 결과가 1바이트 ~ 4바이트
  • 인코딩 결과가 몇 바이트가 될지는 유니코드에 부여된 값에 따라 다름

  • 유니코드 문자에 부여된 값의 범위가 0부터 007F(16진수)까지는 1바이트로 표현
  • 유니코드 문자에 부여된 값의 범위가 0080(16진수)부터 00FF(16진수)까지는 2바이트로 표현
  • 유니코드 문자에 부여된 값의 범위가 0800(16진수)부터 FFFF(16진수)까지는 3바이트로 표현
  • 유니코드 문자에 부여된 값의 범위가 10000(16진수)부터 10FFFF(16진수)까지는 4바이트로 표현

 

한글에서 '한'은 D55C, '글'은 AE00 이므로 모두 0800과 FFFF사이에 있으므로 '한'과 '글'은 UTF-8로 인코딩하면 3바이트로 표현된다.

D55C는 2진수로 1101 0101 0101 1100, AE00은 1010 1110 0000 0000 이다.

위의 이진수를 이 표에 대입하면

한 : 11101101 10010101 10011100

글 : 11101010 10111000 10000000

이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


데이터베이스 삭제

drop database if exists mk_db; -- 만약 mk_db가 있으면 삭제해라

데이터베이스 mk_db가 있으면 삭제하라는 뜻이다.

 


 

테이블 생성

create table member -- member 테이블 생성
(
	mem_id char(8) not null primary key, -- char형 8글자, null 허용 않음, 기본키
	mem_name char(10) not null, -- char형 10글자, null 허용 않음
	mem_number int not null, -- int형, null 허용 않음
	addr char(2) not null, -- char형 2글자, null 허용 않음
	phone1 char(3), -- char형 3글자
	phone2 char(8), -- char형 8글자
	height smallint, -- 2바이트짜리 int형
	debut_date date -- 날짜
);
create table buy -- buy 테이블 생성
(
	num int auto_increment not null primary key, -- 자동 숫자지정
    mem_id char(8) not null,
    prod_name char(6) not null,
    group_name char(4) ,
    price int not null,
    amount smallint not null,
    foreign key (mem_id) references member(mem_id) -- 외래키(두 테이블을 연결하는데 사용)
);

 

아래는 만들어진 테이블


 

행 삽입

insert into member values('TWC', '트와이스', 9, '서울', '02', '11111111', 167, '2015,10,19'); -- 데이터 삽입
insert into buy values(null, 'TWC', '지갑', '트와이스', 30, 2); -- 데이터 삽입

각각 member 테이블과 buy 테이블에 행을 삽입하는 코드이다.

 

아래는 결과

 

이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


member 테이블

위와 같은 테이블을 생성했다고 하자. 테이블 이름은 member이다.

 

테이블의 모든 행 조회하기

SELECT의 기본 형식은 SELECT 열 이름 FROM 테이블 이름 [WHERE 조건]이다.

*는 모든 열을 의미한다. *을 열 이름에 넣으면 모든 열을 보여달란 뜻이 된다.

이렇게 코드를 입력하면

member 테이블의 모든 행이 출력된다.

 


 

테이블 중 특정 열만 출력하기

member 테이블에서 이름과 주소만 출력하려면 아래와 같이 입력하면 된다.

 

이렇게 입력하면 아래와 같은 결과가 나온다.

 


 

특정 데이터에 대한 정보만 추출하기

아이유에 대한 정보만 추출하려면 WHERE 다음에 특정 조건을 입력하면 된다.

where에 member_name이 아이유인 사람만 추출해 달라는 코드이다.

코드의 결과는 아래와 같다.

이 글은 혼자 공부하는 SQL(저자 : 우재남)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


데이터베이스(Database)를 한 마디로 정의한다면 데이터의 집합이라고 한다.

DBMS의 정의

데이터베이스를 데이터의 집합이라고 정의한다면, 데이터베이스를 관리하고 운영하는 소프트웨어를 DBMS(Database Management System)이라고 한다.

데이터베이스는 여러 명의 사용자나 응용 프로그램과 공유하고 동시에 접근이 가능해야 한다.

엑셀과 같은 프로그램은 데이터의 집합을 관리하고 운영한다는 면에서 DBMS로 볼 수 있지만, 대용량 데이터를 관리하거나 여러 사용자와 공유하는 개념과는 거리가 있어 DBMS라고 부르지 않는다.

 


 

SQL

DBMS는 데이터의 집합인 데이터베이스를 잘 관리하고 운영하기 위한 시스템 또는 소프트웨어를 말하는데, DBMS에 데이터를 구축, 관리하고 활용하기 위해서 사용되는 언어가 SQL(Structured Query Language)이다.

SQL을 사용하면 DBMS를 통해 중요한 정보들을 입력, 관리하고 추출할 수 있다.

SQL이 데이터베이스를 조작하는 언어이긴 하지만 일반적인 프로그래밍 언어와는 조금 다른 특성을 갖는다.

SQL은 특정 회사에서 만드는 것이 아니라 국제표준화기구에서 SQL에 대한 표준을 정해서 발표하고 있다.

이를 표준 SQL이라고 한다.

하지만 SQL을 사용하는 DBMS를 만드는 회사가 여러 곳이기 때문에 표준 SQL이 각 회사 제품의 특성을 모두 포용하지 못한다는 것이다.

그래서 DBMS를 만드는 회사에서는 되도록 표준 SQL을 준수하되, 각 제품의 특성을 반영한 SQL을 사용한다.

출처 :&nbsp;https://hongong.hanbit.co.kr/

 

3가지 DBMS 제품 모두 표준 SQL을 포함하고 있지만, 추가로 자신만의 기능을 가지고 있다.

오라클은 PL/SQL, SQL Server는 T-SQL, MySQL은 SQL로 부른다.

따라서 표준 SQL을 배우면 나중에 다른 DBMS를 접해도 쉽게 배울 수 있다.


 

DBMS의 분류

DBMS의 유형은 계층형, 망형, 관계형, 객체지향형, 객체관계형 등으로 분류된다.

현재 사용되는 DBMS 중에는 관계형 DBMS가 가장 많이 사용된다.

 

관계형 DBMS

관계형 DBMS(Relational DBMS)는 줄여서 RDBMS라고 부른다. 대부분 DBMS가 RDBMS 형태로 사용된다.

RDBMS의 데이터베이스는 테이블이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 행과 열로 이루어져 있다.

ID PW Name Phone number Address
flower 1q2w3e4r 홍길동 010-1234-5678 중국 베이징
moon 1234 박첨지 010-5678-1234 스위스 베른
soft qwer 강감찬 010-1111-2222 이탈리아 밀라노

위 테이블은 3개의 행과 5개의 열로 구성되어 있다.(4행 5열이 아니라 3행 5열이다(4행 5열 중 1행은 데이터가 아니므로))

 

  • 열(column) : 테이블의 세로를 뜻함. 위 테이블은 5열로 이뤄져 있다.
  • 열 이름 : 각 열을 구분하기 위한 이름이다. 열 이름은 각 테이블 내에서는 서로 달라야 하며, ID, PW, Name.. 등이 열 이름이다.
  •  : 실질적인 진짜 데이터를 말한다. 열 이름을 제외한 행을 말한다. 행 데이터라고 부르기도 한다. 위 테이블에서는 3행으로 이뤄져 있다.
  • 데이터 형식 : 열에 저장될 데이터 형식을 말한다. 위 테이블에서 이름은 숫자가 아닌 문자 형식이어야 한다. 데이터 형식은 테이블을 생성할 때 열 이름과 함께 지정해 준다.
  • 기본 키(Primary Key) : 기본 키 열은 각 행을 구분하는 유일한 열을 말한다. 위 테이블에서 다른 것은 중복되거나 생략 될 수 있지만 ID는 중복되거나 생략될 수 없기 때문에 ID가 기본 키이다. 테이블에는 열이 여러 개 있지만 기본 키는 1개만 지정해야 하며, 1개의 열에 지정한다.

 

RDBMS에서는 모든 데이터가 테이블에 저장된다. 이 구조가 가장 기본적이고 중요한 구성이기 때문에 테이블만 제대로 파악하면 RDBMS를 어느 정도 이해했다고 할 수 있다.

이 글은 혼자 공부하는 컴퓨터 구조 + 운영체제 (저자 : 강민철)의 책과 유튜브 영상을 참고하여 개인적으로 정리하는 글임을 알립니다.


정보 단위

컴퓨터는 0 또는 1밖에 이해하지 못한다.

0과 1을 나타내는 가장 작은 정보 단위를 비트(bit)라고 한다.

1비트는 0 또는 1을 표현할 수 있고(2가지), 2비트는 00, 01, 10, 11 이렇게 4가지를 표현할 수 있다.

3비트는 000, 001, 010, 011, 100, 101, 110, 111 이렇게 8가지를 표현할 수 있다.

따라서 n비트는 2ⁿ가지를 나타낼 수 있다.

비트 다음으로 큰 정보 단위는 바이트이다.

바이트는 8개의 비트를 묶은 것이다. 즉, 1바이트는 8비트와 같다.

그다음으로 큰 정보단위는 킬로바이트(KB)이다. 1킬로바이트는 1000바이트와 같다.

이후에 나오는 더 큰 정보단위는 이전 단위를 1000개씩 묶은 것과 같다.

 

1KB = 1024byte 아닌가?
마찬가지로 1MB = 1024KB, 1GB = 1024MB... 등으로 표현하는 것은 잘못된 관습이다.
이전 단위를 1024개 묶어 표현한 단위는 Kib, Mib, Gib, Tib이다.

 

워드(word)
워드란 CPU가 한 번에 처리할 수 있는 데이터 크기를 뜻한다.
만약 CPU가 16비트를 처리할 수 있다면, 1워드는 16비트가 된다.
이렇게 정의된 워드의 절반 크기를 하프 워드, 1배 크기를 풀위드, 2배 크기를 더블 워드라고 부른다.
워드 크기가 큰 CPU는 한 번에 처리할 수 있는 데이터가 많다.
워드 크기는 CPU마다 다르지만, 현대 컴퓨터의 워드 크기는 대부분 32비트 또는 64비트이다.
인텔의 x86 CPU는 32비트 워드 CPU, x64 CPU는 64비트 워드 CPU이다.

 


 

이진법

  • 0과 1로 수를 표현하는 방법
  • 숫자가 1을 넘어가는 시점에 자리올림
  • 우리가 일상적으로 사용하는 진법은 숫자가 9를 넘어갈 때 자리올림하는 십진법

 

이진수의 음수 표현방법 (2의 보수)

  • 먼저 1의 보수를 취한다(1과 0 반전하기)
  • 1을 더한다.
  • 이진수 1011을 음수로 만들면, 1011 -> 0100 -> 0101

제대로 구했는지 확인해 보려면 구한 값에 다시 2의 보수를 취하면 된다.

그냥 2진수만 보고 양수인지 음수인지 어떻게 알 수 있나?
컴퓨터 내부에서 어떤 수를 다룰 때, 이 수가 양수인지 음수인지를 구분하기 위해 플래그(flag)를 사용한다.
플래그를 통해서 어떤 이진수가 양수인지 음수인지 알 수 있다.
쉽게 말하자면 컴퓨터 내부의 숫자들은 양수, 또는 음수를 표시하는 방법이 있다는 뜻이다.
프로그래밍 코드에서 2진수 여부를 나타내는 방법
십진수 8을 코드상에 이진수로 나타내면 0b1010으로 나타낸다.

 


 

십육진법

  • 이진법으로 모든 정보를 표현하기엔 숫자가 너무 길어져서 사용
  • 수가 15를 넘어가는 시점에서 자리올림을 함

 

16진수를 2진수로 변환하기

위의 표를 이용하여 16진수 한 글자를 4비트의 이진수로 간주한다.

EX) 16진수 1A2B를 2진수로 변환하면 0001 1010 0010 1011이 된다.


0001 1010 0010 1011은 설명을 위해 4자리씩 끊은 것이다.
실제론 0001101000101011 이렇게 끊지 않고 표현한다.

 

2진수를 16진수로 변환하기

4자리씩 끊고 16진수에 해당하는 수로 바꿔주면 된다.

EX) 이진수 0001101000101011 -> 0001 1010 0010 1011 -> 1A2B

 

프로그래밍 코드에서 16진수 여부를 나타내는 방법
십진수 10을 코드상에 십육진수로 나타내면 0xA로 나타낸다.