章IVマルチテーブルクエリ

SQL文のマルチテーブルクエリ:

たとえば、次のDEPARTMENT_ID従業員(employeeテーブル)と部門(部門表)に基づいてクエリ情報。

方法:(ユニバーサル):SELECT ... FROM ... WHERE

select e.last_name,e.department_id,d.department_name
	from employee e,department d
	where e.department_id=d.department_id

方法2:SELECT ... FROM ... NATURAL JOINを...

制限があります。同じ列が自動的に(:DEPARTMENT_IDとMANAGER_ID複数があるかもしれない)2つのテーブルを接続します

select last_name,department_id,department_name
	from employees
	natural join departments;

方法3:SELECTは...登録しよう... ... USING

制限があります。この方法は、より良い2以上であるが、異なるマルチテーブルの接続列名ならば、この方法は適切ではありません

select last_name,department_id,department_name
	from employees
	join departments
	using (department_id);

方法4:SELECT ... FROM ...登録しよう... ON ...

一般的な方法:方法(左、右、完全な)外側連結を達成することは比較的容易

select last_name,e.department_id,department_name 
from employees e
join departments d
on e.department_id = d.department_id;

- 関連して

- 等価結合

- ない等価結合

  1. - 不自然な接続

    - 自己の接続

- 外部接続

 --左外连接、右外连接、满外连接

問題:

  1. マルチテーブルがクエリに参加すると二つのテーブルが同じ列を持っている場合、あなたはそれ以外の場合は、間違った参照列名に表の別名を使用する必要があります!

  2. last_nameの従業員をチェックアウト、DEPARTMENT_NAME、都市

  select last_name,department_name,city
  	from department d,employees e,location l
  	where d.department_id = e.department_id and d.location_id = l.location_id;
  1. 「陳」情報マネージャーとしてのlast_nameをチェックしてください。(MANAGER_ID従業員がEMPLOYEE_IDの従業員です)

    0)例:張従業員番号:「1001」、私のスタッフ数:「1002」

    「つらい思い」である-manager「1001」のように私はmanager_id

    1)2つのSQLクエリを通じて:

  select manager_id 
      from employees
      where lower(last_name)='chen';
      --返回结果为108
  select m.* 
  	from employees e, employees m
  	where e.manager_id =108;

2)(SQLクエリを介して接続されているから)。

select m.*
from employees e,employees m
where e.manager_id = m.employee_id and e.last_name='Chen';
  1. SQLクエリ(サブクエリ)を介して:
 select * 
 from employees
 where employee_id=(
 				select manager_id 
     				from employees
     				where last_name='Chen'
 				);
  1. クエリ各従業員のLAST_NAMEとGRADE_LEVEL(JOB_GRADESテーブル内)、非等価な接続-----
 select last_name,salary ,grade_level,lowest_sal,highest_sal
 	from employees e,job_grades j
 	where e.salary >=j.lowest_sal and e.salary <=j.highest_sal;
  1. LEFT OUTER JOINとRIGHT OUTER参加します
  select last_name,e.department_id,department_name
  	from employees e,departments d
  	where e.department_id =d.department_id(+);
  	
  select last_name,d.department_id,department_name
  	from employees e,departments d
  	where e.department_id(+)=d.department_id;
  --理解"(+)"的位置:以左外连接为例,因为左表需要返回更多的记录,右表就需要“加上”更多的记录,所以在右表的链接条件上加上“(+)”
  --注意:1).两边都加上"(+)"符号,会发生语法错误!
  	 --2)这种语法是Oracle所独有,不能在其他数据库中使用。
  1. 99 SQLは、外側には、右の外部結合、完全外部結合に参加左
--1).
select last_name.department_name
	from employee e left outer join departments d
	on e.department_id = d.department_id;
--2).
select last_name,department_name
	from employees e right join departments d
	on e.department_id = d.department_id ;
--3).
select last_name,department_name
from employees e full join departments d 
on e.department_id = d.department_id;
  1. SQL 99は、Employeesテーブルとテーブル部門を結びます
  --1).
  select *
  	from employees join departments
  	using (department_id);
  	--缺点:要求两个表中必须有一样的列名。
--2).
select * 
	from employees e join departments d
	on e.department_id =d.department_id;
  --3).多表连接
  select e.last_name,d.department_name,l.city
  	from employees e join departments d 
  	on e.department_id = d.department_id
  	join location l
  	on d.location_id = l.location_id;
リリース8元の記事 ウォン称賛11 ビュー905

おすすめ

転載: blog.csdn.net/qq_41241814/article/details/103902574