본문 바로가기
Development(Web, Server, Cloud)/22) LINUX - Cloud

클라우드 52일차

by tonyhan18 2022. 3. 18.
728x90
CREATE DATABASE schooldb;
use schooldb;

CREATE TABLE student (
	stdname varchar(10) primary key,
    addr CHAR(4) NOT NULL
);

CREATE TABLE club (
	clubname VARCHAR(10) primary key,
    roomno CHAR(4) NOT NULL
);

CREATE TABLE studclub (
	num int AUTO_INCREMENT PRIMARY KEY,
	stdname VARCHAR(10) NOT NULL ,
    clubname VARCHAR(10) NOT NULL,
    FOREIGN KEY(stdname) REFERENCES student(stdname),
    FOREIGN KEY(clubname) REFERENCES club(clubname)
);

위와같이 해서 DB와 테이블들을 만들어 주자

 

student에 성분을 추가해주자

ALTER TABLE student ADD major char(8);

 

 

4. 학생테이블의 열이름인 addr을 address로 변경하라

ALTER TABLE student RENAME COLUMN addr TO address;

 

 

5. 데이터 입력하기

INSERT INTO student VALUES ('김범수','경남','실용음악'),
('성시경','서울','컴퓨터공학'),('조용필','경기','법학과'),
('은지원','경북','사회체육'),('바비킴','서울','사회학');

INSERT INTO club VALUES ('수영','101호'),('바둑','102호'),
('축구','103호'),('봉사','104호');

INSERT INTO studclub VALUES (NULL,'김범수','바둑'),(NULL,'김범수','축구'),
(NULL,'조용필','축구'),(NULL,'은지원','축구'),(NULL,'은지원','봉사'),(NULL,'바비킴','봉사');

 

6. 바비킴은 '사회학'에서 전과하여 '전자공학'으로 변경되었다! 수정하세요!

UPDATE Temp_Table SET field3='변경된 값' WHERE field1 = 'data2';

UPDATE student SET major='전자공학' WHERE stdname='바비킴'

 

 

7. 학생테이블을 기준으로학생클럽 테이블을 조인하고 이 결과에 클럽테이블을 조인하여 세 테이블이 연결된다면

연결하는 방법을 알아보자

SELECT S.stdname, S.major, C.clubname, C.roomno
FROM student S 
	INNER JOIN studclub SC
		ON S.stdname = SC.stdname
	INNER JOIN club C
		ON SC.clubname = C.clubname
ORDER BY S.stdname;

위와같이 테이블 두개를 모두 INNER JOIN 해주면 결과값이 위와같이 나오게 된다.

 

8. 학생테이블을 기준으로 가입된 학생들을 출력하되, 동아리에 가입되지 않은 학생의 정보도 모두 출력하라.

 

결과는 아래와 같은 형태여야 함.

clubname roomno stdname addr major

 

SELECT C.clubname, C.roomno, S.stdname, S.address, S.major
FROM club C
	LEFT OUTER JOIN studclub SC
		ON C.clubname = SC.clubname
	LEFT OUTER JOIN student S
		ON S.stdname = SC.stdname
ORDER BY S.stdname;

SELECT C.clubname, C.roomno, S.stdname, S.address, S.major
FROM student S
	LEFT OUTER JOIN studclub SC
		ON S.stdname = SC.stdname
	LEFT OUTER JOIN club C
		ON C.clubname = SC.clubname
ORDER BY S.stdname;

대충 위와같이 두개의 쿼리를 만들었다. 

 

OUTER JOIN은 앙쪽에 모두다 존재하는 정보외에도 남은 정보도 출력된다.

만약 두 테이블이 있을 경우 요ㅚㄴ쪽테이블의 모든 정보를 출력하고 싶다면 

LEFT OUTER JOIN이 되고, 오른쪽 정보를 모두 출력하고 싶다면 RIGHT OUTER JOIN

 

<!DOCTYPE html>
<html lang="ko">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Delete</title>
</head>

<body>
	<h2>회원삭제하기</h2>
	<hr />
	<form action="delete.post.php" method="POST">
		<p>
			삭제하고자 하는 회원 ID
			<input type="text" name="userid" />
		</p>
		<p>
			<input type="submit" VALUE="삭제하기" />
		</p>
	</form>
</body>

</html>

delete.php

 

 

<?php
	$con = mysqli_connect("localhost","root","TEst!234","sqldb") or die ("MYSQL 연결에 실패하였습니다.");
	$userid = $_POST["userid"];
	echo $userid;
	$sql = "DELETE FROM usertbl WHERE userid='".$userid."'";
	$ret = mysqli_query($con, $sql);

	if ($ret) {
		printf("%s 데이터가 삭제되었습니다.<br>",$userid);
	}
	else {
		printf("회원 삭제 결과 : 안내 %s<br>",mysqli_error($con));
		printf("$userid 삭제가 실패하였습니다.<br>");
	}
	mysqli_close($con);
?>

delete.post.php

 

foreign key가 묶여있어서 삭제가 안된다.

이걸 먼저 없애준다음에 삭제해보자

728x90

'Development(Web, Server, Cloud) > 22) LINUX - Cloud' 카테고리의 다른 글

클라우드 54일차  (0) 2022.03.22
클라우드 53일차  (0) 2022.03.21
클라우드 51일차  (0) 2022.03.17
클라우드 50일차  (0) 2022.03.16
클라우드 49일차  (0) 2022.03.15