Java新人供給ステーション--- MySQLデータベースSQLステートメント補足(1)

目次

SQLステートメント

切り捨てステートメントはDMLステートメントではありません

1>切り捨てられた名前の役割

2>構文:テーブルテーブル名を切り捨てます

3>とdeleteステートメントの違い

自己成長フィールドの場合、truncateステートメントを使用してテーブルを切り捨てた後、値は初期値に復元されます

切り捨てステートメントはロールバックできません

selectステートメント

selectステートメントの概要

データソースからフィールドリストを選択します[条件式がある場合] [フィールドをグループ化してグループ化します] [条件式がある]

                                              [並べ替えフィールドで並べ替え{[asc] | desc}]

select句を使用して、フィールドのリストを指定します

名前付きエイリアス

フィールドまたは式[as]エイリアス

バージョン番号としてversion()を選択し、now()サーバーの現在時刻。

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

特別なキーワード

重複する行を個別に削除する

テーブル名から個別のフィールドリストを選択します。

表示される行数を制限するには、limitを使用します

ページングクエリ

テーブル名の制限[開始、]長さからフィールドリストを選択します。

マルチテーブルクエリ

マルチテーブルクエリの種類

内部接続:関連付け条件を満たすデータ行が取得され、関連付け条件を満たすデータ行は除外されます

外部結合:外部結合の結果セット=内部結合の結果セット+一致しないデータ行

内部接続

表1から文字リストを選択[内部]関連する条件で表2に結合します。

テーブルエイリアス

テーブル名[as]エイリアス

テーブルにエイリアスという名前を付けると、ステートメントで使用できるのはエイリアスのみになり、元のテーブル名は無効になります

3テーブル接続

フィールドリストを選択

表1から[内部]関連付け条件1でテーブル2を結合します[内部]関連付け条件2でテーブル3を結合します。

外部結合

左外側接続:

左外部結合結果セット=内部結合結果セット+左側のテーブルの一致しないデータ

フィールドリストを選択

左のテーブルから左[外側]は、関連付け条件で右のテーブルに結合します。

右外側の接続:

右外部結合結果セット=内部結合結果セット+右テーブルの一致しないデータ

フィールドリストを選択

左のテーブルから右[外側]は、関連付け条件で右のテーブルに結合します。

結果セット内の2つのテーブルのすべての内容を表示する場合

完全な外部接続--- MySQLは構文をサポートしていません

完全外部結合結果セット=内部結合結果セット+2つのテーブルで一致しないデータ

フィールドリストを選択

左のテーブルからいっぱい[外側]は、関連付け条件で右のテーブルに結合します。

MySQLは文法的なunionステートメントunionallステートメントをサポートします

効果:

違い:

連合

ユニオンオール


SQLステートメント

切り捨てる

切り捨てステートメントはDMLステートメントではありません

1>切り捨てられた名前の役割

2>構文:テーブルテーブル名を切り捨てます

3>とdeleteステートメントの違い

  • 切り捨てステートメントは、プライマリテーブルでは使用できません(セカンダリテーブルにデータがない場合でも)
  • テーブルの学生を切り捨てます;#//テーブルからのデータがありません選択
  • テーブルの学生を削除します;#//正しい

自己成長フィールドの場合、truncateステートメントを使用してテーブルを切り捨てた後、値は初期値に復元されます

insert into exam values(null,90); stu_no 8

truncate table exam;

insert into exam values(null,90); stu_no 1

切り捨てステートメントはロールバックできません

 

selectステートメント

selectステートメントの概要

文法

データソースからフィールドリストを選択[条件式] [フィールドをグループ化してグループ化] [条件式を持っている] [フィールドを並べ替えて並べ替え{[asc] | desc}]

その中で

  • フィールドリスト:検索フィールドを作成する
  • データソース:取得したテーブルまたはビュー
  • where句:データ行のフィルター条件を定式化します
  • Group by句:グループ化フィールドに従って、データ行がいくつかのグループに分割され、要約統計量が実行されます
  • 持つ句:グループ化されたデータをフィルタリングする
  • order by句:結果セットを並べ替えます。デフォルトは昇順です。

 

select句を使用して、フィールドのリストを指定します

フィールドリストの指定方法

  • *:データソースのすべてのフィールドを表します
  • フィールドリスト:取得する必要のあるフィールドの数を指定するためにコンマで区切られたフィールドのリスト
  • テーブル名。*:マルチテーブルクエリで、テーブル内のすべてのフィールドを指定します
  • テーブル名。フィールド:マルチテーブルクエリで、テーブルのフィールドを指定します。
  • :式には、算術演算、関数などを含めることができます。

インスタンス

MySQLのバージョン番号を取得します。サーバー時間

select version(),now();

名前付きエイリアス

フィールドまたは式[as]エイリアス

バージョン番号としてversion()を選択し、now()サーバーの現在時刻。

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

文法:

テーブル名からフィールドリストを選択します。

例:

テーブル内のすべてのフィールドを一覧表示します

SELECT * FROM student;

テーブル内のいくつかのフィールドを一覧表示します

select student_no,student_name,student_contact from student;

エイリアスに名前を付けるフィールド

select student_no as 学号,student_name 姓名,student_contact 联系方式 from student;

式を使用する

select stu_no 学号,score 卷面成绩,score*0.7+30 综合成绩 from exam;

特別なキーワード

重複する行を個別に削除する

文法:

テーブル名から個別のフィールドリストを選択します。

例:

select class_no from student;

単一列の並べ替え

select distinct class_no from student;

複数の列で並べ替える

use information schema;

show tables; --显示当前数据库中所有表的名字
desc tables; -- 查看表tables的表结构
select table schema 数据库名,table name 表名,table type 表类型from infomation schea table;
select distinct table schema数据库名from information schema . tables;
select distinct table_ type from information schema. tables;
select distinct table_ schema 数据库名,table_ type 表的类型
information schema . tables;

表示される行数を制限するには、limitを使用します

ページングクエリ

文法:

テーブル名の制限[開始、]長さからフィールドリストを選択します。

その中で

start:最初の数行から検索を開始することを示します。デフォルトは0で、これは最初の行を意味します

長さ:取得する行を示します

information_schema.tablesテーブルの最初の10行をリストしてtable_schema、table_nameを表示します。

select table_schema 数据库名,table_name 表名 from information_schema.tables limit 10;

演習:ページごとに10行を表示し、テーブルテーブルにページ7を一覧表示します

select table_schema 数据库名,table_name 表名 from information_schema.tables limit 60,10;

マルチテーブルクエリ

要件:学生ID、名前、クラス名など、学生とそのクラス情報を一覧表示します

学生ID、名前:学生

クラス名:クラス

関連フィールド:student.class_no、classes.class_no、

関連付け条件:student.class_no = classes.class_no、

マルチテーブルクエリの種類

内部接続:関連付け条件を満たすデータ行が取得され、関連付け条件を満たすデータ行は除外されます

外部結合:外部結合の結果セット=内部結合の結果セット+一致しないデータ行

 

内部接続

文法

表1から文字リストを選択[内部]関連する条件で表2に結合します。

要件:学生ID、名前、クラス名など、学生とそのクラス情報を一覧表示します

学生ID、名前:学生

クラス名:クラス

関連フィールド:student.class_no、classes.class_no、

関連付け条件:student.class_no = classes.class_no;

select student.student_no,student.student_name,classes.class_no 
    from student join classes on student.class_no=classes.class_no;

クラスなしでデータの行を学生テーブルに挿入します

insert into student values('2018006','小明','20000000',null);

クラステーブルにデータの行を挿入します

insert into classes(null,'2018机械自动化2班','机电工程');

内部接続が一致しないデータは表示されません

select student.student_no 学号,student.student_name 姓名,classes.class_no 班级名称 
    from student join classes on student.class_no=classes.class_no;

テーブルエイリアス

テーブル名[as]エイリアス

select s.student_no 学号,s.student_name 姓名,c.class_no 班级名称
    from student s join classes c on s.class_no=c.class_no;

エラー表示

エイリアス名が1つあるテーブルに対しては、ステートメントでエイリアスのみを使用できます。失敗した場合は元のテーブル名です。

select student.student_no 学号,s.student_name 姓名,c.class_no 班级名称 
    from student s join classes c on s.class_no=c.class_no;

複数のテーブルが結合する場合、同じ名前のフィールドは省略できません。フィールドのテーブル名または変更されたエイリアスの 欠点により、SQLクエリステートメントの効率が低下します。

select student no 学号,student name 姓名,class name 班级 
    from student s join classes c on s.class_no=c.class_no;

3テーブル接続

コース選択テーブルにテストデータを挿入します。

student_nocourse_noスコア()choose_time

SQLステートメントは次のとおりです

値の選択に挿入(...);

文法

フィールドリストを選択

表1から[内部]関連付け条件1でテーブル2を結合します[内部]関連付け条件2でテーブル3を結合します。

例;

select  s.student_on 学号,s.student_name 姓名, cs.course_name 课程 ,ch.score 成绩
​    from student s join choose ch on s.student_no = ch.student_on join course cs on cs.course_on = ch.course_on;

運動:

教師の役職番号、名前、コース名、最大人数など、教師と教えられたコースの情報を一覧表示します

select t.teacher_on 教师工号,t.teacher_name 姓名,c.course_name 课程,c.up_limit 人数
    from teacher t join course c on t.teacher_on=c.teacher_on;

教師のジョブID、名前、コース名、およびコースを受講した学生の学生ID

select t.teacher_on 教师工号,t.teacher_name 姓名,c.course_name 课程,c.up_limit 人数
     from teacher t join course c on t.teacher_on=c.teacher_on join choose ch on c.course_on = ch.coure_on;

外部結合

左外側接続:

左外部結合結果セット=内部結合結果セット+左側のテーブルの一致しないデータ

文法

フィールドリストを選択

左のテーブルから左[外側]は、関連付け条件で右のテーブルに結合します。

例:

すべての生徒とそのクラス情報を一覧表示します

select s.student_on 学号,s.student_name 姓名,c.calss_name 班级
    from student s left join classes c on s.class_on = c.class_on;  

右外側の接続:

右外部結合結果セット=内部結合結果セット+右テーブルの一致しないデータ

文法:

フィールドリストを選択

左のテーブルから右[外側]は、関連付け条件で右のテーブルに結合します。

例:

すべての生徒とそのクラス情報を一覧表示します

select s.student_on 学号,s.student_name 姓名,c.calss_name 班级
    from classes c right join student s on s.class_on = c.class_on;  

 

結果セット内の2つのテーブルのすべての内容を表示する場合

完全な外部接続--- MySQLは構文をサポートしていません

完全外部結合結果セット=内部結合結果セット+2つのテーブルで一致しないデータ

構文:

フィールドリストを選択

左のテーブルからいっぱい[外側]は、関連付け条件で右のテーブルに結合します。

MySQLは文法的なunionステートメントunionallステートメントをサポートします

効果:

2つの選択の結果を全体として表示します。

条件が満たされている:1。2つの選択クエリの列数が同じである必要があります。

2.各列のデータ型は類似している必要があります。

違い:

ユニオンオールは、2つのselectステートメントの結果のユニオンです。ユニオンは、すべてのユニオンの結果の下で重複データを削除することです

連合

ユニオンを使用して上記の機能を実現します

select s.student_on 学号,s.student_name 姓名,c.calss_name 班级
    from student s left join classes c on s.class_on = c.class_on  
union   
select s.student_on 学号,s.student_name 姓名,c.calss_name 班级
    from student s right join classes c on s.class_on = c.class_on; 
 

ユニオンで接続された2つのテーブルのフィールドリストの数に一貫性がない場合は、フィールドリストの少ないテーブルにnullを割り当てることができます。値を割り当てない場合は、エラーが報告されます。

select * from student union select *,null from teacher;

ユニオンオール

select s.student_on 学号,s.student_name 姓名,c.calss_name 班级
    from student s left join classes c on s.class_on = c.class_on  
union all
select s.student_on 学号,s.student_name 姓名,c.calss_name 班级
    from student s right join classes c on s.class_on = c.class_on;
  

 

おすすめ

転載: blog.csdn.net/c202003/article/details/107231597