목록Database (35)
YS's develop story
Cartesian Product SELECT * FROM instructor, teaches from절에 위와 같이 테이블을 두 개 쓰게 된다면 가능한 모든 조합으로 테이블을 이어 붙여서 출력하게 됩니다. 왼쪽은 classroom 테이블, 오른쪽은 department 테이블입니다. classroom과 department테이블을 Cartesian product를 진행했습니다. SELECT * FROM classroom,department Cartesian Product는 이 기능 하나만으로 유용하지 않습니다. 가능한 모든 조합으로 테이블을 이어 붙이기 때문에 쓸데없는 튜플들이 많이 생성됩니다. 하지만 Where키워드와 함께 사용한다면 매우 유용합니다. 아래와 같이 사용하게 된다면 유용하게 사용될 수 있습니..
Super key, Candidate key, Primary key, Foreign key 비교 위와 같은 테이블이 있습니다 테이블에 있는 각각의 튜플들을 구분할 수 있는 K를 Super key라고 합니다. {ID} {ID, name} 위 값들을 통해 테이블에서 저 값에 해당하는 특정한 튜플이 무엇인지 알 수 있기 때문에 Super key라고 할 수 있겠죠 {name} 같은 경우는 Super key가 아닙니다. 동명이인이 있을 수 있기 때문입니다. Super key가 가져야 되는 최소한의 값만 가진 것을 Candidate key라고 합니다. Candidate key는 여러 개 있을 수 있습니다. {ID} - Candidate key라고 할 수 있습니다. {ID, name} - 각 튜플들을 식별하는데 불필..
관계형 데이터베이스와 NoSQL 및 DDL, DML의 정의 수많은 소프트웨어 제품이 그런 것처럼 데이터베이스에도 여러 종류가 있습니다. 데이터베이스는 데이터를 보존하는 형식에 따라 여러 가지로 구분되며 각각의 특징이 있습니다. 그중에서 관계형 데이터베이스에 대해 알아봅시다. 관계형 데이터베이스 모델 위와 같이 2차원 표 형식으로 데이터를 관리하는 데이터베이스로, 현재 가장 주류로 사용되고 있습니다. 테이블은 열과 행으로 이루어져 있으며 테이블의 column들은 특성(Attribute)을 나타냅니다. 각 Row(Tuple)들은 순서쌍으로 이루어져 있습니다. 위 사진은 관계형 데이터베이스 모델의 예시입니다. No SQL 데이터베이스 최근 관계형 데이터베이스 이외의 데이터베이스로 주목을 받아온 것이 NoSQL..
트랜잭션의 의미 및 Node MySQL Transactions 적용해보기 3학년 전공 필수과목 데이터베이스.. 매우 중요한 개념인 Transactions에 대해 알아봅시다 transaction은 여러 개의 연속된 쿼리로 구성되어 있는데 하나의 작업처럼 작동해야 합니다. SQL standard는 SQL 문이 실행될 때 트랜잭션이 암시적으로 시작되도록 지정해줍니다. 트랜잭션은 아래의 요소 중 하나의 상태로 끝나야 합니다. Commit work 트랜잭션이 시작부터 끝날 때 때까지 수행되었던 모든 쿼리문들의 작업을 데이터베이스에 영구적으로 업데이트하는 것 Rollback work 트랜잭션이 시작부터 끝날 때까지 수행되었던 작업들을 모두 취소하는 것 트랜잭션의 원자성 완전히 실행되거나 (Commit) 발생하지 않..
MySQL 중복된 결과를 제거하는 distinct 아래와 같이 Community라는 테이블에 내가 작성한 글들의 책이름과 책 인덱스를 출력하도록 쿼리를 짰습니다. 하지만 문제점이 있습니다. 14번 인덱스에 해당하는 '부의 추월차선'에 관련된 글을 두 개 작성했기 때문에 중복된 출력 결과가 나오게 됩니다. select Community.bookIdx,bookName from Book left outer join Community on Community.bookIdx = Book.bookIdx where userIdx = ? and Community.status = 1 and Book.status =1; distinct를 사용하면 이러한 중복된 결과를 제거하고 출력할 수 있습니다. select distinc..
MySQL ) LIMIT을 활용하여 페이징 쿼리 활용하기 아래와 같이 Restaurant라는 테이블이 있습니다. 또한 아래와 같이 Review라는 테이블이 있습니다. 마지막으로 아래와 같은 Area라는 테이블도 있습니다. 아래와 같은 쿼리를 작성하게 되면 식당 이름과 reviewCount, distance를 보여주게 됩니다. select restaurantName,ifnull(reviewCount, 0) reviewCount, round(6371 * acos(cos(radians(areaLatitude)) * cos(radians(restaurantLatitude)) * cos(radians(restaurantLongitude) - radians(areaLongitude)) + sin(radians(ar..
MySQL ) 변수에 값을 할당하여 값마다 다르게 정렬하는 쿼리 짜기. 아래와 같이 Restaurant라는 테이블이 있습니다. 또한 아래와 같이 Review라는 테이블이 있습니다. 마지막으로 아래와 같은 Area라는 테이블도 있습니다. 아래와 같은 쿼리를 작성하게 되면 식당 이름과 reviewCount, distance를 보여주게 됩니다. select restaurantName,ifnull(reviewCount, 0) reviewCount, round(6371 * acos(cos(radians(areaLatitude)) * cos(radians(restaurantLatitude)) * cos(radians(restaurantLongitude) - radians(areaLongitude)) + sin(ra..
MySQL ) left outer join 활용, ifnull 활용 아래와 같이 Restaurant라는 테이블이 있습니다. 또한 아래와 같이 Review라는 테이블이 있습니다. 아래와 같은 쿼리를 실행하면 각 식당의 리뷰수가 몇 개 인지 출력할 수 있습니다. select restaurantName,reviewCount from Restaurant inner join (select restaurantId, count(*) as reviewCount from Review group by restaurantId) ReviewCount on Restaurant.restaurantId = ReviewCount.restaurantId 리뷰수 가 0개인 식당도 같이 출력하게 하려면 null 값도 표시 하는 left ..
MySQL ) 기존 칼럼에서 값을 +1 해주기 쿼리가 실행될 때마다 특정 칼럼의 값을 +1 증가시키려면 어떻게 해야 할까요? 조회수와 같은 요소는 이런 요소를 활용해야 할 것 같습니다. Cafe라는 테이블에 cafeStar라는 칼럼을 주목해 주세요, 아래와 같은 쿼리를 2번 실행하면... update Cafe set cafeStar =Cafe.cafeStar + 1 where cafeId = 1; 해당 값에서 +2가 추가된 것을 볼 수 있습니다. 이를 조회 수 같은 칼럼에 활용하면 편할 것 같습니다 :)
DataGrip 사용 중 발생 한 에러.... Server returns invalid timezone. Need to set 'serverTimezone' property. 해결법은 엄청 간단합니다. 아래를 참고해주세요. Advanced - Name를 클릭 후 정렬 후 - serverTimeZone을 Asia/Seoul로 설정 Test Connection확인 후 실행하면 에러가 해결됩니다!!