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 수업은 난이도가 갑자기 확 올라갔다. 중간에 에러가 또 발생해서 해결하느라 두 시간은 잡아먹은 것 같다. 에러가 발생하고 해결하는데 애를 먹는 일이 하루에 한 번은 꼭 일어나는 것 같다.
해결이 되니까 다행이지, 끝까지 해결 못 하는건 상상조차 하기 싫다. 배운 것들이 어려워서 전부 다 이해는 하지 못 했지만 복습을 꼭 해놔야겠다.
오늘의 위키 작성은 그야말로 역대급으로 힘들었다. 분량이 너무 많아서 제대로 작성하지도 못 한 느낌이다. 그래도 실력있는 팀원들 덕분에 오늘도 해낼 수 있었다. 내일이 휴일이라 천만다행이다. 다음 위키작성은 덜 힘들었으면 좋겠다. 팀원분들 정말 고생 많으셨습니다.