(答え)クエリ古典的な34個の質問をのmysql

`Db`SELECT SAL EMP順序とSAL BY; - 昇順給与で選択


DISTINCT SALはEMP ORDER BY SELECTのSAL FROM;
-再キーdiatinctに、SALを選ぶと、デフォルトで昇順にソートします
SELECT DISTINCT仕事、DEPTNO、SAL EMP FROM;
-異なる作業コードの選択を

-統計ジョブの数が
EMP FROM COUNT(DISTINCTジョブ)を選択します 。

; EMP FROM DEPTNO ENAME SELECT、
SELECT * FROM DEPTは、
-限定的な任意の条件なしに2つのテーブルを接続
SELECT ENAMEを、EMP FROM DNAME、DEPT 。

-同一のスプライシング操作DEPTNOテーブルを選択し
SELECT ENAME、EMP、部署FROM DNAME
WHERE emp.`DEPTNO` = dept.`DEPTNO`;
-エイリアスの方法
SELECT
e.ename、d.dname
FROM
EMP E、 D部門
WHERE
e.deptno = d.deptno;
方法別名--SQL99
SELECT E.ENAME、D.DNAME
EMPからDEPT D EをJOIN
ON E.DEPTNO = D.DEPTNO;
--INNERを省略してもよいが、添加することができます良好読み取り
SELECT E.ENAMEをD.DNAMEは
INNER FROM EMP DEPT D EをJOIN
ON E.DEPTNO = D.DEPTNO; -等価関係がそう同等接続と呼ばれることが条件で
-各従業員を識別するために給与水準、スタッフは名前、給料、給与レベルを表示するために必要な?
SELECT e.enameは、e.sal、s.GRADEは
SALGRADE Sから、Eは、EMP
BETWEEN WHERE e.sal s.losalとs.hisal; -ゴミ独自のコードを記述するために、その
SELECTのe.ename、e.sal、s.GRADE
EMP Eから
SALGRADE Sを登録しよう
s.losalとs.hisal BETWEEN e.sal ON。


E.ename SELECT、d.dname
EMP Eから
D部門をJOIN
ON e.`DEPTNO` = d.`DEPTNO`; - SQL構文は、99ルール


-ケース:クエリの
従業員の上司、従業員が対応する名前とリーダーシップの名前を表示するために必要な?
E.ename SELECT、e.leader
EMP E FROM
ON e.empno = e.mgr;
SELECT EMPNO、ENAME、EMP FROM MGR; -富栄成功したデモ

-クエリの場合、テーブル2つのテーブルとして見られる必要がある
従業員の数は、LED(実際EMP)ジョブ番号は、別のテーブルを使用して、Eテーブルのより高い数に等しい場合
SELECT e.empno、Eは。 ENAME AS '従業員'、m.empno、m.ename AS 'リーダー'
FROM
EMP E
JOINの
EMPをM
ON e.mgr = m.empno。

-内连接
SELECT
e.ename、d.dname
FROM
EMP E
JOIN
DEPT D
ON
e.deptno = d.deptno。


外側コネクタ(右の外部結合):
SELECT
e.ename、d.dname
FROM
EMP E
JOIN RIGHT
部門D
ON
e.deptno = d.deptno;
-スプライシング3つのデータテーブルを、そして分離する条件を設定
SELECT
E.をENAME、d.deptno、s.grade
E EMP FROM
D部門をJOIN
ON e.deptno = d.deptno
SがSALGRADE JOIN
e.sal ONとの間のs.losal AND s.hisal。

1、人の各部門名の最大給与を得るために
SELECT
DEPTNO、ENAME、SALを
FROM
T EMP
WHERE
SAL =(SELECT MAX(SAL)EMP FROM)
GROUP BYの
t.deptno。

-第二题
SELECT SAL、ENAME、AVG(SAL)
EMP FROM
GROUP BY SAL
(EMP FROM SELECT AVG(SAL))を有するSAL>。

3、達成セクタ平均給与レベル(すべて)、として次の部門番号によってグループ化されたEMPからの平均及び部門番号を取得
SELECT
AVG(SAL)、DEPTNO
FROM
EMP
BY GROUP
DEPTNO;

例:
ジョブを選択しますEMPグループから、SUM(SAL)ジョブによって; - ジョブ当たりの平均賃金を求めます

 

図4に示すように、最大給与(二つの溶液が与えられている)を得るため、機能(最大)のセットを使用することを許可されていない
第1の最大値を定義するこれらの数字に加えて、次にセット全体がに属していない、自己ライゲーション法を使用する方法を-これらの数のうち数がMAXの値であること
SELECT
SALは
FROM
EMP
WHERE
SAL NOT IN(EMP EMPからオン<b.sal a.sal BをJOIN DISTINCT a.sal SELECT);
-ソート順のSALを取る方法2最大値に、制約条件は、減少の一次得る最大値である
EMP ORDER BY SAL FROM SELECT DISTINCT SALを DESC LIMIT 1;


例:EMP JOINは異なるa.salを選択 a.sal上のEMP B <B .sal; -にのみ選択追加給与テーブルからテーブルBは、以下Bの賃金よりも

5、及びセクタの最高平均給与部門番号(指定された少なくとも二つの溶液)を達成
-メソッド
SELECT DEPTNO、AVG(SAL)は-疑いありますか?DEPTNOだけちょうどこの位置で
FROM
EMP
BY GROUP
DEPTNO
AVG(SAL)DESC BY ORDER
LIMIT 1;
-方法II
SELECT MAX(t.avgsal)、DEPTNO
FROM
(SELECT DEPTNO、AVG(SAL)EMP FROM DEPTNO BY GROUP AVGSAL) T;
-容疑者があるでしょう場合-このリストから、最大値が最大値の平均値で取得され、新しいリストとしてチームの平均?この場所でだけ正確deptno列

6は、部署の名前はのセクタで最も高い平均給与取得するために
SELECT MAX(t.avgsal)、t.deptno、d.dname
FROM
(SELECT DEPTNOは、AVG DEPTNO BY EMPからグループAVGSAL(SAL))Tは、 -依然としての本質でありますそれは形であるように平均セクタ、
DEPT DをJOIN
d.deptno = t.deptnoオン; -依然として資格の必要性と相まって、だけ少なくDEPTNO等しい条件よりも、理由を見つけるために、バグが改善の必要性のままであると感じ次のように:

D.dname SELECT、MIN(t.avgsal)
部門D FROM、(AVG(e.sal)AVGSALを選択e.deptno GROUP BYがEMP E FROM e.deptno)T
WHERE d.deptno = t.deptno AND t.avgsal =(SELECT AVG(SAL)
FROM
EMP
GROUP BY
DEPTNO
AVG(SAL)DESC BY ORDER
LIMIT 1);
--------------------------- -------------------------------------------------- ----------
SELECT d.dname、t.avgsal
D部門FROM
JOIN
(SELECT DEPTNO、GROUP BY DEPTNO AVGSAL EMP FROM AVG(SAL))T
ON
d.deptno = AND t.avgsal t.deptno =(SELECT AVG(SAL)AVGSAL EMP GROUP BY FROM DEPTNO AVGSAL ORDER BY DESC LIMIT
1); ----------------
免責事項:この記事はCSDNブロガー「椿姫です- 「オリジナルの記事、CC 4.0 BY-SAの著作権契約に従うが、再現し、元のソースのリンクと、この文を添付してください。
オリジナルリンクします。https://blog.csdn.net/qq_42764468/article/details/97813060

7、部門名部門最低レベルの給与平均
SELECT MIN(t.avgsal)、t.deptno、d.dname
FROM
EMP E ON FROM(SELECT e.deptno、d.dname、AVG(e.sal)をAVGSAL DEPTNO HAVING d.deptno = BY DEPT D群 e.deptno)T - それはフォームのような場所の本質は、セクタ平均まま
DEPT DをJOIN
d.deptno = t.deptnoオン; //は、自分自身を書きますごみコード

D.dname SELECT、t.avgsal
D部門FROM
JOIN
(SELECT DEPTNO、AVG(SAL)GROUP BY DEPTNO AVGSAL EMP)からT
ON
d.deptno = t.deptno AND t.avgsal =(SELECT AVG(SAL)EMP AVGSAL FROM ; DEPTNO GROUPのLIMIT 1)AVGSAL BY ORDER BY
他のコードの結果に基づいて、将来的にも実際に必要- -


(社員コードがMGRのフィールドに表示されない)平均従業員よりも得ることが、8最高の給料はさらに高いリーダーシップである
-個人的な分析は、まず自己列挙従業員とそのリーダーシップに接続されています。次いで、制限を使用する-テーブルの列Bのリーダーとして使用される名前を使用する
-テーブルTとして、このテーブル、テーブルTを制約条件値(ケース基準値)を取るために
SELECT DISTINCT a.empnoを、A. ENAME、a.sal、EMP FROM a.jobは EMP B a.empno = b.mgrを登録しよう; - これは、すべてのすべての従業員が取得する援助ではなく、リードしてい
たemp FROM EMPNO、仕事、SALを選択 WHERE ENAMEありませんIN(EMPは異なるa.enameを選択 a.empno = b.mgr JOIN EMP B)。

SELECT
a.empno、a.enameワーカー、a.job、b.enameリーダー、b.enameのleaderjob、a.mgrを
EMP FROM
EMP BのJOIN
a.mgr = b.empno ON;
-取出员工最高薪水领导薪水L比较和W
SELECT e.sal、e.`ENAME`、e.`DEPTNO`
EMP Eから
WHERE e.sal>(SELECT MAX(SAL)ENAME NOT INは、(SELECT EMP FROM a.empno = b.mgr)EMP JOIN EMP BからDISTINCT a.ename)。

-図9は、上部に5最高支払わ従業員からなる
SELECT SAL、ENAME、ジョブ
FROM
EMP
ORDER BY
SAL DESC
; LIMIT 5

10 ,,第10最高支払わ従業員に第六の達成-

、SELECT SAL、ENAMEジョブを
FROM
EMP
ORDER BY
SAL DESC
LIMIT 5,5;

--11、5人の従業員の最後のエントリを作りました

HIREDATE販売、仕事SELECT
FROM ORDER BY
溶融HIREDATEの降順上限5。


- 12および各給与水準どのように多くの従業員が作ら
SELECT
COUNT(e.sal)、e.`DEPTNO`
FROM
EMP E
GROUP BY
e.deptno; -間違った解決策は、単に各部門の人々の数を考え出し行うには陽性溶液

SELECT COUNT(s.`GRADE`)などの'レベル番号'、s.`GRADE`は
EMP E FROM、SはSALGRADE
WHERE
SAL s.`LOSAL`間s.`HISAL`
s.grade BY基;

--14、従業員とリーダーのすべての名前(自己接続)リスト
b.ename、SELECT a.enameを
FROM
EMP A
JOIN
EMP B
ON
a.`mgr` = b.`EMPNO`。

--15、リストは以前の番号、名前、部署の全従業員の直属の上司以外の日付を雇う
a.deptno、SELECT a.empno、a.ename、b.ename
FROM
EMP Aは
、JOIN
EMP Bを
ON
a.` MGR` = b.`EMPNO`とa.`HIREDATE` <b.`HIREDATE`。

- 16、リストこれらの分野で、部門と従業員情報の氏名、部署の社員のないリストはありませんしながら、
- (左と右の接続は、 -対象の片側、どんなに状況は、あなたが表示するために必要なものをテーブルの側面を形成するために、これは、他の側、結果にのみ条件が満たされ現れる)を形成
SELECT * d.dname、Eを。
FROM
部署D
LEFT JOIN
EMP E

e.`DEPTNO` = d.`DEPTNO`;
SELECT d.dname、E.をEMPNO、e.ename、e.job、e.hiredate、 e.sal FROM EMP E RIGHT JOIN DEPT D ON e.deptno = d.deptno。

--17のすべてのセクターに少なくとも5人の従業員を列挙した
SELECT COUNT(DEPTNO)、DEPTNO
FROM
EMP
BY GROUP
DEPTNO
HAVING
COUNT(DEPTNO)> = 5。

- 18および給与に記載されている「SMITH」従業員情報

SELECT *
FROM
EMP
SAL>(EMP ENAME = 'SMITH' FROM SELECT SAL)。

すべての"CLERK"(店員)名と部署名をリスト--19は、
SELECT E.ENAME、D.DNAMEは
FROM
EMP Eは
、JOIN
DEPT D
ON
E.`JOB` = 'CLERK' AND D.`DEPTNOを`E.`DEPTNO`は=。

-20は、仕事や従業員の数のリストで最小の給与大きい1500多様なこの仕事に従事していた。
ザSELECT MIN(SAL)、COUNT(SAL)
FROM
EMP
BY GROUP
ジョブ
HAVING
MIN(SAL)> 1500。


従業員の部門"営業" <販売>作品の名前、に記載されている--21、
SELECT d.`DNAME`、e.ename
FROM
EMP Eは
、JOIN
DEPT Dを
ON
d.`DEPTNO` = e.`DEPTNO` d.`DNAME` =と「セールス」;
- 22は,,すべての従業員が部門は、上司が、従業員の賃金会社の平均給与、より多く稼ぐ一覧表示する
複数のテーブルを追加するためには十分習熟していないです-
SELECT
e.ename「従業員、d.dname '部門'、a.enameのリーダーシップ'、s.`GRADE` '給与等級'
FROM
EMP Eは
、JOIN
DEPT Dを
ON
d.`DEPTNO` = e.`DEPTNO` -部門は、従業員の名前を取得した対応部門-1ノー
左は、JOINを
EMP A
ON
e.`MGR` = a.`empno` -左の滞在を利用することができます最高経営責任者(CEO)は、接続
JOINの
S SALGRADE
ON
e.sal S. BETWEEN `LOSAL`とs.`HISAL` -描かれた給与体系
WHERE
e.sal>(SELECT AVG(SAL) EMP FROM); - アウト平均フィルタより給与大きい



SELECT
e.ename、d.dname、a.ename、s.`GRADE`
FROM
EMP E、D部門、EMP A、SはSALGRADE
WHERE
e.sal>(EMPから選択したAVG(SAL))
AND e.`MGR` = a.`empno`
AND e.`DEPTNO` = d.`DEPTNO`
間s.`をe.sal LOSAL`とs.`HISAL`; -自分自身の結果が正しいか間違っている、もう一つにつながる条件の欠如

SELECT e1.empno、e1.ename、d.dname、e1.salは、sg.grade
EMP E1、EMP FROM E2、D部門は、SGはSALGRADE
(AVG(SAL)EMPからの選択)> WHERE e1.salを
AND e1.mgr = e2.empno
AND e1.deptno = d.deptno
エラーケースを-とLosal間hisalをe1.sal不足の最高経営責任者(CEO)

-すべての「SCOTT」同じ仕事をしているし、部門名と記載されている23人の従業員、
SELECT e.ename、d.dname
EMP E FROM
DEPT D JOIN
ON e.job =(SELECTジョブをFROM EMP WHERE ENAME = 'スコット')
AND e.`DEPTNO` = d.`DEPTNO`。

--24、30列挙された給与は、人事部門の従業員の名前と給与に他の従業員の給与に等しい.--私は外の最初の30個のセクタをボールをカット
SELECT a.ename、a.sal
EMP A FROM
a.deptno = 30; -正ソリューションの下に、すべての人事部30を表し、

a.enameを選択a.sal
EMP FROM
RIGHTは(SELECT a.salをJOIN
EMP Aから
B WHERE a.deptno = 30)
a.sal = b.sal ON。

--25、従業員の給与の扉リスト名と給与は30部門の部門名の全従業員の仕事の給料よりも高くなっています。

a.ename、a.sal、d.`DNAME`を選択
EMP FROM
JOIN DEPT D
ON
d.`DEPTNO` = a.`DEPTNO`
AND a.`SAL`>(SELECT MAX(a.sal)
EMP Aから
WHERE a.deptno = 30)。

--26、各部門で働く従業員の数、平均賃金とサービスの平均長記載されている。
SELECT COUNT(ENAME)、
AVG(SAL)を、
AVG(YEAR(SYSDATE()) - YEAR(HIREDATE))
EMP FROM
GROUP EMP.DEPTNO BY; - (オンライン答えを得ます)

--26、各部門で働く従業員の数、平均賃金とサービスの平均長記載されている。
SELECT COUNT(ENAME)、AVG(SAL)を、AVG(YEAR(SYSDATE()) - YEAR(HIREDATE))EMP群からemp.`DEPTNO` BY;

--27、全従業員の名前、部門名と給与を一覧表示。
E.ename SELECT、d.dnameは、SALはEMP FROM DEPT E dを登録しよう;

- 28、リストの詳細と、すべてのセクタ数を
電子をSELECT *、d.dname、FROM SAL EMP eはd.` ON DEPT Dを登録しよう。 e.`DEPTNO` DEPTNO = DEPTNO` BY ORDER;

- 29 ,,リスト各種作業最低賃金と従業員は、この仕事に従事して
SELECT ENAME、MIN(SAL)ジョブによってEMPからグループ;

- 30を、カラム様々な部門の最低給与MANAGER(リーダー)がある
SELECT ENAME、仕事、MIN(SAL)、EMPからWHERE DEPTNO仕事=「管理」;

- 31 ,,給与からのプレスによると、全従業員のリスト年俸、ランキングの高い低
EMP FROM SELECT ENAME、SAL * 12;

- 33、部署の合計数の「S」文字と部門、給与計算部門の従業員の名前を見つける。

SELECT d.dnameを、SUM(e.sal)、COUNT (e.empno)
EMP E FROM、D部門
WHERE e.deptno = d.deptno AND LIKE '%S%'をd.dname
d.dname BY GROUP;

-日付オフィスの従業員34は,,上30年以上プラス10%を支払います。
-どのようなバックアップするテーブルの
テーブルとしては、SELECTをemp_bak CREATE * FROM EMP;
UPDATE emp_bak SET SAL = SAL * 1.1 WHERE(TO_DAYS(NOW()) - TO_DAYS(HIREDATE))/ 365> 30。

おすすめ

転載: www.cnblogs.com/LWF6869/p/12542516.html