SQL 기초 문법(4)

7870 단어 sqlmysql
이 블 로 그 는 SQL 기초 문법 입 니 다.제 가 평소에 찾 아 보고 백업 하 는 것 으로 초보 자 들 이 읽 기 를 배우 고 고수 들 이 돌아 다 니 기 에 만 적합 합 니 다.
SQL 기초 문법(1)접근
http://fuchangle.iteye.com/blog/1772395
SQL 기초 문법(2)접근
http://fuchangle.iteye.com/blog/1772523
SQL 기초 문법(3)접근
http://fuchangle.iteye.com/blog/1772779
다 중 테이블 연결 조회 와 하위 조회
우리 가 선택해 야 할 데 이 터 는 하나의 시계 가 아니 라 여러 개의 시계 에서 나 오 는 경우 가 많다.
다 중 테이블 연결 조회 가 필요 합 니 다.예 를 들 어 위의 studenttable 과 teacher테이블 양
데이터 시트,만약 우리 가 모든 학생 과 그의 선생님 이름 을 조회 하고 싶다 면,이것 은 두 개의 표 에서
중간 데이터.
다 중 표 연결 조 회 는 두 가지 규칙 이 있 습 니 다.빠 른 SQL 92 규범 은 다음 과 같은 몇 가지 다 중 표 연결 조 회 를 지원 합 니 다.
1.등가 연결.
2.비등 치 연결.
3.외부 연결.
4.넓 은 의미 의 피리 칼 적.
SQL 99 규칙 은 가 독성 이 더 좋 은 다 중 표 연결 문법 을 제공 하고 더 많은 유형의 연결 조 회 를 제공 합 니 다.
,SQL 99 는 다음 과 같은 몇 개의 다 중 테이블 연결 조 회 를 지원 합 니 다.
1.교차 연결.
2.자연 연결.
3.using 자 구 를 사용 하여 연결 합 니 다.
4.온 자구 연결 사용
5.전 외 접속 또는 좌우 접속.
SQL 92 의 다 중 표 연결 문법 은 비교적 간결 하 다.이런 문법 은 여러 개의 데이터 표를 from 뒤에 두 고 많다.
시계 사 이 를 쉼표 로 구분 하기;연결 조건 을 where 에 두 고 검색 조건 과 and 논리 로 사용 합 니 다.
연산 자 연결.연결 조건 이 두 열 값 이 같 아야 한다 면 등가 연결 이 라 고 합 니 다.그렇지 않 으 면 비 라 고 부른다.
등가 연결 은 연결 조건 이 없 으 면 광의 피리 카 적 이 라 고 불 린 다.SQL 92 다 중 표
검색 에 연결 하 는 문법 형식 은 다음 과 같 습 니 다.

select column1,column2...
from table1,table2...
[where join_condition]

다 중 표 연결 조회 에서 두 개 이상 의 데이터 열 이 같은 열 을 가지 고 있 을 수 있 으 므 로 이 경우 필요 합 니 다.
같은 열 사이 에 표 이름 이나 표 별명 접 두 사 를 제한 하여 시스템 이 헷 갈 리 지 않도록 합 니 다.
주:실제 모든 열 은 표 이름 이나 접 두 사 를 추가 할 수 있 습 니 다.단일 순환 을 할 때 만 나 올 수 없습니다.
현재 같은 명단 에 있 기 때문에 시스템 이 헷 갈 릴 리 가 없다.그래서 보통 표 이름 접 두 사 를 생략 합 니 다.
다음 SQL 문 구 는 모든 학생 자료 와 해당 하 는 선생님 의 이름 을 조회 합 니 다.

select s.*, teacher_name
--       ,      
from studnet_table s, teacher_table t
--  where      
where s.java_teacher = t.teacher_id;

광의 피리 칼 적 을 구하 면 where 자구 이후 연결 조건 이 없 으 면 광의 피리 칼 적
의 결 과 는 n*m 조 의 기록 이 있 을 것 이다.where 후의 연결 조건 을 없 애 면 광의 피리 카드 를 얻 을 수 있다.
너희들

select s.*, teacher_name
--       ,      
from studnet_table s, teacher_table t;
     ,          :
select s.*, teacher_name
--       ,      
from studnet_table s, teacher_table t
--  where      
where s.java_teacher > t.teacher_id;

기록 에 대한 필터 가 필요 하 다 면 필터 조건 과 연결 조건 을 and 로 연결 합 니 다.다음 과 같 습 니 다.

select s.*, teacher_name
--       ,      
from studnet_table s, teacher_table t
--  where      
where s.java_teacher = t.teacher_id and student_name is not null;

MySQL 은 SQL 92 중 좌 외 연결,우 외 연결 을 지원 하지 않 지만 SQL 92 에 대해 알 아 볼 필요 가 있 습 니 다.
중 좌 외 연결.오른쪽 외부 연결,SQL 92 의 외부 연결 은 연결 조건 의 열 이름 뒤에 괄호 를 추가 하 는 것 입 니 다.
번호 가 포 함 된 외부 연결 문자(+또는*,서로 다른 데이터 베 이 스 는 일정한 차이 가 있 음)는 외부 연결 문자 가 나 올 때
현재 왼쪽 에 있 을 때 는 왼쪽 외 연결 문자 라 고 부 르 고 오른쪽 에 있 을 때 는 오른쪽 연결 문자 라 고 부른다.
그 밖 에 도 자체 연결 이 있 습 니 다.자체 연결 은 연결 의 한 용법 일 뿐 연결 이 아 닙 니 다.
형식 은 SQL 92 든 SQL 99 든 자체 연결 조 회 를 사용 할 수 있 습 니 다.

create table emp_table
(
	emp_id int auto_increment primary key,
	emp_name varchar(255),
	manager_id int,
	foreign key(manager_id) references emp_table(emp_id)
);

insert into emp_table values(null, '  ', null);
insert into emp_table values(null, '   ', 1);
insert into emp_table values(null, '   ', 1);
insert into emp_table values(null, '  ', 1);


자동 연결 이란 하나의 시 계 를 두 개의 시계 로 사용 해 야 하 는데,이것 은 하나의 시 계 를 위해 두 개의 다른 시 계 를 만들어 야 한다.
이름,그리고 조회 에 사용 되 는 모든 데이터 열 에 표 별명 접 두 사 를 붙 여야 합 니 다.두 표 의 데이터 가 다 되 었 기 때 문 입 니 다.
모두 같다

select emp.emp_id, emp.emp_name    , mgr.emp_name    
from emp_table emp, emp_table mgr
where emp.manager_id = mgr.emp_id;

SQL 99 연결 조회
SQL 99 의 연결 조 회 는 SQL 92 의 연결 조회 원리 와 기본적으로 비슷 하 며 SQL 99 연결 조회 와 다르다.
가 독성 이 더욱 강하 다:조회 에 사용 되 는 여러 데이터 시트 는 xxx join 으로 연결 하 는 것 이지 직접 의존 하 는 것 이 아니다.
다음 배열 은 from 다음 에 있 습 니 다.from 뒤에 데이터 시트 만 넣 으 면 됩 니 다.연결 조건 은 where 에 두 지 않 습 니 다.
이후 에는 전문 적 인 연결 조건 자 구 를 제공 했다.
교차 연결:cross join,교차 연결 효 과 는 SQL 92 의 넓 은 의미 의 피리 카드 축적 이 므 로 제출 합 니 다.
포크 연결 은 어떠한 연결 조건 도 사용 할 필요 가 없습니다.예:
자연 연결:natural join,자연 연결 표면 에 도 연결 조건 을 지정 할 필요 가 없 는 것 처럼 보이 지만,
자연 연결 은 연결 조건 이 있 고 자연 연결 은 연결 표 의 같은 열 을 연결 조건 으로 한다....와 같다
두 표 에 같은 이름 이 없 으 면 자 연 스 러 운 연결 과 교차 연결 효과 가 똑 같 습 니 다.-연결 되 지 않 았 기 때 문 입 니 다.
조건 을 받다.

select s.*, teacher name
from student_table s
natural join teacher_table t;

on 자구 연결:이것 은 가장 자주 사용 하 는 연결 방식 입 니 다.SQL 99 문법의 연결 조건 은 on 자구 에 놓 여 있 습 니 다.
지정 하고 모든 on 절 은 하나의 연결 조건 만 지정 합 니 다.N 표 가 필요 하 다 면
연결 하려 면 N-1 개의 join...on 이 필요 합 니 다.다음 과 같 습 니 다.

select s.*, teacher_name
from student_table s
join teacher_table t
on s.java_teacher = t.teacher_id;

on 자구 의 연결 을 사용 하면 SQL 92 의 등 값 연결,비등 값 연결 을 완전히 대체 할 수 있 습 니 다.왜냐하면 on
자구 의 연결 조건 은 등가 조건 을 제외 하고 비등 치 조건 일 수도 있다.

select s.*, teacher_name
from student_table s
join teacher_table t
on s.java_teacher > t.teacher_id;

하위 조회
하위 조 회 는 검색 어 에 다른 조 회 를 끼 워 넣 는 것 을 말 하 며,하위 조 회 는 다 중 끼 워 넣 기 를 지원 할 수 있다.맞다.
일반 검색 어 에서 하위 검색 어 는 두 위치 에 나타 날 수 있 습 니 다.
1.from 구문 뒤에 나타 나 데이터 시트 로 사용 하 는 용법 도 줄 내 보기 라 고 합 니 다.이 부분 은 검사 하기 때 문 입 니 다.
질문 은 실질 적 으로 임시 보기 이다.
2.where 조건 에 나타 난 후 필터 조건 의 값 입 니 다.
하위 조 회 를 사용 할 때 다음 과 같은 몇 가지 주의 점 이 있 습 니 다.
1.하위 검색 은 괄호 로 묶 어야 한다.
2.하위 검색 을 데이터 시트 로 할 때(from 뒤에 나타 나 면)이 하위 검색 에 별명 을 붙 일 수 있 습 니 다.특히
접두사 로 데이터 열 을 제한 할 때 는 하위 검색 에 별명 을 붙 여야 합 니 다.
3.하위 조 회 는 필터 조건 일 때 하위 조 회 를 연산 자의 오른쪽 에 놓 으 면 검 사 를 강화 할 수 있다.
문의 가 독성.
4.하위 조 회 는 필터 조건 이 있 을 때 한 줄 의 하위 조 회 는 한 줄 의 연산 자 를 사용 하고,여러 줄 의 하위 조 회 는 여러 줄 을 사용한다.
연산 자.
하위 조 회 는 데이터 시트 로 완전히 하위 조 회 를 데이터 시트 로 사용 하 는데,단지 이전의 표 이름 을 바 꿀 뿐이다.
조회(하위 조회 에 별명 을 붙 일 수도 있 습 니 다),기타 부분 은 일반 조회 와 아무런 차이 가 없습니다.아래.
SQL 문 구 는 하위 조 회 를 데이터 시트 로 사용 하 는 방법 을 시범 했다.

select *
from (select * from student_table) s
where s.java_teacher > 1;

하위 조 회 는 데이터 시트 의 용법 으로 더욱 정확하게 보기 로 볼 수 있 습 니 다.위의 SQL 문 구 를 이해 할 수 있 습 니 다.
검색 을 실행 할 때 임시 보 기 를 만 들 었 습 니 다.이 보 기 는 t 라 고 해서 임시로 만 들 었 습 니 다.
보기 도 행 내 보기 라 고 불 리 며 이 피 드 조회 의 실질 을 이해 한 후 이 피 드 조회 가 어렵 지 않 습 니 다.
다 중 표 연결 조회 에서 이 피 드 조 회 를 사용 하 는 것 을 포함 하여 검색 어 에 있 는 데이터 시트 를 완전히 대체 할 수 있 습 니 다.
또 하나의 상황 이 있 습 니 다.우 리 는 하위 조 회 를 where 조건 의 값 으로 볼 수 있 습 니 다.만약 하위 조회 반환 서 를 조회 하면...
행,단열 값 은 하나의 스칼라 로 사용 되 고 한 줄 의 기록 비교 연산 자 를 사용 할 수 있 습 니 다.
예:

select *
from student_table
where java_teacher >
--    、               
(select teacher_id
from teacher_table
where teacher_name = 'Yeeku');

하위 조회 가 여러 값 을 되 돌려 준다 면 in,any,all 등 키 워드 를 사용 해 야 합 니 다.in 은 단독으로 사용 할 수 있 습 니 다.
이 때 하위 조회 가 되 돌아 오 는 여러 값 을 하나의 값 목록 으로 볼 수 있 습 니 다.다음 SQL 문 구 는 다음 과 같 습 니 다.

select * 
from student_table
where student_id in
(select teacher_id
from teacher_table);

위 검색 어 에 있 는 하위 검색 어 는 여러 값 을 되 돌려 줍 니 다.이 여러 값 은 하나의 값 목록 으로 만 여 겨 집 니 다.
sudentid 는 이 값 목록 의 임의의 것 과 같 으 면 이 기록 을 선택 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기