MySQLデータベース(3):グループクエリー、接続クエリー、サブクエリー、union連合クエリー


0、クエリーsql概要:基本的な内容を含む
​#inner    
#inner join   sql92        ,        
#on          =,             
/*
	select     
	from  1
	【    】
	join  2
	on     
	where     1 and     2
	group by   
	having         
	order by   
	limit 【    ,】size;
*/
#  :     0  

一、グループクエリー:group by
構文規則:集約関数が必要です
select     , (     group by   )
FROM    where    
group by    
having     
order by     
#           
SELECT department_id   id,AVG(salary)      FROM employees
GROUP BY department_id;

二、接続クエリー
2.1等値接続
この書き方は、2つ以上のテーブルの等しいフィールドをwhereの後ろに書くことを条件とし、多条件は同様にand接続である.
#            o        
SELECT department_name,city
FROM departments d,locations l
WHERE d.location_id = l.location_id
AND city LIKE '_o%';

2.2内部接続:inner
例:inner joinと上の等値接続の効果は同じです.
SELECT last_name,department_name
FROM employees e
INNER JOIN departments d
ON e.department_id = d.department_id;

2.2.1自己接続
自己接続:内部リンクinner joinの特殊な1つで、関連するテーブルは1枚のテーブルです
#      ,             
SELECT e.last_name,m.last_name
FROM employees e
JOIN employees m
ON e.manager_id = m.employee_id;

2.3外部接続
/*外部ジョインは、1つのテーブルに存在するものをクエリーするために使用されます.別のテーブルにはないレコードの特徴:プライマリ・スレーブ・テーブルに分かれ、プライマリ・テーブルに基づいて、*/
SELECT d.department_name,e.*
FROM departments d
LEFT JOIN employees e
ON e.department_id=d.department_id
WHERE d.department_name IN ("SAL","IT");

三、サブクエリ
  :
         :
				select  :
							    :         
				from  
							  :          
				where having  
							  :        、    、    
				exists  (    :     )
							  :          
          :
				     (         )
				    (        )
				    (        )
				    (          )

3.1サブクエリはwhereまたはhavingの後に表示されます
1.     (     )
2.    (     )
3.    (  )(  )
  :
1.         
2.            
3.
     ,             :>,=,<=,<>
    ,             :IN/NOT IN、ANY/SOME、ALL
#    
#     Abel ?
SELECT last_name,salary FROM employees
WHERE salary>(
SELECT salary FROM employees WHERE last_name="Abel"
);
#2.    (    )

#  location_id 1400 1700            

SELECT e.last_name,department_id
FROM employees e
WHERE e.department_id IN (
	SELECT department_id FROM departments WHERE location_id IN (1400,1700)
);

#    
#                   
SELECT * FROM employees
WHERE (employee_id,salary)=(
SELECT MIN(employee_id),MAX(salary)
FROM employees
)

3.2 selectの後ろにあるサブクエリ
注:次の例では、サブクエリはプライマリ・クエリのテーブルの別名を使用します.このように使用できます.
#           
SELECT d.*,(
	SELECT count(*)
	FROM employees e
	WHERE e.department_id = d.department_id
	)   
FROM departments d;

3.3 fromの後ろにあるサブクエリ
サブクエリの結果をプライマリ・クエリのデータ・ソースとして使用
#                
SELECT ag_dep.*,g.grade_level
FROM
	(SELECT AVG(salary) ag,department_id
	FROM employees
	GROUP BY department_id) ag_dep
INNER JOIN
	job_grades g
ON ag_dep.ag BETWEEN g.lowest_sal AND g.highest_sal;

3.4 existのサブクエリ
#EXISTS  :-----------------------------
/*
EXISTS(   select  ):         ;
  :1 0
*/
SELECT EXISTS(SELECT employee_id FROM employees);

四、union連合クエリー
適用シーン:クエリーの結果が複数のテーブルから来ており、複数のテーブルに直接的な接続関係はありませんが、クエリーの情報が一致している場合.
特徴:
1.複数のクエリ文のクエリ列数が一致することを要求する.
2.複数のクエリ文が要求されるクエリの各カラムのタイプと順序が一致することが望ましい
書式:
    1
union
    2
union
……