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 インスタンス スキル

推薦する

Dockerイメージ内のファイルを表示する方法

Dockerイメージ内のファイルを表示する方法1. すでに実行中の場合すでに実行中のイメージについて...

Ubuntu 16.04 に nvidia ドライバー + CUDA + cuDNN をインストールする詳細なチュートリアル

準備1. GPUがCUDAをサポートしているかどうかを確認するlspci | grep -i nvi...

高並列処理 nginx サーバー向け Linux カーネル最適化構成の説明

デフォルトの Linux カーネル パラメータは最も一般的なシナリオに基づいており、高い同時アクセス...

MySQLは外部SQLスクリプトファイルのコマンドを実行します

目次1. SQLコマンドを含むSQLスクリプトファイルを作成する2. SQLスクリプトファイルを実行...

Windows ホストと Docker コンテナに共有フォルダを設定してマウントする手順

Docker コンテナ内のプログラムは、ホスト ディレクトリ内のデータにアクセスして呼び出す必要があ...

MySQLデータベースのbinlogクリーンアップコマンドの詳細な説明

概要今日は主に、MySQL データベースから binlog ログを正しく削除する方法を紹介します。ロ...

JavaScriptにおける評価戦略の詳細な説明

目次それを覆う栗パラメータの受け渡し値渡し共同配送要約する拡張機能 - 遅延評価私は最近、JavaS...

CSSをインポートする方法に関する詳細な洞察の要約

CSS の開発履歴についてはここでは紹介しません。ブログを書いている理由の 1 つは、フロントエンド...

Dockerfileを使用してDockerイメージを構築する手順

Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の...

ウェブレスポンシブレイアウトにおけるiframe適応の方法

問題<br />レスポンシブ レイアウトでは、iframe 要素に注意する必要があります...

MySQLの実行プロセスとシーケンスについての簡単な説明

目次1:mysql実行プロセス1.1: コネクタ1.2: キャッシュ1.3: アナライザー1.4: ...

MySQL シリーズ 9 MySQL クエリ キャッシュとインデックス

目次チュートリアルシリーズ1. MySQL アーキテクチャクエリキャッシュキャッシュされないクエリ:...

純粋なJSを使用してセカンダリメニュー効果を実現します

この記事の例では、セカンダリメニュー効果を実現するためのJSの具体的なコードを参考までに共有していま...

MySQL は、現在のデータ テーブル内のすべての時間に対して指定された時間間隔を増加または減少させます (推奨)

DATE_ADD() 関数は、指定された時間間隔を日付に追加します。現在のテーブル内のすべてのデー...

Vue-cliフレームワークはタイマーアプリケーションを実装します

技術的背景このアプリケーションは vue-cli フレームワークを使用し、カスタム コンポーネント ...