TIL : 230109

JINSEON YE·2023년 1월 9일

TIL

목록 보기
52/88

<배운 것>
맥북 32bit/64bit, CPU 아키텍처 확인하기
터미널에 uname -p 입력

Mysql

  • USE
    첫 db 사용 시 USE 문 사용.
USE 데이터베이스_이름;
  • SELECT 문의 기본 형식
    [SELECT select_expr][FROM table_references]
    [WHERE where_condision][GROUP BY {col_name | expr | position}]
    [HAVING where_condition][ORDER BY {col_name | expr | position}]
    [LIMIT {[offset,] row_count | row_count OFFSET offset}]

  • SELECT: 테이블에서 데이터를 가져올 때 사용하는 예약어입니다.

  • FROM: 데이터를 가져올 테이블 지정합니다. member 테이블에서 데이터를 가져오려면 FROM 예약어 뒤에 member를 명시합니다.

  • SELECT ~ FROM

SELECT 열_이름 FROM 테이블_이름

여러개의 열을 가져오려면 콤마(,)로 구분합니다.

  • SELECT ~ FROM ~ WHERE
    WHERE 절 : ~중 ~만 가져오기
SELECT 열_이름 FROM 테이블_이름 WHERE 조건식;
  • 관계연산자, 논리연산자
    관계연산자: > < >= <= =
    논리연산자: AND OR

  • BETWEEN ~ AND : ~와 ~사이
    숫자의 범위를 조건식에서 사용할 때 편리해요.

SELECT * FROM member WHERE height BETWEEN height 163 AND 165;
  • IN()
    문자로 표현되는 조건식을 조합할 때 편해요
    in 에 속하는 것에 포함된 것들

  • LIKE
    문자열의 일부 글자를 검색할 때 사용해요.

  • % : 무엇이든 허용 ex) 이름이 '우' 로 시작 : 우%

  • 언더바(_): 한글자 매치 ex) 이름이 '시'로 끝나는데 앞에 두 자인 것 : __시

  • 서브쿼리
    SELECT 안에 또 다른 SELECT

  • ORDER BY
    결과가 출력되는 순서를 조절합니다.

ORDER BY 테이블명 DESC; : 내림차순

ORDER BY의 기본값은 ASC(ascending) 오름차순 입니다.

SELECT mem_id, mem_name, debut_date, height
	FROM member
	WHERE height >= 164
	ORDER BY height DESC, debut_date ASC;

평균 키가 같을 때는 데뷔일자가 빠른 순서로 정렬

  • LIMIT
    LIMIT 3 = 0번째부터 3번째까지
    LIMIT 3 OFFSET 0 은 0번째부터 3번째까지
    ex) LIMIT 3 == LIMIT 0, 3 == LIMIT 3 OFFSET 0

  • DISTINCT
    조회된 결과에서 중복된 데이터를 1개만 남깁니다. : 중복제거

SELECT DISTINCT addr FROM member;
  • GROUP BY
    출력 결과를 그룹으로 묶어줍니다. 주로 다음의 집계함수와 함께 사용됩니다.
  • 집계 함수
    함수명설명
    SUM()합계
    AVG()평균
    MIN()최소값
    MAX()최대값
    COUNT()행의 개수
    COUNT(DISTINCT)행의 개수(중복 제거)

각 회원의 구매한 개수(amount) 를 합쳐서 출력 하려면

SELECT mem_id, SUM(amount) FROM buy GROUP BY mem_id;

각 회원이 구매한 금액의 총합 (price * amount)을 출력 하려면

SELECT mem_id, SUM(price*amount) FROM buy GROUP BY mem_id;
  • HAVING 절
    위의 결과 중에 총 구매액이 1000 이상인 회원을 찾는다면?
SELECT mem_id, SUM(price*amount) 
	FROM buy
	GROUP BY mem_id
	HAVING SUM(price*amount) > 1000;

HAVING은 집계 함수에 대해서 조건을 제한하는 것이라고 생각하면 됩니다.

  • HAVING절은 꼭 GROUP BY 절 다음에 나와야 합니다.

에러 메세지

  • 에러발생 :
    Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "\000a create table board (\000a id bigint not null,\000a created_at timestamp(6),\000a modified_at timestamp(6),\000a content varchar(255),\000a password varchar(255),\000a title varchar(255),\000a [*]user varchar(255),\000a primary key (id)\000a )"; expected "identifier"; SQL statement:


에러에서 [*]user varchar(255), \000a
user 앞에만 *이 붙은 것을 확인.

해결:
domain안에 order, group과 같은 예약어가 있으면 테이블이 생성할 수 없어 에러가 발생된다고 함.
`@Column(name ="users")` 컬럼명을 바꿔주어 에러 해결

테이블 명에만 user가 예약어로 걸리는 줄 알았는데, 에러메세지를 더 잘 뜯어봐야겠다.

Mysql 설치

  • mysql 설치 참고
    Brew 실행 도중 Error: Cannot Install In Homebrew On ARM Processor In Intel Default Prefix 발생 시 Brew 에러 해결 방법 을 참고
    mysql 비밀번호 설정 시 ERROR : Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 가 발생하면 mysql 에러 해결 을 참고
    Mysql 설치 완료.
    (뭐가 잘 안 돼서(/usr/local 에서 /opt/homebrew로 변경한 것이 지속이 안됨.) homebrew도 재설치했다.. homebrew 설치 참고)

Mysql workbench 설치

결론 : m1 mac에서 사용할 워크벤치는 8.0.28을 설치해야 한다.

mysqlworkbench 응용 프로그램이 예기치 않게 종료되었습니다. 오류가 발생하면 mysqlworkbench 에러 해결 을 참고

근데 또 에러가 뜸... 아니 무슨 에러가 끝도 없노 m1 mac에서 mysql workbench가 설치가 안 돼요. 참고


우리가 겪는 오류는 이미 외국인분들이 겪었던 오류다.. 영어에 쫄지말고 번역기를 돌리자^^..

profile
백엔드 개발자

0개의 댓글