|
数据导入 :把系统文件的内容保存到数据库服务器的表里
需求:把/etc/passwd文件的内容保存到userdb库user表里。
create database userdb;
create table userdb.user(
name char(30),
password char(1),
uid int(2),
gid int(2),
comment varchar(100),
homedir varchar(50),
shell varchar(25),
index(name)
);
mysql>show variables like "secure_file_priv";
#cp /etc/passwd /var/lib/mysql-files/
#setenforce 0
导入命令
LOAD DATA INFILE “目录名/文件名”
INTO TABLE 库名.表名
FIELDS TERMINATED BY “分隔符”
LINES TERMINATED BY “\n”;
mysql> load data infile "/var/lib/mysql-files/passwd"
into table userdb.user fields terminated by ":"
lines terminated by "\n";
mysql> alter table userdb.user add > primary key auto_increment first;
数据导出:把表记录存储系统文件里。
sql查询命令 INTO OUTFILE “目录名/文件名”
FIELDS TERMINATED BY “分隔符”
LINES TERMINATED BY “\n”;
mysql>show variables like "secure_file_priv";
mysql>select * from userdb.user where id >= < -> where
-> shell is null;
模糊查询
like '表达式'
_ 任意一个字符
% 零个或多个字符
select name from userdb.user where name like '____';
select name from userdb.user where name like '_____%';
select name from userdb.user where name like 'a%';
select name from userdb.user where name like 'a%d';
select id,name from userdb.user where name like '%';
在查询结果里查询记录 having 条件;
select id,name from userdb.user where name like '%'
having id in (63,64,52,61);
正则匹配
. * [ ] ^ $
regexp '正则表达式'
select name from userdb.user where name regexp
't$';
select name from userdb.user where name regexp
'^a';
insert into userdb.user(id ,name)
values
(65,"plj9"),(66,"pl8j"),(67,"lu2cy"),(68,"3mack");
select name from userdb.user where name regexp '[0
-9]';
select name from userdb.user where name regexp '^
[0-9]';
select name from userdb.user where name regexp '[0
-9]$';
select name,uid from userdb.user where uid regexp
'...';
select name,uid from userdb.user where uid regexp
'^...$';
select name,uid from userdb.user where name regexp
'^....$';
select name,uid from userdb.user where name regexp
'^a.*t$';
四则运算 + - * /
select name,uid,gid,uid+gid as sum from userdb.user
where name in ("adm","bin");
alter table userdb.user add s_year year default 1990
after name;
select name,s_year,2017-s_year as age from userdb.user
where name="root";
alter table userdb.user add shellscript int(2) default
60 after s_year ,add linuxsys int(2) default 80 after
shellscript;
select name,shellscript,linuxsys ,shellscript+linuxsys as
sum , (shellscript+linuxsys)/2 as avg from userdb.user
where name="root";
逻辑匹配
逻辑与 and 多个查询条件时,必须同时成立。
逻辑或 or 多个查询条件时,某个查询条件成立就可以
逻辑非 ! 取反
select name from userdb.user where name="root"
and uid=0 and shell="/bin/bash";
select name from userdb.user where name="root" or
uid=3 or gid="2002";
select name,uid,gid from userdb.user where
name="root" or uid=3 or gid="2002";
select name,uid from userdb.user where
name="root" and uid=0 or uid=1;
select name,uid from userdb.user where
name="root" and ( uid=0 or uid=1);
select name from userdb.user where name!="root";
集聚函数
sum(字段名) 求和
avg(字段名) 求平均值
max(字段名) 求大值
min(字段名) 求小值
count(字段名) 求个数
select count(name) from userdb.user where shell!
="/bin/bash";
select count(id) from userdb.user ;
select min(uid) from userdb.user where
shell="/bin/bash";
select max(uid) from userdb.user where
shell="/bin/bash";
select sum(uid) from userdb.user;
select avg(linuxsys) from userdb.user;
DISTINCT 不显示字段的重复值
select distinct shell from userdb.db;
select distinct shell from userdb.user where uid
select> select * from userdb.user order by uid desc limit 5;
select * from userdb.user where shell="/bin/bash"
order by uid desc limit 5;
++++++++++++++++++++++++++++++++++++
3 更新记录字段的值
update 库.表 set 字段名=值, 字段名="值";
update 库.表 set 字段名=值, 字段名="值" where 条件;
update userdb.user set s_year=1980;
update userdb.user set shellscript=100,linuxsys=100
where id=1;
4 删除记录
delete from 库.表;删除所有记录
delete from 库.表 where 条件 ;
delete from userdb.user where name is null;
++++++++++++++++++++++++++++++++
复制表(功能 : 备份表 、快速建表)
create table 库.表 sql查询;
create table userdb.user2 select * from userdb.user;
create table userdb.user3 select name,uid,homedir
from userdb.user limit 10;
create table userdb.user4 select * from userdb.user
where 1 = 2;
+++++++++++++++++++++++++++++++++
where嵌套查询:把内层的查询结果做为外层查询的查询条件。
sql查询 where 条件 (sql查询);
select name,shellscript from userdb.user where
shellscript < (select avg(shellscript) from userdb.user );
select name,shellscript from userdb.user where
shellscript < (select avg(shellscript) from userdb.user )
having name="lucy";
select user from mysql.user where user in (select name
from userdb.user where shell="/bin/bash");
多表查询
select 字段名列表 from 表名列表; 笛卡尔集
select 字段名列表 from 表名列表 where 条件;
create table userdb.t1 select name,uid,shell from
userdb.user limit 3;
create table userdb.t2 select name,gid,homedir from
userdb.user limit 5;
select * from t2,t1;
select t1.name,t2.name from t2,t1;
select t1.name,t2.* from t2,t1;
select * from t2,t1 where t1.name = t2.name;
select t1.name,t1.uid,t2.gid, t2.name from t2,t1 where
t1.name = t2.name;
连接查询
左连接查询 :查询时以左边的表为主显示查询结果。
select 字段名列表 from 表A left join 表B on 条件;
右连接查询:查询时以右边的表为主显示查询结果
select 字段名列表 from 表A right join 表B on 条件;
create table t3 select name,uid,shell from userdb.user
limit 3;
create table t4 select name,uid,shell from userdb.user
limit 6;
select * from t3 left join t4 on t3.uid = t4.uid;
select t3.* from t3 left join t4 on t3.uid = t4.uid;
select * from t3 right join t4 on t3.uid = t4.uid;
select * from t3 right join t4 on t3.uid = t4.uid;
|
|