码迷,mamicode.com
首页 > 数据库 > 详细

MySQL第三天(管理表记录)

时间:2018-03-01 21:52:07      阅读:192      评论:0      收藏:0      [点我收藏+]

标签: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第三天(管理表记录)

标签:4564654

原文地址:http://blog.51cto.com/13587169/2074436

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!