SQL 문법 - SELECT

Mysql 설치시 제공되는 Sakila, World DB를 활용한 SELECT 예제를 진행한다.

Select : 데이터 조회하기

기본 형식

SELECT [컬럼1, 컬럼2, ...] FROM [테이블]

하나의 열을 조회

SELECT column1 FROM tablename;

하나의 열을 조회

SELECT column1 FROM tablename;

두 개 이상의 열을 조회

SELECT column1, column2 FROM tablename;

전체 열을 조회

SELECT * FROM tablename;

WHERE문

테이블에 저장된 전체 데이터를 조회하게되면 시간이 오래 걸려 출력이 늦어지게 되고, 과부하를 줄이기 위해 내가 원하는 조건의 데이터만 WHERE문을 이용하여 조회한다.

기본 형식

SELECT [컬럼1, 컬럼2, ...] FROM [테이블] WHERE [컬럼] [비교연산자] [값]

비교연산자 종류

  • 컬럼 = 조건값 : 조건값과 동일한 값을 조회

  • 컬럼 !=(<>) 조건값 : 조건값과 같지 않은 값을 조회

  • 컬럼 < 조건값 : 조건값 보다 작은 값을 조회

  • 컬럼 <= 조건값 : 조건값보다 작거나 같은 값을 조회

  • 컬럼 > 조건값 : 조건값보다 큰 값을 조회

  • 컬럼 >= 조건값 : 조건값보다 크거나 같은 값을 조회

※ 익숙한 비교 연산자 외 <>, !<, !> 만 숙지하면 된다.
※ 크기를 비교하는 연산자는 숫자에만 사용하는 것을 권장한다.

where문에서 비교 연산자 사용

= 연산자

actor 테이블에서 first_name 컬럼의 값이 michael인 데이터 조회

mysql> select * from actor where first_name = 'michael';
+----------+------------+-----------+---------------------+
| actor_id | first_name | last_name | last_update         |
+----------+------------+-----------+---------------------+
|      174 | MICHAEL    | BENING    | 2006-02-15 04:34:33 |
|      185 | MICHAEL    | BOLGER    | 2006-02-15 04:34:33 |
+----------+------------+-----------+---------------------+
2 rows in set (0.00 sec)

<>, != 연산자

language 테이블에서 name 컬럼의 값이 English가 아닌 데이터 조회

mysql> select * from language where name <> 'English';
+-------------+----------+---------------------+
| language_id | name     | last_update         |
+-------------+----------+---------------------+
|           2 | Italian  | 2006-02-15 05:02:19 |
|           3 | Japanese | 2006-02-15 05:02:19 |
|           4 | Mandarin | 2006-02-15 05:02:19 |
|           5 | French   | 2006-02-15 05:02:19 |
|           6 | German   | 2006-02-15 05:02:19 |
+-------------+----------+---------------------+
5 rows in set (0.00 sec)

> 연산자

address 테이블에서 city_id 컬럼의 값이 598보다 큰 데이터 조회

mysql> select address, district, city_id from address where city_id > 598;
+---------------------+------------+---------+
| address             | district   | city_id |
+---------------------+------------+---------+
| 346 Cam Ranh Avenue | Zhejiang   |     599 |
| 1889 Valparai Way   | Ziguinchor |     600 |
+---------------------+------------+---------+
2 rows in set (0.00 sec)

< 연산자

payment 테이블에서 payment_date 컬럼의 값이 2005-05-25 이전인 데이터 조회

mysql> select payment_id, amount, payment_date from payment where payment_date < '2005-05-25';
+------------+--------+---------------------+
| payment_id | amount | payment_date        |
+------------+--------+---------------------+
|       3504 |   2.99 | 2005-05-24 22:53:30 |
|       6003 |   6.99 | 2005-05-24 23:05:21 |
|       6440 |   4.99 | 2005-05-24 23:31:46 |
|       7274 |   1.99 | 2005-05-24 23:11:53 |
|       8987 |   4.99 | 2005-05-24 23:04:41 |
|      11032 |   3.99 | 2005-05-24 23:03:39 |
|      12377 |   2.99 | 2005-05-24 22:54:33 |
|      14728 |   0.99 | 2005-05-24 23:08:07 |
+------------+--------+---------------------+
8 rows in set (0.01 sec)

<= 연산자

payment 테이블에서 payment_id 컬럼이 5보다 작거나 같은 데이터 조회

mysql> select payment_id, amount, payment_date from payment where payment_id <= 5;
+------------+--------+---------------------+
| payment_id | amount | payment_date        |
+------------+--------+---------------------+
|          1 |   2.99 | 2005-05-25 11:30:37 |
|          2 |   0.99 | 2005-05-28 10:35:23 |
|          3 |   5.99 | 2005-06-15 00:54:12 |
|          4 |   0.99 | 2005-06-15 18:02:53 |
|          5 |   9.99 | 2005-06-15 21:08:46 |
+------------+--------+---------------------+
5 rows in set (0.00 sec)

>= 연산자

payment_id가 5보다 크거나 같은 데이터 조회


mysql> select payment_id, amount, payment_date from payment where payment_id >= 5;
+------------+--------+---------------------+
| payment_id | amount | payment_date        |
+------------+--------+---------------------+
|       5    |   9.99 | 2005-06-15 21:08:46 |
|       6    |   3.99 | 2005-06-15 23:04:20 |
|       7    |   2.99 | 2005-06-16 10:32:10 |
|       8    |   4.99 | 2005-06-16 11:01:45 |
|       9    |   1.99 | 2005-06-16 12:40:00 |
+------------+--------+---------------------+
5 rows in set (0.01 sec)

논리 연산자 종류 및 예시

AND

두 개 이상의 조건이 모두 참일 때 데이터를 조회

레벨이 1이고 성별이 남자인 회원

SELECT * FROM member WHERE mb_level = 1 AND mb_sex = 'M';

OR

두 개 이상의 조건 중 하나라도 참이면 결과가 참

레벨이 1이거나 성별이 남자인 회원

SELECT * FROM member WHERE mb_level = 1 OR mb_sex = 'M';

NOT

조건의 반대 값이 참일 때 결과를 반환

레벨이 100이 아닌 회원

SELECT * FROM member WHERE NOT mb_level = 100;

LIKE

문자열 패턴과 일치하는 데이터를 찾음

이름이 김씨인 회원 (이름에 김을 포함)

SELECT * FROM member WHERE mb_name LIKE '김%';

BETWEEN

지정된 범위 내의 데이터를 조회

회원 포인트가 3000이상 5000이하인 회원

SELECT * FROM member WHERE mb_point BETWEEN 3000 and 5000;

가입일이 11월1일 ~ 11월 30일인 회원

SELECT * FROM member WHERE regDate BETWEEN '2024-11-01' and '2024-11-30';

IN

피연산자가 값 목록에 하나라도 포함되어 있다면 데이터 조회

레벨이 1, 2, 3인 회원을 조회

SELECT * FROM member WHERE mb_level IN (1, 2, 3);

EXISTS

하위쿼리에 행이 포함되면(결과가 존재하는지) 데이터를 조회

ALL

서브쿼리에서 반환된 모든 값과 비교하여 조건을 만족하는 데이터 조회

ANY

서브쿼리에서 반환된 하나 이상의 값과 비교하여 조건을 만족하는 데이터

SOME

서브쿼리에서 반환된 하나 이상의 값과 비교하여 조건을 만족하는

※ AND, OR, IN, NOT, BETWEEN, LIKE 정도가 쿼리문 작성시 자주 사용된다.

NULL

NULL값인 컬럼 조회

SELECT * FROM member WHERE mb_addr IS NULL;

NULL 값이 아닌 컬럼 조회

SELECT * FROM member WHERE mb_addr IS NOT NULL;

※ NULL은 특정 값이 아니기때문에 WHERE mb_addr = NULL와 같이 = 연산자를 사용하지 않는다.

반응형
1
2
3
4
5
6
7
8
9
<select name="" id="scltList" title="포털 리스트">
 
<option value="x" selected="selected" id="slct">--선택--</option>
<option value="http://www.naver.com">네이버</option>
<option value="http://www.google.co.kr/">구글</option>
<option value="http://www.daum.net/">다음</option>
 
</select>
        
cs
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script type="text/javascript">
 
/* select tab function */
var selectTab = document.getElementById("scltList"); // 셀렉트를 변수에 저장
    
selectTab.addEventListener("change",function(){ // change 이벤트 발생
 
    var val = selectTab.options[selectTab.selectedIndex].value; // option value값 저장
 
    if(val != "x" ){ // value값이 x가 아닐 때 
 
    window.open(val); // 새 창으로 홈페이지 띄움
        
    document.getElementById("slct").selected = true// 선택한 옵션을 제일 처음으로 바꿔줌.    
 
    }    
    
});
    
</script>
cs

 

셀렉트를 이용하여 홈페이지를 이동시키는 기능입니다.

1. 셀렉트 내 옵션을 선택 할 때 value값이 x가 아니면 

    window.open을 이용하여 새 창으로 url로 이동

2. 이동 후 제일 첫번째 옵션으로 재선택됨

반응형

모바일 화면일 때 셀렉트로 컨트롤 가능한 탭기능을 자바스크립트로 만들어 보았다..

 

<CSS>

1
2
3
4
5
6
<style>
    
.con_cmn {display:none}
.con1 {display:block;}
    
</style>
cs

 

<HTML>

1
2
3
4
5
6
7
8
9
10
11
<select name="" id="selectTab" class="select_tab" title="교육과정 선택 구분">
<option value="x">-- 선택 --</option>
<option value="0" id="tab1">야구</option>
<option value="1">축구</option>
<option value="2">농구</option>
</select>
<!--//select_tab-->
 
<div class="con_cmn con1">야구 콘텐츠</div>
<div class="con_cmn con2">축구 콘텐츠</div>
<div class="con_cmn con3">농구 콘텐츠</div>
cs

 

<JAVASCRIPT>

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
<script type="text/javascript">
 
/* select tab function */
    
var selectTab = document.getElementById("selectTab"); // select 저장
    
var con = document.getElementsByClassName("con_cmn"); // select 에 대응하는 콘텐츠 요소들 저장
    
selectTab.addEventListener("change",function(){ // selecㅅ가 변화할 때 
    
    var val = selectTab.options[selectTab.selectedIndex].value; // option value값
    
    for (var i = 0;i<selectTab.length-1; i++){ // select가 4개, 콘텐츠가 3개이기때문에 length-1 
        
    con[i].style.display = "none" ;    // 콘텐츠 모두 숨김
        
        if(val == i ) { // select에 해당하는 콘텐츠가 보여짐
            
            con[i].style.display = "block" ;
            
        } else if (val == "x" ){ // value값이 x인 첫번째 option을 선택 했을 때
            
            con[0].style.display = "block" ; // 1번째 콘텐츠 보여주고
            
            document.getElementById("tab1").selected = true// select는 첫번째를 선택
            
        }
    }
});    
</script>
cs
반응형

+ Recent posts