44日目のシングルテーブル・クエリ、マルチテーブルクエリ、サブクエリ

単一テーブルのクエリ


[INTO]をINSERT
[データベース名。]表[(1つのフィールド[、...、フィールドN-])]
の値
(データ1 [、...、N-データ])、...、(データ1 [、...、N-データ])]。

削除:
から削除[データベース名。]テーブル[条件];

変更:
アップデータ[データベース名]表設定フィールド値1 = 1 [、...、フィールドnの値がN =] [条件]。

ZHAは:
[DISTINCT] 1フィールドを選択し[[ASエイリアス1]、...、フィールドN [よう]エイリアスN] [データベース名]表[条件]から、
"" "

#条件は:であり、ここで、基により、よりによって、異なる順序を有し、限界=> スクリーニングの層後の結果
#注:クエリは、あなたは、スクリーニング条件の様々な構造を有することができ、注文の条件は上記の順序で段階的に選択を行わなければなりません、明確な少し特別には、条件の種類が不完全になることができます(位置を書き込み)
#はなく、注文のうち、削除することができます

 

 

#の重複排除:明確な

MySQLの>:
テーブルT1を作成する(
  ID int型、
  Xはint、
  Y int型
  );

MySQLの> T1値(1、1、1)、(2、1、2)、(3、2、2)、(4、2、2)に挿入します。

MySQLの>:t1から個別の*を選択します。#すべてのデータ

MySQLの>:異なるX、Y t1から選択し;#1,1 1,2 2,2結果

MySQLの>:T1から別個Yを選択し、#12の結果

#概要:異なる問い合わせのすべてのフィールドに参加し、全体的なデエンファシス(同じ調査のすべてのフィールドの値は、重複データであると考えられていました)

 

データ準備

`emp`(CREATE TABLEの
` id` INTは(0)NOT NULL AUTO_INCREMENT、
`name`ののVARCHAR(10)NOT NULLと、
` gender`列挙型( '男'、 '女'、 '未知')はNULL DEFAULT '未知'
`age`整数(0)NULLのDEFAULT 0、
` salary`フロートのNULL DEFAULT 0、
`area`のVARCHAR(20)NULLデフォルト'中国'、
` port`のVARCHAR(20)DEFAULT '未知'、
`dep`のVARCHAR(20 )、
PRIMARY KEY( `id`)
)。

VALUES emp` INTO `INSERT
(1 'yangsir'、 'M'、42、10.5、 '上海'、 '浦東'、 '単位学部')、
(2 'Engo'、 'M'、38、9.4 '山東'、 '済南'、 '教育局')、
(3 'ジェリー'、 '女性'、30、3.0、 '江蘇省'、 '張家港'、 '教育局')、
(4、 '戦車' '女性'、28、2.4、 '広州'、 '広東省'、 '教育学部')、
(5 'jiboy'、 '男性'、28、2.4、 '江蘇省'、 '蘇州'、 '教育省' )、
(6 'ZERO'、 '男性'、18、8.8、 '中国'、 '黄浦'、 ')コンサルティング'、
(7 'オーウェン'、 '男性'、18、8.8、 '安徽省' '宣'、 '教育学部')、
(8 'ジェイソン'、 '男性'、28、9.8、 '安徽省'、 '湖'、 '教育学部')、
(9、 '英'、 '女性' 、36、1.2、 '安徽省'、 '蕪湖'、 'コンサルティング')、
(10 'ケビン'、 '男性'、36、5.8、 '山東'、 '済南'、 '教育部門')、
(11、 '猿'、 '女性'、28、1.2、 '山東省'、 '青島'、 '教職員課')、
(12 'サン'、 '男性'、30、9.0、 '上海'、 '浦東' ) 'コンサルティング'
(13 'SAN1'、 '男性'、30、6.0、 '上海'、 '浦東') 'コンサルティング'0、 '上海'、 '浦東'、 ')コンサルティング'0、 '上海'、 '浦東'、 ')コンサルティング'
(14 'SAN2'、 '男性'、30、6.0、 '上海'、 '浦西'、 '教育局')、
(15 'ruakei'、 '女性'、67、2.501、 '上海'、「陸家嘴''教育セクション「);

 

#一般的に使用される機能

ステッチ:CONCAT()| CONCAT_WS()
の場合:上部()|下()
浮動小数点演算:CEIL()|床() |ラウンド()
整数:直接操作

MySQLの>:SELECT名前、エリア、港EMPから;
MySQLの>:名として名を選択し、CONCAT(面積、 ' - ' 、ポート) emp表からアドレス;#上海-浦東
のmysql>:名として名を選択し、CONCAT_WS(「 - 」、エリア、ポート、DEP)emp表からの情報;#上海-浦東-学部学科

MySQLの>:上部(名)名の大文字、小文字EMPから下部(名)名を選択します。

MySQLの>:EMPから給与に給与、ラウンド(給与)の下ID、給料、CEIL上部(給与)給与、床(給料)を選択します。

MySQLの>:選択名の名前、年齢、古い年齢、年齢+ 1ニューエイジEMPから。

 

#条件:

#インポートは、複数の条件の操作座標:奇数[平均]給与限度1順[部門別グループは、平均給与を有する]ここで

MySQLの>:EMP SELECT * FROMここ ID <5リミット1;# 通常
のMySQL>:EMP制限SELECT * FROM 1 ID <5;# 異常な、無秩序状態

#判定ルール
「」 "
に沿って、より:> | <|> = | !<= | | = =
(カスタムコンテナ)内|開始と終了の間:行の範囲
ロジックアコード:および|または|ない
同様のアコード:のような_ |%
定期アコード:正規表現正規文法
"" "
MySQLの>:SELECT *からEMP WHERE給与> 5;
MySQLの>:SELECT *からEMP WHERE上記のid%2 = 0;

MySQLの>:6と9の間EMP給料から選択*;

MySQLの>:(1、3、7、20)にEMP ID SELECT * FROM。

#_o某O | __o某某O | _o%某O *(*是0〜N个任意字符)| %O%* O *
mysqlの>: '%O%'のようなEMP名から選択*;
MySQLの> '_o%'のようなEMP名から選択*;
MySQLの> '___ O%'のようなEMP名から選択*;

定期的な構文の一部のみ#SQLサポート
MySQLの>:選択* EMPから名前regexpは」* \ D。 『;# \ dをサポートしていませんが、dは通常の文字列である\数を表し、
mysqlの>:選択* EMPから場所名正規表現』 。* [0-9]「;#サポート[]構文

 

でグループ|持つ:#グループ化とフィルタリング

どこ与持ちます

#外観:同じ結果を有するパケット、非存在下での
#キーを:重合結果をスクリーニングすることができるHAVING
MySQLを>:>給料から* WHERE EMPを選択5;
MySQLの>:EMP>が給料を持っていることからSELECT * 5。

MySQLの>:(5、10、15、20)にEMP ID SELECT * FROM。
MySQLの>:(5、10、15、20)にIDを有するEMP SELECT * FROM。

 

集計関数

MAX():最大値
分():最小値の
平均():平均
和()及び
カウント():カウント
GROUP_CONCAT():グループフィールドスプライシングは、グループ内の他のフィールドを表示します

グループでグループを照会します

#修改のmy.ini配置重启のMySQL服务
sql_modeの= ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

制限なしONLY_FULL_GROUP_BY sql_modeので#、それを行うことができますが、結果はセンスがありません
与えられて、#は制限がありONLY_FULL_GROUP_BY
MySQLの>:EMPグループから選択* DEPにより、

各パケットは、一体の各グループ内の多くのレコードのために、グループ化フィールドを参照して、複数のレコードが含まれているため、表考慮してデータをグループ化した後#は、単一のレコードでない
部署別にグループ化され、各部門:#の例人の合計数に設定された最高の給料、最低賃金、平均給与を、持っている人

#統一複数のデータ処理は、この方法は、ポリマーと呼ばれ
#最高給与、最低給与、平均給与を有する各部門は、重合の結果と呼ばれる-操作の集約関数の結果を
#注:グループへの参加フィールド、重合結果に起因します

MySQLの>:
SELECT
  DEP部門、
  GROUP_CONCAT(名)メンバー、
  MAX(給与)最高給与、
  分(給与)最低賃金、
  AVG(給与)の平均給与、
  総給与のSUM(給与)、
  COUNT(性別)数
のempグループからのことでDEP;

MySQLの>:SELECT
      DEP部門、
      最大(年齢)最大年齢
    DEPによるEMPグループから;

#概要:グループ化した後、重合結果は、クエリパケットフィールドは、機能及び動作を集約することができ

 

グループ化されました

MySQLの>:
SELECT
DEP部門、
GROUP_CONCAT(名)メンバー、
MAX(給与)最高給与、
分(給与)最低賃金、
AVG(給与)の平均給与、
総給与のSUM(給与)、
COUNT(性別)数
のempグループからのことでDEP;

#最低賃金は2未満である
:MySQLの>
SELECT
DEP部門、
GROUP_CONCAT(名)メンバー、
MAX(給与)最高給与、
分(給与)最低賃金、
AVG(給与)の平均給与、
総給与のSUM(給与)、
COUNT(性別)数
分(有するDEPによるEMP群から給与)<2。

重合結果を持つ#は、その後どこない、スクリーニングすることができます

 

並び替え#

照合

第1ソートフィールドによって#オーダー[ASC | DESC]、二次ソートフィールド1 [ASC | DESC]、...二次ソートフィールドのn [ASC | DESC]

 

グループ化されていない状態

MySQLの>:EMPから選択*;

#昇順年齢によって順序
のMySQL>:; EMP年齢ASCからSELECT *順
給与に従って降順#
mysqlの>:SELECT * FROM EMPオーダーから給与DESCによって、

場合#、給与に従って降順同じ、熟成降順
のMySQL>:SELECT *給与DESC、年齢DESCで注文をEMPから;
#が同じであれば、その後下降支払う、年齢に応じて降順
のmysql>:EMPオーダーから選択*年齢DESCで、給与DESC;

 

グループ化された状態

MySQLの>:
SELECT
  DEP部門、
  GROUP_CONCAT(名)メンバー、
  MAX(給与)最高給与、
  分(給与)最低賃金、
  AVG(給与)の平均給与、
  総給与のSUM(給与)、
  COUNT(性別)数
のempグループからのことでDEP;

下降位最高給与
MySQLを:
SELECT
  DEP部門、
  GROUP_CONCAT(名)部材、
  MAX(給与)最高給与、
  分(給料)最低賃金、
  AVG(給与)の平均給与、
  総給与のSUM(給与)、
  COUNT(ジェンダー)数
からDEPにより、当社グループは、EMP
最高給与DESCで注文を。

 

#制限の上限

#の構文:数を制限|オフセット制限、番号
のmysql>:名前を選択し、給料から給料<8オーダー給与DESC制限1によるEMP;

MySQLの>:EMPリミット5,3から選択*;#は、オフセット5の条件を満たすように記録し、その後、クエリ3

 

 

でも、テーブル、クエリ

#接続

#接続:、大規模なテーブルパラメータ接続するために、(行にリンクされ、必ずしも外部キー)関連分野で連結された複数のテーブルがあります
。#でも、テーブルのクエリを:、あなたはそれを大きなテーブルに基づいてクエリを呼び出しますでも、テーブルクエリとして

接続を確立するテーブルと#表4がある:内部接続は、左右の接続部を接続し、完全に接続

 

多くのデータ準備

MySQLの>:データベースDB3を作成します。
MySQLの>:DB3を使用します。

MySQLの>:
表DEP作成します(
  ID int型主キーAUTO_INCREMENT、
  名前VARCHAR(16)、
  作業VARCHAR(16)
);
表EMP(作成
  ID int型主キーAUTO_INCREMENT、
  名前VARCHAR(16)、
  給与フロート、
  dep_id INTを
);
INSERT DEPの値に(1、 'マーケティング'、 '販売')、(2、 '教育学部'、 '教育')、(3 '管理部門'、 '車');
INSERT INTOのEMP(名前、給与、 dep_id)の値( 'エゴン'、 3.0、2)、( 'yanghuhu'、2.0、2)、( '三江'、10.0、1)、( 'オーウェン'、88888.0、2)、( 'liujie'、8.0、 1)、( '英傑'、 1.2、0);

 

デカルト積

#直積:集合X {A、B} * {Y、O、P、Q} => Z {{O}、{P}、{Q}、{B、O}、{ B、P}、{B、Q}}

MySQLの>:EMP、DEPから*選択します。

#概要:レコードの二つのテーブルのすべての順列と組み合わせ、データは価値がありません

 

エン#

キーワード#:インナーON参加
#構文..内部テーブルのテーブルからA = Bテーブル関連フィールドテーブルに関連するフィールドでBに参加します

MySQLの>:
選択
emp.id、emp.name、給与、dep.name、仕事
EMP内部からemp.dep_id = dep.idにDEPに参加
emp.id順。

#概要:関連するデータの唯一の2つのテーブルを保ちます

 

#左の接続

#キーワード:に参加し、左
、右のテーブルに関連付けられたフィールド=左のフィールドを右表に関連付けられたテーブルを結合する左...左の表から:#構文を

MySQLの>:
選択
  emp.id、emp.name、給与、dep.name、仕事
EMPからemp.dep_id = dep.idにDEPに参加左
emp.id順。

#概要:データテーブルが示す対応直接リンクが存在し、右側のテーブルをテーブルを残し、すべてのデータを保持し、空の充填の間に対応関係が存在しません

 

#右の接続

キーワード#:右入会ON
A = Bテーブル関連フィールドテーブル関連したフィールド上の表の表は、右の参加からB:#構文を。

MySQLの>:
選択
  emp.id、emp.name、給与、dep.name、仕事
EMPから右emp.dep_id = dep.idにDEPに参加
emp.id順。

#概要:全てのデータテーブルを保持する右、左テーブルに直接対応するデータテーブルショーに接続された、空の充填の間に対応関係が存在しません

 

左と右の相互に変換することができます

MySQLの>:
選択
  emp.id、emp.name、給与、dep.name、仕事
EMPから右emp.dep_id = dep.idにDEPに参加
emp.id順。

MySQLの>:
選択
  emp.id、emp.name、給与、dep.name、仕事
DEP左からemp.dep_id = dep.idにEMPに参加
emp.id順。

#概要:対応する左右の接続キー、同じ結果を置き換える、テーブルの周りにどのような位置を交換します

 

完全に接続されている#

MySQLの>:
選択
  emp.id、emp.name、給与、dep.name、仕事
EMPからemp.dep_id = dep.idにDEPに参加左

連合

選択
  emp.id、emp.name、給与、dep.name、仕事を
EMPから右emp.dep_id = dep.idにDEPに参加

IDによって順序。

#概要:左テーブル右テーブルデータが保持され、通常の表示との間の別の対応関係があり、お互いに空充填され、相互に対応していません

 

多くの場合と一致する一

#テーブルは詳細著者のいずれかを作成する
表の作成者(作成
  上述のID INT、
  名前VARCHAR(64)、
  detail_idのINT
);
表author_detail作成(
  上記ID INTを、
  電話VARCHAR(11)
);
#パディングデータは、
著者値に挿入(1 。、 'ボブ' ,. 1)、(2 'トム'、2)、(3 'ruakei'、0);
INSERT INTOのauthor_detail値(1、'13、344556677 ')、(2、'14、466779988')、(3。 '12344332255');

#内连
著者から選択author.id、名前、電話はauthor.idによってauthor.detail_id = author_detail.idオーダーのauthor_detailに参加します。

#全连
選択author.id、名前、作者からの電話はauthor.detail_id = author_detail.idにauthor_detailに参加左
組合
著者から選択author.id、名前、電話は右author.detail_id = author_detail.id上author_detail参加
idで順番を、

 

2テーブル2との接続を行います。多くには、多くの

本の著者と1対1に基づいて#、多くの関係が確立された関係

表の#利用の前に
テーブルの著者(作成
  ID int型、
  名前VARCHAR(64)、
  detail_idはint
;)
、INSERT INTO作者値を(1、 'ボブ,. 1)、(2 'トム'、2)、(3。 'ruakei'、0);

新規作成帳テーブル#が
表ブック(作成
  ID int型、
  名前VARCHAR(64)、
  価格進(5,2)。
);
INSERT INTOブック値、(2、「Linuxの、2.66(1、 'Pythonの、3.66を。) )、(3、 'GO' 、4.66);

#作者との本のテーブル作成
テーブルauthor_bookを作成します(
  上記のid int型、
  AUTHOR_ID int型、
  book_id INT
);
#データ:著者-書籍:1-1,2 2-2,3 3-1,3
author_book値INTO INSERTを(1 、1,1)、(2,1,2)、(3,2,2)、(4,2,3)、(5,3,1)、(6,3,3)。

#接続を確立するために、関連するテーブル11をので、彼らは、クエリのフィールドを必要とする
からSELECT book.name、book.price、author.name、author_detail.phoneブック
book.id = author_book.book_id ON author_bookに参加し
author_book ON作者に参加。 = AUTHOR_IDがauthor.id
author.detail_id = author_detail.id ON参加author_detailを残しました。

おすすめ

転載: www.cnblogs.com/wwei4332/p/11586715.html