DQL コマンドを使用して MySQL でデータをクエリする方法

DQL コマンドを使用して MySQL でデータをクエリする方法

この記事では、MySQL でよく使用されるデータ クエリ言語について説明します。

DQL (データクエリ言語)

SELECT構文

選択 [すべて | 個別]
{ * | table.* | [table.field1 [別名1として][,table.field2] [別名2として][,...]]}
FROM テーブル名 [テーブルエイリアスとして]
[left | out | inner join table_name2] #結合クエリ [WHERE ...] #結果が満たす必要のある条件を指定します [GROUP BY ...] #結果をグループ化するフィールドを指定します [HAVING ...] #グループ化されたレコードをフィルタリングするために満たす必要のある二次条件 [ODER BY ...] #クエリレコードが1つ以上の条件でソートされることを指定します [LIMIT [オフセット、返される結果レコードの数]; #どのレコードをどのレコードからどのレコードにクエリするかを指定します

基本的なクエリステートメントとAS

次の例では、student テーブルのデータを使用します。

テーブル内のすべてのデータ列をクエリするには、「*」記号を使用しますが、これは非効率的です。

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

クエリ列を指定できるので、非常に効率的です。

学生からStudentName、Phoneを選択します。

AS 句の機能と使用法

注: ASは省略可能

(1)データ列に新しいエイリアスを与えることができる

学生から「学生名」として StudentName を選択します。

(2)テーブルに別名をつける

student から stu.address を stu として選択します。

(3)計算結果や集計結果を別の新しい名前に置き換えることができます。

学生からの電話として電話番号 +1 を選択します。

DISTINCT キーワード

機能: SELECTクエリから重複する値を削除します(返される値がすべて同じ場合は、1つのレコードのみが返されます)

文法:

テーブル名から DISTINCT フィールド名1、フィールド名2、... を選択

注: ALL キーワードはデフォルトで、すべてのレコードを返します。

複数の列で重複する値をフィルタリングする場合、フィルタリング対象として選択されたすべての列に重複する値が存在する場合にのみ、フィルタリングが実行されます。

学生から DISTINCT StudentNo,address を選択します。

1つの列をフィルタリングする: 学生テーブルのアドレスをクエリする

学生から別の住所を選択します。

SQL文の式

SELECT VERSION(),100*3 as product; #MySQLのバージョンと計算結果を返す SELECT NOW() 'current time'; #現在の時刻を返す

開発言語プログラムに干渉する「.」、「*」、括弧を含むSQL戻り結果を避ける

式として MySQL_V,12.3*100 として VERSION() を選択します。
#返された結果はバックグラウンド開発プログラムと混同されません

連結

SELECT CONCAT(studentName,'@.com') を学生からのメールとして選択します。

数値型の追加

学生からStudentNo+100を選択します。

比較演算子とワイルドカード

Where条件文: データテーブル内の条件を満たすレコードを取得するために使用します。

検索条件は 1 つ以上の論理式で構成でき、結果は通常 true または false になります。

検索条件の構成: 論理演算子、比較演算子

#where 条件文 select * from student where address='四川';
 
# 学生テーブルで電話番号が null でない学生の名前を照会します。select StudentName from student where Phone is not null;
 
# 学生テーブルで電話番号が空の学生の名前を照会します。select StudentName from student where Phone is null;
 
# 削除したばかりのデータをクエリします - 空の値 select StudentName from student where Phone = '';
 
# BETWEEN ANDは時間範囲で機能します

論理演算子

比較演算子

あいまい検索にはLIKEキーワードを使用する

  • 「%」と組み合わせて使用​​すると、0 または任意の数の文字に一致します。
  • 「_」と組み合わせて1文字に一致させる
# 学生テーブルで姓が Zhang* の学生の名前を照会しますSELECT StudentName from student where studentname like '张_';
 
SELECT StudentName from student where studentname like '%丽%';
# で
住所が ('四川省','上海') である学生から * を選択;

知らせ:

  • 算術演算は数値データ型のレコード間でのみ実行できます。
  • 同じデータ型のデータのみ比較できます

NULL

  • nullは「値なし」を意味します
  • ゼロ値0と空文字列「」を区別する
  • NULLを許可するように定義されたフィールドにのみ表示できます
  • 比較するにはIS NULLまたはIS NOT NULL比較演算子を使用する必要があります。

内部結合と自己クエリ

複数のテーブルからデータをクエリする必要がある場合は、結合演算子を使用して複数のクエリを実装できます。

カテゴリには以下が含まれます:

  • 内部結合:
    • 同等および非同等の結合クエリ
    • 自己接続クエリ
  • 外部結合
    • 左結合
    • 右ジオン

ORDER BY ソートクエリ

特定のフィールドで選択ステートメントクエリの結果を並べ替える

DESC(降順)またはASC(昇順)で使用します。デフォルトはASCです。

科目テーブルと成績テーブルデータを例に挙げます。

SELECT * from subject ORDER BY classhour; #昇順 SELECT * from subject ORDER BY classhour desc; #降順

複数フィールドの並べ替え: 最初に最初のフィールドで並べ替え、次に 2 番目のフィールドで並べ替えます。最初のフィールドのデータが同じ場合は、2 番目のフィールドで並べ替えます。

subject から * を選択 ORDER BY classHour,GradeID; 

LIMIT ページネーション

LIMIT [m,] n または LIMIT n OFFSET m

SELECTによって返される行数を制限する

mは返される最初のレコード行のオフセットです

n 行数を返す

知らせ:

  • m が指定されていない場合、オフセットは 0 となり、最初のレコードから始まる最初の n 個のレコードが返されます。
  • LIMITはページング表示によく使用されます
  • データがテーブルを超える場合はすべて表示

例えば:

SELECT * FROM grade LIMIT 3; #最初の3つのレコードを返す SELECT * FROM grade LIMIT 1,3; #2~4つのレコードを返す

レコード総数: 合計

subjectからCOUNT(subjectNO)「合計データ」を選択します。 

総ページ数: int totalPage = total % pagesize ==0 ? total / pagesize : total / pagesize + 1

サブクエリ

クエリ文のWHERE句に別のクエリ文がネストされている

注: サブクエリによって返される結果は通常コレクションです。INキーワードを使用することをお勧めします。

subjectからsubjectNameを選択する
グレードID IN
(グレードからグレードIDを選択) 

集計関数

よく使用される統計関数: COUNT()、SUM()、AVG()、MAX()、MIN()

SELECT COUNT(StudentNo) '合計データ' FROM student;
subjectからsum(classHour) '総授業時間'を選択します。
subjectからAVG(classHour)「平均授業時間」を選択します。
subjectから MAX(classHour) '最長授業時間' を選択します。
subjectからMIN(classHour)「最短授業時間」を選択します。

グループ化

GROUP BYキーワードを使用してクエリ結果をグループ化します

  • すべてのデータをグループ化
  • グループ化フィールドは複数存在でき、それらは順番にグループ化されます。
  • グループ化後にデータをフィルタリングするためにHAVINGと組み合わせて使用​​する

学生テーブルを例に挙げましょう

(1)学生テーブルを住所別にグループ化し、グループ化を実行する

SELECT Address,COUNT(Address) FROM student GROUP BY Address; 

HAVING フィルタリンググループ内のレコードが満たさなければならない二次条件

(2)学生テーブルを住所別にグループ化し、住所=1のHAVING条件を満たす。

SELECT GROUP_CONCAT(StudentName),COUNT(Address) FROM student GROUP BY Address HAVING COUNT(Address)=1; 

UNION、UNIONをマージ

  • ALLUNION #同一データを結合する
  • UNION ALL #すべてのデータを結合

注意: 2 つのテーブルを結合する場合、列の数は同じである必要があります。

2 つのテーブルの列数が異なる場合は、次のエラーが報告されます。

[SQL]SELECT * FROM grade UNION SELECT * FROM student;
[エラー] 1222 - 使用されたSELECT文の列数が異なります

(1)科目テーブルと生徒テーブルを結合する

subject から * を選択 UNION から * を選択 学生から * を選択;  
SELECT * FROM subject UNION ALL SELECT * FROM student; 

サブクエリ EXISTS ——> true false

EXISTS / NOT EXISTS サブクエリの条件が満たされると、親クエリの結果が表示され、そうでない場合は結果は表示されません。

(1)サブクエリ条件が真である(グレードテーブルにグレードID1~5が存在する)

subjectName、GradeID を subject から選択します
存在する場所 
(SELECT * FROM grade WHERE GradeID=1);

または

subjectName、GradeID を subject から選択します
存在しない場所 
(SELECT * FROM grade WHERE GradeID=999); 

(2)サブクエリ条件が偽である(グレードテーブル内のグレードID1~5が存在しない999)

subjectName、GradeID を subject から選択します
存在する場所 
(SELECT * FROM grade WHERE GradeID=999);

または

subjectName、GradeID を subject から選択します
存在しない場所 
(SELECT * FROM grade WHERE GradeID=1); 

サブクエリ (任意 & すべて)

ANY: 判定条件において、サブクエリ内のいずれかの値が条件を満たす場合、親クエリが実行されます。
ALL: 判定条件において、サブクエリ内のすべての値が条件を満たす場合、親クエリが実行される
(1)条件が満たされた場合:subject.gradeid >= grade.gradeid、親クエリを実行する

subjectからsubjectname、gradeidを選択します 
グレードID >=ANY
(gradeからGradeIDを選択); 

(2)条件が満たされない場合(すべてのsubject.gradeid >= grade.gradeid)、親クエリは実行されません。

subjectからsubjectname、gradeidを選択します 
グレードID >=ALL
(gradeからGradeIDを選択); 

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL学習データベース検索文DQL小百章
  • MySQL構文におけるDQL操作の詳細な説明

<<:  Vueはソースコード付きのリファレンスライブラリのメソッドを使用します

>>:  Docker インストール tomcat dubbo-admin インスタンス スキル

推薦する

jsの継承の6つの方法を詳しく解説

プロトタイプチェーン継承プロトタイプ継承は、ECMAScript における主な継承方法です。基本的な...

Vueオプションの詳細な説明

目次1. オプションとは何ですか? 2. 含まれる属性3. エントリー属性エルデータ方法コンポーネン...

Zabbix を使用して Nginx/Tomcat/MySQL を監視する方法の詳細なチュートリアル

目次ZabbixはNginxを監視するZabbixはTomcatを監視するZabbixはMySQLを...

MySQL DEFINER の使用方法の詳細な説明

目次序文: 1.DEFINERの簡単な紹介2. いくつかの注意点要約:序文: MySQL データベー...

動的な色切り替えの実装コードをサポートするために、CSS で SVG 画像を参照します。

表示する svg 画像を追加すると、React はファイルが見つからないというメッセージを表示します...

VMware 仮想化 KVM のインストールと展開のチュートリアルの概要

仮想化1. 環境セントオス7.3 selinuxとファイアウォールを無効にする2. 仮想化環境の構成...

TypeScript 列挙の基本と例

目次序文TypeScript の列挙型とは何ですか? TypeScriptで列挙型を使用する際に注意...

Linux のリンク解除機能とファイルの削除方法

1. リンク解除機能ハード リンクの場合、unlink はディレクトリ エントリを削除し、inode...

MySQL 面接の質問: ハッシュ インデックスの設定方法

B-Tree インデックスに加えて、MySQL は次のインデックスも提供します。ハッシュインデックス...

初心者向けウェブサイト構築チュートリアル: 10 日間でウェブサイトの構築方法を学ぶ

10 日間のチュートリアルでは、最も理解しやすい言語を使用し、最も基本的なことから始めて、誰もが W...

vue+rem カスタムカルーセル効果

vue+remを使用したカスタムカルーセルチャートの実装は参考までに。具体的な内容は以下のとおりです...

Linux の sudo 脆弱性により不正な特権アクセスが発生する可能性がある

Linux で新たに発見された sudo の脆弱性を悪用すると、特定のユーザーが root としてコ...

JavaScript デザインパターン プロキシパターンの学習

目次概要実装保護エージェント仮想エージェント画像の遅延読み込みを実現する仮想プロキシ概要プロキシ パ...

Reactコンポーネントのライフサイクル機能についての簡単な説明

React コンポーネントのライフサイクル機能とは何ですか?ライフサイクル関数は、ES6 構文クラス...

MYSQL メタデータ ロック (MDL ロック) の理論とロック タイプ テスト

目次MYSQL メタデータ ロック (MDL ロック) 学習理論とロック タイプ テスト1. 予備的...