複雑なSQLクエリを含むMySQLの一般的なSQL文の概要

複雑なSQLクエリを含むMySQLの一般的なSQL文の概要

1. 複雑なSQLクエリ

1.1. 単一テーブルクエリ

(1)指定の列を選択する

[例] 全生徒の生徒IDと名前を照会する

学生番号としてSno、学生の名前としてSnameを選択します。
学生からSno、Snameを選択します。

(2)すべての列をクエリする

[例] 全生徒の詳細情報の照会

学生から*を選択します。

(3)クエリに従って指定された列に名前を付ける

[例] すべての生徒の「名前」と「生年月日」の列を照会する

名前としてSname、生年月日として(2014-Sage)を学生から選択します。
学生からSname、(2014-Sage)を選択します。

(4)重複した値を持つ行を削除する

[例] コースを受講した学生の学生IDを照会する

SC からコースを受講した学生の学生番号として個別の Sno を選択します。
SC から個別の Sno を選択します。

(5)テーブル内のいくつかのタプルを選択する(条件を満たすもの)

1.2 サイズ比較

[例] コンピュータサイエンス学部 (IS) の全学生のリストを照会する

Sdept='IS' の学生から学生名として Sname を選択します。

[例] 20歳未満の学生全員の名前と年齢を照会する

Sage<20 の学生から、名前として Sname、年齢として Sage を選択します。

1.3 範囲を決定する

[例] 20歳から23歳までのすべての学生の名前、学部、年齢を照会する

名前としてSname、部門としてSDept、年齢としてSage(Sageが20~23の場合)を学生から選択します。

小さい数字と大きい数字の間のスペースに注意してください。

1.4. inとnot inは集合を決定する

[例] IS 部門と CS 部門のすべての学生の名前と性別を照会する

Sdept='IS' または Sdept='CS' の学生から、名前として Sname、性別として Ssex を選択します。
Sdept in ('IS', 'CS') の学生から、名前として Sname、性別として Ssex を選択します。

[例] IS 部門にも MA 部門にも属さない学生の名前と年齢を照会する

Sdept !='IS'かつSdept!='CS'の場合、名前としてSname、年齢としてSageを学生から選択します。
Sname を名前として、Sage を年齢として選択します。Sdept は ('IS','MA') に含まれません。

1.5. 文字のマッチング(% _ など)

[例] 姓がLiであるすべての学生の名前と性別を照会する

Sname が '李%' のような学生から、名前として Sname、性別として Ssex を選択します。

[例] 2002年に在籍した全学生の学生ID、名前、学部を照会する

Sno が '2002%' のような学生から、学生番号として Sno、名前として Sname、部門として SDept を選択します。

[例] 姓が「Liu」ではないすべての学生情報を照会する

select * from student where Sname not like'刘%';

[例] 「データ」を含むコース番号、コース名、単位を検索する

コース番号として Cno、コース名として Cname、コースの単位として Ccredit を選択します (Cname は '% data%' に類似)。

要約:

select * from course where cname like '%数据%'; データを含む文字列select * from course where cname like '数据%'; データで始まる文字列select * from course where cname like '%数据'; データで終わる文字列

1.6. null値を含むクエリ(is null)

[例] 前提コースなしでコース番号とコース名を照会する

コース番号として Cno、コース名として Cname、Cpno が null のコースから Cpno を選択します。

[例] 成績のあるすべての学生の学生ID、コースID、成績を照会する

学生番号として Sno、コース番号として Cno、Grade が null でない SC からの成績として Grade を選択します。

1.7. クエリ結果の並べ替え(order by)

[例] コース3を受講した学生の学生IDと成績を照会し、結果を成績の降順で並べ替えます。

学生番号として Sno を選択し、SC の成績として Grade を選択し、Cno=3 で、成績の降順で並べ替えます。

[例] コース3を受講した学生の学生IDと成績を照会し、結果を成績の昇順で並べ替えます。

学生番号として Sno を選択し、SC の成績として Grade を選択し、Cno=3 で Grade の昇順で並べ替えます。

1.8 集計関数

カウント、合計、平均、最大、最小

[例] 生徒総数を問い合わせる

学生の総数として、student から count(*) を選択します。

[例] すべてのコースの合計単位数を照会する

コースのすべてのコースの合計クレジットとして sum(Ccredit) を選択します。

[例] 全生徒の平均年齢を問い合わせる

学生の平均年齢としてavg(Sage)を選択します。

[例] コース1の最高得点を照会する

Cno=1 の SC からコース 1 の最高スコアとして max(Grade) を選択します。

1.9. グループ統計(グループ化)

【例】男子生徒と女子生徒の数を確認します。

性別としてSsexを選択し、Ssexによる学生グループの人数としてcount(*)を選択します。

【例】各コースのコース番号と平均点を照会します。

コース番号としてCno、CnoによるSCグループからの平均スコアとしてavg(Grade)を選択します。

【例】3科目以上履修した学生の学生IDと選択科目数を照会します。

学生番号としてSnoを選択し、選択科目数としてcount(course.Cno)をSCから選択します。
course.Cno=SC.Cnoの場合
Snoによるグループ
Count(course.Cno)>=3 の場合

having キーワードの直後に集計関数が続きます。

SQL に HAVING 句を追加する理由は、集計関数では WHERE キーワードを使用できないためです。

SELECT 列名、集計関数(列名)
テーブル名から
WHERE 列名 演算子 値
GROUP BY 列名
HAVING 集計関数(列名) 演算子値

【例】2科目以上(科目2を含むが科目1は除く)履修した学生の学生IDと選択科目数を照会します。

学生番号としてSnoを選択し、選択科目数としてcount(course.Cno)をSCから選択します。
ここで、course.Cno=SC.Cno かつ course.Cno !=1
Snoによるグループ
Count(course.Cno)>=2 の場合

【例】2科目以上不合格となった学生の学生ID番号を検索します。

スノーを選択
scから
sc.Grade<60の場合
Snoによるグループ
count(Cno)>=2である;

[例] 受講生が 2 名以上(2 名を含む)のコースに登録されているコース番号と受講生数を照会します。

Cno、count(Sno)を選択
SCより
Cno によるグループ
count(sno)>=2である

2. 接続クエリ

(1)等価結合クエリと非等価結合クエリ

[例] 各学生とその選択科目を照会する

学生番号として student.Sno、選択科目番号として course.Cno、学生、コース、SC の成績として SC.Grade を選択します。 
ここで、student.Sno=SC.Sno、course.Cno=SC.Cno です。

(2)自己接続

[例] 各学生の間接選択科目を照会する

学生番号としてSC.Snoを選択します。
FIRST.Cnameを直接選択科目として指定し、
2番目:SCからの間接選択科目としてCname、
まず第一に、
コース2として
ここで、FIRST.Cno=SC.Cno
そして FIRST.Cpno=SECOND.Cno;

(3)外部結合

[例] 全学生の選択科目を照会する(選択科目を履修していない学生も含む)

学生番号としてstudent.Snoを選択します。
名前としての名前、
sc.Cno 学生の選択科目番号 
左外部結合 SC ON student.Sno=SC.Sno;

結合は、テーブル内の列間の関係に基づいて、2 つ以上のテーブルからデータをクエリするために使用されます。

JOIN: テーブルに少なくとも 1 つの一致がある場合に行を返します。LEFT JOIN: 右側のテーブルに一致がない場合でも、左側のテーブルのすべての行を返します。RIGHT JOIN: 左側のテーブルに一致がない場合でも、右側のテーブルのすべての行を返します。FULL JOIN: どちらかのテーブルに一致がある限り、行を返します。
UNION 演算子は、2 つ以上の SELECT ステートメントの結果セットを結合するために使用されます。
UNION 内の SELECT ステートメントには同じ数の列が必要であることに注意してください。列も同様のデータ型である必要があります。また、各 SELECT ステートメント内の列の順序は同じである必要があります。

3. ネストされたクエリ

(1)IN述語(属性が(サブクエリのクエリ結果)内にある)を持つサブクエリ

【例】同じ学科の王ミンさんの学生情報を照会します。

*を選択
学生から
(
 部門を選択
 学生から
 Sname='王敏'
);

[例] 王敏と同じ学科に所属していない学生の情報を照会します。

*を選択
学生から
Sdeptが(
 部門を選択
 学生から
 Sname = 'Wang Min'
);

[例] 「情報システム」コースを受講した学生の学生IDと名前を照会します。

学生番号としてstudent.Sno、学生名としてstudent.SCからSnameを選択します。
ここで、student.Sno=SC.Snoであり、Cnoは(
 Cnoを選択
 コースから
 Cname='情報システム'
)

[例] Liu Chen の授業を受けた学生の学生 ID と名前を検索します。 (前提:コースにはクラスが 1 つだけあります)

学生番号として個別の学生.Sno、学生名として学生.SC を選択する
ここで、student.Sno=SC.Snoであり、Cnoは(
 Cnoを選択
 SC、学生より
 ここで、SC.Sno=student.Snoであり、student.Snoは(
 Snoを選択
 学生から
 ここで、student.Sname='Liu Chen'
 )
)
  • 内側の in クエリは Liu Chen の学生 ID 番号 sno を見つけ、外側の in クエリは Liu Chen が受講しているコースのコース番号を見つけます。

(2)比較演算子(=、>=、<=、<>、または!=)を含むサブクエリ

[例] 王敏と同じ学科の学生情報をすべて照会する(=判断)

*を選択
学生から
ここで、Sdept=(
 部門を選択
 学生から
 Sname='王敏'
)

[例] コースの最低得点を超えた各学生のコース番号を検索します。 (類似コースの中で最低スコアではない)、サブクエリの結果が数値を返す場合、このサブクエリを数値として使用できますか? 「〜内の」記号、または「より大きい」記号や「より小さい」記号を使用できます。

Cnoを選択
SCから
ここでグレード> (
 min(グレード)を選択
 SC bから
 ここで、a.Cno=b.Cno
)

[例] 選択科目の平均点を超える得点を獲得した各学生の科目番号を見つけます。

Cnoを選択
SCから
ここでグレード> (
 平均(グレード)を選択
 SC bから
 ここで、a.Sno=b.Sno
)

(3)ANYまたはALL述語を持つサブクエリ

  • ANY はいずれか 1 つ、ALL はすべてを意味し、サブクエリの括弧の前で使用できます。

[例] コンピュータサイエンス学部の学生よりも若い、他の学部の学生の名前、性別、年齢、学部を照会します。

名前としてSname、性別としてSsex、年齢としてSage、学生の学部としてSdeptを選択します。
ここで、セージ<(
 セージを選択
 学生から
 Sdept='CS'の場合
);

[例] コンピュータサイエンス学部の全学生よりも若い他の学部の学生の名前と年齢を検索します。

生徒の名前としてSname、年齢としてSageを選択します
ここで、Sdept<>'CS' かつ Sage <ALL (
 セージを選択
 学生から
 Sdept='CS'の場合
);

(4)Exists述語を持つサブクエリ

[例] コース 1 を受講したすべての学生の名前を照会します。

生徒の名前としてSnameを選択
存在する場合(
 *を選択
 SCから
 ここで、Cno=1、Sno=Student.Sno
);

4. コレクションクエリ

(1)ユニオン

【例】コンピュータサイエンス学科の学生と19歳未満の学生の詳細情報を照会します。

*を選択
学生から
ここで、student.Sdept='CS'
連合
*を選択
学生から
ここで、student.Sage<=19;

(2)交差する

[例] コース1を受講した年齢が19歳以下の学生の詳細情報の交差部分を照会します。

*を選択
学生より、SC
ここで、student.Sno=SC.Sno、SC.Cno=1
交差する
*を選択
学生から
ここで、student.Sage<=19;

(3)除く

【例】コンピュータサイエンス学科の学生の詳細情報と19歳以下の学生の詳細情報の差異を照会します。

*を選択
学生から
ここで、student.Sdept='SC'
を除外する
*を選択
学生から
ここで、student.Sage<=19;

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。

以下もご興味があるかもしれません:
  • MySQLクエリ書き換えプラグインの使用
  • MySQLクエリ文の実行プロセスを理解するための記事
  • Python SQL ステートメントを使用して、MySQL データベースで複数条件のあいまいクエリを実行するアイデアの詳細な説明
  • MySQL データベースのステートメント ワイルドカード ファジー クエリの概要
  • pymysqlクエリステートメントで in を使用する際のパラメータの受け渡しの問題について簡単に説明します。
  • MySQL ファジークエリステートメントコレクション
  • mysql ステートメントを使用してユーザー権限を照会するプロセスの詳細な説明
  • SQL ステートメント実行の詳細な説明 (MySQL アーキテクチャの概要 -> クエリ実行プロセス -> SQL 解析順序)
  • MySQLクエリ文を書き換える3つの戦略

<<:  WeChatアプレットがチャットルーム機能を実現

>>:  ZabbixはLinuxシステムサービスのプロセスを監視

推薦する

Nginx リバース プロキシ springboot jar パッケージ プロセス分析

Springboot プロジェクトをサーバーにデプロイする方法としては、war パッケージにパッケー...

Ubuntu ターミナル マルチウィンドウ 分割画面 ターミネーター

1. インストールターミネーターの最大の特徴は、1つのウィンドウで複数のターミナルを開くことができる...

JavaScript のクロージャの問題の詳細な説明

クロージャは、純粋関数型プログラミング言語の伝統的な機能の 1 つです。クロージャをコア言語構造の不...

JavaScript の高度なクロージャの説明

目次1. 閉鎖の概念追加の知識ポイント: 2. 閉鎖の役割: 3. 閉鎖例3.1 liをクリックする...

HTML の div と span の違い (共通点と相違点)

共通点: DIV タグと SPAN タグは、コンテンツ全体を非表示にしたり、コンテンツ全体を移動した...

Gojs がアリのラインアニメーション効果を実装

目次1. Gojsの実装1. 描画2. 破線の実装3. 点線を動かす2. 点線と点線アニメーションの...

Webデザインチュートリアル(3):デザインの手順と考え方

<br />前のチュートリアル:Webデザインチュートリアル(2):模倣と盗作について。...

シンプルな商品スクリーニング機能を実現するjs

この記事の例では、商品スクリーニング機能を実装するためのjsの具体的なコードを参考までに共有していま...

MySQL MyISAM と InnoDB の違い

違い: 1. InnoDB はトランザクションをサポートしていますが、MyISAM はサポートしてい...

LinuxシステムにおけるMySQLの一般的な操作コマンド

仕える: # chkconfig --list すべてのシステムサービスを一覧表示する# chkco...

MySQL XA で分散トランザクションを実装する方法

目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...

MySQL 入門 - SQL 実行プロセス

目次1. プロセス2. コアアーキテクチャ2.1 サーバー層の基本コンポーネントの紹介3. ステート...

Vue における Vue.use() の原理と基本的な使用法

目次序文1. 例で理解する2. ソースコードを分析する3. まとめ要約する序文他の人のコンポーネント...

MySQL例外に対する一般的な解決策をいくつか分析する

目次序文1. コードによって設定されたデータベース名またはパスワードがローカルデータベースと一致して...