MySQLデータベース3パケットとシングルテーブル、マルチテーブルのクエリ

花火よりも孤独な派手な色あせた、人...... - アイリーンチャン

補足テーブルの最初に、操作

選択*表から場所の列名(値1、値2、...)。

孤立したデータ値に対応します。

和1.1null nullではありません

ヌルを使用する場合:

テーブルが作成されるときは、フィールド名がnullのテーブルからSELECT *を使用する必要性に対応する情報をチェックアウトする必要がある場合、我々はヌルヌルを持っています。

mysql> create table v1(id int auto_increment primary key,
    -> name varchar(32),email varchar(32))charset=utf8;
Query OK, 0 rows affected (0.70 sec)

mysql> insert into v1(email) values('xxx');
Query OK, 1 row affected (0.07 sec)

mysql> select * from v1;
+----+------+-------+
| id | name | email |
+----+------+-------+
|  1 | NULL | xxx   |
+----+------+-------+
1 row in set (0.00 sec)

mysql> select * from v1 where name is null;
+----+------+-------+
| id | name | email |
+----+------+-------+
|  1 | NULL | xxx   |
+----+------+-------+
1 row in set (0.01 sec)

mysql> select *from v1 where name='';
Empty set (0.00 sec)

データクエリの効率が低下しますヌルを使用して、お勧めできません、それはあなたがテーブルを作成するときに値はデフォルトでは空であることをお勧めします。

1.2場合はnullではありません

mysql> create table v2(id int auto_increment primary key,
    -> name varchar(32) not null default '',email varchar(32)not null default '')charset=utf8;
Query OK, 0 rows affected (0.44 sec)


mysql> insert into v2(email) values('xxx');
Query OK, 1 row affected (0.06 sec)

mysql> select *from v2 where name='';
+----+------+-------+
| id | name | email |
+----+------+-------+
|  1 |      | xxx   |
+----+------+-------+
1 row in set (0.00 sec)

第二に、単一のオペレーティングテーブル(インポート)

2.1グループ化

グループ化:フィールドのマークを同じ分類には、そのようなオフィスの社員情報テーブルパケットとして、または性別ごとにグループ化され。

2.1.1集約関数

MAX(列)とカラムの最大値

分(カラム)の最小値列を得ます

列データの合計の合計(コラム)

列数のカウント(列)データ

平均(カラム)および列のデータの平均値を計算します

例でグループを参照してください。

によって2.1.2group

使用法:

集計機能選択フィールド、グループによる従業員のグループから選択したフィールド。

パケットキーワードでグループ、重合によってグループ、および機能しなければならない(カウント)1が表示されます。数(フィールド)、データ・フィールドの状態に応じがカウントされます。

例:

1.性別は、例えば、男の子と女の子の数に関する統計情報がどのように多くのあるグループ化されています。

mysql> create table employee(
    -> id int not null unique auto_increment primary key,
    -> name varchar(20) not null,
    -> gender enum('male','female') not null default 'male',
    -> age int(3) unsigned not null default 28,
    -> hire_date date not null,
    -> post varchar(50),
    -> post_comment varchar(100),
    -> salary double(15,2),
    -> office int,
    -> depart_id int
    -> )charset=utf8;
Query OK, 0 rows affected (0.61 sec)

mysql> insert into employee(name,gender,age,hire_date,post,salary,office,depart_id) values
    -> ('小张','male',73,'20140701','研发部',3500,401,1),
    -> ('小李','male',28,'20121101','研发部',2100,401,1),
    -> ('小赵','female',18,'20150411','研发部',18000,403,3),
    -> ('歪歪','female',48,'20150311','销售部',3000.13,402,2),
    -> ('丫丫','female',38,'20101101','销售部',2000.35,402,2),
    -> ('丁丁','female',18,'20110312','销售部',1000.37,402,2),
    -> ('小明','male',28,'20160311','运营部',10000.13,403,3),
    -> ('小华','male',18,'19970312','运营部',20000,403,3),
    -> ('小王','female',18,'20130311','运营部',19000,403,3);
Query OK, 9 rows affected (0.09 sec)
Records: 9  Duplicates: 0  Warnings: 0

mysql> select count(id),gender from employee group by gender;
+-----------+--------+
| count(id) | gender |
+-----------+--------+
|         4 | male   |
|         5 | female |
+-----------+--------+
2 rows in set (0.10 sec)

mysql> select gender,count(id) as total from employee group by gender;
#这里可以用as重命名显示的列名
+--------+-------+
| gender | total |
+--------+-------+
| male   |     4 |
| female |     5 |
+--------+-------+
2 rows in set (0.00 sec)

2.分野別のグループ分け、各部門最古の男を計算しました。

mysql> select depart_id , max(age) from employee group by depart_id;
+-----------+----------+
| depart_id | max(age) |
+-----------+----------+
|         1 |       73 |
|         2 |       48 |
|         3 |       28 |
+-----------+----------+
3 rows in set (0.04 sec)

3.分野別のグループ分け、各部門は、加算の年齢を決定しました。

mysql> select depart_id,sum(age) from employee group by depart_id;
+-----------+----------+
| depart_id | sum(age) |
+-----------+----------+
|         1 |      101 |
|         2 |      104 |
|         3 |       82 |
+-----------+----------+
3 rows in set (0.00 sec)

4.部門のグループ化は、各部門は、平均の年齢を決定しました。

mysql> select depart_id,avg(age) from employee group by depart_id;
+-----------+----------+
| depart_id | avg(age) |
+-----------+----------+
|         1 |  50.5000 |
|         2 |  34.6667 |
|         3 |  20.5000 |
+-----------+----------+
3 rows in set (0.02 sec)

2.1.3having

二次スクリーニングでグループ後のデータ

5.部門のグループ化は、各部門が次期最大のセクターの平均を平均年齢を決定しました。

mysql> select depart_id,avg(age) from employee group by depart_id having avg(age)>35;
+-----------+----------+
| depart_id | avg(age) |
+-----------+----------+
|         1 |  50.5000 |
+-----------+----------+
1 row in set (0.00 sec)


mysql> select depart_id,avg(age)as pj from employee group by depart_id having pj>35;
+-----------+---------+
| depart_id | pj      |
+-----------+---------+
|         1 | 50.5000 |
+-----------+---------+
1 row in set (0.00 sec)

2.1.4昇順と降順

フィールド名ASCによって順(昇順)DESC(降順)

上昇及び下降は、同時に年齢DESC、IDのASCとして、使用されてもよい;
を表し:まず年齢降順、年齢が同じ行を有する場合、昇順IDに。

mysql> select * from employee order by age desc,id desc;
+----+--------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
| id | name   | gender | age | hire_date  | post      | post_comment | salary   | office | depart_id |
+----+--------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
|  1 | 小张   | male   |  73 | 2014-07-01 | 研发部    | NULL         |  3500.00 |    401 |         1 |
|  4 | 歪歪   | female |  48 | 2015-03-11 | 销售部    | NULL         |  3000.13 |    402 |         2 |
|  5 | 丫丫   | female |  38 | 2010-11-01 | 销售部    | NULL         |  2000.35 |    402 |         2 |
|  7 | 小明   | male   |  28 | 2016-03-11 | 运营部    | NULL         | 10000.13 |    403 |         3 |
|  2 | 小李   | male   |  28 | 2012-11-01 | 研发部    | NULL         |  2100.00 |    401 |         1 |
|  9 | 小王   | female |  18 | 2013-03-11 | 运营部    | NULL         | 19000.00 |    403 |         3 |
|  8 | 小华   | male   |  18 | 1997-03-12 | 运营部    | NULL         | 20000.00 |    403 |         3 |
|  6 | 丁丁   | female |  18 | 2011-03-12 | 销售部    | NULL         |  1000.37 |    402 |         2 |
|  3 | 小赵   | female |  18 | 2015-04-11 | 研发部    | NULL         | 18000.00 |    403 |         3 |
+----+--------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
9 rows in set (0.00 sec)

出力を制限2.1.5limit

リミットオフセット、サイズ

(インデックス0は最初の行を表す)クエリの長​​さに沿って、行インデックスを起動制限

mysql> select * from employee limit 0,3;
+----+--------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
| id | name   | gender | age | hire_date  | post      | post_comment | salary   | office | depart_id |
+----+--------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
|  1 | 小张   | male   |  73 | 2014-07-01 | 研发部    | NULL         |  3500.00 |    401 |         1 |
|  2 | 小李   | male   |  28 | 2012-11-01 | 研发部    | NULL         |  2100.00 |    401 |         1 |
|  3 | 小赵   | female |  18 | 2015-04-11 | 研发部    | NULL         | 18000.00 |    403 |         3 |
+----+--------+--------+-----+------------+-----------+--------------+----------+--------+-----------+
3 rows in set (0.00 sec)

2.1.6お問合せオーダーを追跡する必要があります(重要)

制限条件を有する条件条件条件によって順序によってテーブルここ条件グループSELECT * FROM。

>で>グループ>は限界によって>次数を有する場合

第三に、マルチテーブル操作

外部キー

主キー(主キー)は、その値が一意テーブル内のレコードを識別するために使用される、1つまたは複数のフィールドのテーブルです。

リレーショナル・データベース内の共通鍵(共通鍵)は、関係が示される同一または互換性のある属性またはグループとの間の接触によって確立されます。2人の関係は、プロパティまたは属性の同じまたは互換性のあるセットを持っている場合は、プロパティまたはプロパティグループは、これら2人の関係者の公開鍵として知られています。

場合は、公開鍵は中関係にある主キー、その後、公開鍵は別の外部キー関係と呼ばれています。したがって、外部キーは、2人の関係の間の関連接続を表します。別のテーブルへの外部キー関係の表は、外部キーテーブルを有する一次鍵マスターテーブルはメインテーブルから呼び出されると呼ばれます。また、外部キーとして知られている外部キー

外部キーを使用する理由:

1.より少ないメモリスペースを取ります

2.本体のみ、テーブル内のデータを変更する必要があり、我々はテーブルから対応する修正されたデータに従います

3.1対多

なお、以下の例では、セクタは複数の従業員を有していてもよく、多くの関係1つのプライマリ対多データテーブル及びデータテーブルを指します。

どのように使用するには:

外部キー制約、外部キー(制約される列)の名前は、テーブル制約(制約フィールド)を参照

mysql> create table department(
    -> id int auto_increment primary key,
    -> name varchar(32) not null default '')
    -> charset utf8;
Query OK, 0 rows affected (0.42 sec)

mysql> insert into department(name) values('研发部'),('运维部'),('前台部'),('小卖部');
Query OK, 4 rows affected (0.06 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> create table userinfo(id int auto_increment primary key,
    -> name varchar(32) not null default '',
    -> depart_id int not null default 1,
    -> constraint fk_user_depart foreign key (depart_id) references department(id))
    -> charset utf8;
Query OK, 0 rows affected (0.39 sec)

mysql> insert into userinfo (name,depart_id) values('xiaozhu',1),('xiaoyu',1),
    -> ('laohe',2),('longge',2),('ludi',3),('xiaoguo',4);
Query OK, 6 rows affected (0.21 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> select * from userinfo;
+----+---------+-----------+
| id | name    | depart_id |
+----+---------+-----------+
|  1 | xiaozhu |         1 |
|  2 | xiaoyu  |         1 |
|  3 | laohe   |         2 |
|  4 | longge  |         2 |
|  5 | ludi    |         3 |
|  6 | xiaoguo |         4 |
+----+---------+-----------+
6 rows in set (0.00 sec)

mysql> select * from department;
+----+-----------+
| id | name      |
+----+-----------+
|  1 | 研发部    |
|  2 | 运维部    |
|  3 | 前台部    |
|  4 | 小卖部    |
+----+-----------+
4 rows in set (0.00 sec)

mysql> insert into userinfo(name,depart_id) values('xiaozhang',5);#depart_id受department.id的约束
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test2`.`userinfo`, CONSTRAINT `fk_user_depart` FOREIGN KEY (`depart_id`) REFERENCES `department` (`id`))

#联表查询
mysql> select userinfo.name as uname,department.name as dname from userinfo left
    -> join department on depart_id = department.id;
+---------+-----------+
| uname   | dname     |
+---------+-----------+
| xiaozhu | 研发部    |
| xiaoyu  | 研发部    |
| laohe   | 运维部    |
| longge  | 运维部    |
| ludi    | 前台部    |
| xiaoguo | 小卖部    |
+---------+-----------+
6 rows in set (0.00 sec)



3.2-多く

プライマリ・テーブルは、対多指す場合、各データテーブル間の関係から複数のテーブルが存在する多間で、図示のように、男の子と女の子、複数日であってもよく、マルチ女の子であってもよいです少年の予定。

mysql> create table boy(id int auto_increment primary key,
    -> bname varchar(32) not null default'')charset utf8;
Query OK, 0 rows affected (0.36 sec)

mysql> insert into boy(bname) values('zhangsan'),('lisi'),('wangwu');
Query OK, 3 rows affected (0.09 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> create table girl(id int auto_increment primary key,
    -> gname varchar(32) not null default'')charset utf8;
Query OK, 0 rows affected (0.33 sec)

mysql> insert into girl(gname) values('xiaoli'),('xiaohua'),('xiaomei');
Query OK, 3 rows affected (0.06 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> create table boy_girl(id int auto_increment primary key,
    -> bid int not null default 1,
    -> gid int not null default 1,
    -> constraint fk_boy_girl_boy foreign key(bid) references boy(id),
    -> constraint fk_boy_girl_girl foreign key(gid) references girl(id)
    -> )charset utf8;
Query OK, 0 rows affected (0.42 sec)

mysql> insert into boy_girl(bid,gid) values(1,1),(2,2),(3,3),(3,1),(2,1),(1,2);
Query OK, 6 rows affected (0.04 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> select * from boy left join boy_girl on boy.id = boy_girl.bid left join girl
    -> on girl.id = boy_girl.gid;
+----+----------+------+------+------+------+---------+
| id | bname    | id   | bid  | gid  | id   | gname   |
+----+----------+------+------+------+------+---------+
|  1 | zhangsan |    1 |    1 |    1 |    1 | xiaoli  |
|  2 | lisi     |    5 |    2 |    1 |    1 | xiaoli  |
|  3 | wangwu   |    4 |    3 |    1 |    1 | xiaoli  |
|  1 | zhangsan |    6 |    1 |    2 |    2 | xiaohua |
|  2 | lisi     |    2 |    2 |    2 |    2 | xiaohua |
|  3 | wangwu   |    3 |    3 |    3 |    3 | xiaomei |
+----+----------+------+------+------+------+---------+
6 rows in set (0.03 sec)

mysql> select bname,gname from boy left join boy_girl on boy.id = boy_girl.bid
    -> left join girl on girl.id = boy_girl.gid;
+----------+---------+
| bname    | gname   |
+----------+---------+
| zhangsan | xiaoli  |
| lisi     | xiaoli  |
| wangwu   | xiaoli  |
| zhangsan | xiaohua |
| lisi     | xiaohua |
| wangwu   | xiaomei |
+----------+---------+
6 rows in set (0.00 sec)
                

3.3マンツーマン

一つは、二つのテーブル内のデータを参照する。この関係を拘束するためのユニークな(フィールド名)を使用して、1人の関係です。機密情報は、従業員の給与に属するため、別のテーブルは、従業員情報と以下の関係は、一の実施形態の一つである時間の賃金を格納します。

mysql> create table priv(
    -> id int auto_increment primary key,
    -> salary int not null default 0,
    -> uid int not null default 1,
    -> constraint fk_priv_user foreign key (uid) references userinfo(id),
    -> unique(uid)) charset=utf8;
Query OK, 0 rows affected (0.52 sec)

mysql> insert into priv(salary,uid) values (10000,1),(12000,2),(15000,3),(8000,4),(9000,5),(9900,6);
Query OK, 6 rows affected (0.16 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> select name,salary from userinfo left join priv on priv.uid = userinfo.id;
+---------+--------+
| name    | salary |
+---------+--------+
| xiaozhu |  10000 |
| xiaoyu  |  12000 |
| laohe   |  15000 |
| longge  |   8000 |
| ludi    |   9000 |
| xiaoguo |   9900 |
+---------+--------+
6 rows in set (0.00 sec)

3.4メートル以上の共同調査

マルチテーブル共同調査が調査に一緒に関連する複数のテーブルで、使用する文は、次のとおりです。

左左主のデータへのクエリに......参加

右のメインデータの右側にクエリに......参加

mysql> insert into department(name) values('业务部');
Query OK, 1 row affected (0.12 sec)

mysql> select userinfo.name as uname,department.name as dname from userinfo left
    -> join department on depart_id = department.id;
+---------+-----------+
| uname   | dname     |
+---------+-----------+
| xiaozhu | 研发部    |
| xiaoyu  | 研发部    |
| laohe   | 运维部    |
| longge  | 运维部    |
| ludi    | 前台部    |
| xiaoguo | 小卖部    |
+---------+-----------+
6 rows in set (0.00 sec)

mysql> select userinfo.name as uname,department.name as dname from userinfo right
    -> join department on depart_id = department.id;
+---------+-----------+
| uname   | dname     |
+---------+-----------+
| xiaozhu | 研发部    |
| xiaoyu  | 研发部    |
| laohe   | 运维部    |
| longge  | 运维部    |
| ludi    | 前台部    |
| xiaoguo | 小卖部    |
| NULL    | 业务部    |
+---------+-----------+
7 rows in set (0.00 sec)

おすすめ

転載: www.cnblogs.com/ghylpb/p/11767326.html