Database

MySQL 로 테이블만들고, 간단한 검색하기

정코딩딩 2024. 4. 8. 14:02
create database university;
use university;

위의 SQL 문을 실행시켜서 먼저 university 라는 database 를 먼저 만들어보겠다.

제대로 실행이 되었다면 좌측 상단에 university 가 생겼을거고 만약 아직 보이지 않는다면 새로고침버튼을 눌러보자!

그리고 이 데이터베이스를 사용하겠다는 use university 를 실행시켜 해당 데이터베이스 안에서 테이블들을 만들어보자.

create table student (
	sno integer primary key,
    sname varchar(10) not null,
    year integer not null default 1,
    dept varchar(10),
    email varchar(30),
    enter_date datetime default now(),
    update_date datetime on update now(),
    constraint year_const check( year >=1  and year <= 4)
);

 

먼저, 학생 테이블 부터 생성해보겠다.

create 문을 이용해서 생성할 수 있다.

SQL 은 대소문자를 구분하지 않으므로 쿼리문을 내가 작성한 것처럼 모두 소문자로 작성하여도 되고 대문자로 작성해도 문제 없이 돌아간다. 테이블 이름도 동일하게 대소문자를 구분하지 않는다.

필드로는 sno, sname, year, dept, email, enter_date, update_date 가 있고 그 옆에는 각각의 데이터 타입이 적혀있다. 데이터 타입에 대한 자세한 설명은 이전 포스트에서 확인할 수 있다.

sno 가 primary key 로 지정되어있음을 확인할 수 있다.

추가적으로, 맨 마지막 줄을 보면 year 에 대한 제약조건을 걸어두었다!

year 는 1 보다 크고 4보다는 작은 integer 가 입력되어야한다.

 

insert into student(sno, sname, year, dept, email)
values (100, '나수영', 4, '컴퓨터', 'nah@naver.com' );

테이블을 생성했다면, 그 안에 내용물들을 채워넣을 차례이다.

내용물들은 하나를 입력할 수도, 여러개를 동시에 입력할 수도 있다! 

위에는 insert 문을 사용해서 각 필드에 맞는 정보들을 하나만 입력하는 명령어이다.

insert into student(sno, sname, year, dept, email)
values
(200, '이찬수', 3, '전기', 'lee@gmail.com'),
(300, '정기태', 1, '컴퓨터', 'jeong@konkuk.ac.kr'),
(400, '송병길', 4, '컴퓨터', 'song@yahoo.com'),
(500, '박종화', 2, '산공', 'park@konkuk.ac.kr');

이건 똑같이 insert 문을 사용해서 여러개의 내용물들을 동시에 입력하는 명령어이다!

여러개의 필드는 콤마(,) 를 이용해서 구분할 수 있고, 맨 마지막엔 꼭 세미콜론(;) 을 빼먹으면 안된다~

 

select * from student;
select * from STUDENT;

자, 이제 내용물들을 넣었으면 잘 들어갔나 확인해 볼 차례!

위에서 말했다싶이 SQL 은 대소문자를 구분하지 않는다. 그래서 student 라고 적어도 되고, STUDENT 라고 적어도 다른 문제 없이 돌아간다. 궁금하다면 두개 다 실행시켜보길😎 실행 결과는 아래 그림과 같다! 아직 update 는 코드 상으로 보여주지 않아서 잠시 무시해두면 좋겠다..ㅎ

 

학생 테이블 다음은 과목테이블이다! 

학생 테이블과 동일하게 create 문으로 다음과 같이 작성 가능하다. 여기서 cno 가 primary key 로 지정되었다.

create table course (
	cno char(4) primary key,
	cname varchar(10) not null,
	credit int,
	dept varchar(10),
	prname varchar(10),
	enter_date datetime default now(),
	update_date datetime on update now()
);

 

insert into course(cno, cname, credit, dept, prname)
values
('C123', '프로그래밍', 3, '컴퓨터', '김성국'), 
('C312', '자료구조', 3, '컴퓨터', '황수찬'), 
('C324', '화일구조', 3, '컴퓨터', '이규찬'), 
('C413', '데이터베이스', 3, '컴퓨터', '이일로'), 
('E412', '반도체', 3, '전자', '홍봉진') ;

테이블을 만들었다면 그 안에 내용물을 채워넣을 차례!

이번엔 한번에 데이터들을 전부 삽입해 보겠다.

select * from course;
select * from COURSE;

워크벤치에서 결과를 확인해보면 다음과 같다!

 

CREATE TABLE ENROL (
	SNO int,
	CNO char(4),
	GRADE char(1),
	MIDTERM int,
	FINAL int,
	ENTER_DATE datetime default now(),
	UPDATE_DATE datetime on update now(),

	PRIMARY KEY (SNO, CNO),
	FOREIGN KEY(SNO) references STUDENT(SNO) 
                ON UPDATE CASCADE 
                ON DELETE restrict,
	FOREIGN KEY(CNO) references COURSE(CNO) 
                ON UPDATE CASCADE 
                ON DELETE restrict,
	CHECK (GRADE >='A' AND GRADE <= 'F')
);

이번엔 학생 테이블과 과목 테이블을 연결해줄 등록 테이블을 생성해보겠다!

조금 집중해보자. 여기에도 sno 와 cno가 있는데, 이는 각각 학생 테이블의 primary key, 과목 테이블의 primary key 였다. 해당 내용을 밑에 FOREIGN KEY 로 작성해두었다. ON UPDATE CASCADE 는 업데이트가 되면 연결되어 있는 모든 테이블들도 업데이트 해달라는 상세조건을 작성해두었다. 

학생 테이블에서의 year 처럼 여기서 grade 도 A ~ F 까지 입력받을 수 있도록 제약조건을 걸어둔 것을 확인할 수 있다.

 

insert into enrol(sno, cno, grade, midterm, final)
values
(100, 'C413', 'A', 90, 95),
(100, 'E412', 'A', 95, 95),
(200, 'C123', 'B', 85, 80),
(300, 'C312', 'A', 90, 95),
(300, 'C324', 'C', 75, 75),
(300, 'C413', 'A', 95, 90),
(400, 'C312', 'A', 90, 95),
(400, 'C324', 'A', 95, 90),
(400, 'C413', 'B', 80, 85),
(400, 'E412', 'C', 65, 75),
(500, 'C312', 'B', 85, 80);

데이터를 삽입하고!

select * from ENROL;
select * from enrol;

내용물을 워크벤치로 확인해보면 다음과 같다.

끝!