ホームページ  >  記事  >  データベース  >  MySQL 構文構成の概要

MySQL 構文構成の概要

coldplay.xixi
coldplay.xixi転載
2021-04-14 09:54:142761ブラウズ

MySQL 構文構成の概要

#私は最近数週間 MySQL を学習しています。このブログは MySQL の基本的な構文を整理することに専念しています。

まず、MySQL の 3 つの最も基本的なステートメントを見てみましょう。例: 以下の講師テーブルで給与が 80,000 を超える教師の名前を検索したいです。

MySQL 構文構成の概要

関連する無料学習の推奨事項: mysql ビデオ チュートリアル

select name  -- 这是最后筛选的元素,注意,在MySQL中一切结果都是以表的形式,哪怕这个表只有一个记录
from instructor -- from语句表示从哪个表中进行查询
where salary > 80000; -- where语句相当于选择语句,限定条件,找出所需的记录

MySQL 構文構成の概要クエリ結果は次のようになります。これら 3 つのステートメントは MySQL で最も重要な 3 つのステートメントであり、基本的にすべてのクエリはこれら 3 つのステートメントから分離できません。ただし、複雑なクエリに対応したい場合は、より多くのステートメントをサポートする必要があります。

distinct: 結果の重複を排除します
/*用法如下,假如我想在上表instructor中,找出所有系的名字,可以发现在dept_name中,有的系是出现了一次以上,
因此要对系的名字进行去重*/select distinct dept_name
from instructor; -- 这里不需要限定条件,因此不用where语句

*: 現在のテーブルのすべてのキーを示します。いわゆるキーは実際には行フィールドです。テーブルの ID (講師テーブルの ID 、名前、dept_name など)
/*类似上一个例子,我想找出instructor表中salary大于80000的教师,并显示这些老师的所有信息*/select *
from instructor
where salary > 80000; -- 其实不加分号也行,分号表示执行到此结束,接下来的语句不执行

複数の条件をフィルターする場合 (たとえば、講師を検索したい場合)給与が 80,000 を超えるコンピュータ部門の教師、つまり I も指定する必要があります。 給与が 80,000 を超えるコンピュータ部門の教師を見つけるには、and ステートメント ## を使用する必要があります。 #
select *
from instructor
where salary > 80000 and dept_name = 'Comp. Sci.';/*同样有and语句就有or语句,or表示或,即满足一个条件即可。比如我想找出工资小于60000或者大于80000的教师*/select *
from instructor
where salary > 80000 or salary 

次に、複数のテーブル間のクエリを開始します。これが次に行うことです。まずキーの基本的な概念を追加しましょう。キーとは何かについてはすでに説明しました。ここでは主キー (主キーとも呼ばれます) について説明します。主キーは、特定のレコードを一意に決定するキーを表します。たとえば、キャンパス内で私たちを識別できる唯一の方法は学生証であり、たとえ学校内で私と同じ名前の人がいたとしても、学生証によって身分を区別できます。名前が主キーではないことがわかりますが、名前が重複すると、その名前で生徒を一意に識別できなくなります。

これは教師のテーブルです。ID キーは教師の ID を表し、course_id はコース ID を表し、semester はコースが開始される学期を表します。教師が教えているコースを調べて、教師の名前と course_id を表示します。 MySQL 構文構成の概要

/*这条语句可以实现,但是请问为什么可以实现呢?那是因为两个表都有共同的主键:ID,当然teaches不止这一个主
键,我们看键旁边有个key,都是主键。但是我们不用管其他键,只要关注ID键就可以了,因为这是两个表中共有的。这
里我还要特意提一下两个表查询,其实是一个表的一个记录去遍历另外一个表的记录,当找到某一条instruction的id等
于teaches的id,就将这条记录保存到结果表中*/
SELECT NAME,course_id
where instructor.`ID` = teaches.`ID`;

それでは、自然結合、つまり自然なつながりについて話しましょう。変更操作は非常に簡単です。つまり、2 つのテーブルに等しい主キーを持つレコードを保存します。2 つのテーブルに複数の同一のキーがある場合は、保存する前に、それぞれの同一の主キーが同じであることを確認する必要があります。

/*上述例子完全可以用自然连接来查询*/
SELECT NAME,course_id
FROM instructor NATURAL JOIN teaches;/*如果你想知道自然连接后的表长啥样,我满足你*/
SELECT * -- 显示结果表的所有键
FROM instructor NATURAL JOIN teaches;

テーブルの列が大幅に増加していることがわかります。実際、2 つのテーブルのキーが統合されています。自然なつながりについてまだ完全に理解していない場合は、別の例を挙げてみましょう。たとえば、学生テーブル MySQL 構文構成の概要 ['Xu Xiaoming, No. 1', 'Huang Xiaoshan, No. 2'] があります。主キーは学生番号です。また、得点表
['No. 1、中国語: 87、数学: 98'、'No. 2、中国語: 94、数学: 82'] もあり、学生番号がこのテーブルの主キーでもあります。テーブル。生徒の表を印刷したい場合は、2 つの表を自然に接続するだけで済みます。自然な接続プロセス中に、同じ学習記録が 1 つのレコードに統合され、最終的には
['No. 1、Xu Xiaoming] になります。 、中国語:87、数学:98」、「No.2、黄暁山、中国語:94、数学:82」]。実は、自然接続はデカルト積を最適化したものであり、デカルト積を自分で理解することができます。

select を通じて変数または関数をクエリできます

SELECT 'dd';SELECT 10*20;SELECT NOW(),UNIX_TIMESTAMP();
実はここで注目していただきたいのですが、select ステートメントの後のキーが結果のキー名になります。 . これを知ってください フォローアップは、名前変更作業に非常に役立ちます。たとえば、今の例では、


MySQL 構文構成の概要

concat(): 2 つのキーを接続する関数で、使い方は Python の printf

と似ています。
/*通过concat函数来连接那么和dept_name*/
SELECT NAME,CONCAT(NAME,' : ',dept_name)FROM instructor;

キー名だけでなく、そのキーを持つレコードも結合されます。 MySQL 構文構成の概要

as: キーまたはテーブルの名前を変更します

/*比如刚刚那个例子*/
SELECT NAME,CONCAT(NAME,' : ',dept_name) as 'name+dept'FROM instructor;/*或者给表改名*/
SELECT NAME
FROM instructor as i
WHERE i.salary > 70000; -- 注意改名后,要想引用该表的键,要加上引用符号:.

讲了这么就查询,这里讲一下创建表:create table。其实这个命令一般用的很少,我更喜欢用鼠标点击来创建表,而不是敲代码来创建。

/*创建一个与student表一样结构的表,什么叫一样结构,就是ss_1表中键于student一样*/
CREATE TABLE ss_1 LIKE student;

刚刚例子中出现了like,其实like还可以用于字符匹配

/*like语句来进行字符匹配*/
SELECT dept_name
FROM department
WHERE building LIKE 'Watson%'; -- 这里用到%,类似于正则中的?,表示任意多个字符。这个查询是想找出building
-- 中含有Watson的记录。

order by:对结果表中的键进行排序,默认是升序,即记录从上往下逐个递增

/*order by 按照某个属性进行排序*/
/*这个查询是想找出物理系的老师,并按工资进行排序*/
SELECT NAME , salary
FROM instructor
WHERE dept_name = 'Physics'ORDER BY salary;/*既然有升序,那就有降序*/
SELECT NAME , salary
FROM instructor
WHERE dept_name = 'Physics'ORDER BY salary DESC; -- DESC表示降序
/*我们还可以对多个键进行排序*/
SELECT *
FROM instructor
ORDER BY salary DESC , NAME ASC; -- 这里是先对工资进行降序排序,当工资一样时,按英文首字母的ASC码值升序排
-- 序

MySQL 構文構成の概要
有没有想过为什么order by要在where语句后面呢?因为order by语句时针对结果表的,where语句之后才有结果表,这也与我之前强调MySQL查询结果一切都是表!哪怕这个表只有一个键甚至一条记录!

between and:选择区间内的记录

/*区间范围,注意是闭区间,即[90000 , 100000]*/
SELECT NAME
FROM instructor
WHERE salary BETWEEN 90000 AND 1000000;

当我们对查询多个条件时,有时候可以通过键匹配

/*类似于python的字典,里面的元素逐个对应*/
SELECT NAME,course_id
FROM instructor,teaches
WHERE (instructor.`ID`,dept_name) = (teaches.`ID`,'Biology');

下一篇博客将重点介绍多个表之间的查询,这也是重中之重,难点之一!

更多相关免费学习推荐:mysql教程(视频)

以上がMySQL 構文構成の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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