#2 SQL
1) 하나의 DBMS에는 여러 개의 데이터베이스를 생성하고,
각각의 데이터베이스를 사용할 수 있는 사용자를 추가할 수 있습니다.
데이터베이스를 생성하고, 생성한 데이터베이스를 사용한 사용자를 추가하고 로그인해보세요.
ⓐ 데이터베이스 생성
ⓑ study_db를 사용하는 계정 생성, 권한 주기
Database 사용자 생성과 권한 주기
- Database를 생성했다면, 해당 데이터베이스를 사용하는 계정을 생성해야 합니다.
- 또한, 해당 계정이 데이터베이스를 이용할 수 있는 권한을 줘야 합니다.
- 아래와 같은 명령을 이용해서 사용자 생성과 권한을 줄 수 있습니다.
- db이름 뒤의 * 는 모든 권한을 의미한다.
- @’%’는 어떤 클라이언트에서든 접근 가능하다는 의미이고, @’localhost’는 해당 컴퓨터에서만 접근 가능하다는 의미입니다.
- flush privileges는 DBMS에게 적용을 하라는 의미입니다.
- 해당 명령을 반드시 실행해줘야 합니다.
grant all privileges on db이름.* to 계정이름@'%' identified by '암호’; grant all privileges on db이름.* to 계정이름@'localhost' identified by '암호’; flush privileges;
ⓒ 로그인
2-1) 사원의 이름과 그 사원이 속한 부서명을 구하려면 어떻게 해야할까?
사원(employee) 테이블
부서(department) 테이블
사원 이름과 부서명
select e.name as 사원이름, d.name as 부서명 from employee as e inner join department as d on e.deptno = d.deptno;
2-2) select문과 join에 대해 알아보세요
SQL Join 이란 2개 이상의 테이블로부터 관련있는 컬럼에 기초하여 행을 결합하는데 사용한다.
SELECT Orders.OrderID, Customers.CustomerName, Orders.OrderDate FROM Orders (INNER or RIGHT or LEFT or FULL) JOIN Customers ON Orders.CustomerID=Customers.CustomerID;
※inner join
from 테이블과 join 테이블에서 on 조건식이 만족하는 레코드를 선택한다.
on 조건식이 만족하지 않는다면 두 테이블의 필드도 결과로서 나오지 않으므로
레코드의 기존 필드 값이 null이 아닌 이상 null을 볼 수 없다.
※left join
from 테이블의 모든 레코드와 join 테이블의 on 조건식이 만족하는 레코드를 반환한다.
일치하는 항목이 없다면 join 테이블의 필드 값은 null이 된다.
※right join
join 테이블의 모든 레코드와 from 테이블의 on 조건식이 만족하는 레코드를 반환한다.
일치하는 항목이 없다면 from 테이블 필드값은 null이 된다.
※full join
from과 join테이블의 모든 레코드를 반환한다.
on 조건식을 만족하는 레코드가 없다면 관련 테이블의 필드 값은 null이 된다.
3-1) 칼럼의 길이가 10인데, 해당 칼럼에 값이 저장되어 있다.
이 때 칼럼의 길이를 5로 바꾼다면 어떤 일이 벌어질까?
에러가 발생하고 해당 명령은 실행되지 않는다.
에러메시지 : ERROR 1265 (01000): Data truncated for column 'a' at row 1
3-2) 문자열을 저장하는 데이터 타입인 CHAR와 VARCHAR 차이점에 대해 알아보고
어떤 상황에서 CHAR 또는 VARCHAR 를 선택하는 것이 효율적인지 생각해봅시다.
char 타입은 길이가 고정되기 때문에 저장 및 검색 속도가 빠르지만 저장공간을 낭비할 수 있다.
varchar 타입은 길이가 가변적이기 때문에 저장 및 검색이 느리지만 저장공간을 낭비하지 않는다.
char은 고정된 데이터인 성별, 주민번호 등을 저장 및 연산할 때 쓰이면 좋고,
varchar은 가변적인 데이터인 Content, Address 등을 저장 및 연산할 때 쓰이면 좋다.
3-3) 문자열 데이터 타입에는 문자셋을 지정할 수 있습니다.
문자셋에 따라 해당 필드가 차지하는 공간 크기를 한번 계산해보자.
Ex: VARCHAR(10) CHARACTER SET UTF8; 은 몇 Byte 크기를 차지할까?
ASCII 일때는 또 몇 Byte 크기를 가질까?
https://dev.mysql.com/doc/refman/8.0/en/charset-charsets.html를 통해서
MySQL이 지원하는 character sets를 볼 수 있으며
VARCHAR(10) CHARACTER SET UTF8;은 30바이트의 크기를 가지며
ASCII 일 때는 10바이트의 크기를 가진다.
'Record > boostcourse' 카테고리의 다른 글
[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #2 (0) | 2021.07.20 |
---|---|
[boostcourse] 2. 웹 백엔드 프로그래밍 기초 생각해보기 #1 (0) | 2021.07.20 |
[boostcourse] 1. SQL & JDBC 프로그래밍 생각해보기 #3 ~ #5 (0) | 2021.07.20 |
[boostcourse] 1. SQL & JDBC 프로그래밍 생각해보기 #1 (0) | 2021.07.19 |
[boostcourse] 부스트코스 웹 백엔드 과정을 시작하기 앞서 (2) | 2021.07.16 |
댓글