이 글은 MySQL 데이터베이스에서 SELECT 문을 빠르고 정확하게 익히는 것을 목표로 합니다.
MySQL의 SELECT 문의 기본 구문은 다음과 같습니다.
다음은 인용된 부분입니다.
[STRAIGHT_JOIN] [SQL_SMALL_RESULT] 선택
[SQL_BIG_RESULT] [HIGH_PRIORITY]
[고유|고유|모두]
select_list
[INTO {OUTFILE|DUMPFILE} 'file_name' 내보내기_옵션]
[FROM 테이블_참조 [WHERE where_definition]
[GROUP BY 열 이름,...] [HAVING where_definition]
[ORDER BY {unsighed_integer|col_name|formura} [ASC|DESC],...]
[LIMIT [오프셋,] 행] [PROCEDURE 프로시저_이름]]
이 기본 구문에서 볼 수 있듯이 가장 간단한 SELECT 문은 SELECT select_list입니다. 실제로 이 간단한 SELECT 문을 사용하면 원하는 많은 기능을 수행할 수도 있습니다. 먼저 이를 사용하여 MySQL에서 지원하는 모든 작업을 수행할 수 있습니다. 예: SELECT 1+1은 2를 반환합니다. 두 번째로 이를 사용하여 변수에 값을 할당할 수도 있습니다. PHP에서 SELECT 문의 이 함수를 사용하면 MySQL 함수를 자유롭게 사용할 수 있습니다. PHP 프로그램을 작동하고 변수에 값을 할당합니다. 대부분의 경우 MySQL에는 PHP보다 훨씬 더 강력한 기능이 있다는 것을 알게 될 것입니다.
STRAIGHT_JOIN, SQL_SMALL_RESULT, SQL_BIG_RESULT 및 HIGH_PRIORITY는 ANSI SQL92에 대한 MySQL 확장입니다. 최적화 프로그램이 최적이 아닌 순서로 테이블을 조인하는 경우 STRAIGHT_JOIN을 사용하면 쿼리 속도가 빨라질 수 있습니다.
SQL_SMALL_RESULT 및 SQL_BIG_RESULT는 상대 키워드 집합입니다. GROUP BY, DISTINCT 또는 DISTINCTROW와 함께 사용해야 합니다. SQL_SMALL_RESULT는 결과가 매우 작을 것이며 MySQL은 정렬을 사용하는 대신 최종 테이블을 저장하기 위해 임시 테이블을 사용해야 한다고 옵티마이저에게 알립니다. 임시 테이블 만들기.
HIGH_PRIORITY는 테이블을 업데이트하는 명령문보다 SELECT에 더 높은 우선순위를 부여하여 우선순위가 지정된 빠른 쿼리를 수행할 수 있도록 합니다.
위의 네 가지 키워드의 사용법은 실제로 다소 모호합니다. 다행히도 대부분의 경우 MySQL에서는 이 네 가지 키워드를 사용하지 않도록 선택할 수 있습니다.
DISTINCT 및 DISTINCTROW는 쿼리에서 반환된 결과 집합에 대해 가장 기본적이면서도 유용한 필터링을 제공합니다. 즉, 결과 집합에는 고유한 행만 포함됩니다. 여기서 주목해야 할 점은 DISTINCT와 DISTINCTROW 키워드의 경우 NULL 값이 아무리 많아도 하나만 선택된다는 점이다. ALL의 사용법은 불필요합니다. 결과 집합 생성에는 영향을 주지 않습니다.
INTO {OUTFILE|DUMPFILE} 'file_name' import_options, 결과 세트를 파일에 씁니다. 파일은 서버 호스트에 생성되며 이미 존재할 수 없습니다. 명령문의 import_options 부분 구문은 LOAD DATAINFILE 문의 FIELDS 및 LINES 절에 사용된 것과 동일합니다. 이에 대해서는 MySQL Advanced_LOAD DATA 기사에서 자세히 설명하겠습니다. OUTFILE 키워드와 DUMPFILE 키워드의 차이점은 열이나 줄 끝 없이 한 줄만 파일에 기록된다는 것입니다.
선택 목록: 다음 내용 중 하나 이상을 포함할 수 있습니다.
1. "*"는 테이블 생성 순서대로 정렬된 모든 열을 의미합니다.
2. 사용자가 원하는 순서대로 나열한 컬럼명 목록입니다.
3. 별칭을 사용하여 열 이름을 다음 형식으로 바꿀 수 있습니다. 열 이름은 열 이름입니다.
4. 표현식(열 이름, 상수, 함수 또는 열 이름, 상수, 산술 또는 비트 연산자와 연결된 함수의 조합).
5. 내부 함수 또는 집계 함수.
6. 위 항목의 조합.
FROM: SELECT 명령에 사용되는 테이블을 결정합니다. 이 항목은 일반적으로 select_list에 열 이름이 포함되어 있지 않은 경우(예: 상수, 산술 표현식 등만) 필요합니다. 테이블 항목에 여러 테이블이 있는 경우 쉼표로 구분하세요. FROM 키워드 다음에 오는 테이블 순서는 결과에 영향을 주지 않습니다.
표현식을 명확하게 하기 위해 테이블 이름에 관련 별칭을 지정할 수 있습니다. 여기서 구문은 tbl_name [AS] alias_name입니다. 예:
직원의 t1.name,t2.salary를 t1,info로 t2로 선택합니다. 여기서 t1.name=t2.name은 직원 t1,info t2에서 t1.name,t2.salary를 선택합니다. 여기서 t1.name= t2.name 완전히 동일합니다.
where 절 및 have 절과 같은 테이블에 대한 다른 모든 참조는 별칭을 사용해야 하며 별칭은 숫자로 시작할 수 없습니다.
where 절은 검색 조건을 설정하며, insert, update, delete 문의 적용 방식은 select 문의 적용 방식과 동일합니다. 검색어는 where라는 키워드를 따릅니다. 사용자가 하나의 구문에서 여러 검색 조건을 사용하려는 경우 and 또는 or로 연결할 수 있습니다. 검색 조건의 기본 구문은 "match_string"과 같은 [not] 표현식 [not]입니다. ] 컬럼_이름 조인_연산자 컬럼_이름; [not] 부울식.
and: 두 조건을 연결하고 두 조건이 모두 TRUE일 때 결과를 반환하는 데 사용됩니다. 동일한 문에 여러 논리 연산자가 사용되는 경우 사용자가 괄호를 사용하여 연산 순서를 변경하지 않는 한 and 연산자가 항상 우선합니다.
or: 두 조건을 연결하고 두 조건 중 하나가 TRUE일 때 결과를 반환하는 데 사용됩니다. 동일한 명령문에 여러 논리 연산자가 사용되는 경우 연산자 or는 일반적으로 연산자 and 다음에 작동합니다. 물론 사용자는 괄호를 사용하여 작업 순서를 변경할 수 있습니다.
between: 범위의 하한을 식별하는 데 사용되는 키워드이며 범위의 상한 값이 뒤에 옵니다. x와 y 사이의 @val이 첫 번째 값과 마지막 값을 포함하는 범위입니다. between 뒤에 지정된 첫 번째 값이 두 번째 값보다 크면 쿼리는 어떤 행도 반환하지 않습니다.
column_name: 비교에 사용된 열 이름입니다. 모호한 경우 해당 컬럼이 위치한 테이블명을 반드시 명시해 주시기 바랍니다.
비교_연산자: 비교 연산자. 아래 표를 참조하세요.
다음은 인용 부분입니다.
기호 의미
= 같음
>보다 큼
< 미만
>= 이상
<= 작거나 같음
!=는 다음과 같지 않습니다.
<>는 다음과 같지 않습니다.
char형과 varchar형 데이터를 비교할 때, "<"는 알파벳의 선두에 가까움을 의미하고, ">"는 알파벳의 끝에 가까움을 의미한다. 일반적으로 소문자는 대문자보다 크고, 대문자는 숫자보다 크지만 이는 서버 운영체제의 비교 순서에 따라 달라질 수 있습니다.
비교할 때 후행 공백은 무시됩니다. 예를 들어 "Dirk"는 "Dirk"와 같습니다.
날짜를 비교할 때 "<"는 이전을 의미하고 ">"는 이후를 의미합니다.
비교 연산자를 사용하여 문자 및 날짜/시간 데이터를 비교할 때는 모든 데이터를 따옴표로 묶어야 합니다.
표현식: 열 이름, 상수, 함수 또는 열 이름이나 상수의 조합, 산술 연산자나 비트 연산자와 연결된 함수일 수 있습니다. 산술 연산자는 다음 표에 나와 있습니다.
인용된 부분은 다음과 같습니다.
기호 의미
+ 더하기 기호
- 빼기 기호
* 곱셈 기호
/ 나누기 기호가
null인 경우: NULL 값을 검색할 때 사용됩니다.
like: 키워드는 char, varchar 및 datetime(초 및 밀리초 제외)에 like를 사용할 수 있습니다. MySQL에서는 숫자 표현식에도 like를 사용할 수 있습니다.
사용자가 날짜/시간 데이터를 검색할 때는 완전한 날짜/시간 기록에 다양한 날짜 구성 요소가 포함되어 있으므로 like라는 키워드를 사용하는 것이 가장 좋습니다. 예를 들어, 사용자가 Arrival_time 컬럼에 "9:20"이라는 값을 추가했지만, MySQL은 입력된 데이터를 "Jan 1,1900 9:20AM"으로 변환하기 때문에 Arrival_time="9:20"인 절에서는 이를 찾지 못합니다. . 그러나 "%9:20%"와 같은 Arrival_time이 있는 절에서는 찾을 수 있습니다.
boolean_expression: "true" 또는 "false" 값을 반환하는 표현식입니다.
match_string: 작은따옴표나 큰따옴표로 묶인 문자와 와일드카드로 구성된 문자열이 일치 패턴입니다. 다음 표에는 와일드카드가 나와 있습니다.
다음은 인용된 부분입니다.
기호 의미
% 0개 이상의 문자로 구성된 문자열
_ 임의의 단일 문자
not: 논리 표현식이나 키워드를 부정합니다.
like, null, between 등과 같은
group by 및 have 절은 select 문에서 사용됩니다.
테이블을 그룹으로 나누어서 have 절 조건에 맞는 그룹을 반환하는 것이 가능합니다.
구문: select 문의 시작
그룹화 기준: [모두] Aggregate_free_expression [,aggregate_free_expression]*
[검색_조건 있음]
Select 문 끝의
: 테이블을 나눌 그룹을 지정합니다. Select table 항목에 Aggregate 함수가 포함된 경우 그룹별로 합계 값을 계산합니다. 이러한 합계의 결과는 새 행 대신 새 열에 표시됩니다. 사용자는 have 절에서 이러한 새로운 합계 열을 참조할 수 있습니다. avg, count, max, min, sum 등의 집계 함수는 group by 이전에 select_list에서 사용할 수 있습니다. 테이블은 임의의 열 조합으로 그룹화될 수 있습니다.
all: 결과에 모든 그룹을 포함하는 Transact-SQL 확장입니다. 심지어 where 절에 의해 제외된 그룹도 포함됩니다. 만약 have 절이 동시에 사용된다면, all의 의미는 무효화될 것입니다.
Aggregate_free_expression: 집계 함수가 포함되지 않은 식입니다. Transact-SQL 확장을 사용하면 열 이름별로 그룹화하면서 집계 함수 없이 식별로 그룹화할 수 있습니다.
had: where가 select 문에 대한 조건을 설정하는 것과 유사하게 group by 절에 대한 조건을 설정합니다. have에 대한 검색 조건에는 집계 함수 표현식이 포함될 수 있습니다. 그 외에는 검색 기준은 where 검색 기준과 동일합니다.
order by: 결과를 열별로 정렬합니다. select로 출력된 열은 열 이름, 열 별칭 또는 열 위치로 참조될 수 있습니다. 예: id를 myid로 선택, mytable 그룹에서 id로 이름을 myname으로 선택, myid로 id를 선택, myid로 mytable 그룹에서 myname으로 이름, myid로 id 선택, mytable 그룹에서 1로 name으로 myname. 이 세 문장은 완전히 동등하다. 물론, 우리는 프로그램의 가독성에 나쁜 영향을 미칠 세 번째 사용법에 동의하지 않습니다. 내림차순으로 정렬하려면 정렬하려는 컬럼 이름 앞의 order by 절에 DESC 키워드를 추가하세요. 기본값은 오름차순이지만 ASC 키워드를 사용하여 명시적으로 지정할 수 있습니다.
제한 절: select 문에서 반환되는 행 수를 제한하는 데 사용됩니다. Limit에는 1개 또는 2개의 숫자 매개변수가 사용됩니다. 2개의 매개변수가 제공되면 첫 번째 매개변수는 반환될 첫 번째 행의 오프셋을 지정하고 두 번째 매개변수는 반환할 최대 행 수를 지정합니다. 초기 행의 오프셋은 0(1이 아님)입니다. 인수가 제공되면 오프셋 0에서 반환되는 최대 행 수를 나타냅니다. 즉, 리미트 5와 리미트 0,5는 완전히 동일합니다.
프로시저 키워드의 의미에 대해서는 잘 모르겠습니다. 이는 저장 프로시저를 지원하는 것으로 보이며 MySQL 자체는 향후 확장을 위해 예약된 것으로 보입니다.