{"id":22985054,"url":"https://github.com/hhejo/sql-mysql","last_synced_at":"2025-04-02T11:09:18.170Z","repository":{"id":254673243,"uuid":"845754211","full_name":"hhejo/sql-mysql","owner":"hhejo","description":"MySQL study","archived":false,"fork":false,"pushed_at":"2024-08-25T22:05:04.000Z","size":3,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-08T02:11:12.971Z","etag":null,"topics":["mysql","sql"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hhejo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-21T21:36:31.000Z","updated_at":"2024-11-18T00:19:14.000Z","dependencies_parsed_at":"2024-12-15T03:20:00.002Z","dependency_job_id":"3f0f28cb-fb01-4d84-9d58-2d893021b8d8","html_url":"https://github.com/hhejo/sql-mysql","commit_stats":null,"previous_names":["hhejo/sql-mysql"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hhejo%2Fsql-mysql","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hhejo%2Fsql-mysql/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hhejo%2Fsql-mysql/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hhejo%2Fsql-mysql/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hhejo","download_url":"https://codeload.github.com/hhejo/sql-mysql/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246802623,"owners_count":20836373,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mysql","sql"],"created_at":"2024-12-15T03:19:52.558Z","updated_at":"2025-04-02T11:09:18.145Z","avatar_url":"https://github.com/hhejo.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# SQL with MySQL\n\n## 1. 데이터베이스\n\n```sql\nSHOW DATABASES; -- 데이터베이스 목록 조회\nDROP DATABASE IF EXISTS mydb; -- 데이터베이스가 있다면 삭제\nCREATE DATABASE mydb; -- 데이터베이스 생성\nUSE mydb; -- 데이터베이스 사용\n```\n\n## 2-1. 테이블 생성, 조회, 삭제\n\n```sql\nCREATE TABLE product (\nMYKEY INT UNSIGNED NOT NULL AUTO_INCREMENT,\nPRODUCT_ID TEXT,\nTITLE VARCHAR(50),\nPRICE INT UNSIGNED,\nDISCOUNT INT,\nDELIVERY TEXT,\nPRIMARY KEY(MYKEY)\n);\nDESC product; -- 테이블 내림차순 조회 정렬\nSHOW TABLES; -- 테이블 목록 조회\nDROP TABLE IF EXISTS product; -- 테이블이 있다면 삭제\n```\n\n```sql\nSHOW TABLES;\nCREATE TABLE customer (\nno INT UNSIGNED NOT NULL AUTO_INCREMENT,\nname CHAR(20) NOT NULL,\nage TINYINT,\nphone VARCHAR(20),\nemail VARCHAR(30) NOT NULL,\naddress VARCHAR(50),\nPRIMARY KEY(no)\n);\nDESC customer;\n```\n\n## 2-2. 테이블 컬럼 조작\n\n```sql\nALTER TABLE mytable ADD COLUMN newcol VARCHAR(10) NOT NULL; -- 컬럼 추가\nALTER TABLE mytable MODIFY COLUMN col VARCHAR(20) NOT NULL; -- 컬럼 타입 변경\nALTER TABLE mytable CHANGE COLUMN col1 col2; -- 컬럼 이름 변경\nALTER TABLE mytable CHANGE COLUMN col1 col2 VARCHAR(10); -- CHANGE로 타입까지도 변경 가능\nALTER TABLE mytable DROP COLUMN col; -- 컬럼 삭제\n```\n\n```sql\nSHOW DATABASES;\nDROP DATABASE IF EXISTS mydata;\nCREATE DATABASE mydata;\nUSE mydata;\n\nCREATE TABLE mytable (\nid INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,\ntitle VARCHAR(10) NOT NULL,\ncontent VARCHAR(40),\nPRIMARY KEY(id)\n);\nDESC mytable;\n\nALTER TABLE mytable MODIFY COLUMN title VARCHAR(15) NOT NULL;\nALTER TABLE mytable CHANGE COLUMN content VARCHAR(50) NOT NULL;\nALTER TABLE mytable CHANGE COLUMN content con VARCHAR(40) NOT NULL;\n```\n\n## 3-1. 데이터 입력\n\n```sql\nUSE mydata;\nSHOW TABLES;\nDESC mytable;\n\n-- id, name, age, language\n\nINSERT INTO mytable VALUES( 1, 'hejo', 31, 'javascript');\nSELECT * FROM mytable;\n\nINSERT INTO mytable (name, age, language) VALUES('hijo', 21, 'python');\n```\n\n## 3-2. 데이터 검색\n\n```sql\nUSE mydata;\nSHOW TABLES;\nDESC mytable;\n\nSELECT * FROM mytable;\n\nSELECT nickname, lang FROM mytable;\n\nSELECT nickname AS n_name FROM mytable;\n\nSELECT age, n_name FROM mytable ORDER BY id DESC;\nSELECT lang FROM mytable ORDER BY age;\nSELECT n_name, lang FROM mytable ORDER BY id ASC;\n\nSELECT age, n_name FROM mytable WHERE age \u003c 18 DESC;\nSELECT lang, age FROM mytable WHERE age = 20;\nSELECT n_name FROM mytable WHERE age \u003e 33 ASC;\n\nSELECT age, n_name FROM mytable WHERE age \u003c 20 AND age \u003e 10;\nSELECT age, n_name FROM mytable WHERE age = 30 OR n_name = 'hello';\n\nSELECT id, n_name FROM mytable WHERE name LIKE 'o';\nSELECT id, n_name FROM mytable WHERE name LIKE 'o%';\nSELECT id, n_name FROM mytable WHERE name LIKE '%o';\nSELECT id, n_name FROM mytable WHERE name LIKE '%o%';\nSELECT id, n_name FROM mytable WHERE name LIKE 'o__';\nSELECT id, n_name FROM mytable WHERE name LIKE '_o';\n\nSELECT * FROM mytable LIMIT 5; -- 처음부터, 5개만\nSELECT * FROM mytable LIMIT 100, 10; -- 101번째부터, 10개만\n```\n\n조합 순서\n\n```\nSELECT FROM WHERE ORDER BY LIMIT\n```\n\n## 3-3. 데이터 수정\n\n```sql\nUPDATE mytable SET n_name = 'hi' WHERE id = 1;\n\nUPDATE mytable SET n_name = 'hi', age = 24 WHERE id = 2;\n```\n\n## 3-4. 데이터 삭제\n\n```sql\nDELETE FROM mytable WHERE id = 1;\n\nDELETE FROM mytable; -- 모든 데이터 삭제\n```\n\n## 4. 데이터 분석\n\n`LIMIT`\n\n- 결과 개수 제한\n\n```sql\nSELECT * FROM tb LIMIT 10;\n```\n\n`COUNT`\n\n- 데이터 행의 수\n\n```sql\nSELECT COUNT(*) FROM tb;\n```\n\n`DISTINCT`\n\n- 특정 컬럼값 출력 시 중복된 값을 출력하지 않음\n- 유일한 컬럼값 확인\n\n```sql\nSELECT DISTINCT col FROM tb;\n```\n\n`SUM`\n\n- 특정 컬럼값의 합계\n\n```sql\nSELECT SUM(col) FROM tb;\n```\n\n`AVG`\n\n- 특정 컬럼값의 평균\n\n```sql\nSELECT AVG(col) FROM tb;\n```\n\n`MAX`\n\n- 특정 컬럼값의 최댓값\n\n```sql\nSELECT MAX(col) FROM tb;\n```\n\n`MIN`\n\n- 특정 컬럼값의 최솟값\n\n```sql\nSELECT MIN(col) FROM tb;\n```\n\n`GROUP BY`\n\n- 특정 컬럼값을 기반으로 그룹핑\n\n```sql\nSELECT col1 FROM tb GROUP BY col2;\nSELECT COUNT(*) FROM tb GROUP BY col;\n```\n\n`ORDER BY`\n\n- 특정 컬럼값을 기준으로 데이터 정렬\n\n```sql\nSELECT * FROM tb ORDER BY col;\nSELECT * FROM tb ORDER BY col DESC;\nSELECT * FROM tb ORDER BY col ASC;\n```\n\n`AS`\n\n- 표시할 컬럼명 변경\n\n```sql\nSELECT COUNT(*) AS new FROM tb;\n```\n\nSQL 조건 순서\n\n```\nSELECT 컬럼\nFROM 테이블\nWHERE 조건\nGROUP BY 컬럼\nORDER BY 컬럼\nLIMIT\n```\n\n## 5. FOREIGN KEY\n\n`FOREIGN KEY`\n\n```sql\nDROP DATABASE IF EXISTS db;\nCREATE DATABASE db;\nUSE db;\n\n-- userTb\nDROP TABLE IF EXISTS userTb;\nCREATE TABLE userTb (\n  userid CHAR(8) NOT NULL PRIMARY KEY,\n  username VARCHAR(10) UNIQUE NOT NULL,\n  birthyear INT NOT NULL,\n  addr CHAR(2) NOT NULL,\n  phone CHAR(8),\n  height SMALLINT,\n  mdate DATE,\n  -- UNIQUE INDEX idx_userTb_name (name),\n  -- INDEX idx_userTb_addr (addr)\n);\n\n-- buyTb\nDROP TABLE IF EXISTS buyTb;\nCREATE TABLE buyTb (\n  num INT AUTO_INCREMENT NOT NULL PRIMARY KEY,\n  userid CHAR(8) NOT NULL,\n  prodname CHAR(4),\n  groupname CHAR(4),\n  price INT NOT NULL,\n  amount SMALLINT NOT NULL,\n  FOREIGN KEY (userid) REFERENCES userTb(userid)\n);\n\n-- INSERT userTb\nINSERT INTO userTb VALUES('HHJ', '하하주', 1990, '서울', '12344321', '2024-1-1');\n\n-- INSERT buyTb\nINSERT INTO buyTb (userid, prodname, groupname, price, amount) VALUES('HHJ', '냉장고', '가전', 40, 7);\n\n-- DELETE 에러 (buyTb에 해당 userid를 참조하는 데이터 존재)\nDELETE FROM userTb WHERE userid = 'HHJ';\n```\n\n## 6. HAVING\n\n`HAVING`\n\n- 집계함수를 가지고 조건비교를 할 때 사용\n- `GROUP BY`와 함께 사용\n\n```sql\nSELECT col FROM tb GROUP BY col HAVING COUNT(*) \u003e 50;\n```\n\n## 7. JOIN\n\n`JOIN`\n\n- 두 개 이상의 테이블로부터 필요한 데이터를 연결해 하나의 포괄적인 구조로 결합시키는 연산\n- `INNER JOIN`, `OUTER JOIN`이 있음\n\n`INNER JOIN`\n\n- 두 테이블에 해당 필드값이 매칭되는 (두 테이블의 모든 필드로 구성된) 레코드만 가져옴\n- 조인하는 테이블의 `ON` 절의 조건이 일치하는 결과만 출력\n\n```sql\nSELECT * FROM tb1 JOIN tb2 ON tb2.id = tb1.id;\n\nSELECT * FROM tb1 INNER JOIN tb2 ON tb2.id = tb1.id WHERE tb2.age \u003e 20;\n\nSELECT * FROM tb1 a JOIN tb2 b ON a.id = b.id;\n```\n\n`OUTER JOIN`\n\n- `LEFT OUTER JOIN`, `RIGHT OUTER JOIN`이 있음\n\n`LEFT OUTER JOIN`\n\n- 왼쪽 테이블에서 모든 레코드와 함께, 오른쪽 테이블에 왼쪽 테이블의 레코드와 매칭되는 레코드를 붙여서 가져옴\n\n```sql\nSELECT * FROM tb1 a LEFT OUTER JOIN tb2 b ON a.id = b.id;\n```\n\n`RIGHT OUTER JOIN`\n\n- 오른쪽 테이블에서 모든 레코드와 함께, 왼쪽 테이블에 왼쪽 테이블 레코드와 매칭되는 레코드를 붙여서 가져옴\n\n```sql\nSELECT * FROM tb1 a RIGHT OUTER JOIN tb2 b ON a.id = b.id;\n```\n\n## 8. Sub Query\n\nSubQuery\n\n- SQL문 안에 포함된 SQL문\n- SQL문 안에서 괄호를 사용해 서브쿼리문 추가 가능\n- 테이블과 테이블 간의 검색 시, 검색 범위(테이블 중 필요한 부분만 먼저 가져오도록)를 좁히는 기능에 주로 사용\n- JOIN은 출력 결과에 여러 테이블의 열이 필요한 경우에 유용\n- 대부분의 서브쿼리는 JOIN문으로 처리 가능\n\n```sql\nSELECT col FROM tb1 INNER JOIN tb2 ON tb1.code = tb2.code WHERE tb2.age = 30;\n\nSELECT col FROM tb1 WHERE code IN (SELECT code FROM tb2 WHERE tb2.age = 20);\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhhejo%2Fsql-mysql","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhhejo%2Fsql-mysql","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhhejo%2Fsql-mysql/lists"}