>데이터 베이스 >MySQL 튜토리얼 >MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

王林
王林앞으로
2023-05-29 10:34:131614검색

SQL(Structured Query Language)은 관계형 데이터베이스에 액세스하기 위한 표준 언어의 표준입니다. Oracle, DB2, SQL Server, PostgreSQL, MySQL과 같은 많은 데이터베이스 제품이 이를 지원합니다. 지난 몇 년 동안 NoSQL은 처음에는 SQL이 필요하지 않다고 주장했지만 결국 SQL 기술과 호환되기 위해 "Not Only SQL"로 개정되어야 했습니다.

현재 일반 버전은 SQL 92 표준입니다. MySql을 포함한 다른 데이터베이스도 MySQL의 Limit 키워드와 같이 SQL 92 또는 SQL 99 표준을 기반으로 자체 SQL 문 중 일부를 확장했습니다.

SQL 언어 분류

  • DDL

    데이터 정의 언어, 데이터베이스 개체, 데이터베이스, 테이블, 열 등을 정의하는 데 사용됩니다. 생성, 변경, 삭제 등

  • DML

    데이터 조작 언어는 데이터베이스 테이블의 레코드를 업데이트하는 데 사용됩니다. 삽입, 업데이트, 삭제 등

  • DCL

    데이터 제어 언어, 데이터베이스 액세스 권한, 보안 수준 등을 정의하는 데 사용됩니다. 그랜트 등

  • DQL:

    데이터 쿼리 언어, 쿼리에 사용됩니다. select, from, where 등

SQL 구문 순서 및 구문 분석 순서

# 语法顺序
SELECT DISTINCT
	<select_list>
FROM
	<left_table> <join_type>
JOIN <right_table> ON <join_condition>
WHERE
	<where_condition>
GROUP BY
	<group_by_list>
HAVING
	<having_condition>
ORDER BY
	<order_by_condition>
LIMIT <limit_number>

# 解析顺序
FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>  -- 这一步和上一步,会循环执行
WHERE <where_condition> -- 这一步会循环执行,多个条件从左往右
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT   -- 分组之后才执行SELECT
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number> -- 这一步是MySQL独有的语法,前面都是SQL92标准

FROM

FROM의 왼쪽 테이블과 오른쪽 테이블의 Cartesian product를 계산하고 가상 테이블 VT1

select * from seller join product;

MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

을 생성합니다.

ON

가상 테이블 VT1을 생성한 후 ON 키워드를 통해 필터링하여 조건을 충족하는 항목만 가상 테이블 VT2

select * from seller s join product p on s.id = p.id;

MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

OUTER JOIN

  • LEFT (OUTER) JOIN으로 필터링합니다. : 반환됩니다 왼쪽 테이블(retained 테이블)의 모든 레코드와 ON 조건을 만족하는 오른쪽 테이블의 레코드

  • RIGHT(OUTER) JOIN: 유사

  • INNTER JOINT: 만족하는 레코드만 왼쪽 테이블과 오른쪽 테이블의 ON 조건이 반환됩니다

OUTER JOIN(LEFT JOIN, RIGHT JOIN)이 지정되면 보유 테이블에서 ON 조건과 일치하지 않는 행이 가상 테이블 VT2에 external로 추가됩니다. 가상 테이블 VT3을 형성하는 행.

select * from seller s right join product p on s.id = p.id;

MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

FROM 절에 테이블이 2개 이상 포함된 경우 이전 조인 연결과 다음 테이블에 의해 생성된 결과 VT3에 대해 위 단계가 반복됩니다.

WHERE

where 조건에 따라 필터링

GROUP BY

결과를 그룹화합니다

-- mysql 8 默认开启了 only_full_group_by
select version(),@@sql_mode;
-- 需要把这个选项关掉,
set global sql_mode=&#39;STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION&#39;;
set session sql_mode=&#39;STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION&#39;;
-- 后执行group by 正常
select * from user group by name;

MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

HAVING

그룹화된 결과를 조건에 따라 필터링합니다

SELECT

지정된 열을 선택합니다

DISTINCT

특정 열의 중복을 제거합니다
DISTINCT는 SELECT여야 합니다. 유효하지 않습니다.

-- 下面无效
select id, distinct name from user;
-- 下面有效
select distinct name from user;

MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

뒤에 첫 번째 열을 추가한 다음 여러 열을 추가하여 여러 열을 연결하여 중복 항목을 제거합니다.

MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

특정 열을 기반으로 중복 항목을 제거하고 표시하려는 경우 전체 데이터 행에 대해 GROUP BY

ORDER BY

sort

LIMIT

paging

을 사용할 수 있습니다. 참고: 위의 SQL 구문 분석에서 볼 수 있듯이 select의 열 별칭은 순서대로만 사용할 수 있습니다. 주문

MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석

위 내용은 MySQL SQL 구문 및 SQL 구문 분석 시퀀스 소스 코드 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제