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

推薦する

Vueにおける仮想DOMの理解のまとめ

これは本質的に、ビュー インターフェース構造を記述するために使用される共通の js オブジェクトです...

MySQLのデフォルトのソートルールに基づく落とし穴

MySQL のデフォルトの varchar 型は大文字と小文字を区別しません (insensitiv...

Kubernetes の応用分野の概要

Kubernetes は、アプリケーションの移植性とハイブリッド クラウド/マルチクラウドの展開をサ...

Linux 上でプロジェクトをリリースするために Tomcat を展開するプロセスにおけるさまざまな問題と解決策

プロジェクトをプロジェクトサイトのテスト環境にデプロイするJDK1.8トムキャット8.5 Maven...

Ubuntu mysqlログイン名とパスワードを表示および変更し、phpmyadminをインストールする

MySQLをインストールした後、ターミナルでmysql -u root -pと入力してEnterを押...

シームレスなカルーセル効果を実現するネイティブ js

参考までに、ネイティブjsでカルーセル効果(シームレススクロール)を実現しています。具体的な内容は以...

CSS を使用して要素のスクロールバーを非表示にするサンプルコード

どの要素でもスクロールできるようにしながら、スクロールバーを非表示にするにはどうすればよいでしょうか...

...

動的なセカンダリメニューを実現するためのCSS

シンプルなセカンダリメニューを動的に実装するマウスを第 1 レベルのラベル上に置くと、マウスが小さな...

Zookeeperスタンドアロン環境とクラスタ環境の構築

1. 単一マシン環境の構築# 1.1 ダウンロードZookeeper の対応するバージョンをダウンロ...

Linux 占有ポートの強制解放と Linux ファイアウォールのポート開放方法の詳しい説明

nginx、mysql、tomcat などのサービスをインストールするときに、使用する必要があるポー...

Windows が MySQL サービスを開始できず、エラー 1067 を報告する場合の解決策

突然、MySQLにログインすると、アクセスが拒否されたか、データベースに接続できないと表示されました...

Dockerでmongodbデータベースを使用するための実装コード

mongoイメージを取得する sudo docker pull mongo mongodbサービスを...

MySQLデータベース操作の基本コマンド

1. データベースを作成します。 データ data _name を作成します。 PHP でデータベー...

Vue3.0 で Vuex 状態管理を開始する方法をすぐに習得します

Vuex は、Vue.js アプリケーション専用に開発された状態管理パターンです。集中型ストレージを...