https://school.programmers.co.kr/learn/courses/30/lessons/12909
‘()((()))’와 같은 임의의 문자열을 주고 괄호의 짝이 맞으면 True, 짝이 맞지 않으면 False를 반환한다.
.replace() 메서드주어진 문자열에서 특정 문자열을 다른 문자열로 변경(대체)한다.
대체한 문자열을 자동으로 변수에 할당해주지는 않는다는 것에 주의
String str = "Hello, sixsense";
String replace = str.replace("Hello", "Thanx");
System.out.println(replace); // Thanx, sixsense
System.out.println(str); // Hello, sixsense
.indexOf() 메서드주어진 문자열에서 특정 문자열의 인덱스(순서, 위치)를 찾는다.
찾는 문자열이 없는 경우‘-1’을 반환한다.
String str = "반가워요 멋쟁이사자";
int index = str.indexOf("멋");
System.out.println(index); // 5
String str = "반가워요 멋쟁이사자";
int index = str.indexOf("출");
System.out.println(index); // -1
public class BracketWithoutStack {
public static void main(String[] args) {
String brackets = "((()(()))))";
while(brackets.indexOf("()") != -1) { // "()"가 있을 때 반복
brackets = brackets.replace("()", ""); // 괄호를 공백으로 Replace
}
if (brackets.length() == 0) { // brackets 문자열의 길이가 0이면 짝이 맞음
System.out.println("올바른 괄호 입니다");
} else {
System.out.println("올바른 괄호가 아닙니다");
}
}
}

.split() 메서드문자열을 구분자(delimiter) 기준으로 분할한다. 원본을 변경하지 않는다.
String str = "LIKE LION";
String[] sArr = str.split(" "); // 문자열을 읽으면서 공백을 만나면 문자열 분할
System.out.println(Arrays.toString(sArr)); // [LIKE, LION]
System.out.println(Arrays.toString(str)); // LIKE LION
.join() 메서드문자열을 구분자로 연결하여 하나의 문자열로 합친다.
String[] sArr = {"멋쟁이", "사자", "처럼"};
String str = String.join("-", sArr); // 배열의 문자열들을 "-"로 연결하여 str에 할당
System.out.println(str); // 멋쟁이-사자-처럼
public class bracketWithoutStack2 {
public static void main(String[] args) {
String brackets = "(()(())())";
while(brackets.indexOf("()") != -1) {
String[] split = brackets.split("\\(\\)"); // "()"를 찾으면 문자열 분할
brackets = String.join("", split); // 분할한 문자열을 합쳐서 brackets에 할당
}
if (brackets.length() == 0) {
System.out.println("올바른 괄호 입니다");
} else {
System.out.println("올바른 괄호가 아닙니다");
}
}
}

CREATE TABLE `task` (
`id` bigint NOT NULL AUTO_INCREMENT,
`created_at` datetime(6) DEFAULT NULL,
`last_modified_at` datetime(6) DEFAULT NULL,
`day_of_week` bigint DEFAULT NULL,
`deleted_at` datetime(6) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`task_status` varchar(255) DEFAULT NULL,
`title` varchar(255) DEFAULT NULL,
`week` bigint DEFAULT NULL,
`course_id` bigint DEFAULT NULL,
`user_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `users` (
`id` bigint NOT NULL AUTO_INCREMENT,
`created_at` datetime(6) DEFAULT NULL,
`last_modified_at` datetime(6) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`real_name` varchar(255) DEFAULT NULL,
`role` varchar(255) DEFAULT NULL,
`user_name` varchar(255) DEFAULT NULL,
`profile` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
)
CREATE TABLE `course` (
`id` bigint NOT NULL AUTO_INCREMENT,
`created_at` datetime(6) DEFAULT NULL,
`last_modified_at` datetime(6) DEFAULT NULL,
`course_status` varchar(255) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`end_date` date DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`start_date` date DEFAULT NULL,
`user_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_4xqvdpkafb91tt3hsb67ga3fj` (`name`)
)

INSERT INTO `course-student-db`.users
(`created_at`,`last_modified_at`,`email`,`password`,`real_name`,`role`,`user_name`) VALUES
('2023-03-12 20:31:58.841752','2023-03-29 15:24:49.345051','aaaa-test@aaaaa.com','1234','테스트학생','ROLE_STUDENT','student1234');
INSERT INTO `course-student-db`.users
(`created_at`,`last_modified_at`,`email`,`password`,`real_name`,`role`,`user_name`) VALUES
('2023-03-12 20:31:58.841752','2023-03-29 15:24:49.345051','abcd@aaaaa.com','1234','김미미','ROLE_STUDENT','student1234');

INSERT INTO `course-student-db`.task
(`created_at`,`last_modified_at`,`day_of_week`,`deleted_at`,`description`,`task_status`,`title`,`week`,`course_id`,`user_id`) VALUES
('2023-04-02 00:14:51.586722','2023-04-02 00:14:51.586722',4,NULL,'description','IN_PROGRESS','user, task 테이블 만들기',5,1,1);
INSERT INTO `course-student-db`.task
(`created_at`,`last_modified_at`,`day_of_week`,`deleted_at`,`description`,`task_status`,`title`,`week`,`course_id`,`user_id`) VALUES
('2023-04-02 00:14:51.586722','2023-04-02 00:14:51.586722',4,NULL,'description','IN_PROGRESS','CourseTable만들기',5,1,1);

select id, title from `course-student-db`.task
where week = 5
and day_of_week = 4;

course 테이블에 id와 name에 데이터를 추가

course_user 테이블을 생성 후 데이터 추가

course, course_user, user를 Join한다.
여기서 course_user는 ‘연결 테이블’ 이다.
use `course-student-db`;
select course.name, users.real_name
from users, course, course_user
where users.id = course_user.user_id
and course_user.course_id = course.id;
Q. 쿼리를 입력하고 실행했는데 에러가 난다면?
Error Code: 1146. Table 'course-student-db.course_user' doesn't exist
A. 테이블이 존재하지 않는다는 에러코드로 스키마 이름이 course-student-db 가 아니거나, course-user 라는 테이블이 존재하지 않는 경우이다.
course_user 테이블을 만들지 않았거나, 만들고 데이터를 넣지 않아서 에러가 날 수 있으니 확인을 잘 해야한다.
Error Code: 1046. **No database selected** Select the default DB to be used by double-clicking its name in the SCHEMAS list in the sidebar
A. "No database selected" 즉, "선택된 데이터베이스가 없음" 을 의미하므로 이 에러는 데이터베이스를 선택하지 않은 채로 쿼리를 실행하려고 할 때 발생한다.
위의 쿼리에서 use 문을 먼저 실행하지 않고 밑의 select 문을 실행하면 발생하는 에러이므로 반드시 use 문을 먼저 실행한 후에 select 문을 실행 해야한다.
Join 성공

멋사 백엔드 5기 (id : 1) 의 모든 학생의 real_name출력

전체 구조

User와 User_task 그리고 Task와 User_task 간의 관계를 나타낸다.
Join 코드 (Where문 Join)
select real_name, task.title, user_task.task_status
from users, task, user_task
where users.id = user_task.user_id
AND task.id = user_task.task_id

한 테이블의 레코드가 다른 테이블의 레코드와 하나씩 매핑되는 관계

한 테이블의 레코드가 다른 테이블의 여러 레코드와 매핑되는 관계

한 테이블의 레코드가 다른 테이블의 여러 레코드와 매핑되는 관계
반대로 다른 테이블의 레코드도 한 테이블의 여러 레코드와 매핑된다.

단순 DB 백업, 데이터를 다른 MySQL 인스턴스로 옮겨야 할 때, 재설치 등 상황에서 사용한다.
원하는 MYSQL 데이터를 .sql 파일로 원하는 위치에 저장한다.
.sql 파일을 Import 함으로써 데이터 불러오기 및 백업이 가능하다.
주로 집계함수와 사용 되며, 여러 개의 다양한 계산을 하기 위해 행을 그룹화 한다. (그룹 별 집계)
내림차순 혹은 오름차순으로 데이터를 정렬할 때 사용한다.
백엔드 위키 작성
알고리즘 시간은 어제 배운 Stack구문 없이 프로그래머스의 괄호 묶기를 풀어보았다. 다양한 메소드를 이용하여 풀이를 해보았는데 빠르게 이해하긴 어려워서 우리팀이 작성한 위키를 참고하여 복습해보았다. 알아두면 알고리즘 문제에 유용하게 쓸 수 있을 것 같다.
어제 이어서 진행한 DB 수업은 난이도가 갑자기 확 올라갔다. 중간에 에러가 또 발생해서 해결하느라 두 시간은 잡아먹은 것 같다. 에러가 발생하고 해결하는데 애를 먹는 일이 하루에 한 번은 꼭 일어나는 것 같다.
해결이 되니까 다행이지, 끝까지 해결 못 하는건 상상조차 하기 싫다. 배운 것들이 어려워서 전부 다 이해는 하지 못 했지만 복습을 꼭 해놔야겠다.
오늘의 위키 작성은 그야말로 역대급으로 힘들었다. 분량이 너무 많아서 제대로 작성하지도 못 한 느낌이다. 그래도 실력있는 팀원들 덕분에 오늘도 해낼 수 있었다. 내일이 휴일이라 천만다행이다. 다음 위키작성은 덜 힘들었으면 좋겠다. 팀원분들 정말 고생 많으셨습니다.