1. 程式人生 > >MySQL第三天(管理表記錄)

MySQL第三天(管理表記錄)

4564654

day03
一、管理表記錄?
導入數據:
把系統文件的內容存儲到數據庫服務器的表裏。

把系統用戶信息/etc/passwod存儲到數據庫服務器的db3庫下的user裏。

用戶名 密碼 UID GID 描述信息 家目錄shell

mysql> create table user(
-> name char(50),
-> password char(8),
-> uid tinyint(6),
-> gid tinyint(6),
-> comment char(100),
-> homedir char(100),
-> shell char(30),
-> index(name)

->);
Query OK, 0 rows affected (0.06 sec)

mysql> desc user;
+----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| name | char(50) | YES | MUL | NULL | |
| password | char(8) | YES | | NULL | |

| uid | tinyint(6) | YES | | NULL | |
| gid | tinyint(6) | YES | | NULL | |
| comment | char(100) | YES | | NULL | |
| homedir | char(100) | YES | | NULL | |
| shell | char(30) | YES | | NULL | |
+----------+------------+------+-----+---------+-------+
7 rows in set (0.00 sec)

[root@db1 ~]# cp /etc/passwd /var/lib/mysql-files/ ##復制passwd文件到數據庫默認載體目錄內

mysql> load data infile ##導入文件到數據庫默認目錄
-> "/var/lib/mysql-files/passwd" ##字段分隔為:行分隔為換行(字段分隔符要與文件一致)
-> into table db3.user ##導入的數據要與表字段匹配
-> fields terminated by ":" ##禁止selinux
-> lines terminated by "\n";
Query OK, 44 rows affected, 33 warnings (0.01 sec)
Records: 44 Deleted: 0 Skipped: 0 Warnings: 33

mysql> select * from db3.user;
+---------------------+----------+------+------+-----------------------------------------------------------------+---------------------------+----------------+
| name | password | uid | gid | comment | homedir | shell |
+---------------------+----------+------+------+-----------------------------------------------------------------+---------------------------+----------------+
| root | x | 0 | 0 | root | /root | /bin/bash |
| bin | x | 1 | 1 | bin | /bin | /sbin/nologin |
| daemon | x | 2 | 2 | daemon | /sbin | /sbin/nologin |
| adm | x | 3 | 4 | adm | /var/adm | /sbin/nologin |
| lp | x | 4 | 7 | lp | /var/spool/lpd | /sbin/nologin |
| sync | x | 5 | 0 | sync | /sbin | /bin/sync |
| shutdown | x | 6 | 0 | shutdown | /sbin | /sbin/shutdown |
| halt | x | 7 | 0 | halt | /sbin | /sbin/halt |
| mail | x | 8 | 12 | mail | /var/spool/mail | /sbin/nologin |
| operator | x | 11 | 0 | operator | /root | /sbin/nologin |
| games | x | 12 | 100 | games | /usr/games | /sbin/nologin |
| ftp | x | 14 | 50 | FTP User | /var/ftp | /sbin/nologin |
| nobody | x | 99 | 99 | Nobody | / | /sbin/nologin |

mysql> alter table db3.user add id int(2) primary key auto_increment first; ##插入id字段自增+1
Query OK, 44 rows affected (0.05 sec)
Records: 44 Duplicates: 0 Warnings: 0

mysql> select * from db3.user;
+----+---------------------+----------+------+------+-----------------------------------------------------------------+---------------------------+----------------+
| id | name | password | uid | gid | comment | homedir | shell |
+----+---------------------+----------+------+------+-----------------------------------------------------------------+---------------------------+----------------+
| 1 | root | x | 0 | 0 | root | /root | /bin/bash |
| 2 | bin | x | 1 | 1 | bin | /bin | /sbin/nologin |
| 3 | daemon | x | 2 | 2 | daemon | /sbin | /sbin/nologin |
| 4 | adm | x | 3 | 4 | adm | /var/adm | /sbin/nologin |
| 5 | lp | x | 4 | 7 | lp | /var/spool/lpd | /sbin/nologin |
| 6 | sync | x | 5 | 0 | sync | /sbin | /bin/sync |
| 7 | shutdown | x | 6 | 0 | shutdown | /sbin | /sbin/shutdown |
| 8 | halt | x | 7 | 0 | halt | /sbin | /sbin/halt |
| 9 | mail | x | 8 | 12 | mail | /var/spool/mail | /sbin/nologin |
| 10 | operator | x | 11 | 0 | operator | /root | /sbin/nologin |
| 11 | games | x | 12 | 100 | games | /usr/games | /sbin/nologin |
| 12 | ftp | x | 14 | 50 | FTP User | /var/ftp | /sbin/nologin |
| 13 | nobody | x | 99 | 99 | Nobody | / | /sbin/nologin |

修改數據庫默認載體目錄
mysql> show variables like "secure_file_priv"; ##查看數據庫默認目錄
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.01 sec)

mysql> quit
bye

[root@db1 ~]# vim /etc/my.cnf
[root@db1 ~]# mkdir /mydata
[root@db1 ~]# ls -ld /mydata/
drwxr-xr-x. 2 root root 6 2月 23 22:51 /mydata/
[root@db1 ~]# chown mysql /mydata
[root@db1 ~]# setenforce 0
[root@db1 ~]# getenforce
Permissive
[root@db1 ~]# systemctl restart mysqld

mysql> show variables like "secure_file_priv";
+------------------+----------+
| Variable_name | Value |
+------------------+----------+
| secure_file_priv | /mydata/ |
+------------------+----------+
1 row in set (0.01 sec)

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
導出數據:把表記錄存儲到系統文件裏。

命令格式:
sql查詢 into outfile "目錄名/文件名" fields terminated by "符號" lines terminated by "符號"; ##目錄為"secure_file_priv"指定的目錄,文件自動生成,行分隔默認為"\n"

mysql> select * from db3.user into outfile "/mydata/a.txt" fields terminated by ":";
Query OK, 44 rows affected (0.02 sec)

mysql> quit
Bye

mysql> select * from db3.user into outfile "/mydata/b.txt"; ##字段分隔默認為tab
Query OK, 44 rows affected (0.00 sec)

mysql> quit
Bye

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
表記錄的增、刪、改、查
插入數據(增)
一次插入1條記錄給所有字段賦值
一次插入1條記錄給指定字段賦值

insert into 庫.表 values(字段值列表);
insert into 庫.表(字段名列表) values(字段值列表),(字段值列表),(字段值列表);

mysql> insert into db3.user values(45,"jack","x",30,30,"this is student","/home/jack","/bin/bash"); ##一次插入1條記錄給所有字段賦值
Query OK, 1 row affected (0.00 sec)

mysql> insert into db3.user(name,uid,gid) values("tom",31,31); ##一次插入1條記錄給指定字段賦值
Query OK, 1 row affected (0.00 sec)

查詢記錄:
select 字段名列表 from 庫.表 [where 條件];
select * from db3.user;
select name,uid from db3.user; ##查詢 name,uid字段
mysql> select name,uid from db3.user where id<=3; ##條件查詢
+--------+------+
| name | uid |
+--------+------+
| root | 0 |
| bin | 1 |
| daemon | 2 |
+--------+------+
3 rows in set (0.00 sec)

查詢/刪除/更新數據時的匹配條件?
1)數值比較 > >= < <= = !=
字段 符號 數字
mysql> select name from db3.user where uid=500;
Empty set (0.00 sec)

mysql> select * from db3.user where uid<=500;

2)字符比較 = !=
字段 符號 "字符"

mysql> select name from db3.user where name="root";
+------+
| name |
+------+
| root |
+------+
1 row in set (0.00 sec)

mysql> select name from db3.user where shell!="/bin/bash";

3)範圍內匹配
between 數字1 and 數字2 ##在...之間

mysql> select * from db3.user where uid between 10 and 20;
+----+----------+----------+------+------+----------+------------+---------------+
| id | name | password | uid | gid | comment | homedir | shell |
+----+----------+----------+------+------+----------+------------+---------------+
| 10 | operator | x | 11 | 0 | operator | /root | /sbin/nologin |
| 11 | games | x | 12 | 100 | games | /usr/games | /sbin/nologin |
| 12 | ftp | x | 14 | 50 | FTP User | /var/ftp | /sbin/nologin |
+----+----------+----------+------+------+----------+------------+---------------+
3 rows in set (0.00 sec)

4)in (值列表) ##在..裏面
not in (值列表) ##不在...裏面

mysql> select * from db3.user where name in("root","bin","adm");
+----+------+----------+------+------+---------+----------+---------------+
| id | name | password | uid | gid | comment | homedir | shell |
+----+------+----------+------+------+---------+----------+---------------+
| 4 | adm | x | 3 | 4 | adm | /var/adm | /sbin/nologin |
| 2 | bin | x | 1 | 1 | bin | /bin | /sbin/nologin |
| 1 | root | x | 0 | 0 | root | /root | /bin/bash |
+----+------+----------+------+------+---------+----------+---------------+
3 rows in set (0.00 sec)

mysql> select name,uid from db3.user where uid in(500,100,20); ##查詢name,uid列的記錄,條件是字段uid是500或者100或者20的
Empty set (0.01 sec)

mysql> select name,uid from db3.user where uid not in (20,50,80); ##查詢name,uid列的記錄,條件是字段uid不是20或者50或者80的

5)邏輯比較 (有多個判斷條件)
邏輯與and 多個條件必須同時成立
邏輯或 or 多個條件某一個成立即可
邏輯非 not
mysql> select * from db3.user where name="jin" or uid=100 or shell="/bin/bash";
+----+-------+----------+------+------+-----------------+-------------+-----------+
| id | name | password | uid | gid | comment | homedir | shell |
+----+-------+----------+------+------+-----------------+-------------+-----------+
| 1 | root | x | 0 | 0 | root | /root | /bin/bash |
| 43 | usetr | x | 127 | 127 | usetr | /home/usetr | /bin/bash |
| 45 | jack | x | 30 | 30 | this is student | /home/jack | /bin/bash |
+----+-------+----------+------+------+-----------------+-------------+-----------+
3 rows in set (0.00 sec)

mysql> select * from db3.user where name="root" and uid=0;
+----+------+----------+------+------+---------+---------+-----------+
| id | name | password | uid | gid | comment | homedir | shell |
+----+------+----------+------+------+---------+---------+-----------+
| 1 | root | x | 0 | 0 | root | /root | /bin/bash |
+----+------+----------+------+------+---------+---------+-----------+
1 row in set (0.00 sec)

6)匹配空 is null
匹配非空 is not null

mysql> select * from db3.user where shell is null;
+----+------+----------+------+------+---------+---------+-------+
| id | name | password | uid | gid | comment | homedir | shell |
+----+------+----------+------+------+---------+---------+-------+
| 46 | tom | NULL | 31 | 31 | NULL | NULL | NULL |
+----+------+----------+------+------+---------+---------+-------+
1 row in set (0.00 sec)

mysql> select name,uid from db3.user where uid is not null;

7)不顯示查詢結果的重復值

mysql> select distinct shell from db3.user;
+----------------+
| shell |
+----------------+
| /bin/bash |
| /sbin/nologin |
| /bin/sync |
| /sbin/shutdown |
| /sbin/halt |
| /bin/false |
| NULL |
+----------------+
7 rows in set (0.00 sec)

8)查詢時做四則運算(+ - * /)

mysql> alter table db3.user add age tinyint(2) default 21; ##添加新字段age 默認值為21
Query OK, 46 rows affected (0.05 sec)
Records: 46 Duplicates: 0 Warnings: 0

mysql> select name,age from db3.user; ##查看name,age的記錄
+---------------------+------+
| name | age |
+---------------------+------+
| root | 21 |
| bin | 21 |
| daemon | 21 |
| adm | 21 |
| lp | 21 |
| sync | 21 |
| shutdown | 21 |
| halt | 21 |
| mail | 21 |
| operator | 21 |
| games | 21 |
| ftp | 21 |
| nobody | 21 |
| avahi-autoipd | 21 |
| systemd-bus-proxy | 21 |
| systemd-network | 21 |

mysql> select name,age,2018-age as syear from db3.user where name="root"; 查看name,age,2018-age(字段名為syear)的記錄,條件為字段name為root
+------+------+-------+
| name | age | syear |
+------+------+-------+
| root | 21 | 1997 |
+------+------+-------+
1 row in set (0.00 sec)

mysql> select name,uid,gid,(uid+gid)/2 as pjz from db3.user where name="sync";
+------+------+------+--------+
| name | uid | gid | pjz |
+------+------+------+--------+
| sync | 5 | 0 | 2.5000 |
+------+------+------+--------+
1 row in set (0.00 sec)

mysql> select name,uid,gid from db3.user where uid=gid;
+---------------------+------+------+
| name | uid | gid |
+---------------------+------+------+
| root | 0 | 0 |
| bin | 1 | 1 |
| daemon | 2 | 2 |
| nobody | 99 | 99 |
| avahi-autoipd | 127 | 127 |
| systemd-bus-proxy | 127 | 127 |
| systemd-network | 127 | 127 |
| dbus | 81 | 81 |
| polkitd | 127 | 127 |

9)使用聚集函數(內置的,對數據做統計的命令)
count(字段名) 統計個數 (null值不做統計)
sum(字段名) 求和
avg(字段名) 計算平均數
max(字段名) 求最大值
min(字段名) 求最小值

mysql> select min(uid) from db3.user where uid>100; ##查看最小uid,條件為uid大於100
+----------+
| min(uid) |
+----------+
| 107 |
+----------+
1 row in set (0.00 sec)

mysql> select count(name) from db3.user where shell="/bin/bash"; ##查看name的個數,條件為shell字段為"/bin/bash"
+-------------+
| count(name) |
+-------------+
| 3 |
+-------------+
1 row in set (0.00 sec)

mysql> select count(name),count(id) from db3.user; ##查看name字段值的個數,id字段值的個數
+-------------+-----------+
| count(name) | count(id) |
+-------------+-----------+
| 46 | 46 |
+-------------+-----------+
1 row in set (0.00 sec)

mysql> insert into db3.user(name) values(null); ##插入name字段的值,值為空
Query OK, 1 row affected (0.00 sec)

mysql> select count(name),count(id) from db3.user; ##查看name,id字段值的個數,id多一個,因為自增,name為空沒有增加個數
+-------------+-----------+
| count(name) | count(id) |
+-------------+-----------+
| 46 | 47 |
+-------------+-----------+
1 row in set (0.00 sec)

mysql> select count(name) from db3.user where name is null; ##查看name字段值的個數,條件為name為空,個數為0,因為值為空什麽都沒有,不統計。
+-------------+
| count(name) |
+-------------+
| 0 |
+-------------+
1 row in set (0.00 sec)

mysql> select count(id) from db3.user where name is null; ##查看id字段值的個數,條件為name字段值為空。(名字為空的id個數)
+-----------+
| count(id) |
+-----------+
| 1 |
+-----------+
1 row in set (0.00 sec)

模糊匹配 like ‘表達式‘;
% 匹配零個或多個字符
_ 匹配任意一個字符

mysql> select name from db3.user where name like ‘___‘; ##查看name字段值位數為3個的記錄
+------+
| name |
+------+
| adm |
| bin |
| ftp |
| gdm |
| ntp |
| rpc |
| tom |
| tss |
+------+
8 rows in set (0.00 sec)

mysql> select name from db3.user where name like ‘%‘; ##查看name字段值位數為2個以上的記錄
+---------------------+
| name |
+---------------------+
| abrt |
| adm |
| avahi |
| avahi-autoipd |
| bin |

mysql> select name from db3.user where name like ‘a%‘; ##查看name字段值含有a的記錄
+---------------+
| name |
+---------------+
| abrt |
| adm |
| avahi |
| avahi-autoipd |
+---------------+
4 rows in set (0.00 sec)

正則匹配

mysql> insert into db3.user(name)values("8yaya"),("ya6ya"),("yaya4"),("YayA"),("TOM");
Query OK, 5 rows affected (0.00 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> select name from db3.user where name regexp ‘[0-9]‘;
+-------+
| name |
+-------+
| 8yaya |
| ya6ya |
| yaya4 |
+-------+
3 rows in set (0.00 sec)

mysql> select name,uid from db3.user where uid regexp ‘..‘; ##查看na
+---------------------+------+
| name | uid |
+---------------------+------+
| operator | 11 |
| games | 12 |
| ftp | 14 |
| nobody | 99 |
| avahi-autoipd | 127 |
| systemd-bus-proxy | 127 |

mysql> select name,uid from db3.user where uid regexp ‘^..$‘; ##查看name為2個字符的記錄
+----------+------+
| name | uid |
+----------+------+
| operator | 11 |
| games | 12 |
| ftp | 14 |
| nobody | 99 |

查詢分組(過濾掉相同的)
sql查詢 group by 字段名;

mysql> select shell from db3.user where uid between 10 and 20 group by shell;
+---------------+
| shell |
+---------------+
| /sbin/nologin |
+---------------+
1 row in set (0.00 sec)

比較

mysql> select shell from db3.user where uid between 10 and 20;
+---------------+
| shell |
+---------------+
| /sbin/nologin |
| /sbin/nologin |
| /sbin/nologin |
+---------------+
3 rows in set (0.00 sec)

查詢排序 order by
asc|desc
sql查詢 order by 字段名 升序|降序 ##默認為升序

mysql> select id,name,uid,gid from db3.user where uid between 10 and 80 order by uid desc;
+----+----------+------+------+
| id | name | uid | gid |
+----+----------+------+------+
| 31 | radvd | 75 | 75 |
| 41 | sshd | 74 | 74 |
| 42 | tcpdump | 72 | 72 |
| 38 | avahi | 70 | 70 |
| 20 | tss | 59 | 59 |
| 36 | gdm | 42 | 42 |
| 40 | ntp | 38 | 38 |
| 28 | rpc | 32 | 32 |
| 46 | tom | 31 | 31 |
| 45 | jack | 30 | 30 |
| 33 | rpcuser | 29 | 29 |
| 44 | mysql | 27 | 27 |
| 12 | ftp | 14 | 50 |
| 11 | games | 12 | 100 |
| 10 | operator | 11 | 0 |
+----+----------+------+------+
15 rows in set (0.00 sec)

mysql> select id,name,uid,gid from db3.user where uid between 10 and 80 order by uid asc;
+----+----------+------+------+
| id | name | uid | gid |
+----+----------+------+------+
| 10 | operator | 11 | 0 |
| 11 | games | 12 | 100 |
| 12 | ftp | 14 | 50 |
| 44 | mysql | 27 | 27 |
| 33 | rpcuser | 29 | 29 |
| 45 | jack | 30 | 30 |
| 46 | tom | 31 | 31 |
| 28 | rpc | 32 | 32 |
| 40 | ntp | 38 | 38 |
| 36 | gdm | 42 | 42 |
| 20 | tss | 59 | 59 |
| 38 | avahi | 70 | 70 |
| 42 | tcpdump | 72 | 72 |
| 41 | sshd | 74 | 74 |
| 31 | radvd | 75 | 75 |
+----+----------+------+------+
15 rows in set (0.00 sec)

mysql> select id,name,uid,gid from db3.user where uid between 10 and 80 order by uid;
+----+----------+------+------+
| id | name | uid | gid |
+----+----------+------+------+
| 10 | operator | 11 | 0 |
| 11 | games | 12 | 100 |
| 12 | ftp | 14 | 50 |
| 44 | mysql | 27 | 27 |
| 33 | rpcuser | 29 | 29 |
| 45 | jack | 30 | 30 |
| 46 | tom | 31 | 31 |
| 28 | rpc | 32 | 32 |
| 40 | ntp | 38 | 38 |
| 36 | gdm | 42 | 42 |
| 20 | tss | 59 | 59 |
| 38 | avahi | 70 | 70 |
| 42 | tcpdump | 72 | 72 |
| 41 | sshd | 74 | 74 |
| 31 | radvd | 75 | 75 |
+----+----------+------+------+
15 rows in set (0.00 sec)

限制顯示查詢記錄行數
sql查詢 limit 數字; #顯示查詢結果的前幾行

sql查詢 limit 數字1,數字2; ##限制顯示行的範圍,數字2限制顯示的行數,第一行的編號為0
mysql> select * from db3.user limit 2,4;
+----+--------+----------+------+------+---------+----------------+---------------+------+
| id | name | password | uid | gid | comment | homedir | shell | age |
+----+--------+----------+------+------+---------+----------------+---------------+------+
| 3 | daemon | x | 2 | 2 | daemon | /sbin | /sbin/nologin | 21 |
| 4 | adm | x | 3 | 4 | adm | /var/adm | /sbin/nologin | 21 |
| 5 | lp | x | 4 | 7 | lp | /var/spool/lpd | /sbin/nologin | 21 |
| 6 | sync | x | 5 | 0 | sync | /sbin | /bin/sync | 21 |
+----+--------+----------+------+------+---------+----------------+---------------+------+
4 rows in set (0.00 sec)

mysql> select * from db3.user order by uid desc limit 3; ##查詢uid最大三個所有記錄
+----+-------------------+----------+------+------+----------------------------+------------------------+---------------+------+
| id | name | password | uid | gid | comment | homedir | shell | age |
+----+-------------------+----------+------+------+----------------------------+------------------------+---------------+------+
| 14 | avahi-autoipd | x | 127 | 127 | Avahi IPv4LL Stack | /var/lib/avahi-autoipd | /sbin/nologin | 21 |
| 15 | systemd-bus-proxy | x | 127 | 127 | systemd Bus Proxy | / | /sbin/nologin | 21 |
| 16 | systemd-network | x | 127 | 127 | systemd Network Management | / | /sbin/nologin | 21 |
+----+-------------------+----------+------+------+----------------------------+------------------------+---------------+------+
3 rows in set (0.00 sec)

查詢/刪除/更新數據時都可以
條件修改
update 庫.表 set 字段=值,字段="值" where 條件;

批量修改
update 庫.表 set 字段=值,字段="值";

mysql> update db3.user set age=18;
Query OK, 52 rows affected (0.00 sec)
Rows matched: 52 Changed: 52 Warnings: 0

mysql> update db3.user set name=null where name="root";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update db3.user set uid=uid+1 where uid<=10;
Query OK, 9 rows affected (0.00 sec)
Rows matched: 9 Changed: 9 Warnings: 0

刪除指定記錄

delete from 庫.表 where 條件;

mysql> delete from db3.user where name is null;
Query OK, 2 rows affected (0.00 sec)

刪除所有表記錄
delete from 庫.表;

復制表
create table 庫.表 sql查詢;

mysql> create table db3.user2 select * from db3.user; ##備份表user表給user2, 不能備份key
Query OK, 50 rows affected (0.09 sec)
Records: 50 Duplicates: 0 Warnings: 0

mysql> desc user2;
+----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| id | int(2) | NO | | 0 | |
| name | char(50) | YES | | NULL | |
| password | char(8) | YES | | NULL | |
| uid | tinyint(6) | YES | | NULL | |
| gid | tinyint(6) | YES | | NULL | |
| comment | char(100) | YES | | NULL | |
| homedir | char(100) | YES | | NULL | |
| shell | char(30) | YES | | NULL | |
| age | tinyint(2) | YES | | 21 | |
+----------+------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

mysql> create table db3.user3 select * from db3.user where 1=2; ##快速建表結構
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0

mysql> select * from user3; ##表內沒有記錄
Empty set (0.00 sec)

mysql> desc user3;
+----------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| id | int(2) | NO | | 0 | |
| name | char(50) | YES | | NULL | |
| password | char(8) | YES | | NULL | |
| uid | tinyint(6) | YES | | NULL | |
| gid | tinyint(6) | YES | | NULL | |
| comment | char(100) | YES | | NULL | |
| homedir | char(100) | YES | | NULL | |
| shell | char(30) | YES | | NULL | |
| age | tinyint(2) | YES | | 21 | |
+----------+------------+------+-----+---------+-------+
9 rows in set (0.00 sec)

單表查詢
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

where嵌套查詢
select 字段名 from 庫.表 where 條件 (select 字段名 from 庫.表 where 條件);
外面的查詢在內的結果查詢

查找UID的字段值大於uid平均值的name和uid
mysql> select name,uid from db3.user where uid > (select avg(uid) from db3.user);
+---------------------+------+
| name | uid |
+---------------------+------+
| nobody | 99 |
| avahi-autoipd | 127 |
| systemd-bus-proxy | 127 |
| systemd-network | 127 |
| dbus | 81 |
| polkitd | 127 |
| unbound | 127 |
| colord | 127 |
| usbmuxd | 113 |
| geoclue | 127 |
| saslauth | 127 |
| libstoragemgmt | 127 |
| abrt | 127 |
| setroubleshoot | 127 |
| rtkit | 127 |
| chrony | 127 |
| radvd | 75 |
| qemu | 107 |
| nfsnobody | 127 |
| pulse | 127 |
| gnome-initial-setup | 127 |
| postfix | 89 |
| sshd | 74 |
| usetr | 127 |
+---------------------+------+
24 rows in set (0.00 sec)

mysql> select avg(uid) from db3.user;
+----------+
| avg(uid) |
+----------+
| 73.5111 |
+----------+

查找uid最小值的name
mysql> select name from db3.user where uid = (select min(uid) from db3.user);
+------+
| name |
+------+
| bin |
+------+
1 row in set (0.00 sec)

mysql> select name,uid from db3.user where uid = (select min(uid) from db3.user);
+------+------+
| name | uid |
+------+------+
| bin | 2 |
+------+------+
1 row in set (0.00 sec)

借用另一個表裏面查詢本表
mysql> select name from db3.user where name in (select user from mysql.user where host="localhost");
Empty set (0.00 sec)

+++++++++++++++++++++++++++++++++++++++++++++++++++
多表查詢(將兩個以上的表,按某個條件連接起來,取所要的數據)
select 字段名列表 from 表名列表;笛卡爾集合(查詢)
select 字段名列表 from 表名列表 where 條件;

mysql> create database db4;
Query OK, 1 row affected (0.00 sec)

mysql> create table db4.t1 select name,uid,homedir from db3.user limit 3;
Query OK, 3 rows affected (0.03 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from db4.t1;
+--------+------+----------+
| name | uid | homedir |
+--------+------+----------+
| bin | 2 | /bin |
| daemon | 3 | /sbin |
| adm | 4 | /var/adm |
+--------+------+----------+
3 rows in set (0.00 sec)

mysql> create table db4.t2 select name,uid,homedir from db3.user limit 5;
Query OK, 5 rows affected (0.03 sec)
Records: 5 Duplicates: 0 Warnings: 0

mysql> select * from db4.t2;
+--------+------+----------------+
| name | uid | homedir |
+--------+------+----------------+
| bin | 2 | /bin |
| daemon | 3 | /sbin |
| adm | 4 | /var/adm |
| lp | 5 | /var/spool/lpd |
| sync | 6 | /sbin |
+--------+------+----------------+
5 rows in set (0.00 sec)

不加條件
mysql> select from t1,t2; ##迪卡爾(表少的行數表多的行數)
+--------+------+----------+--------+------+----------------+
| name | uid | homedir | name | uid | homedir |
+--------+------+----------+--------+------+----------------+
| bin | 2 | /bin | bin | 2 | /bin |
| daemon | 3 | /sbin | bin | 2 | /bin |
| adm | 4 | /var/adm | bin | 2 | /bin |
| bin | 2 | /bin | daemon | 3 | /sbin |
| daemon | 3 | /sbin | daemon | 3 | /sbin |
| adm | 4 | /var/adm | daemon | 3 | /sbin |
| bin | 2 | /bin | adm | 4 | /var/adm |
| daemon | 3 | /sbin | adm | 4 | /var/adm |
| adm | 4 | /var/adm | adm | 4 | /var/adm |
| bin | 2 | /bin | lp | 5 | /var/spool/lpd |
| daemon | 3 | /sbin | lp | 5 | /var/spool/lpd |
| adm | 4 | /var/adm | lp | 5 | /var/spool/lpd |
| bin | 2 | /bin | sync | 6 | /sbin |
| daemon | 3 | /sbin | sync | 6 | /sbin |
| adm | 4 | /var/adm | sync | 6 | /sbin |
+--------+------+----------+--------+------+----------------+
15 rows in set (0.00 sec)

加條件
mysql> select t1.name,t2.name,t1.homedir from t1,t2 where t1.name = t2.name;
+--------+--------+----------+
| name | name | homedir |
+--------+--------+----------+
| bin | bin | /bin |
| daemon | daemon | /sbin |
| adm | adm | /var/adm |
+--------+--------+----------+
3 rows in set (0.00 sec)

mysql> select t1.name,t2.name,t1.homedir from t1,t2 where t1.uid = t2.uid;
+--------+--------+----------+
| name | name | homedir |
+--------+--------+----------+
| bin | bin | /bin |
| daemon | daemon | /sbin |
| adm | adm | /var/adm |
+--------+--------+----------+
3 rows in set (0.00 sec)

+++++++++++++++++++++++++++++++++++++++

連接查詢
select 字段名列表 from 表1 left join 表2 on 條件;
select 字段名列表 from 表1 right join 表2 on 條件;

mysql> create table db4.t3 select name,uid,homedir from db3.user limit 4;
Query OK, 4 rows affected (0.02 sec)
Records: 4 Duplicates: 0 Warnings: 0

mysql> create table db4.t4 select name,uid,homedir from db3.user limit 6;
Query OK, 6 rows affected (0.04 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql> select * from db4.t3;
+--------+------+----------------+
| name | uid | homedir |
+--------+------+----------------+
| bin | 2 | /bin |
| daemon | 3 | /sbin |
| adm | 4 | /var/adm |
| lp | 5 | /var/spool/lpd |
+--------+------+----------------+
4 rows in set (0.00 sec)

mysql> select * from db4.t4;
+----------+------+----------------+
| name | uid | homedir |
+----------+------+----------------+
| bin | 2 | /bin |
| daemon | 3 | /sbin |
| adm | 4 | /var/adm |
| lp | 5 | /var/spool/lpd |
| sync | 6 | /sbin |
| shutdown | 7 | /sbin |
+----------+------+----------------+
6 rows in set (0.00 sec)

左連接
mysql> select * from t3 left join t4 on t3.uid = t4.uid; ##以左表為主顯示所有記錄,條件顯示相同的記錄
+--------+------+----------------+--------+------+----------------+
| name | uid | homedir | name | uid | homedir |
+--------+------+----------------+--------+------+----------------+
| bin | 2 | /bin | bin | 2 | /bin |
| daemon | 3 | /sbin | daemon | 3 | /sbin |
| adm | 4 | /var/adm | adm | 4 | /var/adm |
| lp | 5 | /var/spool/lpd | lp | 5 | /var/spool/lpd |
+--------+------+----------------+--------+------+----------------+
4 rows in set (0.00 sec)

右連接
mysql> select * from t3 right join t4 on t3.uid = t4.uid; ##以右表為主顯示所有記錄,條件顯示相同的記錄,不相同的用null顯示
+--------+------+----------------+----------+------+----------------+
| name | uid | homedir | name | uid | homedir |
+--------+------+----------------+----------+------+----------------+
| bin | 2 | /bin | bin | 2 | /bin |
| daemon | 3 | /sbin | daemon | 3 | /sbin |
| adm | 4 | /var/adm | adm | 4 | /var/adm |
| lp | 5 | /var/spool/lpd | lp | 5 | /var/spool/lpd |
| NULL | NULL | NULL | sync | 6 | /sbin |
| NULL | NULL | NULL | shutdown | 7 | /sbin |
+--------+------+----------------+----------+------+----------------+
6 rows in set (0.00 sec)

mysql> select t3.name,t4.name from t3 right join t4 on t3.uid = t4.uid; ##以右表為主顯示name記錄,條件顯示相同的記錄,不相同的用null顯示
+--------+----------+
| name | name |
+--------+----------+
| bin | bin |
| daemon | daemon |
| adm | adm |
| lp | lp |
| NULL | sync |
| NULL | shutdown |
+--------+----------+
6 rows in set (0.00 sec)

商品 衣服
庫存信息表

銷售信息表

對象 學生

繳費信息表
班級表
就業表

擴展知識?

+++++++++++++++++++++++++++++++++++++++++++++++++++

MySQL第三天(管理表記錄)