SQL에서 와일드카드 사용 방법

SQL에서 와일드카드 사용 방법

2022-06-01 last update

20 minutes reading Databases SQL Interactive

소개


많은 컴퓨터 언어와 마찬가지로 SQL은 다양한 어댑터를 사용할 수 있습니다.와일드카드는 하나 이상의 다른 문자나 값을 나타낼 수 있는 특별한 자리 표시자입니다.이것은 데이터베이스에서 데이터를 검색할 수 있기 때문에 정확한 값을 알 수 없기 때문에 SQL의 편리한 기능입니다.
이 가이드에서는 SQL에서 지정한 와일드카드를 사용하여 데이터를 질의하는 방법을 설명합니다.

선결 조건


이 설명서를 따르려면 SQL을 사용하는 관계 데이터베이스 관리 시스템(RDBMS)을 실행하는 컴퓨터 유형이 필요합니다.다음 환경을 사용하여 이 안내서의 설명과 예제를 검증했습니다.
  • Ubuntu 20.04를 실행하는 서버, 관리 권한이 있는 비루트 사용자와 UFW가 설치된 방화벽.
  • 서버에 MySQL을 설치하고 보호합니다.3단계에서 설명한 절차를 사용하여 만든 루트가 아닌 MySQL 사용자가 이 안내서를 검증했습니다.
  • 참고: 많은 RDBMS는 고유한 SQL을 사용하여 구현됩니다.이 강좌에서 개술한 명령은 대부분의 RDBMS에 적용되지만, MySQL 이외의 시스템에서 테스트할 경우 정확한 구문이나 출력이 달라질 수 있습니다.
    예시 데이터를 불러온 데이터베이스와 테이블이 필요합니다. 어댑터 사용을 연습할 수 있습니다.없으면 다음 MySQL 연결 및 예시 데이터베이스 설정 부분을 읽고 이 안내서가 전체 예시에서 사용할 데이터베이스와 테이블에 대한 상세한 정보를 만들 수 있습니다.
    이 페이지에 삽입된 인터랙티브 단말기를 사용하여 본 강좌의 예시 조회를 시험할 수 있습니다.다음Launch an Interactive Terminal! 버튼을 클릭하여 시작합니다.

    ySQL 연결 및 예제 데이터베이스 설정


    SQL 데이터베이스 시스템이 원격 서버에서 실행되는 경우 로컬 컴퓨터에서 SSH를 통해 서버에 연결합니다.
    1. ssh sammy@your_server_ip
    그런 다음 MySQL 서버 프롬프트를 열고 sammy 를 MySQL 사용자 계정의 이름으로 바꿉니다.이 페이지에 포함된 대화식 터미널을 사용하는 경우 프롬프트에 사용된 암호는 단어secret입니다.
    1. mysql -u sammy -p
    wildcardsDB라는 데이터베이스를 만들려면 다음과 같이 하십시오.
    1. CREATE DATABASE wildcardsDB;
    데이터베이스가 생성되면 다음과 같은 출력을 받을 수 있습니다.
    Output
    Query OK, 1 row affected (0.01 sec)
    wildcardsDB 데이터베이스를 선택하려면 다음USE 문을 실행합니다.
    1. USE wildcardsDB;
    Output
    Database changed
    데이터베이스를 선택한 후 다음 명령을 사용하여 테이블을 만들 수 있습니다.예를 들어, 프로그램 사용자의 프로필 정보를 저장하기 위해 user_profiles 이라는 테이블을 만들고 싶다고 가정하십시오.이 테이블에는 다음 다섯 열이 포함됩니다.
  • user_id: 이 열은 int 데이터 형식의 값을 저장합니다.또한 테이블의 주 키로 사용되며, 모든 값은 자신의 유일한 식별자로 사용됩니다
  • name: 각 사용자 이름, 사용 varchar 데이터 유형, 최대 30자
  • email: 이 열은 사용자의 전자 메일 주소를 저장하고 varchar 데이터 형식으로 표시하지만 최대 40자
  • birthdate: 사용date 데이터 유형, 이 열은 사용자당 생년월일
  • 을 저장합니다.
  • quote: 모든 사용자가 가장 좋아하는 견적입니다.따옴표에 충분한 문자 수를 제공하기 위해 이 열은 데이터 형식varchar을 사용하지만 최대 300자
  • 다음 명령을 실행하여 이 예제 테이블을 만듭니다.
    1. CREATE TABLE user_profiles (
    2. user_id int,
    3. name varchar(30),
    4. email varchar(40),
    5. birthdate date,
    6. quote varchar(300),
    7. PRIMARY KEY (user_id)
    8. );
    Output
    Database changed
    그런 다음 빈 테이블에 예제 데이터를 삽입합니다.
    1. INSERT INTO user_profiles
    2. VALUES
    3. (1, 'Kim', '[email protected]', '1945-07-20', '"Never let the fear of striking out keep you from playing the game." -Babe Ruth'),
    4. (2, 'Ann', '[email protected]', '1947-04-27', '"The future belongs to those who believe in the beauty of their dreams." -Eleanor Roosevelt'),
    5. (3, 'Phoebe', '[email protected]', '1950-07-17', '"100% of the people who give 110% do not understand math." -Demitri Martin'),
    6. (4, 'Jim', '[email protected]', '1940-08-13', '"Whoever is happy will make others happy too." -Anne Frank'),
    7. (5, 'Timi', '[email protected]', '1940-08-04', '"It is better to fail in originality than to succeed in imitation." -Herman Melville'),
    8. (6, 'Taeko', '[email protected]', '1953-11-28', '"You miss 100% of the shots you don\'t take." -Wayne Gretzky'),
    9. (7, 'Irma', '[email protected]', '1941-02-18', '"You have brains in your head. You have feet in your shoes. You can steer yourself any direction you choose." -Dr. Seuss'),
    10. (8, 'Iris', '[email protected]', '1961-01-05', '"You will face many defeats in life, but never let yourself be defeated." -Maya Angelou');
    Output
    Query OK, 8 rows affected (0.00 sec) Records: 8 Duplicates: 0 Warnings: 0
    이로써 이 안내서의 나머지 부분에 따라 SQL에서 와일드카드를 사용하여 데이터를 조회하는 방법을 배울 수 있습니다.

    와일드카드로 데이터 조회


    프로필에 설명된 바와 같이 와일드카드는 특수한 자리 표시자 문자로 하나 이상의 다른 문자나 값을 표시할 수 있습니다.
    SQL에는 두 개의 정의 와일드카드만 있습니다.
  • _: 와일드카드로 사용할 때 밑줄은 단일 문자를 나타냅니다.예를 들어, s_mmysammy, sbmmy 또는 sxmmy 와 일치합니다.
  • %: 백분율 와일드카드는 0자 이상의 문자를 나타냅니다.예를 들어, s%mmysammy, saaaaaammy 또는 smmy 와 일치합니다.
  • 이 어댑터는 쿼리의 WHERE 자구에서만 LIKE 또는 NOT LIKE 연산자와 함께 사용됩니다.
    전제 조건 부분의 예시 데이터를 어떻게 사용하는지 설명하기 위해서, user_profiles 표에 열거된 최소한 한 사용자의 이름이 세 글자 길이로 "im"으로 끝나는 것을 알고 있지만, 그들이 누구인지 확실하지 않다고 가정하십시오.이 사용자 이름의 첫 번째 글자만 확실하지 않기 때문에 다음 검색을 실행할 수 있습니다. 이 검색은 _ 어댑터를 사용하여 그들이 누구인지 찾을 수 있습니다.
    1. SELECT * FROM user_profiles WHERE name LIKE '_im';
    Output
    +---------+------+---------------------+------------+---------------------------------------------------------------------------------+ | user_id | name | email | birthdate | quote | +---------+------+---------------------+------------+---------------------------------------------------------------------------------+ | 1 | Kim | [email protected] | 1945-07-20 | "Never let the fear of striking out keep you from playing the game." -Babe Ruth | | 4 | Jim | [email protected] | 1940-08-13 | "Whoever is happy will make others happy too." -Anne Frank | +---------+------+---------------------+------------+---------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
    주의: 이 예에서 * 뒤에 별표 SELECT 가 있습니다.이것은 SQL의 약자로 "열마다"를 나타냅니다.
    일부 응용 프로그램과 프로그래밍 언어에서, 심지어는 SQL의 일부 실현에서, 별표는 이 예에서 사용한 백분율과 같이 0자 이상의 문자를 나타내는 어댑터로 사용된다.그러나 위의 예시의 별표는 하나의 문자가 아니라 특정한 내용, 즉 user_profiles 표의 모든 열을 표시하기 때문에 어댑터가 아니다.NOT LIKE 연산자는 LIKE 상반된 효과가 있다.이것은 어댑터 모드와 일치하지 않는 모든 줄을 되돌려줍니다. 어댑터 모드와 일치하는 모든 기록을 되돌려주지 않습니다.설명을 위해 이전 질의를 다시 실행하지만 LIKENOT LIKE 로 대체합니다.
    1. SELECT * FROM user_profiles WHERE name NOT LIKE '_im';
    이번에는 name 열의 값이 _im 와 일치하는 각 행이 결과 세트에서 무시됩니다.
    Output
    +---------+--------+----------------------------+------------+--------------------------------------------------------------------------------------------------------------------------+ | user_id | name | email | birthdate | quote | +---------+--------+----------------------------+------------+--------------------------------------------------------------------------------------------------------------------------+ | 2 | Ann | [email protected] | 1947-04-27 | "The future belongs to those who believe in the beauty of their dreams." -Eleanor Roosevelt | | 3 | Phoebe | [email protected] | 1950-07-17 | "100% of the people who give 110% do not understand math." -Demitri Martin | | 5 | Timi | [email protected] | 1940-08-04 | "It is better to fail in originality than to succeed in imitation." -Herman Melville | | 6 | Taeko | [email protected] | 1953-11-28 | "You miss 100% of the shots you don't take." -Wayne Gretzky | | 7 | Irma | [email protected] | 1941-02-18 | "You have brains in your head. You have feet in your shoes. You can steer yourself any direction you choose." -Dr. Seuss | | 8 | Iris | [email protected] | 1961-01-05 | "You will face many defeats in life, but never let yourself be defeated." -Maya Angelou | +---------+--------+----------------------------+------------+--------------------------------------------------------------------------------------------------------------------------+ 6 rows in set (0.00 sec)
    다시 한 번 예를 들어 데이터베이스에 열거된 몇 명의 사용자 이름이 "I"로 시작하는 것을 알고 있지만 모든 사용자를 기억할 수 없습니다.% 와일드카드를 사용하여 다음 질의와 같이 이러한 와일드카드를 모두 나열할 수 있습니다.
    1. SELECT user_id, name, email FROM user_profiles WHERE name LIKE 'I%';
    Output
    +---------+------+----------------------------+ | user_id | name | email | +---------+------+----------------------------+ | 7 | Irma | [email protected] | | 8 | Iris | [email protected] | +---------+------+----------------------------+ 2 rows in set (0.00 sec)
    ySQL에서 LIKENOT LIKE 연산자는 기본적으로 대소문자를 구분하지 않습니다.즉, 와일드카드 모드에서 대문자 "I"가 없더라도 이전 질의는 동일한 결과를 반환합니다.
    1. SELECT user_id, name, email FROM user_profiles WHERE name LIKE 'i%';
    Output
    +---------+------+----------------------------+ | user_id | name | email | +---------+------+----------------------------+ | 7 | Irma | [email protected] | | 8 | Iris | [email protected] | +---------+------+----------------------------+ 2 rows in set (0.00 sec)
    와일드카드는 정규 표현식과 다릅니다.일반적으로 와일드카드는 initial server setup guide for Ubuntu 20.04 에서 사용되는 문자를 가리키며, 정규 표현식은 How To Install MySQL on Ubuntu 20.04 문자열 패턴에 의존합니다.

    이스케이프 와일드카드


    SQL 와일드카드 중 하나를 포함하는 데이터 항목을 검색해야 하는 경우가 있습니다.이 경우 glob-style pattern matching 를 사용하여 SQL 무시 % 또는 _ 를 나타내는 와일드카드 함수를 일반 텍스트로 해석할 수 있습니다.
    예를 들어 데이터베이스에 열거된 최소 두 명의 사용자가 백분율을 포함하는 가장 좋아하는 견적을 가지고 있다는 것을 알고 있지만, 그들이 누구인지 확실하지 않다.
    다음 질의를 실행할 수 있습니다.
    1. SELECT user_id, name, quote FROM user_profiles WHERE quote LIKE '%';
    그러나 이 조회는 그다지 도움이 되지 않았다.백분율은 길이의 모든 문자열을 대체하기 때문에 테이블의 모든 줄을 되돌려줍니다.
    Output
    +---------+--------+--------------------------------------------------------------------------------------------------------------------------+ | user_id | name | quote | +---------+--------+--------------------------------------------------------------------------------------------------------------------------+ | 1 | Kim | "Never let the fear of striking out keep you from playing the game." -Babe Ruth | | 2 | Ann | "The future belongs to those who believe in the beauty of their dreams." -Eleanor Roosevelt | | 3 | Phoebe | "100% of the people who give 110% do not understand math." -Demitri Martin | | 4 | Jim | "Whoever is happy will make others happy too." -Anne Frank | | 5 | Timi | "It is better to fail in originality than to succeed in imitation." -Herman Melville | | 6 | Taeko | "You miss 100% of the shots you don't take." -Wayne Gretzky | | 7 | Irma | "You have brains in your head. You have feet in your shoes. You can steer yourself any direction you choose." -Dr. Seuss | | 8 | Iris | "You will face many defeats in life, but never let yourself be defeated." -Maya Angelou | +---------+--------+--------------------------------------------------------------------------------------------------------------------------+ 8 rows in set (0.00 sec)
    백분율을 이스케이프하려면 MySQL의 기본 이스케이프 문자인 백슬래시\를 앞에 붙여야 합니다.
    1. SELECT * FROM user_profiles WHERE quote LIKE '\%';
    단, 이 조회도 도움이 되지 않습니다. 왜냐하면 지정된 quote열의 내용은 백분호로만 구성되어야 하기 때문입니다.따라서 결과 세트는 비어 있습니다.
    Output
    Empty set (0.00 sec)
    이 문제를 수정하려면 LIKE 연산자 뒤에 있는 검색 모드의 시작과 끝에 백분율 와일드카드를 포함해야 합니다.
    1. SELECT user_id, name, quote FROM user_profiles WHERE quote LIKE '%\%%';
    Output
    +---------+--------+----------------------------------------------------------------------------+ | user_id | name | quote | +---------+--------+----------------------------------------------------------------------------+ | 3 | Phoebe | "100% of the people who give 110% do not understand math." -Demitri Martin | | 6 | Taeko | "You miss 100% of the shots you don't take." -Wayne Gretzky | +---------+--------+----------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
    이 조회에서, 반사봉은 두 번째 백분호만 정의하고, 첫 번째와 세 번째 백분호는 여전히 어댑터로 충당한다.따라서 이 조회는 최소 백분율을 포함하는 줄quote 열로 되돌아갑니다.
    다음 예와 같이 ESCAPE 자구를 사용하여 사용자 정의 이스케이프 문자를 정의할 수도 있습니다.
    1. SELECT user_id, name, email FROM user_profiles WHERE email LIKE '%@_%' ESCAPE '@';
    Output
    +---------+--------+----------------------------+ | user_id | name | email | +---------+--------+----------------------------+ | 1 | Kim | [email protected] | | 3 | Phoebe | [email protected] | | 4 | Jim | [email protected] | | 5 | Timi | [email protected] | | 7 | Irma | [email protected] | +---------+--------+----------------------------+ 5 rows in set (0.00 sec)
    이 질의는 @ 기호를 이스케이프 문자로 정의하고 email 열에 최소한 한 줄의 밑줄을 포함하도록 되돌려줍니다.ESCAPE 자구를 삭제하려면 쿼리는 테이블의 모든 줄로 돌아갑니다. 줄마다 적어도 하나@ 기호가 포함되어 있기 때문입니다.

    결론


    이 안내서를 읽으면 SQL 기반 데이터베이스의 와일드카드를 어떻게 사용하는지 알 수 있습니다.여기에 나열된 명령은 SQL을 사용하는 모든 데이터베이스 관리 시스템에 적용됩니다.각 SQL 데이터베이스는 고유한 언어로 구현되므로 각 명령과 전체 옵션 집합에 대한 자세한 내용은 DBMS 공식 문서를 참조하십시오.
    SQL 사용에 대한 자세한 내용을 알고 싶으시면 regular language 에서 이 시리즈의 다른 강좌를 보실 수 있습니다.