SQLデータベースの14の事例の紹介

SQLデータベースの14の事例の紹介

データシート

/*
Navicat SQLite データ転送

ソースサーバー: school
ソース サーバー バージョン: 30808
ソースホスト: :0

ターゲット サーバー タイプ: SQLite
ターゲット サーバー バージョン: 30808
ファイルエンコーディング: 65001

日付: 2021-12-23 16:06:04
*/

プラグマforeign_keys = OFF;

-- ----------------------------
-- コースのテーブル構造
-- ----------------------------
"main"."Course"が存在する場合はテーブルを削除します。
CREATE TABLEコース(
    CourseID 整数主キー自動増分、
    courseme varchar(32)、
    教師ID int
);

-- ----------------------------
-- コースの記録
-- ----------------------------
INSERT INTO "main"."Course" VALUES (3001, 'Chinese', 1001);
「main」に「コース」VALUES(3002、「数学」、1002)を挿入します。

-- ----------------------------
-- マークのテーブル構造
-- ----------------------------
"main"."Mark"が存在する場合はテーブルを削除します。
CREATE TABLE マーク(
    ユーザーID整数、
    コースID整数がNULLではありません。
    スコア int デフォルト 0
);

-- ----------------------------
-- マークの記録
-- ----------------------------
「main」に「Mark」VALUES(2001、3001、89)を挿入します。
「main」に「Mark」VALUES(2001、3002、90)を挿入します。
「main」に「Mark」VALUES(2002、3001、66)を挿入します。
「main」に「Mark」VALUES(2003、3002、85)を挿入します。

-- ----------------------------
-- sqlite_sequence のテーブル構造
-- ----------------------------
"main"."sqlite_sequence"が存在する場合はテーブルを削除します。
テーブル sqlite_sequence(name,seq) を作成します。

-- ----------------------------
-- sqlite_sequence のレコード
-- ----------------------------
"main"."sqlite_sequence" に VALUES ('Teacher', 1002) を挿入します。
"main"."sqlite_sequence" に VALUES ('Student', 2002) を挿入します。
"main"."sqlite_sequence" に VALUES ('Course', 3002) を挿入します。

-- ----------------------------
-- 学生用のテーブル構造
-- ----------------------------
"main"."Student" が存在する場合はテーブルを削除します。
学生テーブルを作成(
    ユーザーID 整数 主キー 自動増分、
    ユーザー名varchar(32)、
    使用率 int、
    ユーザーセックスvarchar(32)
);

-- ----------------------------
-- 学生の記録
-- ----------------------------
「main」に「学生」値(2001年、「Xiao Ming」、18歳、「男性」)を挿入します。
「main」に「学生」値(2002、「Xiaohong」、18、「女性」)を挿入します。

-- ----------------------------
-- 教師用テーブル構造
-- ----------------------------
"main"."Teacher" が存在する場合はテーブルを削除します。
教師テーブルの作成(
    教師ID整数主キー自動増分、
    教師名 varchar(32)
);

-- ----------------------------
-- 教師の記録
-- ----------------------------
INSERT INTO "main"."Teacher" VALUES (1001, '张三');
「main」に「Teacher」VALUES (1002, 'Li Si') を挿入します。

質問:

1. 「中国語」コースの成績が「数学」コースの成績より低いすべての学生の学生IDを照会します。

からユーザーIDを選択 
(Mark から、courseid = '3001' のユーザー ID、スコアを選択)a、
(コースID = '3002' のマークからユーザーID、スコアを選択)b 
ここで、a.userid = b.userid かつ a.score<b.score;

2. 平均点が60点を超える学生の学生IDと平均点を照会する

MarkからユーザーID、平均スコアを選択
ユーザーIDによるグループ化 
平均スコアが60以上であること

3. 全学生の学生ID、名前、選択したコース数、合計スコアを照会する

選択したコースの数として s.userid、s.username、count_courseid を選択します。 
sum_score は生徒の合計得点
左結合 
(userid、count(courseid) を count_courseid として選択し、sum(score) を sum_score として選択します 
ユーザーIDによるマークグループから)sc
s.userid = sc.userid; の場合

4. 姓が「Li」の教師の数を照会します。

count(教師名)を選択
先生から 
teachername は '张%' のようになります。

5. 中国語コースのスコアが 60 未満の学生の学生 ID を、スコアの降順で検索します。

ユーザーID、スコアを選択
マークより
コースID = '3001'
スコア<60
スコア降順で並び替え;

6. 教師「張三」が担当するコースを受講した、または受講していない学生の名前を照会します。

ユーザー名を選択  
学生から 
ユーザーIDが(
    ユーザーIDを選択  
    マーク、コース、教師より 
    Course.teacherid = Teacher.teacherid かつ Mark.courseid = Course.courseid
    Teacher.teachername = 'Zhang San' の場合
);

7. すべての学生の選択科目、コース番号、コース名を照会します。

CourseID、CourseMeを選択 
コースから 
where courseid in (mark group by courseid から courseid を選択します)。

8. 2 つのコースを受講した学生の学生 ID を取得します。

ユーザーIDを選択 
マークより
ユーザーIDによるグループ化 
count(8) == 2である;

9. 各コースとそれに対応する選択科目の受講生数を照会する

Course グループから CourseID 、count(*) を CourseID で選択します。

10. 教師「張三」が担当するコースを選択した生徒の中で、最も成績が良い生徒の名前と成績を照会します。

Student.username、Mark.scoreを選択
マークより 
Mark.userid = Student.userid の Student に参加しました 
Mark.courseid = Course.courseid のコースに参加しました 
Course.teacherid = Teacher.teacherid の教師に参加しました 
Teacher.teachername = 'Zhang San' の場合
そして、Mark.score = (
最大(スコア)を選択 
マーク sc_1 より 
ここで、Mark.courseid = sc_1.courseid);

11. コースを選択した学生の数:

count(2) を選択 
(マークとは異なるユーザーIDを選択)a;

12. コースコードが「中国語」で、コーススコアが80点を超える学生の学生IDと名前を照会します。

Mark.userid、Student.usernameを選択  
マークより 
Mark.userid = Student.userid の Student に参加しました 
ここで、Mark.courseid = '3001' かつ Mark.score>80;

13. 各コースの平均スコアを照会し、結果を平均スコアの昇順で並べ替えます。平均スコアが同じ場合は、コース番号の降順で並べ替えます。

コースID、平均スコアを選択
マークより 
コースIDでグループ化 
平均(スコア)、コースID降順で並べ替え;

14. コース名が「数学」で、スコアが 85 を超える学生の名前とスコアを照会します。

c.courseme、Student.userid、Student.username、Mark.score を選択
コースcから
Mark.courseid = c.courseid のマークを左結合します 
Student を Student.userid = Mark.userid に LEFT JOIN する 
ここで、c.courseme = 'Mathematics' かつ Mark.score>85;

これで、14 の SQL データベース ケースに関するこの記事は終了です。SQL データベース ケースに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • いくつかのMySQL更新操作のケース分析
  • MYSQL の 10 の典型的な最適化ケースとシナリオ
  • SQL Server バッチデータ挿入ケースの詳細な説明

<<:  HTML印刷関連の操作と実装の詳細な説明

>>:  IE6のmin-widthとmin-heightと互換性を持たせる簡単な方法

推薦する

MySQL マスター/スレーブ ステータスを監視するシェル スクリプト

Linuxでシェルスクリプトを共有して、MySQLのマスタースレーブ状態を監視し、エンタープライズW...

vue 要素 el-transfer にドラッグ機能を追加

コア資産管理プロジェクトでは、el-transfer にドラッグ アンド ドロップによる並べ替えと、...

dockerでifconfigが利用できない問題を解決する

最近、docker を学習していたときに、docker コンテナ内のネットワーク状態を照会するために...

航空機戦争ゲームを実装するためのJavaScript

この記事では、キャンバスとjsを使用して簡単な飛行機戦争を実装する方法を参考までに紹介します。具体的...

VMwareのCentosシステムでNavicatがMySQLサーバーに接続できない問題を解決します

ホスト 'xxxx' はこの MySQL サーバーに接続できませんエラー: 1130...

Zen Coding 簡単で素早いHTMLの書き方

禅コーディングテキストエディタプラグインです。 Zen Coding を使用するテキスト エディター...

3列レイアウトを実現するCSS3フレキシブルボックスフレックス

タイトルの通り、高さは既知で、左と右の列の幅は 300 ピクセル、中央は適応型です。弾性ボックス自体...

プロジェクトにおけるVue3のロジック抽出とフィールド表示についての簡単な説明

目次論理階層化異なる地域から事業を分離するこれを実行する利点このようなシナリオにどう対処するか最適化...

MAC 上の MySQL の初期パスワードを忘れた場合の対処方法

MACでMySQLの初期パスワードを忘れた場合の解決策を参考までに共有します。具体的な内容は次のとお...

MySQL 5.7.18 でパスワードを変更する方法

MySQL 5.7.18 でパスワードを変更する方法: 1. まずMySQLサーバーをシャットダウン...

Ubuntu システムに Theano と Keras をインストールする方法

注: システムは Ubuntu 14.04LTS、32 ビット オペレーティング システムです。Py...

vueを使用して登録ページの効果を実現し、vueを使用してSMS認証コードログインを実現します

この記事の例では、登録ページの効果を実現するためのVueの具体的なコードを参考までに共有しています。...

JavaScript イベントバブリング、イベントキャプチャ、イベント委任の詳細な説明

1. イベントバブリング: JavaScript イベント伝播のプロセスでは、要素でイベントがトリガ...

CSS3 疑似クラスセレクターの簡単なレビュー

序文CSS がフロントエンド開発の基本的なスキルであるならば、「セレクター」は基礎中の基礎です。これ...

VMware vSphere 6.7 (ESXI 6.7) のグラフィック インストール手順

環境: VMware VCSA 6.7 (VMware-VCSA-all-6.7.0-8169922...