目次
自己成長フィールドの場合、truncateステートメントを使用してテーブルを切り捨てた後、値は初期値に復元されます
データソースからフィールドリストを選択します[条件式がある場合] [フィールドをグループ化してグループ化します] [条件式がある]
[並べ替えフィールドで並べ替え{[asc] | desc}]
バージョン番号としてversion()を選択し、now()サーバーの現在時刻。
テーブル名の制限[開始、]長さからフィールドリストを選択します。
内部接続:関連付け条件を満たすデータ行が取得され、関連付け条件を満たすデータ行は除外されます
外部結合:外部結合の結果セット=内部結合の結果セット+一致しないデータ行
表1から文字リストを選択[内部]関連する条件で表2に結合します。
テーブルにエイリアスという名前を付けると、ステートメントで使用できるのはエイリアスのみになり、元のテーブル名は無効になります
表1から[内部]関連付け条件1でテーブル2を結合します[内部]関連付け条件2でテーブル3を結合します。
左外部結合結果セット=内部結合結果セット+左側のテーブルの一致しないデータ
左のテーブルから左[外側]は、関連付け条件で右のテーブルに結合します。
右外部結合結果セット=内部結合結果セット+右テーブルの一致しないデータ
左のテーブルから右[外側]は、関連付け条件で右のテーブルに結合します。
完全な外部接続--- 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;