Mysql入門第四課「データ照会」
6216 ワード
原文は私のGithubで、購読を歓迎します.
前言
前の文章 Mysql入門第一課「建表、改表、削除表」 Mysql入門第2課「データ型」 Mysql入門第三課「データの削除」 データ照会を1つの文章にまとめるのは,照会に関する知識点が多いためであり,添削改ざんでは検索の複雑さが最も高いといえる.
単一テーブルクエリーは非常に簡単ですが、開発ではマルチテーブルクエリーが多いので、マルチテーブルクエリーで説明します.
ウォーミングアップ
データを処理するときに、あるフィールドを使用して別の情報を調べます.データベースでよく行われるほか、フロントエンドでも同様の状況があります.
まず、フロントエンドでよく遭遇するデータを見てみましょう.
上は省市を揉んで2階しかネストしていませんが、4、5階がネストされている場合は、このようにします.
このデータは解析すると気が狂う.
私たちはずっとデータが扁平化されていると言っています.
データの扁平化の利点は、
上記の例では、データベースでテーブルをいくつかのフィールドで関連付けます.これがリレーショナル・データベースのコアです.
表を何枚か用意する
図には
検索
上記のいくつかのテーブルを使用して、いくつかの要件を調べます.成績が60点より大きい学生を検索し、学生の名前と成績 を表示する.姓 を調べます調べ すべての学生の名前、選択科目の数、成績の合計 を検索します.
私たちは一つ一つ分析します.
60点以上の学生を検索し、学生の名前と成績を表示します.
まず結果を見てください.正しいデータが得られました.
分析文:最初の行:クエリーするフィールド、これは非常によく理解されています 行目:実はその結果は一時表です!すなわち、対応するクエリ文のtable_name ! 第3行:通俗的で分かりやすい つまり、共通の文法に合致しています.
2行目にテンポラリ・テーブルが生成されただけです.
ここでは SQLの中の各種JOIN を図解します SQLのinner join、left/right join、outer join区別 を図解する SQLマルチテーブルクエリー:SQL JOIN接続クエリー様々な使い方まとめ空が青くない 馬という先生の数を調べる
解析: COUNT(fieldName):フィールド数を統計するCOUNT関数 AS:別名を取る LIKE:一般的に %:任意の文字を表し、正規表現の に似ています.
すべての学生の名前、選択科目の数、成績の合計を検索します.
このクエリは複雑です.まずsqlに行きます.
結果を見てみましょう.
先に!いや!はい!あわてて!私たちは少しずつ解析します.
共通のクエリー文が頭に浮かぶはずです.
図のクエリ文を翻訳すると、次のようになります.
次に、上の図のクエリーを分割します.まず
この文は私たちのために表を生成しました.それは学生id、選択科目数、総成績を示しているので、この表現は核心を表していますが、需要は私たちにすべての学生を見せることです.だから、私たちは
上図で検出された結果を
余分な部分を削除します.
ははは、すぐにわかるのではないでしょうか.
ここでは、文の中で見たことのないものを紹介します. IFNULL(a,b):よくあるif文のように、aがnullであるか否かを判断し、そうであればbを表示する. COUNT():読み込まれたデータの中のフィールドに対して個数を計算し、一般的にデータのエントリ数をクエリーするために使用されます. SUM():合計を求め、読み出しデータのフィールドの合計を求める. GROUP BY:GROUP BYで読み込んだデータをどのフィールドでグループ化するか(デフォルト昇順)を設定できますが、GROUP BYにはグループ集約機能があります. Group byの理解 Group Byのパケット集約プロセス を詳細に理解するための図
テーブル文の添付
以下に、いくつかのテーブルの構築文を示します.
まとめ
この文章は主に照会を理解しているが、これもただの練習にすぎず、実際の開発ではこれより難しい照会が多く、自分が普段何もしないで練習しなければならない.
今日は仕事が比较的忙しいので、文章の书き方がちょっと雑かもしれません.
前言
前の文章
WHERE id=2
のような非常に簡単な条件文は以前から知られていた.単一テーブルクエリーは非常に簡単ですが、開発ではマルチテーブルクエリーが多いので、マルチテーブルクエリーで説明します.
ウォーミングアップ
データを処理するときに、あるフィールドを使用して別の情報を調べます.データベースでよく行われるほか、フロントエンドでも同様の状況があります.
まず、フロントエンドでよく遭遇するデータを見てみましょう.
{
province:' ',
citys:[
' ',
' ',
' '
]
}
上は省市を揉んで2階しかネストしていませんが、4、5階がネストされている場合は、このようにします.
{
province:' ',
children:[
{
name:' 1',
children:[
name:' ',
children:[
name:'XX '
]
]
},
{
name:' 2',
children:[
name:'AA ',
children:[
name:'BB '
]
]
}
]
}
このデータは解析すると気が狂う.
私たちはずっとデータが扁平化されていると言っています.
//
const provice = [
{
province:' ',
province_id: 1001
},
{
province:' ',
province_id: 1002
},
...
]
//
const citys = [
{
name:' ',
province_id: 1001
},
{
name:' ',
province_id: 1001
},
{
name:' ',
province_id: 1002
},
{
name:' ',
province_id: 1002
},
...
]
//
const result = citys.filter(i => i.province_id === 1001);
データの扁平化の利点は、
を探す必要がない場合、citys
のデータは私には関係なく、province
に関心を持つだけでよく、検索性能が速く(再帰を免れることがある).上記の例では、データベースでテーブルをいくつかのフィールドで関連付けます.これがリレーショナル・データベースのコアです.
表を何枚か用意する
図には
student
の表にclass_id
が表示され、
と
はclass_id
を通じて関連付けられ、開発ではclass
の情報を検索することができます.検索
上記のいくつかのテーブルを使用して、いくつかの要件を調べます.
の先生の個数
先生の授業を習ったことがない学生の名前私たちは一つ一つ分析します.
60点以上の学生を検索し、学生の名前と成績を表示します.
SELECT t1.student_name, t2.number FROM
student t1 LEFT JOIN score t2 ON t1.id=t2.student_id
WHERE t2.number>60;
まず結果を見てください.正しいデータが得られました.
分析文:
t1
とt2
は、それぞれstudentとscoreの別名です.注意深い学友は见ることができて、私は上のsql文を3行で表示して、これは寓意があります:WHERE
条件文SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
2行目にテンポラリ・テーブルが生成されただけです.
ここでは
JOIN ON
の文法に関連しています.後の章で詳しく話します.ここではいくつかの関連文章をお勧めします.SELECT COUNT(id) AS teacher_num FROM teacher WHERE teacher_name LIKE ' %';
解析:
%
と使用され、ファジイ検索は、%
を使用しない場合、正確な検索に相当します.*
すべての学生の名前、選択科目の数、成績の合計を検索します.
このクエリは複雑です.まずsqlに行きます.
SELECT
t1.student_name,
IFNULL(t2.course_num,0) AS course_num,
IFNULL(t2.sum_number,0) AS sum_number FROM
student t1
LEFT JOIN
(SELECT student_id,count(id) course_num, SUM(number) AS sum_number FROM score GROUP BY student_id) t2
ON t1.id=t2.student_id;
結果を見てみましょう.
先に!いや!はい!あわてて!私たちは少しずつ解析します.
共通のクエリー文が頭に浮かぶはずです.
SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
図のクエリ文を翻訳すると、次のようになります.
SELECT , , FROM ;
次に、上の図のクエリーを分割します.まず
SELECT student_id,count(id) course_num, SUM(number) AS sum_number FROM score GROUP BY student_id
を見て、私たちは単独でこの結果を見てみましょう.この文は私たちのために表を生成しました.それは学生id、選択科目数、総成績を示しているので、この表現は核心を表していますが、需要は私たちにすべての学生を見せることです.だから、私たちは
student
に頼って調べなければなりません.上図で検出された結果を
t2
と命名すると、SELECT
t1.student_name, IFNULL(t2.course_num,0) AS course_num, IFNULL(t2.sum_number,0) AS sum_number
FROM student t1 LEFT JOIN t2
ON t1.id=t2.student_id;
余分な部分を削除します.
SELECT
t1.student_name, t2.course_num, t2.sum_number
FROM student t1 LEFT JOIN t2
ON t1.id=t2.student_id;
ははは、すぐにわかるのではないでしょうか.
ここでは、文の中で見たことのないものを紹介します.
GROUP BY
についていくつかの文章を見ることができます.テーブル文の添付
以下に、いくつかのテーブルの構築文を示します.
--
CREATE TABLE class(
id INT UNSIGNED PRIMARY KEY auto_increment,
caption VARCHAR(30) COMMENT ' '
);
--
CREATE TABLE student(
id INT UNSIGNED PRIMARY KEY auto_increment,
student_name CHAR(30) COMMENT ' ',
gender CHAR(30) DEFAULT NULL COMMENT ' ',
class_id INT DEFAULT NULL COMMENT ' id'
);
--
CREATE TABLE teacher(
id INT UNSIGNED PRIMARY KEY auto_increment,
teacher_name CHAR(30) COMMENT ' '
);
--
CREATE TABLE course(
id INT UNSIGNED PRIMARY KEY auto_increment,
course_name CHAR(30) COMMENT ' ',
teacher_id INT DEFAULT NULL COMMENT' id'
);
--
CREATE TABLE score(
id INT UNSIGNED PRIMARY KEY auto_increment,
number INT DEFAULT NULL COMMENT ' ',
student_id INT DEFAULT NULL COMMENT ' id',
course_id INT DEFAULT NULL COMMENT ' id'
);
まとめ
この文章は主に照会を理解しているが、これもただの練習にすぎず、実際の開発ではこれより難しい照会が多く、自分が普段何もしないで練習しなければならない.
今日は仕事が比较的忙しいので、文章の书き方がちょっと雑かもしれません.