SQLデータベースの研究(A)

データベースを作成し、使用

データベースを作成し、使用する前に、最初のいくつかのコマンドが導入されました

## 该SHOW语句查找服务器上当前存在的数据库:
## 该mysql数据库描述了用户访问权限。该test数据库通常可作为用户工作区尝试的事情了。
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
6 rows in set (0.11 sec)
 
## use 命令表示使用指定的 mysql 数据库
mysql> use mysql
Database changed
mysql>

まず、データベースを作成し、選択

## 1. 创建数据库
mysql> create database menagerie;
Query OK, 1 row affected (0.04 sec)

## 删除数据库
mysql> drop database menagerie;

## 注意:如果您收到错误,例如ERROR 1044(42000):在尝试创建数据库时,用户'micah'@'localhost'拒绝访问数据库'menagerie',这意味着您的用户帐户没有必要的权限。
 
## 2. 选择数据库,创建数据库时并不会选择它使用; 你必须明确地说明使用当前数据库,请使用以下语句:
mysql> use menagerie
Database changed
 
## 3. 进入数据库同时,选择使用指定数据库
C:\Users\zjy\Desktop $>mysql -uroot -p menagerie
Enter password: ******
 
## 4. 执行完3之后,你可以通过 select database(),确认是否已经使用制定数据库
mysql> select database();
+------------+
| database() |
+------------+
| menagerie  |
+------------+
1 row in set (0.00 sec)

第二に、テーブルを作成します

データベースを作成した後、我々はそれが含まれているかを見ることができます

## 该menagerie数据库是空的集合
mysql> show tables;
Empty set (0.02 sec)

あなたが必要なものをテーブルと何が各テーブルの列に含まれるべきである:より多くの困難な部分があるべきデータベースの構造を決定するものです。

あなたは、ペットごとのレコードを含むテーブルをしたいです。これは、それぞれの動物の名前の最小値が含まれている必要があり、ペットのフォーム呼び出すことができます。名前自体は非常に興味深いものではありませんのでので表には他の情報が含まれている必要があります。たとえば、あなたの家族のペットで複数の人ならば、あなたは、各動物の所有者をリストする必要があるかもしれません。また、このような種や性別など、いくつかの基本的な記述情報を記録することができます。

どの年齢は?それは意味をなさないかもしれませんが、良いことは、データベースに格納することはありません。時間が経つにつれて、年齢はあなたが常にレコードを更新する必要があることを意味する、変更されます。代わりに、固定された値は、好ましくは、誕生日など、格納されました。あなたが年齢を必要とする時はいつでもその後、あなたはすべての.MySQLは、日付の計算を実行する機能を提供して誕生の現在の日付と日付の間の差として計算することができますので、これは難しいことではありません。ストレージ誕生日ではなく、年齢、他の利点があります。

  • あなたは、クエリのこのタイプは、いくつかの愚かなと思うなら、あなたがする必要があるかどうかを判断するために、ビジネスデータベースのコンテキストで同じ質問をするかもしれないことに注意してください(例えば、今後の世代のペットの誕生日のリマインダーなどのタスクを実行するためにデータベースを使用することができます現在の週のためにまたはその顧客の月内の誕生日の願いを送信すると、コンピュータ支援個人的なタッチ。)
  • あなたは、現在の日付よりも年齢に関連した日付を計算することができます。死のあなたの日付はデータベースに保存されます場合たとえば、あなたは簡単にペットの死で年齢を計算することができます。

あなたは、ペットのテーブルに他の種類の情報を便利だと思うかもしれませんが、情報はこれまでに決定するのに十分である:名前、所有者、種、性別、誕生と死。

名前のレイアウトテーブルの指定テーブルを作成するために使用することができる、名前、所有者、3種類の長さの値が同じではありません、我々はVARCHAR可変長の文字を使用し、文字は、単一のセックスM「を使用することができます「副詞句:」F「またはかもしれ」男性 『と』女性」。誕生と死の日付データ型に使用される列はかなり明白な選択であり、最も簡単なのは、単一の文字「M」と「F」を使用することです。

mysql> create table pet (name varchar(20),owner varchar(20),
    -> species varchar(20), sex char(1), birth date, death date);
Query OK, 0 rows affected (0.26 sec)

データベースが作成された後のテーブルを見てみましょう

mysql> show tables;
+---------------------+
| Tables_in_menagerie |
+---------------------+
| pet                 |
+---------------------+
1 row in set (0.00 sec)

あなたは、私が期待通りに以下の説明文で、テーブルを作成するかどうかを確認するために、より詳細なテーブル構造を見たいのですが、満足できない場合があります。

mysql> describe pet;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| name    | varchar(20) | YES  |     | NULL    |       |
| owner   | varchar(20) | YES  |     | NULL    |       |
| species | varchar(20) | YES  |     | NULL    |       |
| sex     | char(1)     | YES  |     | NULL    |       |
| birth   | date        | YES  |     | NULL    |       |
| death   | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

あなたは、テーブル内の列の名前を忘れてしまったか、彼らはタイプがある場合は、descriptionコマンドを使用することができます

第三に、データをテーブルにロードされます

あなたがテーブルを作成した後、あなたが使用することができLOADをDATA:副詞句INSERTは table文にデータを移入します。
図に示すように、あなたのペットのレコードが記述できると仮定します。(注日付「YYYY-MM-DD」形式のMySQLの期待;これは、あなたと違う習慣かもしれません。)、

pet.txt文件格式
每一项之间用Tab键进行分隔,如果该字段为NULL,则用\N表示。

Fluffy  Harol   cat     f   1993-02-04      2019-10-06  \N
Kifu    Hadon   dag     m   1998-03-04      2019-10-06  \N
Piger   Wang    bird    f   2003-05-01      2019-10-06  \N
Yao     Meng    nake    m   2008-02-04      2019-10-06  \N
Du      Tian    pig     f   1999-02-04      2019-10-06  \N
Zhang   Jinrui  bird    m   1998-02-04      2019-10-06  \N
  • 1.)(テーブルのペットを作成してテーブルを作成します。

  • フィールドがNULLである場合2. \ Nで、Tabキーで区切られたそれぞれの間に==をインポートするためのテキストファイルを作成表明。==
  • 3.インポートデータ入力コマンド、インポート。
load data local infile “d:/pet.txt”
into table pet;
或
load data local infile “d:/pet.txt”
into table pet( , , , , , ,);

1. LOAD DATAモードのデータファイルが読み込まれ

このように、あなたが最初にこのファイルに記述されたテーブルにデータをインポートする、などper.txtとしてファイルを作成する必要があり、各行のレコード、タブで区切られた値が含まれており、CREATE TABLE文を列に従い、与えられた順序でアウト。(例えば性別は不明または、まだ動物が生きている死の日付など)欠損値について、あなたはNULL値を使用することができます。テキストファイル内のNULL値を示すには、\ N(バックスラッシュ、資本-N)を使用します。例を以下に示します:

Fluffy    Harold    cat    f    1993-02-04    \N

字幕:要将文件加载pet.txt到  pet表中,请使用以下语句:

mysql> load data local infile "D:/pet.txt" into table pet;

データベースは、このコマンドのこのバージョンをサポートしていない場合、それはオンライン一般的である、MySQLデータベースのインストールは、システムが自動的にローカルINFILEがfalseで設定したため、目標は誰か悪意のあるデータのインジェクション攻撃のデータベースを防ぐためですデータベースは、ローカル関数文の負荷データを閉じます。

mysql> load data local infile "D:/pet.txt" into table pet;
ERROR 1148 (42000): The used command is not allowed with this MySQL version
mysql>

ソリューション

2. INSERTモード、データレコードを挿入します

mysql> insert into pet
    -> values ('Puffball','Diane','hamster','f','1999-03-30',NULL);
Query OK, 1 row affected (0.00 sec)

第四に、テーブルから取得した情報

SELECT 语句用于从表中提取信息。声明的一般形式是:

SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy;
  • あなたが見たいものを表現what_to_select(列名またはすることができ*、*すべての列の代わりに)。
  • which_tableは、データを取得するテーブルを示しています。
  • 条件はオプションです場所。その場合は、取得する資格を得るために満たされなければならない指定された行1つ以上の条件をconditions_to_satisfy。

まず、すべてのデータを取得

mysql> select * from pet;
+----------+--------+---------+------+------------+------------+
| name     | owner  | species | sex  | birth      | death      |
+----------+--------+---------+------+------------+------------+
| Fluffy   | Harold | cat     | f    | 1993-02-04 | 0000-00-00 |
| Claws    | Gwen   | cat     | m    | 1994-03-17 | 0000-00-00 |
| Buffy    | Harold | dog     | f    | 1989-05-13 | 0000-00-00 |
| Fang     | Benny  | dog     | m    | 1990-08-27 | 0000-00-00 |
| Bowser   | Diane  | dog     | m    | 1979-08-31 | 1995-07-29 |
| Chirpy   | Gwen   | bird    | f    | 1998-09-11 | 0000-00-00 |
| Whistler | Gwen   | bird    | NULL | 1997-12-09 | 0000-00-00 |
| Slim     | Benny  | snake   | m    | 1996-04-29 | 0000-00-00 |
| Puffball | Diane  | hamster | f    | 1999-03-30 | NULL       |
+----------+--------+---------+------+------------+------------+
9 rows in set (0.00 sec)
 
## 修改指定的一条记录的一个字段值
mysql> update pet
    -> set birth = '1989-08-31'
    -> where name = 'Bowser';
Query OK, 1 row affected (0.07 sec)
Rows matched: 1  Changed: 1  Warnings: 0
 
## 查询是否更改成功,可以看到,生日更改了
mysql> select * from pet where name = 'Bowser';
+--------+-------+---------+------+------------+------------+
| name   | owner | species | sex  | birth      | death      |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+
1 row in set (0.00 sec)

第二に、特定線データ検索

mysql>  SELECT * 
        FROM pet 
        WHERE name = 'Bowser';
+--------+-------+---------+------+------------+------------+
| name   | owner | species | sex  | birth      | death      |
+--------+-------+---------+------+------------+------------+
| Bowser | Diane | dog     | m    | 1989-08-31 | 1995-07-29 |
+--------+-------+---------+------+------------+------------+

あなたがそうで「クッパ」、「BOWSER」などの名前を指定し、できるよう==文字列の比較は通常、大文字と小文字を区別しません。クエリ結果は同じです。==

## 你可以在任何列上指定条件,而不仅仅是 name。例如,如果您想知道1998年或之后出生的动物:
mysql> select * from pet where birth>='1998-1-1';
+----------+-------+---------+------+------------+-------+
| name     | owner | species | sex  | birth      | death |
+----------+-------+---------+------+------------+-------+
| Chirpy   | Gwen  | bird    | f    | 1998-09-11 | NULL  |
| Puffball | Diane | hamster | f    | 1999-03-30 | NULL  |
+----------+-------+---------+------+------------+-------+
## 结合条件来定位雌性狗:
mysql> select * from pet where species='dog' and sex='f';
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+
## 前面的查询使用 AND 逻辑运算符。还有一个 OR 运算符:
mysql> select * from pet where (species='cat' and sex='m')
    -> or (species='dog' and sex='f');
+-------+--------+---------+------+------------+-------+
| name  | owner  | species | sex  | birth      | death |
+-------+--------+---------+------+------------+-------+
| Claws | Gwen   | cat     | m    | 1994-03-17 | NULL  |
| Buffy | Harold | dog     | f    | 1989-05-13 | NULL  |
+-------+--------+---------+------+------------+-------+

注:ANDとORを混合してもよいが、AND ORよりも優先順位が高いです。あなたは、両方の演算子を使用している場合は、それがどのようにグループに条件がなければならないことを明確に括弧を使用するのが最適です。

第三に、データは、特定の列を取得します

## 只查看 name, birth
mysql> SELECT name, birth FROM pet;
+----------+------------+
| name     | birth      |
+----------+------------+
| Fluffy   | 1993-02-04 |
| Claws    | 1994-03-17 |
| Buffy    | 1989-05-13 |
| Fang     | 1990-08-27 |
| Bowser   | 1989-08-31 |
| Chirpy   | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim     | 1996-04-29 |
| Puffball | 1999-03-30 |
+----------+------------+
 
## 要找出谁拥有宠物,请使用此查询:
mysql> SELECT owner FROM pet;
+--------+
| owner  |
+--------+
| Harold |
| Gwen   |
| Harold |
| Benny  |
| Diane  |
| Gwen   |
| Gwen   |
| Benny  |
| Diane  |
+--------+
 
## 上面的查询有重复的记录,要最小化输出,可以通过添加关键字 DISTINCT 检索每个唯一的输出记录
mysql> SELECT DISTINCT owner FROM pet;
+--------+
| owner  |
+--------+
| Benny  |
| Diane  |
| Gwen   |
| Harold |
+--------+
 
## 可以使用WHERE子句将行选择与列选择组合在一起。
mysql> SELECT name, species, birth FROM pet
    -> WHERE species = 'dog' OR species = 'cat';
+--------+---------+------------+
| name   | species | birth      |
+--------+---------+------------+
| Fluffy | cat     | 1993-02-04 |
| Claws  | cat     | 1994-03-17 |
| Buffy  | dog     | 1989-05-13 |
| Fang   | dog     | 1990-08-27 |
| Bowser | dog     | 1989-08-31 |
+--------+---------+------------+
 
## where species in ('dog','cat');
mysql> SELECT NAME, species, birth FROM pet 
    -> WHERE species IN ('dog','cat');
+--------+---------+------------+
| name   | species | birth      |
+--------+---------+------------+
| Fluffy | cat     | 1993-02-04 |
| Claws  | cat     | 1994-03-17 |
| Buffy  | dog     | 1989-05-13 |
| Fang   | dog     | 1990-08-27 |
| Bowser | dog     | 1989-08-31 |
+--------+---------+------------+

第四に、仕分けラインデータ

## 这是动物的生日,按日期排序:
mysql> SELECT name, birth FROM pet ORDER BY birth;
+----------+------------+
| name     | birth      |
+----------+------------+
| Buffy    | 1989-05-13 |
| Bowser   | 1989-08-31 |
| Fang     | 1990-08-27 |
| Fluffy   | 1993-02-04 |
| Claws    | 1994-03-17 |
| Slim     | 1996-04-29 |
| Whistler | 1997-12-09 |
| Chirpy   | 1998-09-11 |
| Puffball | 1999-03-30 |
+----------+------------+
 
## 默认排序顺序为升序,首先是最小值。要按反向(降序)顺序排序,请将DESC关键字添加到要排序 的列的名称:
mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
+----------+------------+
| name     | birth      |
+----------+------------+
| Puffball | 1999-03-30 |
| Chirpy   | 1998-09-11 |
| Whistler | 1997-12-09 |
| Slim     | 1996-04-29 |
| Claws    | 1994-03-17 |
| Fluffy   | 1993-02-04 |
| Fang     | 1990-08-27 |
| Bowser   | 1989-08-31 |
| Buffy    | 1989-05-13 |
+----------+------------+
 
## 您可以对多个列进行排序,并且可以按不同方向对不同列进行排序。例如,要按动物类型按升序排序,然后按动物类型中的出生日期按降序排序(最年轻的动物首先),请使用以下查询:
mysql> SELECT name, species, birth FROM pet
    -> ORDER BY species, birth DESC;
+----------+---------+------------+
| name     | species | birth      |
+----------+---------+------------+
| Chirpy   | bird    | 1998-09-11 |
| Whistler | bird    | 1997-12-09 |
| Claws    | cat     | 1994-03-17 |
| Fluffy   | cat     | 1993-02-04 |
| Fang     | dog     | 1990-08-27 |
| Bowser   | dog     | 1989-08-31 |
| Buffy    | dog     | 1989-05-13 |
| Puffball | hamster | 1999-03-30 |
| Slim     | snake   | 1996-04-29 |
+----------+---------+------------+
## 上面的 DESC 关键字仅适用于紧邻其前面的列名(birth); 它不会影响species列排序顺序。

第五に、日付計算

MySQLは、例えば、年齢算出部または抽出された日付を日付の計算を実行するために使用できるいくつかの機能を提供します。
各ペットの年齢を判断するには、このTIMESTAMPDIFF()関数を使用してください。その引数は、あなたが表現したいユニットの結果であり、2つの日付(誕生日、今日の日付)を区別することができます。次のクエリは、各ペットの誕生日、現在の日付と年齢を示しています。エイリアス(年齢)は列ラベルより意味の最終的な出力を行うために使用されます。

mysql> select name,birth,curdate(),
    -> timestampdiff(year,birth,curdate()) as age
    -> from pet;
+----------+------------+------------+------+
| name     | birth      | curdate()  | age  |
+----------+------------+------------+------+
| Fluffy   | 1993-02-04 | 2018-08-13 |   25 |
| Claws    | 1994-03-17 | 2018-08-13 |   24 |
| Buffy    | 1989-05-13 | 2018-08-13 |   29 |
| Fang     | 1990-08-27 | 2018-08-13 |   27 |
| Bowser   | 1989-08-31 | 2018-08-13 |   28 |
| Chirpy   | 1998-09-11 | 2018-08-13 |   19 |
| Whistler | 1997-12-09 | 2018-08-13 |   20 |
| Slim     | 1996-04-29 | 2018-08-13 |   22 |
| Puffball | 1999-03-30 | 2018-08-13 |   19 |
+----------+------------+------------+------+
9 rows in set (0.01 sec)
 
## 查询有效,但如果以某种顺序显示行,则可以更轻松地扫描结果。
## 这可以通过添加一个ORDER BY name子句来按名称对输出进行排序来完成:
mysql> select name,birth,curdate(),
    -> timestampdiff(year,birth,curdate()) as age
    -> from pet order by name;
+----------+------------+------------+------+
| name     | birth      | curdate()  | age  |
+----------+------------+------------+------+
| Bowser   | 1989-08-31 | 2018-08-13 |   28 |
| Buffy    | 1989-05-13 | 2018-08-13 |   29 |
| Chirpy   | 1998-09-11 | 2018-08-13 |   19 |
| Claws    | 1994-03-17 | 2018-08-13 |   24 |
| Fang     | 1990-08-27 | 2018-08-13 |   27 |
| Fluffy   | 1993-02-04 | 2018-08-13 |   25 |
| Puffball | 1999-03-30 | 2018-08-13 |   19 |
| Slim     | 1996-04-29 | 2018-08-13 |   22 |
| Whistler | 1997-12-09 | 2018-08-13 |   20 |
+----------+------------+------------+------+
9 rows in set (0.00 sec)
 
## 以上结果可以通过 order by age 子句来排序
 
## 类似的查询可用于确定死亡动物的死亡年龄。可以通过检查death值 是否为NULL。然后,对于那些具有非NULL值的人,计算death和 birth值之间的差值:
mysql> select name,birth,death,
    -> timestampdiff(year,birth,death) as age
    -> from pet where death is not null order by age;
+--------+------------+------------+------+
| name   | birth      | death      | age  |
+--------+------------+------------+------+
| Bowser | 1989-08-31 | 1995-07-29 |    5 |
+--------+------------+------------+------+
1 row in set (0.00 sec)
## 此处查询使用death IS NOT NULL而不是death <> NULL因为 NULL是一个特殊值,无法使用通常的比较运算符进行比较。
## <> 代表不等于 ,<=> 代表等于
 
## 如果你想知道哪些动物下个月有生日怎么办?对于这种类型的计算,年和日是无关紧要的; 
## 您只想提取birth列的月份部分 。MySQL提供了用于提取日期的部分,如一些功能 YEAR(), 
## MONTH()和 DAYOFMONTH()。 MONTH()可用于提取月份。
mysql> select name,birth,month(birth) as birthMonth
    -> from pet
    -> where month(birth)<=>month(curdate());
+--------+------------+------------+
| name   | birth      | birthMonth |
+--------+------------+------------+
| Fang   | 1990-08-27 |          8 |
| Bowser | 1989-08-31 |          8 |
+--------+------------+------------+
2 rows in set (0.00 sec)
 
## 如果当前月份是12月,则会出现一个小的复杂情况。你不能只在月份数字(12)中添加一个并查找月份出生的动物 13,因为没有这样的月份。相反,你寻找1月(月1)出生的动物 。
 
## 您可以编写查询,以便无论当前月份是什么,它都可以工作,因此您不必使用特定月份的数字。 DATE_ADD()使您可以将时间间隔添加到给定日期。如果您将值添加一个月CURDATE(),然后使用,则提取月份部分MONTH(),结果将生成查找生日的月份:
 
mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH));
 
## 完成相同任务的另一种方法是1在使用modulo函数(MOD)将月值包装0为当前值之后,添加1, 以获取当前后一个月:
 
mysql> SELECT name, birth FROM pet
    -> WHERE MONTH(birth) = MOD(MONTH(CURDATE()), 12) + 1;
 
## MONTH()返回1和12之间的数字。并 MOD(something,12)在0和11之间返回一个数字。所以添加1,必须在MOD()之后 .
 

今日、ちょうどこの上にハングアップする、そしてどのようなSQLに関連するコンテンツへのリンクについて

1接続し、サーバのインストールおよび切断する
第二入力クエリ
3を、データベースの作成に使用される
4は、テーブルから情報を取得する
情報は、約5データベースとテーブル取得
バッチモードでのMySQLを使用して6
7共通クエリ例

おすすめ

転載: www.cnblogs.com/jason1999/p/11628158.html