티스토리 뷰
SQL SUBQUERY 부속질의어
부속 질의어(subquery) 는 select 명령문의 조건에 있는 SELECT 명령문이다
부속 질의어를 다르게 말하면 부속 선택문 또는 내부선택문이라 할 수 있다. 부속 질의어에 대한 SELECT 명령문은 일반 SELECT 명령문과 약간이 차이가 있다
만약 부속 질의어가 EXISTS 연산자를 사용하지 않으면 SELECT 절에는 오직 하나의 수식만 사용되어야 한다.
SELECT 절에는 DISTINCT는 사용할 수 없다
ORDER BY 절은 사용할 수 없다.
학생 테이블
mysql> select * from student;
+----+------+-----------+-------+--------+
| no | sno | name | jumsu | course |
+----+------+-----------+-------+--------+
| 1 | 100 | 홍길동 | 100 | 수학 |
| 2 | 101 | 김철수 | 90 | 국어 |
| 3 | 102 | 김순이 | 30 | 영어 |
| 4 | 103 | 김말동 | 45 | 국어 |
| 5 | 104 | 정민철 | 80 | 역사 |
| 6 | 105 | 이만수 | 70 | 과학 |
| 7 | 106 | 안철수 | 90 | 영어 |
| 8 | 107 | 김재동 | 100 | 역사 |
| 9 | 108 | 이미자 | 95 | 수학 |
| 10 | 109 | 김기철 | 100 | |
+----+------+-----------+-------+--------+
10 rows in set (0.00 sec)
서클 테이블을 출력한 모습이다.
mysql> select * from circle;
+----+------+-----------+-----------+
| no | sno | name | president |
+----+------+-----------+-----------+
| 1 | 100 | 홍길동 | 0 |
| 2 | 101 | 김철수 | 2 |
| 3 | 102 | 김순이 | 2 |
| 4 | 103 | 김말동 | 2 |
| 5 | 104 | 정민철 | 1 |
| 6 | 105 | 이만수 | 0 |
| 7 | 106 | 안철수 | 2 |
| 8 | 107 | 김재동 | 2 |
| 9 | 108 | 이미자 | 2 |
| 10 | 109 | 김기철 | 2 |
| 11 | 110 | 김만수 | 2 |
| 12 | 200 | 김만수 | 2 |
| 13 | 201 | 김옥경 | 2 |
| 14 | 202 | 김수경 | 2 |
| 15 | 203 | 김말동 | 2 |
| 16 | 204 | 민영탁 | 2 |
| 17 | 205 | 이경철 | 2 |
| 18 | 206 | 김영진 | 2 |
| 19 | 207 | 탁재훈 | 2 |
| 20 | 208 | 안병훈 | 2 |
| 21 | 209 | 진우형 | 2 |
+----+------+-----------+-----------+
21 rows in set (0.00 sec)
1 IN 과 EXISTS 그리고 JOIN
서클에 가입한 적이 있는 학생에 대한 검색 subquery 값이다
IN 사용
mysql> select sno, name from student where sno in(select sno from circle);
+------+-----------+
| sno | name |
+------+-----------+
| 100 | 홍길동 |
| 101 | 김철수 |
| 102 | 김순이 |
| 103 | 김말동 |
| 104 | 정민철 |
| 105 | 이만수 |
| 106 | 안철수 |
| 107 | 김재동 |
| 108 | 이미자 |
| 109 | 김기철 |
+------+-----------+
10 rows in set (0.00 sec)
EXIST 사용 (서브쿼리의 값을 구한후 비교하는 IN함수에 비해 계산량이 적음)
mysql> select sno, name from student where exists (select * from circle where student.sno=circle.sno);
+------+-----------+
| sno | name |
+------+-----------+
| 100 | 홍길동 |
| 101 | 김철수 |
| 102 | 김순이 |
| 103 | 김말동 |
| 104 | 정민철 |
| 105 | 이만수 |
| 106 | 안철수 |
| 107 | 김재동 |
| 108 | 이미자 |
| 109 | 김기철 |
+------+-----------+
10 rows in set (0.00 sec)
JOIN 사용
mysql> select a.sno, a.name from student a join circle b on a.sno=b.sno;
+------+-----------+
| sno | name |
+------+-----------+
| 100 | 홍길동 |
| 101 | 김철수 |
| 102 | 김순이 |
| 103 | 김말동 |
| 104 | 정민철 |
| 105 | 이만수 |
| 106 | 안철수 |
| 107 | 김재동 |
| 108 | 이미자 |
| 109 | 김기철 |
+------+-----------+
10 rows in set (0.00 sec)
학생중 서클 등급이 0인(회장) 학생을 구하라
mysql> select sno, name from student where sno in(select sno from circle where president=0);
+------+-----------+
| sno | name |
+------+-----------+
| 100 | 홍길동 |
| 105 | 이만수 |
+------+-----------+
2 rows in set (0.00 sec)
이글이 도움이 되셨다면 아래에 로그인이 필요없는 공감 버튼을 클릭해주세요 ^^
'DEVELOPE > MYSQL&MARIADB' 카테고리의 다른 글
SQL INDEX 설명, 사용법 (0) | 2017.10.19 |
---|---|
SQL JOIN 조인 메뉴얼 (0) | 2017.10.18 |
SQL UNION / UNION ALL (0) | 2017.10.18 |
SQL 명령어 ORDER BY 정렬 (0) | 2017.10.17 |
SQL GROUP BY / HAVING (0) | 2017.10.17 |
- Total
- Today
- Yesterday
- CentOS
- 에디트플러스
- 미디어쿼리
- 카카오스토리 sns 공유
- yum
- 우분투
- mariadb 백업
- 우분투 usb 설치
- 트위터 공유소스
- 카카오스토리 url 공유
- 리눅스 명령어
- 우분투 다운로드
- 트위터 sns 공유
- 카카오스토리 공유소스
- 부트스트랩
- centos 7
- MYSQL 명령어
- SQL 정렬
- APM 설치
- 트위터 url 공유
- ubuntu
- Q6600
- 트위터 공유방법 및 소스
- CentOS 설치
- crontab
- MySQL
- 반응형 웹
- SQL 함수
- 페이스북 공유소스
- mysql 백업
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |