03/13/2023 데이터베이스 시작하기 6장 요약(1) – SQL SELECT, 집계 함수

8장까지인줄 알았는데..바보같네요.. 반이상은 된줄 알았는데 6장이 SQL문의 기본에 대해 진지하게 다루고 있고, 조금은 그런것 같아서 내용입니다. 연습 때 함께 설명했다. ..모르겠지만 시작하면 끝이 보고싶어서 일찍 포스팅을 시작합니다.. 앞으로도 저를 믿어주세요..! (그럼에도 불구하고 꽤 빨리 하나를 골랐습니다..)

마지막으로 분량이 적다보니 함수에 내용이 너무 많아서 좀 더 자세히 쓰려고 2편으로 나누어서 쓰겠습니다.

예전에 쭈호금의 기초가 있어서 그런지 용어집이나 뭐 좀 쉽게 생각났는데 초보분들도 쉽게 적어보겠습니다. 서로 이야기합시다!


https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=94059951

데이터베이스 첫 단계

데이터베이스와 무관한 일반인도 열람할 수 있도록 구성되어 있습니다. 이 책은 실습과 강의로 나누어져 있다. 먼저 데이터베이스를 구성하는 다양한 요소를 확인(연습)합니다. 그럼 이 항목에

www.aladin.co.kr

제6장 SQL 문 기초

여기서 이전 장에서 설명한 계층 구조에서 스키마 계층 구조는 데이터베이스와 동일하므로 데이터베이스라고 합니다.

이제는 언어의 문법이 아닌 문법을 진지하게 배울 때입니다!

그리고 책에 있는 내용은 모두 윈도우용으로만 설명되어 있으니… 샘플 데이터 설치 방법도 가르쳐 주지도 않고… 다 찾아서 해봤으니 맥 하시는 분들은 제 것을 참고해서 같이 해보세요.

샘플 데이터를 설치하는 방법에 대한 정보는 공식 문서를 참조하십시오.

https://dev.mysql.com/doc/index-other.html

MySQL :: 기타 MySQL 문서

기타 MySQL 문서 이 페이지에는 추가 문서가 포함되어 있습니다. 다음 추가 페이지에서 더 많은 정보를 확인할 수 있습니다. MySQL Server Doxygen 문서 제목 HTML 온라인 MySQL 서버(최신 버전) 전문가 가이드 보기 언어 제목 버전 HTML 온라인

dev.mysql.com

이 링크를 통해 샘플 데이터를 다운로드하고 관련 문서를 볼 수 있습니다.


여기에서 책과 동일한 세계 데이터베이스를 찾아 zip 파일로 다운로드했습니다.

다운로드 후 파일의 압축을 풉니다.

그런 다음 login 명령을 사용하여 mysql에 로그인합니다.

mysql -u root -p


비밀번호를 입력하고 로그인한 후 다운로드한 경로에서 데이터를 활성화합니다. (참고로 mysql> 문자는 로그인이 활성 상태임을 나타내므로 그 뒤에 해당 부분을 복사하여 붙여넣기 하시면 됩니다.)

/* C:/temp/ 이 부분 실제 해당 샘플 데이터 다운 받은 경로로 바꿔주기. */
mysql> SOURCE C:/temp/world.sql;

그런 다음 많은 데이터를 직접 입력하겠습니다.


참고로 맥북에서 파일 경로를 얻으려면 파일 오른쪽 클릭 > 정보 입수 > 위치 오른쪽 클릭 > 경로 이름으로 복사이렇게 하면 파일이 있는 경로가 복사됩니다. 복사 및 붙여넣기 후 /world.sql 경로만 추가하면 끝!



아주 간단합니다 아무 이유없이 이것저것 설치했는데 공식 문서가 그냥 최고입니다.

이제 데이터가 설치되었는지 확인하십시오!

/* world 샘플 데이터베이스를 디폴트로 지정 */
mysql> USE world;
Database changed


/* world 데이터베이스에 있는 테이블 리스트들을 보기 */
mysql> SHOW TABLES;


그런 다음 세계 데이터베이스가 이 3개의 테이블과 함께 성공적으로 로드되었습니다!

후후후 간단합니다… 맥북 유저분들 참고하세요! 이 책은 Windows에서만 설명됩니다. 책보다 공문서를 읽는게 나을지도… ㅋㅋㅋㅋㅋㅋ 할 수 있다


이제 데이터가 설치되었으므로 실제 SQL 문을 작성할 수 있습니다!

참고 sql은 기본적으로 대소문자를 구분하지 않지만 가독성을 위해 명령을 대문자로 나머지는 소문자로 작성하는 것이 좋습니다.

/* city 테이블 데이터를 전부(*) 선택해줘. 뒤에 세미콜론(;) 꼭 붙일 것! */
mysql> SELECT * FROM city; -- 여기서 디폴트 데이터베이스를 world 로 붙였기 때문에 암묵적으로 적지 않아도 된다. 만약 적고 싶다면 world.city 로 표기


모든 도시 데이터를 가져왔습니다. 열이 너무 많아서 터미널에서 볼 수도 없습니다 …

/* city 데이터에서 countrycode 컬럼이 KOR 인것만 불러와주기. */
mysql> SELECT * FROM city WHERE countrycode="KOR";


이제 열 이름을 볼 수 있습니다..! 위에 보이지 않던 컬럼 이름을 볼 수 있습니다. SQL 문의 구문을 추출하는 방법을 배우면서 select, from 및 where와 같은 용어에 중점을 둘 것입니다.

여기 선택하다 ~이다 쿼리하고 싶은 데이터의미(열 이름 또는 *는 모두를 의미), 에서 로드하려는 데이터가 있습니다 데이터 테이블말한다 어디조건문사용법을 통해 특정 조건을 충족하는 날짜 검색할수있다.

음 직관적이지만 지금은 어디 다양한 조건에서 사용하여 추출 가능

mysql> SELECT * FROM city WHERE district="Pusan" ;

업무지구가 부산인 사람만 뽑았다.


그런 다음 부산 이름과 국가 코드만 추출하십시오!

– 쉼표(,)로 구분당신은 그냥 할 수 있습니다

SELECT name,countrycode FROM city WHERE district="Pusan" ;



– AND, OR 문도 사용 가능

그리고 모든 조건이 참이어야 하는 조건

또는 조건 중 하나만 참일 수 있는 조건

 /* district 가 Chollanam 이면서, population가 150000명 이상인 데이터의 name, population 을 보여줘  */
SELECT name,population FROM city WHERE district="Chollanam" AND population >= 150000 ;
/* district 가 Chollanam 이거나, population가 150000명 이상인 데이터의 name, population 을 보여줘  */
SELECT name,population FROM city WHERE district="Chollanam" OR population >= 150000 ;


또는 조건이 전 세계적으로 있으므로 데이터 양이 많습니다.

여기서 부등식과 등호 비교 연산자비교 연산자의 종류는 아래 표와 같습니다. (티스토리 기본 테이블 테마인데.. 내용만 보자.)

연산자 유형 의미
= 똑같은 것
!= 같지 않다
>= 보다 크거나 같음(보다 큼)
> 보다 큼 (초과)
<= 같거나 작다(작다)
< 미만 (미만)

그 외에도 다음과 같은 다양한 연산자가 있습니다. 우선순위가 있다의도한 대로 작동하도록 여러 연산자를 혼합하여 사용하는 경우 까치발사용하자! 책에서는 우선 순위를 표로 나타내었지만, 사실은 기억할 필요가 없으니 MySQL 연산자 우선 순위를 구글링하거나 사용할 때 괄호를 사용하는 습관을 들일 수 있습니다.


중복 행 제거검색하고 싶다면 구별 가능 키워드 사용

/* countrycode 가 KOR 인것 중에서 district 이름을 조회할건데, 중복을 제외(DISTINCT)하고 조회할게 */
SELECT DISTINCT district FROM city WHERE countrycode="KOR" ;



지금 응용 프로그램을 선택하십시오!

– 검색 결과 오름차순 정렬 정렬 기준 사용

/* countrycode 가 'KOR' 이고, district 가 'Kyonggi' 인 데이터를 인구수대로 오름차순 해서 보여줘 */
SELECT * FROM city WHERE countrycode="KOR" AND district="Kyonggi" ORDER BY population ;


여기서 경기도를 선택하려면 국가코드 조건을 적용할 필요는 없지만 일부러 AND 조건으로 사용할 조건을 추가했습니다. 참조!

/* 내림차순 키워드 추가. */
SELECT * FROM city WHERE countrycode="KOR" AND district="Kyonggi" ORDER BY population DESC;

ORDER BY 뒤에 키워드가 추가되지 않으면 암묵적으로 추가된 것입니다. 오름차순것입니다 (원래 후 ASC 키워드.)

반대로 내림차순 DESC 끝에 키워드를 추가하십시오.

여기서 한 가지 더 주의할 점! 행의 순서가 정렬되었는지 확인하려면 정렬 키(ORDER BY 뒤의 컬럼명)붓다 명확하게 결정해야 합니다.


여기에는 표시되지 않았지만 나중에 데이터가 복잡해지면 원하는 데이터가 정확하게 표시되지 않을 수 있습니다.

정확히 알고 싶다면 ORDER BY 지구별로 ,name 과 같이 쉼표를 사용하여더 많은 정밀도가 필요할 수 있지만 다음과 같이 명확하게 구분되는 날짜가 있는 경우 나. 주민의 수는 처음부터 그냥 정리하는 것이 좋다.


– 실제 데이터의 행 수를 계산하려면 계산하기 기능을 사용하십시오.

/* countrycode 가 'KOR' 인 데이터의 행 수(COUNT(*))를 보여줘 */
SELECT COUNT(*) FROM city WHERE countrycode="KOR";


여기 세트의 1행(0.00초) part는 DBMS가 반환하는 실제 데이터 행 수가 아니라 MySQL 명령줄, 즉 터미널에 표시되는 행 수입니다. 헷갈리지 말자!

– 최소값, 최대값, 평균값 송장 확인 최소, 최대, 평균 함수를 사용하다

/* countrycode 가 'KOR' 인 데이터에서 population 값의 순서대로 최소값, 최대값, 평균값을 보여줘. */
SELECT MIN(population) , MAX(population), AVG(population) FROM city WHERE countrycode="KOR" ;


– 데이터 한줄로 출력만약에 GROUP_CONCAT 사용.

/* countrycode 가 'KOR' 이고, district 가 'Chollabuk' 인 데이터를 한 행에 모아서(GROUP_CONCAT) name 을 보여줘. */  
SELECT GROUP_CONCAT(name) FROM city WHERE countrycode="KOR" AND district="Chollabuk";


말 그대로 문자열의 조합이라고 생각하시면 되고, 문자열 + 문자열은 쉼표로 구분되어 결과로 반환됩니다.

때때로 예상치 못한 길이(상한값은 시스템 변수에 의해 설정됨)가 있는 결과가 반환된다는 점에 유의하십시오. 그러니 조심해!

SQL에서도 리스트 기능따라서 DBMS마다 다르며 MySQL에서는 GROUP_CONCAT로 사용된다.

위에서 배운 DISTINCT 키워드를 사용하여 중복을 피할 수도 있습니다. 이 경우 다음을 사용하십시오.

 /* countrycode 가 'KOR' district 를 DISTINCT 키워드를 사용하여 중복을 제외하고 조회해줘. */
 SELECT GROUP_CONCAT(DISTINCT district) FROM city WHERE countrycode="KOR" ;


캡처에서 윗부분은 DISTINCT 키워드를 사용하지 않았기 때문에 모든 요소를 ​​조합한 결과이고, 아랫부분은 중복이 없는 구역의 모습입니다!


위의 사례에서 살펴본 것처럼 데이터에 대한 특정 조작이나 계산을 수행하는 도구는 사용할 수 없습니다. ‘기능’ 그리고 SQL에는 두 가지 주요 유형이 있습니다.

여기서 좀 더 검색해서 찾았습니다.

1. 집계 기능(집계 함수)

복수 행또는 열(컬럼, 세로 단위)상호간의값을 위해 집계 결과돌려주는 함수. SELECT 문에서만 사용하다.

위의 4 (합계를 계산하는 함수) 5개의 함수가 자주 사용됩니다.

이러한 집계 함수는 기본입니다. (없음. 해당 없음)은 COUNT 함수를 제외하고 카운트됩니다. , NULL을 포함한 모든 행을 계산합니다. 또한수치 데이터 외에 SUM, AVG 이외의 집계 함수도 사용할 수 있습니다.

-> 텍스트 형태로 가능하다고 합니다.

문자 데이터 ~ 안에최대값, 최소값 두번째알파벳 순서

그것을 생각하십시오 ‘ㅏ’ 로 시작하는 최소값, ‘지’


최대 값입니다.

국가코드의 최대값이 Y이므로 요수가 나옵니다.

2. 단일 값 세트에 대한 조작 또는 계산을 수행하는 기능 이 경우연속해서(행, 수평)에 있는 값에 대해 연산을 수행합니다.

하다.

ZERO는 볼 때마다 떠오르는 점인 것 같습니다. 다른 언어와 거리가 멀고 항상 그것을 지적하는 것 같습니다. 책에서 말했듯이 여기로 가겠습니다.

말 그대로 알려지지 않았습니다.결정 불가능한 가치

0이 아닌 0이 0이라는 값으로 존재함을 나타내는 데 사용하는 단어입니다.

일반 숫자/문자처럼 취급할 수 없습니다. 따라서 4개의 산술 연산 및 비교 연산을 수행할 수 없습니다. null은 수행하는 작업에 관계없이 null입니다.

이러한 값이 데이터에 존재할 가능성이 있습니다. 따라서 컬럼을 정의할 때 ‘NOT NULL’이 아닌지 확인한다.널 입력 가능

(NULL 값이 존재할 수 있습니다. 따로 정의하지 않을 경우 기본값으로 정의하는 것이 편리합니다.) 사용법에 따라 정말 의미가 있을지도 모릅니다.

그러나 DBMS는 null을 그다지 환영하지 않습니다. 이 책은 두 가지 이유를 설명합니다.

1. SQL의 코딩은 인간의 직관에 어긋난다 3개의 논리값

(참과 거짓을 제외하고 0으로 인해 알 수 없음)을 고려해야 합니다. 2. 4개의 산술 연산 또는 SQL 함수의 인수에 NULL이 포함된 경우NULL 전달

일어난다.

이 책은 또한 IS NULL 대신 =NULL을 쓰면 원하는 결과를 얻지 못할 것이라고 말합니다.위에서 언급했듯이 null은 데이터가 없음을 의미합니다. (알려지지 않은)

=와 비교할 수 없는 값이기 때문이다. 따라서 SQL에서 제로 ~라고 불리는건설 하지만 MySQL에서는 <=>

와 같은 자체 연산자와 함께 사용할 수 있습니다.

따라서 예기치 않은 null 값으로 인해 값이 null이 되어 다른 곳으로 값이 전파되는 null 전파가 발생하지 않습니다.

또한 SQL 표준에서는 A IS NOT DISTINCT FROM B를 정의하여 이를 구현한 DBMS에서도 동일한 결과를 얻을 수 있도록 NULL과 혼합 비교한다.

흠..^^ 사실 기분은 알지만 직접 만져본적이 없어서 실감이 잘 안나네요. 여기서 COUNT 함수는 0을 포함하여 작동한다는 점을 기억하고 위의 정보를 참조용으로만 읽으십시오!

여기까지는..담는 데이터가 대문자든 소문자든 상관없다는걸 발견해서 어설프게나마 통일이 안된다는걸 발견했습니다…검은색…검은색… 지금까지 꽤 많이 썼으니 다시 통일해보도록 할게요.. 헷갈리지 마세요..! 중간에 보이는거 수정했습니다


– 내가 원하는 대로 테이블의 데이터그룹 검색 에게 그룹 후

 /* countrycode 가 'KOR' 인 데이터들을 그룹별 분리 후, district 와 데이터들의 숫자를 세서(count(*)) 보여줘. */
 SELECT district, count(*) FROM city WHERE countrycode="KOR" GROUP BY district ;


사용.

위에서 언급한 집계 기능은 내가 원하는 그룹으로 분할하여 집계합니다. 위에서 그룹을 구역으로 나누었습니다. 집계 키 또는그룹화 키 ORDER BY와 같이 쉼표로 구분

복수형으로도 주어질 수 있습니다.

– 그 외에조건을 적용하여 그룹별로 정리된 데이터 찾기 에게 가지다

/* 위의 결과에서 count(*) 의 값이 6인 데이터만 조회해줘. */
SELECT district, count(*) FROM city WHERE countrycode="KOR" GROUP BY district HAVING count(*) = 6 ;


사용.

WHERE 문과 유사하게 생각할 수 있습니다.집계 함수의 조건문

내기를 하고 싶다면 사용하세요!


이것저것 여러개 시켜보고 여기저기 해보았는데 스스로도 헷갈리고 실수도 많이 했는데 책에서 친절하게 순서를 설명해줍니다.

주문 요약 작성

1. 선택

두 번째 OF

3주

4. 그룹화 기준

5. 있다

6. 주문

처음 사용하는거라 차근차근 해석해보면 직관적이라 어렵지 않아요! 위의 코드는 주석 처리됩니다. 그러니 헷갈리시면 저처럼 차근차근 해석하시면 됩니다.

마지막으로 나는 책과 함께 잘 참조된 블로그에 대한 링크를 추가했습니다.

https://rebro.kr/154

(DB/SQL) 6. 집계 함수, GROUP BY, HAVING

(목차) 1. 집계함수란? 2. COUNT 3. MIN / MAX 4. AVG / SUM 5. GROUP BY 6. HAVING 1. 집계 함수란? 집계 함수는 여러 행에서 단일 결과를 반환하는 함수입니다. SELECT 문에서

rebro.kr

책으로 확인하니 더 알 수 있었어요 ㅎㅎ 감사합니다!


오오 1부 끝! 나는 그 조직을 별로 좋아하지 않는다. 제가 직접 적어두었으니 처음부터 순서대로 읽어보시면 좋을텐데 필요한 부분만 보고자 하시는 분들에게는 조금 지저분하게 보일수도 있겠네요.. 제가 녹음한 내용은 해봐…! 최소한 한 줄씩은 항상 할 수 있어서 오랜만에 즐거웠고 곧 2부로 찾아올게요! 통증