SQL 2 (D-91)

최우정·2022년 5월 25일
0

100일

목록 보기
10/17
post-thumbnail

📒 데이터베이스 만들기

데이터베이스를 만들기 위해서 데이터를 정의하기 위한 DDL 명령어 중에서 create 문을 사용해야 한다. create 문을 이용하여 데이터베이스를 만들려면 데이터베이스를 만들 수 있는 권한이 있어야 한다.

1. root 계정으로 접속

2. testdb3 데이터베이스 생성

3. java 사용자 계정에 testdb3 사용 권한 부여 (데이터베이스 삭제는 drop 명령어 이용)

📒 테이블 만들기

테이블을 만들기 위해서 create 문을 사용한다. 테이블은 데이터베이스 안에 만들어지는 구조이므로, 먼저 데이터베이스가 존재해야 한다.

1. java 계정으로 접속

2. testdb3 데이터베이스 선택

3. student 테이블 만들기

4. 테이블 구조 확인

📒 테이블 수정

테이블 정보를 수정하려면 alter문을 사용한다. alter문을 이용하면 속성을 추가, 삭제하거나 속성의 데이터 타입을 변경할 수 있다.

student 테이블에 새로운 전공(major) 속성(필드)을 추가해 보자.

alter table student add major varchar(20);

student 테이블에 새로운 전공(major) 속성(필드)을 삭제해 보자.

alter table student drop major;

📒 테이블 삭제

테이블 삭제는 drop 문을 사용한다.

drop table student;

📒 테이블 명세서

데이터베이스에 테이블을 만들기 위해서 먼저, 테이블의 구조를 담고 있는 테이블 정의서를 만들어야 한다.

학생 테이블(student)과 학과 테이블(department)을 만들어 보자.

학생 테이블(student)

학과 테이블(department)

✏️ 테이블 만들기

테이블 정의서를 보고 테이블을 만든다.

학생 테이블

학과 테이블

📒 INSERT 문

방법 1

insert into department(dept_name, office, office_tel) 
values ('컴퓨터학과', '101호'. '010-1111-2222');

  • dept_no에 auto_increment가 있어 값이 not null이지만 입력하지 않아도 오류가 발생하지 않는다.

방법 2

insert into department values(null, '전자공학', '301호', '010-1111-3333');

방법 3

insert into student
values (2022001, '야옹이', 3, 4),
	   (2022002, '멍멍이', 4, 4),
       (2022003, '부엉이', 4, 2),
       (2022004, '거북이', 3, 2),
       (2022005, '왈왈이', 3, 1);

📒 UPDATE문

테이블에 저장된 데이터를 수정한다.

새로운 학년이 되어 학생들이 한 학년씩 진급을 하는 경우를 처리해보자.

update student set grade=grade+1;

📒 DELETE문

5학년으로 처리된 학생은 졸업생으로 간주하여 삭제하도록 한다.

delete from student where grade=5;
또는
delete from student where grade > 4;

📒 SELETE문

데이터를 검색하려면 select 문을 사용한다.

단순 질의(query)
select 1+2;

레코드 조회
select student_id, name, grade from student;

✏️ WHERE 절

조건절을 추가해 특정 레코드를 검색한다.

select name from student where grade >=1 and grade <=3;

select name from student where grade between 1 and 3;

select name from student where grade in(1,2,3);

-> 쿼리 결과는 같다.

✏️ GROUP BY절

레코드를 그룹화하여 결과를 얻고 싶을 때 사용한다.

학과별 재학생의 수

select dept_no, count(*) from student group by dept_no

-> count(*)는 검색된 레코드의 수를 계산하는 내장 함수이다. 합계는 sum, 평균은 avg, 최소값과 최대값은 min/max가 있다.

✏️ HAVING절

GROUP BY절을 이용하여 레코드를 그룹화하고, 여기에 조건을 더 부여하여 그룹화된 결과 중 특정 결과만을 얻고자 할 때 사용한다.

학과별 재학생 수를 구하되, 학생의 수가 2명 이상인 경우를 구한다면

select dept_no, count(*) from student
group by dept_no
having count(*) >=2;

✏️ ORDER BY절

검색된 레코드를 정렬할 때 사용한다. 오름차순 ASC 정렬과 내림차순 DESC 정렬이 있다.

학생들을 가나다순으로 정렬하고자 하면
select name from student order by name asc;

✏️ LIMIT절

검색된 레코드의 수를 제한하는 데 사용한다.

select name from student limit 1;
-> 첫 번째 레코드 1개만 가져온다.

select name from student limit 0 5;
-> 가장 첫 번째 (0번)부터 5개의 레코드

✏️ JOIN

정규화를 통해 분리된 테이블을 필요에 따라 합친다.

select name, dept_name
	from student, department
    where student.dept_no=department.dept_no;
select name, d.dept_name
	from student s, department d
    where s.dept_no=d.dept_no;
select s.name, d.dept_name
	from student as s, department as d
    where s.dept_no = d.dept_no;

📒 테이블, 데이터타입, 레코드 보는 법

show table; : 현재 생성되어 있는 테이블을 보여준다.
show databases;: 현재 생성되어 있는 데이터를 보여준다.

desc student: 학생 테이블의 데이터 타입을 보여준다.

select * from student: 학생 테이블 내의 레코드를 보여준다.

profile
비전공자 Java, JavaScript, Html, Css, C++ 공부중

0개의 댓글