ホームページ >データベース >mysql チュートリアル >この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

WBOY
WBOY転載
2021-12-20 16:56:042065ブラウズ

この記事では、MySQL の基本的な知識を整理して共有するために、皆さんに説明します。知識のポイントは単純ですが、たくさんあるので、将来検索しやすくなります。皆さんのお役に立てれば幸いです。

この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

1. SQL の簡単な説明

1. SQL の概要

Structure Query Language (構造化クエリ言語) は次のように呼ばれます。 SQL: 米国規格協会 (ANSI) によってリレーショナル データベース言語の米国標準として決定され、後に国際標準化機構 (ISO) によってリレーショナル データベース言語の国際標準として採用されました。データベース管理システムは、SQL を通じてデータベースを管理し、データを定義および操作し、データの整合性とセキュリティを維持できます。

2. SQL の利点

1. シンプルで習得が容易で、優れた操作性を備えています
2. ほとんどの重要なデータベース管理システムは SQL をサポートしています
3. 非常に非手続き的です。 SQL を使用してデータベースを操作する場合、ほとんどの作業は DBMS

3 によって自動的に完了します。SQL の分類

1. DDL (Data Definition Language) の操作に使用されるデータ定義言語データベース、テーブル、列など。一般的に使用されるステートメント: CREATE、ALTER、DROP
2. DML (データ操作言語) データ操作言語。データベース内のテーブル内のデータを操作するために使用されます。一般的に使用されるステートメント: INSERT、 UPDATE、DELETE
3. DCL (データ制御言語) データ制御言語、アクセス許可とセキュリティ レベルの操作に使用されます。一般的なステートメント: GRANT、DENY
4. DQL (データ クエリ言語) データ クエリ言語、次の目的に使用されます。クエリ データ 一般的なステートメント: SELECT

2. データベースの 3 つの主要なパラダイム

1. 第一正規形 (1NF) は、データベース テーブルの各列が分割できない基本データ行であることを意味します。つまり、各列の値はアトミックであり、細分化できません。
2. 第 2 正規形 (2NF) は、第 1 正規形 (1NF) に基づいて成立します。第 2 正規形 (2NF) を満たすためには、まず第 1 正規形 (1NF) を満たす必要があります。テーブルに 1 つの主キーがある場合、主キー以外の列は主キーに完全に依存する必要があります。テーブルが複合主キーの場合、主キー以外の列は主キーに完全に依存する必要があります。キーに依存しており、主キーの一部のみに依存することはできません。
3. 第 3 正規形 (3NF) は第 2 正規形に基づいて確立されます。つまり、第 3 正規形を満たすためには、まず第 2 正規形を満たす必要があります。第 3 正規形 (3NF) では、テーブル内の主キー以外の列は主キーに直接関連付けられているが、間接的には関連付けられていない必要があります。つまり、主キー以外の列は相互に関連付けることができません。

3. データベースのデータ型

MySQL データベースを使用してデータを保存する場合、さまざまなデータ型によって MySQL がデータを保存する方法が決まります。この目的のために、MySQL データベースは、整数型、浮動小数点型、固定小数点型、日付と時刻の型、文字列型、バイナリなどのデータ型を含むさまざまなデータ型を提供します。

1. 整数型

MySQL の整数型は、さまざまな値の範囲に応じて、TINYINT、SMALUNT、MEDIUMINT、INT、BIGINT の 5 つの型に分類できます。次の図は、さまざまな MySQL 整数型に対応するバイト サイズと値の範囲を示しています。最も一般的に使用されるのは INT 型です。バイト数

符号なし数値の値の範囲符号付き数値の値範囲TINYINT10~255-128~127SMALLINT2 0~65535 -32768~32768-8388608 ~8388608-2147483648~2147483648-9223372036854775808~9223372036854775808 2. 浮動小数点型と固定小数点型タイプ浮動小数点数と固定小数点数を使用して、MySQL データベースに小数を格納します。浮動小数点数には、単精度浮動小数点数型(FLOAT)と倍精度浮動小数点数型(DOUBLE)の2種類があります。固定小数点型は DECIMAL 型のみです。次の図は、MySQL の浮動小数点型と固定小数点型に対応するバイト サイズと値の範囲を示しています。
##MEDIUMINT 3 0~16777215
INT 4 0~4294967295
BIGINT 8 0~18446744073709551615
データ型

バイト数

符号付き値範囲符号なし値範囲- 3.402823466E 38~-1.175494351E-380 および 1.175494351E-38~3.402823466E 380 および 2.2250738585072014E-308~1.7976931348623157E 308#D ECIMAL(M,D ) M 2-1.7976931348623157E 308~2.2250738585072014E-3080 および 2.2250738585072014E-308~1.7976931348623157E 308

上図からわかるように、DECIMAL 型の値の範囲は DOUBLE 型と同じです。ただし、DECIMAL 型の有効な値の範囲は M と D によって決定されることに注意してください。このうち、Mはデータの長さを表し、Dは小数点以下の長さを表します。たとえば、データ タイプ DECIMAL(6,2) のデータ 6.5243 をデータベースに挿入すると、表示される結果は 6.52

3 になります。文字列タイプ

は、MySQL で一般的に使用されます。 CHAR や VARCHAR などの文字を表します。 2 つの違いは、VARCHAR は可変長文字列を格納することです。
データの型が CHAR(M) の場合、挿入された値の実際の長さに関係なく、データが占有する記憶領域は M バイトですが、VARCHAR(M) に対応するデータは M バイトを占有します。バイト数は実際の長さに 1

FLOAT 4
DOUBLE 8 -1.7976931348623157E 308~2.2250738585072014E-308
#値を挿入CHAR(3)ストレージ要件''#''1 バイト'a''a' 3 バイト 'a'2 バイト 'ab''ab'3 バイト'ab'3 バイト'abc''ab' 3 バイト'abc'4 バイト'abcd' 'ab'3 バイト'abc'4 bytes4.String 型
#を加えたものです##VARCHAR(3) ストレージ要件
'' 3 バイト
text 型は、次のような大きなテキスト データを表すために使用されます。記事内容、コメント、詳細など。その種類は以下の4種類に分かれます。

データ型格納範囲TINYTEXT0 ~ 255 バイト0 ~ 65535 バイト0~16777215 バイト0~4294967295 バイト5. 日付と時刻の型日付と時刻を表すために MySQL によって提供されるデータ型は、それぞれ YEAR、DATE、TIME、DATETIME、TIMESTAMP です。次の図は、日付と時刻のデータ型に対応するバイト数、値の範囲、日付形式、ゼロ値を示しています:
TEXT
MEDIUMTEXT
LONGTEXT

データ型 wordセクションの数#YEAR14##3-838:59:59~ 838:59:59HH:MM:SS00:00:00##日時81000-01-01 00:00:00~9999-12-31 23:59:59YYYY- MM -DD HH:MM:SS0000-00-00 00:00:00YYYY-MM-DD HH:MM:SS
値の範囲 日付形式 ゼロ値
1901~2155 YYYY 0000 DATE
1000-01-01~9999-12-31 YYYY-MM-DD 0000-00-00 TIME
##タイムスタンプ 4 1970- 01-01 00:00:01~2038-01-19 03:14:07
0000-00-00 00:00: 00

5.1 YEAR 型

YEAR 型は年を表すために使用され、MySQL では次の 3 つの形式を使用して YEAR 型の値を指定できます。
1. '1901' ~ '2155' または 1901 ~ 2155 の範囲の 4 桁の文字列または数字を使用します。たとえば、「2019」または 2019 と入力すると、データベースに挿入される値は 2019 になります。
2. 「00」から「99」までの 2 桁の文字列表現を使用します。このうち、「00」~「69」の範囲の値は2000~2069の範囲のYEAR値に変換され、「70」~「99」の範囲の値は1970 年から 1999 年の範囲の YEAR 値に変換されます。たとえば、「19」と入力すると、値 2019 がデータベースに挿入されます。
3. 1 ~ 99 の範囲の 2 桁の数字を使用します。このうち、1~69の範囲の値は2001~2069の範囲のYEAR値に変換され、70~99の範囲の値はYEAR値に変換されます。 1970 年から 1999 年の範囲。たとえば、「19」と入力すると、データベースに挿入される値は 2019 になります。
注意: YEAR 型を使用する場合は、「0」と 0 を区別してください。文字列形式の「0」で表される YEAR 値は 2000 であり、数値形式の 0 で表される YEAR 値は 0000 であるためです。

5.2 TIME 型

TIME 型は時間値を表すために使用され、その表示形式は一般的に HH:MM:SS であり、HH は時間、MM は分、SS を表します。 2番。 MySQL では、次の 3 つの形式を使用して TIME 型の値を指定できます。
1. 「D HH:MM:SS」文字列形式で表現されます。このうち、D は日を表し、0 ~ 34 の値をとります。データを挿入する場合、時間の値は (DX24 HH) となります。たとえば、「2 11:30:50」と入力すると、日付が 59:30:50 としてデータベースに挿入されます。
2. 「HHMMSS」文字列形式または HHMMSS 数値形式で表現されます。たとえば、「115454」または 115454 と入力すると、データベースに挿入される日付は 11:54:54
になります。 3. CURRENT_TIME または NOW() を使用して、現在のシステム時刻を入力します。

5.3 DATETIME 型

DATETIME 型は日付と時刻を表すために使用され、その表示形式は「YYYY-MM-DD HH: MM:SS」です (YYYY は年、MM を表します)。は年を表し、月、DD は日、HH は時、MM は分、SS は秒を表します。 MySQLでは、以下の4つの形式を使用してDATETIME型の値を指定できます。
「YYYY-MM-DD HH:MM:SS」または「YYYYMMDDHHMMSS」文字列形式で表される日付と時刻。値の範囲は「1000-01-01 00:00:00」-「9999- 12-」です。 3 23:59:59」。たとえば、「2019-01-22 09:01:23」または「20140122_0_90123」と入力すると、データベースに挿入される DATETIME 値は 2019-01-22 09:01:23 になります。
1. 'YY-MM-DD HH:MM:SS' または 'YYMMDDHHMMSS' の文字列形式で表される日付と時刻。YY は年を表し、値の範囲は '00' ~ '99' です。 DATE型のYYと同様に、「00」~「69」の範囲の値は2000~2069の範囲の値に変換され、「70」~「70」の範囲の値は変換されます。 99' は 1970 ~ 1999 年の範囲の値に変換されます。
2. YYYYMMDDHHMMSS または YYMMDDHHMMSS 数値形式で表される日付と時刻。たとえば、20190122090123 または 190122090123 が挿入された場合、データベースに挿入される DATETIME 値は 2019-01-22 09:01:23 になります。
3. NOW を使用して、現在のシステムの日付と時刻を入力します。

5.4 TIMESTAMP型

TIMESTAMP型は日付と時刻を表現するために使用され、表示形式はDATETIMEと同じですが、値の範囲はDATETIMEよりも小さくなります。ここでは、TIMESTAMP 型と DATATIME 型のいくつかの異なる形式を紹介します。
1. CURRENT_TIMESTAMP を使用して、システムの現在の日付と時刻を入力します。
2. NULL を入力すると、システムの現在の日付と時刻が入力されます。
3. 入力がない場合、システムはシステムの現在の日付と時刻を入力します。

6. バイナリ型

BLOB は、画像、PDF ドキュメントなどのバイナリ型データを保存するために MySQL で一般的に使用されます。 BLOB の種類は次の 4 種類に分類されます。

データ型 格納範囲
TINYBLOB 0~255 バイト
BLOB 0~65535 バイト
MEDIUMBLOB 0~16777215 バイト
LONGBLOB 0~4294967295 バイト

4. データベースとデータ テーブルの基本操作

1. データベースの基本操作

MySQL のインストール後、データベース テーブルにデータを保存する場合は、まず、データベース。データベースの作成とは、データベース システム内の領域を分割してデータを保存することです。構文は次のとおりです:

create database 数据库名称;

db1 という名前のデータベースを作成します。 MySQL コマンド:

-- 创建一个叫db1的数据库show create database db1;

実行効果表示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
データベース作成後、データベースの基本情報を表示します MySQL コマンド:

show create database db1;

実行効果表示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
データベースMySQLコマンドの削除:
#

drop database db1;

実行効果表示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。#MySQL データベース内のすべてのデータベースをクエリします。 MySQL コマンド:

show databases;

実行効果の表示:


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。 の文字セットを変更します。データベースを gbk MySQL コマンドに変換:

alter database db1 character set gbk;

実行効果の表示:


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。データベースの切り替え MySQL コマンド:

use db1;

実行効果の表示:


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。現在使用されているデータベース MySQL コマンドを表示します:

select database();

ランニング効果の表示:


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
2. データ テーブルの基本操作

データベースが正常に作成された後、データ テーブル (テーブルと呼ばれます) を作成できます。データを保存するためにデータベース内に作成されます。注: データ テーブルを操作する前に、「USE データベース名;」を使用して最初に操作を実行するデータベースを指定する必要があります。そうしないと、「データベースが選択されていません」というエラーがスローされます。

構文は次のとおりです:

 create table 表名(
         字段1 字段类型,
         字段2 字段类型,
         …
         字段n 字段类型);

2.1 データ テーブルの作成

例: 学生テーブルの作成 MySQL コマンド:

 create table student(
 id int,
 name varchar(20),
 gender varchar(10),
 birthday date
 );

ランニング効果の表示 :


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
2.2 データ テーブルの表示

例: 現在のデータベース内のすべてのテーブルの表示 MySQL コマンド:

show tables;

実行中の効果の表示:


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。例: テーブル検索用の基本情報 MySQL コマンド:

show create table student;

実行中効果表示:


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。例: テーブルのフィールド情報を表示する MySQL コマンド:

desc student;

実行中の効果表示:


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
2.3 データ テーブルの変更

テーブル名の変更、フィールド名の変更、フィールド名の変更など、テーブル内の一部の情報を変更する必要がある場合があります。フィールドのデータ型...などMySQL の alter table を使用してデータ テーブルを変更します。

例: テーブル名の変更 MySQL コマンド:

alter table student rename to stu;

実行効果の表示:


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。例: フィールド名の変更 MySQL コマンド:

alter table stu change name sname varchar(10);

実行効果の表示:


この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。例: フィールドのデータ型の変更MySQL の注文:

alter table stu modify sname int;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
示例:增加字段 MySQL命令:

alter table stu add address varchar(50);

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
示例:删除字段 MySQL命令:

alter table stu drop address;

运效果展示:

この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

2.4 删除数据表

语法:

drop table 表名;

示例:删除数据表 MySQL命令:

drop table stu;

运行效果展示:

この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

五、数据表的约束

为防止错误的数据被插入到数据表,MySQL中定义了一些维护数据库完整性的规则;这些规则常称为表的约束。常见约束如下:

约束条件 说明
PRIMARY KEY 主键约束用于唯一标识对应的记录
FOREIGN KEY 外键约束
NOT NULL 非空约束
UNIQUE 唯一性约束
DEFAULT 默认值约束,用于设置字段的默认值

以上五种约束条件针对表中字段进行限制从而保证数据表中数据的正确性和唯一性。换句话说,表的约束实际上就是表中数据的限制条件。

1.主键约束

主键约束即primary key用于唯一的标识表中的每一行。被标识为主键的数据在表中是唯一的且其值不能为空。这点类似于我们每个人都有一个身份证号,并且这个身份证号是唯一的。
主键约束基本语法:

字段名 数据类型 primary key;

设置主键约束(primary key)的第一种方式
示例:MySQL命令:

create table student(id int primary key,name varchar(20));

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
设置主键约束(primary key)的第二·种方式
示例:MySQL命令:

create table student01(id intname varchar(20),primary key(id));

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

2.非空约束

非空约束即 NOT NULL指的是字段的值不能为空,基本的语法格式如下所示:

字段名 数据类型 NOT NULL;

示例:MySQL命令:

create table student02(id intname varchar(20) not null);

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

3.默认值约束

默认值约束即DEFAULT用于给数据表中的字段指定默认值,即当在表中插入一条新记录时若未给该字段赋值,那么,数据库系统会自动为这个字段插人默认值;其基本的语法格式如下所示:

字段名 数据类型 DEFAULT 默认值;

示例:MySQL命令:

create table student03(id int,name varchar(20),gender varchar(10) default 'male');

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

5.唯一性约束

唯一性约束即UNIQUE用于保证数据表中字段的唯一性,即表中字段的值不能重复出现,其基本的语法格式如下所示:

字段名 数据类型 UNIQUE;

示例:MySQL命令:

create table student04(id int,name varchar(20) unique);

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

6.外键约束

外键约束即FOREIGN KEY常用于多张表之间的约束。基本语法如下:

-- 在创建数据表时语法如下:CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段)-- 将创建数据表创号后语法如下:ALTER TABLE 从表名 ADD CONSTRAINT 外键名 FOREIGN KEY (从表外键字段) REFERENCES 主表 (主键字段);

示例:创建一个学生表 MySQL命令:

create table student05(id int primary key,name varchar(20));

示例:创建一个班级表 MySQL命令:

create table class(classid int primary key,studentid int);

示例:学生表作为主表,班级表作为副表设置外键, MySQL命令:

alter table class add constraint fk_class_studentid foreign key(studentid) references student05(id);

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

6.1 数据一致性概念

大家知道:建立外键是为了保证数据的完整和统一性。但是,如果主表中的数据被删除或修改从表中对应的数据该怎么办呢?很明显,从表中对应的数据也应该被删除,否则数据库中会存在很多无意义的垃圾数据。

6.2 删除外键

语法如下:

alter table 从表名 drop foreign key 外键名;

示例:删除外键 MySQL命令:

alter table class drop foreign key fk_class_studentid;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
外键的那个字段不在了证明删除成功了

6.3 关于外键约束需要注意的细节

1、从表里的外键通常为主表的主键
2、从表里外键的数据类型必须与主表中主键的数据类型一致
3、主表发生变化时应注意主表与从表的数据一致性问题

六、数据表插入数据

在MySQL通过INSERT语句向数据表中插入数据。在此,我们先准备一张学生表,代码如下:

 create table student(
 id int,
 name varchar(30),
 age int,
 gender varchar(30)
 );

1. 为表中所有字段插入数据

每个字段与其值是严格一一对应的。也就是说:每个值、值的顺序、值的类型必须与对应的字段相匹配。但是,各字段也无须与其在表中定义的顺序一致,它们只要与 VALUES中值的顺序一致即可。
语法如下:

INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);

示例:向学生表中插入一条学生信息 MySQL命令:

insert into student (id,name,age,gender) values (1,'bob',16,'male');

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

2. 为表中指定字段插入数据

语法如下:

INSERT INTO 表名(字段名1,字段名2,...) VALUES (值 1,值 2,...);

插入数据的方法基本和为表中所有字段插入数据,一样,只是需要插入的字段由你自己指定

3. 同时插入多条记录

语法如下:

INSERT INTO 表名 [(字段名1,字段名2,...)]VALUES (值 1,值 2,…),(值 1,值 2,…),...;

在该方式中:(字段名1,字段名2,…)是可选的,它用于指定插人的字段名;(值 1,值 2,…),(值 1,值 2,…)表示要插人的记录,该记录可有多条并且每条记录之间用逗号隔开。
示例:向学生表中插入多条学生信息 MySQL命令:

insert into student (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male');

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

七、更新数据

在MySQL通过UPDATE语句更新数据表中的数据。在此,我们将就用六中的student学生表

1. UPDATE基本语法

UPDATE 表名 SET 字段名1=值1[,字段名2 =值2,…] [WHERE 条件表达式];

在该语法中:字段名1、字段名2…用于指定要更新的字段名称;值1、值 2…用于表示字段的新数据;WHERE 条件表达式 是可选的,它用于指定更新数据需要满足的条件

2. UPDATE更新部分数据

示例:将name为tom的记录的age设置为20并将其gender设置为female MySQL命令:

update student set age=20,gender='female' where name='tom';

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

3. UPDATE更新全部数据

示例:将所有记录的age设置为18 MySQL命令:

update student set age=18;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

八、删除数据

在MySQL通过DELETE语句删除数据表中的数据。在此,我们先准备一张数据表,代码如下:

-- 创建学生表
 create table student(
 id int,
 name varchar(30),
 age int,
 gender varchar(30)
 );
 -- 插入数据
 insert into student (id,name,age,gender) values (2,'lucy',17,'female'),(3,'jack',19,'male'),(4,'tom',18,'male'),(5,'sal',19,'female'),(6,'sun',20,'male'),(7,'sad',13,'female'),(8,'sam',14,'male');

1. DELETE基本语法

在该语法中:表名用于指定要执行删除操作的表;[WHERE 条件表达式]为可选参数用于指定删除的条件。

DELETE FROM 表名 [WHERE 条件表达式];

2. DELETE删除部分数据

示例:删除age等于14的所有记录 MySQL命令:

delete from student where age=14;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

3. DELETE删除全部数据

示例:删除student表中的所有记录 MySQL命令:

delete from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

4. TRUNCATE和DETELE的区别

TRUNCATE和DETELE都能实现删除表中的所有数据的功能,但两者也是有区别的:
1、DELETE语句后可跟WHERE子句,可通过指定WHERE子句中的条件表达式只删除满足条件的部分记录;但是,TRUNCATE语句只能用于删除表中的所有记录。
2、使用TRUNCATE语句删除表中的数据后,再次向表中添加记录时自动增加字段的默认初始值重新由1开始;使用DELETE语句删除表中所有记录后,再次向表中添加记录时自动增加字段的值为删除时该字段的最大值加1
3、DELETE语句是DML语句,TRUNCATE语句通常被认为是DDL语句

九、MySQL数据表简单查询

1.简单查询概述

简单查询即不含where的select语句。在此,我们讲解简单查询中最常用的两种查询:查询所有字段和查询指定字段。
在此,先准备测试数据,代码如下:

-- 创建数据库DROP DATABASE IF EXISTS mydb;CREATE DATABASE mydb;USE mydb;-- 创建student表CREATE TABLE student (
    sid CHAR(6),
    sname VARCHAR(50),
    age INT,
    gender VARCHAR(50) DEFAULT 'male');-- 向student表插入数据INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');

2.查询所有字段(方法不唯一只是举例)

查询所有字段 MySQL命令:

select * from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

3.查询指定字段(sid、sname)

查询指定字段(sid、sname) MySQL命令:

select sid,sname from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

4.常数的查询

在SELECT中除了书写列名,还可以书写常数。可以用于标记
常数的查询日期标记 MySQL命令:

select sid,sname,'2021-03-02' from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

5.从查询结果中过滤重复数据

在使用DISTINCT 时需要注意:
在SELECT查询语句中DISTINCT关键字只能用在第一个所查列名之前。
MySQL命令:

select distinct gender from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

6.算术运算符(举例加运算符)

在SELECT查询语句中还可以使用加减乘除运算符。
查询学生10年后的年龄 MySQL命令:

 select sname,age+10 from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

十、函数

在此,先准备测试数据,代码如下:

-- 创建数据库DROP DATABASE IF EXISTS mydb;CREATE DATABASE mydb;USE mydb;-- 创建student表CREATE TABLE student (
    sid CHAR(6),
    sname VARCHAR(50),
    age INT,
    gender VARCHAR(50) DEFAULT 'male');-- 向student表插入数据INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');

1.聚合函数

在开发中,我们常常有类似的需求:统计某个字段的最大值、最小值、 平均值等等。为此,MySQL中提供了聚合函数来实现这些功能。所谓聚合,就是将多行汇总成一行;其实,所有的聚合函数均如此——输入多行,输出一行。聚合函数具有自动滤空的功能,若某一个值为NULL,那么会自动将其过滤使其不参与运算。
聚合函数使用规则:
只有SELECT子句和HAVING子句、ORDER BY子句中能够使用聚合函数。例如,在WHERE子句中使用聚合函数是错误的。
接下来,我们学习常用聚合函数。

1.1、count()

统计表中数据的行数或者统计指定列其值不为NULL的数据个数
查询有多少该表中有多少人
MySQL命令:

select count(*) from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

1.2、max()

计算指定列的最大值,如果指定列是字符串类型则使用字符串排序运算

查询该学生表中年纪最大的学生
MySQL命令:

select max(age) from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

1.3、min()

计算指定列的最小值,如果指定列是字符串类型则使用字符串排序运算

查询该学生表中年纪最小的学生 MySQL命令:

select sname,min(age) from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

1.4、sum()

计算指定列的数值和,如果指定列类型不是数值类型则计算结果为0
查询该学生表中年纪的总和 MySQL命令:

select sum(age) from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

1.5、avg()

计算指定列的平均值,如果指定列类型不是数值类型则计算结果为

查询该学生表中年纪的平均数 MySQL命令:

select avg(age) from student;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

2.其他常用函数

这里我就不一一举例了,基本混个眼熟,以后用到再细说

2.1、时间函数

SELECT NOW();SELECT DAY (NOW());SELECT DATE (NOW());SELECT TIME (NOW());SELECT YEAR (NOW());SELECT MONTH (NOW());SELECT CURRENT_DATE();SELECT CURRENT_TIME();SELECT CURRENT_TIMESTAMP();SELECT ADDTIME('14:23:12','01:02:01');SELECT DATE_ADD(NOW(),INTERVAL 1 DAY);SELECT DATE_ADD(NOW(),INTERVAL 1 MONTH);SELECT DATE_SUB(NOW(),INTERVAL 1 DAY);SELECT DATE_SUB(NOW(),INTERVAL 1 MONTH);SELECT DATEDIFF('2019-07-22','2019-05-05');

2.2、字符串函数

--连接函数SELECT CONCAT ()--SELECT INSTR ();--统计长度SELECT LENGTH();

2.3、数学函数

-- 绝对值SELECT ABS(-136);-- 向下取整SELECT FLOOR(3.14);-- 向上取整SELECT CEILING(3.14);

十一、条件查询

数据库中存有大量数据,我们可根据需求获取指定的数据。此时,我们可在查询语句中通过WHERE子句指定查询条件对查询结果进行过滤。
在开始学习条件查询之前,我们先准备测试数据,代码如下:

-- 创建数据库DROP DATABASE IF EXISTS mydb;CREATE DATABASE mydb;USE mydb;-- 创建student表CREATE TABLE student (
    sid CHAR(6),
    sname VARCHAR(50),
    age INT,
    gender VARCHAR(50) DEFAULT 'male');-- 向student表插入数据INSERT INTO student (sid,sname,age,gender) VALUES ('S_1001', 'lili', 14, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1002', 'wang', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1003', 'tywd', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1004', 'hfgs', 17, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1005', 'qwer', 18, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1006', 'zxsd', 19, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1007', 'hjop', 16, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1008', 'tyop', 15, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1009', 'nhmk', 13, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1010', 'xdfv', 17, 'female');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1012', 'lili', 14, 'male');INSERT INTO student (sid,sname,age,gender) VALUES ('S_1013', 'wang', 15, 'female');

1.使用关系运算符查询

在WHERE中可使用关系运算符进行条件查询,常用的关系运算符如下所示:

#関係演算子 説明##=と等しい## と等しくない!= は は は # 以下です# > は より大きい>= は ## 以上です
# と等しくない ##
未満です
#

查询年龄等于或大于17的学生的信息 MySQL命令:

select * from student where age>=17;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

2.使用IN关键字查询

IN关键字用于判断某个字段的值是否在指定集合中。如果字段的值恰好在指定的集合中,则将字段所在的记录将査询出来。

查询sid为S_1002和S_1003的学生信息 MySQL命令:

select * from student where sid in ('S_1002','S_1003');

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
查询sid为S_1001以外的学生的信息 MySQL命令:

select * from student where sid not in ('S_1001');

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

3.使用BETWEEN AND关键字查询

BETWEEN AND用于判断某个字段的值是否在指定的范围之内。如果字段的值在指定范围内,则将所在的记录将查询出来
查询15到18岁的学生信息 MySQL命令:

select * from student where age between 15 and 18;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
查询不是15到18岁的学生信息 MySQL命令:

select * from student where age not between 15 and 18;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

4.使用空值查询

在MySQL中,使用 IS NULL关键字判断字段的值是否为空值。请注意:空值NULL不同于0,也不同于空字符串
由于student表没有空值就不演示查询空值的了
查询sname不为空值的学生信息 MySQL命令:

select * from student where sname is not null;

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

5.使用AND关键字查询

在MySQL中可使用AND关键字可以连接两个或者多个查询条件。
查询年纪大于15且性别为male的学生信息 MySQL命令:

select * from student where age>15 and gender='male';

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

6.使用OR关键字查询

在使用SELECT语句查询数据时可使用OR关键字连接多个査询条件。在使用OR关键字时,只要记录满足其中任意一个条件就会被查询出来
查询年纪大于15或者性别为male的学生信息 MySQL命令:

select * from student where age>15 or gender='male';

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

7.使用LIKE关键字查询

MySQL中可使用LIKE关键字可以判断两个字符串是否相匹配

7.1 普通字符串

查询sname中与wang匹配的学生信息 MySQL命令:

select * from student where sname like 'wang';

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

7.2 含有%通配的字符串

%用于匹配任意长度的字符串。例如,字符串“a%”匹配以字符a开始任意长度的字符串
查询学生姓名以li开始的记录 MySQL命令:

select * from student where sname like 'li%';

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
查询学生姓名以g结尾的记录 MySQL命令:

select * from student where sname like '%g';

运行效果展示:
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
查询学生姓名包含s的记录 MySQL命令:

select * from student where sname like '%s%';

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

7.3 含有_通配的字符串

下划线通配符只匹配单个字符,如果要匹配多个字符,需要连续使用多个下划线通配符。例如,字符串“ab_”匹配以字符串“ab”开始长度为3的字符串,如abc、abp等等;字符串“a__d”匹配在字符“a”和“d”之间包含两个字符的字符串,如"abcd"、"atud"等等。
查询学生姓名以zx开头且长度为4的记录 MySQL命令:

select * from student where sname like 'zx__';

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

查询学生姓名以g结尾且长度为4的记录 MySQL命令:

select * from student where sname like '___g';

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

8.使用LIMIT限制查询结果的数量

当执行查询数据时可能会返回很多条记录,而用户需要的数据可能只是其中的一条或者几条
查询学生表中年纪最小的3位同学 MySQL命令:

select * from student order by age asc limit 3;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

9.使用GROUP BY进行分组查询

GROUP BY 子句可像切蛋糕一样将表中的数据进行分组,再进行查询等操作。换言之,可通俗地理解为:通过GROUP BY将原来的表拆分成了几张小表。
接下来,我们通过一个例子开始学习GROUP BY,代码如下

-- 创建数据库DROP DATABASE IF EXISTS mydb;CREATE DATABASE mydb;USE mydb;-- 创建员工表CREATE TABLE employee (
    id int,
    name varchar(50),
    salary int,
    departmentnumber int);-- 向员工表中插入数据INSERT INTO employee values(1,'tome',2000,1001); INSERT INTO employee values(2,'lucy',9000,1002); INSERT INTO employee values(3,'joke',5000,1003); INSERT INTO employee values(4,'wang',3000,1004); INSERT INTO employee values(5,'chen',3000,1001); INSERT INTO employee values(6,'yukt',7000,1002); INSERT INTO employee values(7,'rett',6000,1003); INSERT INTO employee values(8,'mujk',4000,1004); INSERT INTO employee values(9,'poik',3000,1001);

9.1 GROUP BY和聚合函数一起使用

统计各部门员工个数 MySQL命令:

select count(*), departmentnumber from employee group by departmentnumber;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
统计部门编号大于1001的各部门员工个数 MySQL命令:

select count(*), departmentnumber from employee where departmentnumber>1001 group by departmentnumber;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

9.2 GROUP BY和聚合函数以及HAVING一起使用

统计工资总和大于8000的部门 MySQL命令:

select sum(salary),departmentnumber from employee group by departmentnumber having sum(salary)>8000;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

10.使用ORDER BY对查询结果排序

从表中査询出来的数据可能是无序的或者其排列顺序不是我们期望的。为此,我们可以使用ORDER BY对查询结果进行排序
其语法格式如下所示:

SELECT 字段名1,字段名2,…FROM 表名ORDER BY 字段名1 [ASC 丨 DESC],字段名2 [ASC | DESC];

在该语法中:字段名1、字段名2是查询结果排序的依据;参数 ASC表示按照升序排序,DESC表示按照降序排序;默认情况下,按照ASC方式排序。通常情况下,ORDER BY子句位于整个SELECT语句的末尾。
查询所有学生并按照年纪大小升序排列 MySQL命令:

select * from student order by age asc;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
查询所有学生并按照年纪大小降序排列 MySQL命令:

select * from student order by age desc;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

十二、别名设置

在査询数据时可为表和字段取別名,该别名代替表和字段的原名参与查询操作。
操作的表事先已准备

1.为表取别名

在查询操作时,假若表名很长使用起来就不太方便,此时可为表取一个別名,用该别名来代替表的名称。语法格式如下所示:

SELECT * FROM 表名 [AS] 表的别名 WHERE .... ;

将student改为stu查询整表 MySQL命令:

select * from student as stu;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

2.为字段取别名

在查询操作时,假若字段名很长使用起来就不太方便,此时可该字段取一个別名,用该别名来代替字段的名称。语法格式如下所示:

SELECT 字段名1 [AS] 别名1 , 字段名2 [AS] 别名2 , ... FROM 表名 WHERE ... ;

将student中的name取别名为“姓名” 查询整表 MySQL命令:

select name as '姓名',id from student;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

十三、表的关联关系

在实际开发中数据表之间存在着各种关联关系。在此,介绍MySQL中数据表的三种关联关系。
多对一
多对一(亦称为一对多)是数据表中最常见的一种关系。例如:员工与部门之间的关系,一个部门可以有多个员工;而一个员工不能属于多个部门只属于某个部门。在多对一的表关系 中,应将外键建在多的一方否则会造成数据的冗余。
多对多
多对多是数据表中常见的一种关系。例如:学生与老师之间的关系,一个学生可以有多个老师而且一个老师有多个学生。通常情况下,为了实现这种关系需要定义一张中间表(亦称为连接表)该表会存在两个外键分别参照老师表和学生表。
一对一
在开发过程中,一对一的关联关系在数据库中并不常见;因为以这种方式存储的信息通常会放在同一张表中。
接下来,我们来学习在一对多的关联关系中如果添加和删除数据。先准备一些测试数据,代码如下:

DROP TABLE IF EXISTS student;DROP TABLE IF EXISTS class;-- 创建班级表CREATE TABLE class(
    cid int(4) NOT NULL PRIMARY KEY,
    cname varchar(30) );-- 创建学生表CREATE TABLE student(
    sid int(8) NOT NULL PRIMARY KEY,
    sname varchar(30),
    classid int(8) NOT NULL);-- 为学生表添加外键约束ALTER TABLE student ADD CONSTRAINT fk_student_classid FOREIGN KEY(classid) REFERENCES class(cid);-- 向班级表插入数据INSERT INTO class(cid,cname)VALUES(1,'Java');INSERT INTO class(cid,cname)VALUES(2,'Python');-- 向学生表插入数据INSERT INTO student(sid,sname,classid)VALUES(1,'tome',1);INSERT INTO student(sid,sname,classid)VALUES(2,'lucy',1);INSERT INTO student(sid,sname,classid)VALUES(3,'lili',2);INSERT INTO student(sid,sname,classid)VALUES(4,'domi',2);

1.关联查询

查询Java班的所有学生 MySQL命令:

select * from student where classid=(select cid from class where cname='Java');

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

2.关于关联关系的删除数据

请从班级表中删除Java班级。在此,请注意:班级表和学生表之间存在关联关系;要删除Java班级,应该先删除学生表中与该班相关联的学生。否则,假若先删除Java班那么学生表中的cid就失去了关联
删除Java班 MySQL命令:

delete from student where classid=(select cid from class where cname='Java');delete from class where cname='Java';

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

十四、多表连接查询

1.交叉连接查询

交叉连接返回的结果是被连接的两个表中所有数据行的笛卡儿积;比如:集合A={a,b},集合B={0,1,2},则集合A和B的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。所以,交叉连接也被称为笛卡尔连接,其语法格式如下:

SELECT * FROM 表1 CROSS JOIN 表2;

在该语法中:CROSS JOIN用于连接两个要查询的表,通过该语句可以查询两个表中所有的数据组合。
由于这个交叉连接查询在实际运用中没有任何意义,所以只做为了解即可

2.内连接查询

内连接(Inner Join)又称简单连接或自然连接,是一种非常常见的连接查询。内连接使用比较运算符对两个表中的数据进行比较并列出与连接条件匹配的数据行,组合成新的 记录。也就是说在内连接查询中只有满足条件的记录才能出现在查询结果中。其语法格式如下:

SELECT 查询字段1,查询字段2, ... FROM 表1 [INNER] JOIN 表2 ON 表1.关系字段=表2.关系字段

在该语法中:INNER JOIN用于连接两个表,ON来指定连接条件;其中INNER可以省略。

准备数据,代码如下:

-- 若存在数据库mydb则删除DROP DATABASE IF EXISTS mydb;-- 创建数据库mydbCREATE DATABASE mydb;-- 选择数据库mydbUSE mydb;-- 创建部门表CREATE TABLE department(
  did int (4) NOT NULL PRIMARY KEY, 
  dname varchar(20));-- 创建员工表CREATE TABLE employee (
  eid int (4) NOT NULL PRIMARY KEY, 
  ename varchar (20), 
  eage int (2), 
  departmentid int (4) NOT NULL);-- 向部门表插入数据INSERT INTO department VALUES(1001,'财务部');INSERT INTO department VALUES(1002,'技术部');INSERT INTO department VALUES(1003,'行政部');INSERT INTO department VALUES(1004,'生活部');-- 向员工表插入数据INSERT INTO employee VALUES(1,'张三',19,1003);INSERT INTO employee VALUES(2,'李四',18,1002);INSERT INTO employee VALUES(3,'王五',20,1001);INSERT INTO employee VALUES(4,'赵六',20,1004);

查询员工姓名及其所属部门名称 MySQL命令:

select employee.ename,department.dname from department inner join employee on department.did=employee.departmentid;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

3.外连接查询

在使用内连接查询时我们发现:返回的结果只包含符合查询条件和连接条件的数据。但是,有时还需要在返回查询结果中不仅包含符合条件的数据,而且还包括左表、右表或两个表中的所有数据,此时我们就需要使用外连接查询。外连接又分为左(外)连接和右(外)连接。其语法格式如下:

SELECT 查询字段1,查询字段2, ... FROM 表1 LEFT | RIGHT [OUTER] JOIN 表2 ON 表1.关系字段=表2.关系字段 WHERE 条件

由此可见,外连接的语法格式和内连接非常相似,只不过使用的是LEFT [OUTER] JOIN、RIGHT [OUTER] JOIN关键字。其中,关键字左边的表被称为左表,关键字右边的表被称为右表;OUTER可以省略。
在使用左(外)连接和右(外)连接查询时,查询结果是不一致的,具体如下:
1、LEFT [OUTER] JOIN 左(外)连接:返回包括左表中的所有记录和右表中符合连接条件的记录。
2、RIGHT [OUTER] JOIN 右(外)连接:返回包括右表中的所有记录和左表中符合连接条件的记录。

先准备数据,代码如下:

-- 若存在数据库mydb则删除DROP DATABASE IF EXISTS mydb;-- 创建数据库mydbCREATE DATABASE mydb;-- 选择数据库mydbUSE mydb;-- 创建班级表CREATE TABLE class(
  cid int (4) NOT NULL PRIMARY KEY, 
  cname varchar(20));-- 创建学生表CREATE TABLE student (
  sid int (4) NOT NULL PRIMARY KEY, 
  sname varchar (20), 
  sage int (2), 
  classid int (4) NOT NULL);-- 向班级表插入数据INSERT INTO class VALUES(1001,'Java');INSERT INTO class VALUES(1002,'C++');INSERT INTO class VALUES(1003,'Python');INSERT INTO class VALUES(1004,'PHP');-- 向学生表插入数据INSERT INTO student VALUES(1,'张三',20,1001);INSERT INTO student VALUES(2,'李四',21,1002);INSERT INTO student VALUES(3,'王五',24,1002);INSERT INTO student VALUES(4,'赵六',23,1003);INSERT INTO student VALUES(5,'Jack',22,1009);

准备这组数据有一定的特点,为的是让大家直观的看出左连接与右连接的不同之处
1、班级编号为1004的PHP班级没有学生
2、学号为5的学生王跃跃班级编号为1009,该班级编号并不在班级表中

3.1 左(外)连接查询

左(外)连接的结果包括LEFT JOIN子句中指定的左表的所有记录,以及所有满足连接条件的记录。如果左表的某条记录在右表中不存在则在右表中显示为空。
查询每个班的班级ID、班级名称及该班的所有学生的名字 MySQL命令:

select class.cid,class.cname,student.sname from class left outer join student on class.cid=student.classid;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
展示结果分析:
1、分别找出Java班、C++班、Python班的学生
2、右表的王跃跃不满足查询条件故其没有出现在查询结果中
3、虽然左表的PHP班没有学生,但是任然显示了PHP的信息;但是,它对应的学生名字为NULL

3.2 右(外)连接查询

右(外)连接的结果包括RIGHT JOIN子句中指定的右表的所有记录,以及所有满足连接条件的记录。如果右表的某条记录在左表中没有匹配,则左表将返回空值。
查询每个班的班级ID、班级名称及该班的所有学生的名字 MySQL命令:

select class.cid,class.cname,student.sname from class right outer join student on class.cid=student.classid;

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
展示结果分析:
1、分别找出Java班、C++班、Python班的学生
2、左表的PHP班不满足查询条件故其没有出现在查询结果中
3、虽然右表的jack没有对应班级,但是任然显示王跃跃的信息;但是,它对应的班级以及班级编号均为NULL

十五、子查询

子查询是指一个查询语句嵌套在另一个查询语句内部的查询;该查询语句可以嵌套在一个 SELECT、SELECT…INTO、INSERT…INTO等语句中。在执行查询时,首先会执行子查询中的语句,再将返回的结果作为外层查询的过滤条件。在子査询中通常可以使用比较运算符和IN、EXISTS、ANY、ALL等关键字。

准备数据,代码如下:

DROP TABLE IF EXISTS student;DROP TABLE IF EXISTS class;-- 创建班级表CREATE TABLE class(
  cid int (4) NOT NULL PRIMARY KEY, 
  cname varchar(20));-- 创建学生表CREATE TABLE student (
  sid int (4) NOT NULL PRIMARY KEY, 
  sname varchar (20), 
  sage int (2), 
  classid int (4) NOT NULL);-- 向班级表插入数据INSERT INTO class VALUES(1001,'Java');INSERT INTO class VALUES(1002,'C++');INSERT INTO class VALUES(1003,'Python');INSERT INTO class VALUES(1004,'PHP');INSERT INTO class VALUES(1005,'Android');-- 向学生表插入数据INSERT INTO student VALUES(1,'张三',20,1001);INSERT INTO student VALUES(2,'李四',21,1002);INSERT INTO student VALUES(3,'王五',24,1003);INSERT INTO student VALUES(4,'赵六',23,1004);INSERT INTO student VALUES(5,'小明',21,1001);INSERT INTO student VALUES(6,'小红',26,1001);INSERT INTO student VALUES(7,'小亮',27,1002);

1.带比较运算符的子查询

比较运算符前面我们提到过得,就是>、=、查询张三同学所在班级的信息 MySQL命令:

select * from class where cid=(select classid from student where sname='张三');

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。
查询比张三同学所在班级编号还大的班级的信息 MySQL命令:

select * from class where cid>(select classid from student where sname='张三');

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

2.带EXISTS关键字的子查询

EXISTS关键字后面的参数可以是任意一个子查询, 它不产生任何数据只返回TRUE或FALSE。当返回值为TRUE时外层查询才会 执行
假如王五同学在学生表中则从班级表查询所有班级信息 MySQL命令:

select * from class where exists (select * from student where sname='王五');

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

3.带ANY关键字的子查询

ANY关键字表示满足其中任意一个条件就返回一个结果作为外层查询条件。

查询比任一学生所属班级号还大的班级编号 MySQL命令:

select * from class where cid > any (select classid from student);

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

4.带ALL关键字的子查询

ALL关键字与ANY有点类似,只不过带ALL关键字的子査询返回的结果需同时满足所有内层査询条件。

查询比所有学生所属班级号还大的班级编号 MySQL命令:

select * from class where cid > all (select classid from student);

运行效果展示
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

概要

重要(キーワード分析より):
クエリ文の記述順序と実行順序
select ===> from ===>where ===>group by ===>having ===>order by ===>limit
クエリ ステートメントの実行順序
from ===> where ===> group by ===> getting ===> select ===> order by ===> limi

レビューに基づいて、満足しています共有するため、この記事を共有します。 ! !
この記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。

[推奨: mysql ビデオ チュートリアル ]

以上がこの記事は、37,000 語の MySQL の基本 (整理および共有) を整理するのに十分です。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。