1. 程式人生 > >03: 數據導入導出 、 表記錄基本操作 、 查詢及匹配條件 、 多表查詢

03: 數據導入導出 、 表記錄基本操作 、 查詢及匹配條件 、 多表查詢

ins 3.5 添加 add class 文件名 tween 數值 平均值

day03
一數據導入
二數據導出
三管理表記錄 *
3.1 插入表記錄
3.2 查詢表記錄 (單表 多表 嵌套 連接)
3.3 條件匹配
3.4 更新表記錄字段的值
3.5 刪除表記錄
++++++++++++++++++++++++++++++++
一數據導入 : 把系統文件的內容存儲到數據庫的表裏。
把系統已有的用戶信息存儲到studb.user表
/etc/passwd
用戶名 密碼站位符 uid gid 描述信息 家目錄 shell

create database studb;
create table studb.user(
name char(50),
password char(1),

uid int(2),
gid int(2),
comment varchar(100),
homedir char(150),
shell char(50),
index(name)
);
查看導入數據時,搜索系統的目錄
show variables like "secure_file_priv";
secure_file_priv | /var/lib/mysql-files/

mysql> load data infile "目錄名/文件名" INTO TABLE 庫.表
FIELDS TERMINATED BY "列間隔符號"
LINES TERMINATED BY "行間隔符號";

mysql> system cp /etc/passwd /var/lib/mysql-files/

mysql> load data
INFILE "/var/lib/mysql-files/passwd" INTO TABLE studb.user
FIELDS TERMINATED BY ":"
LINES TERMINATED BY "\n";
mysql>alter table studb.user add id int(2) primary key auto_increment first;

select * from studb.user;

++++++++++++++++++++++++++++++++++
修改導入數據時,搜索文件的目錄 ?
#vim /etc/my.cnf
[mysqld]
secure_file_priv="/mydatadir"
......
:wq
#mkdir /mydatadir
#chown mysql /mydatadir
#setenforce 0
#systemctl start mysqld
#mysql -uroot -p123456
mysql> show variables like "secure_file_priv";
+------------------+-------------+
| Variable_name | Value |
+------------------+-------------+
| secure_file_priv | /mydatadir/ |
+------------------+-------------+

++++++++++++++++++++++++++++++++++
二數據導出: 把表記錄存儲到系統文件裏。
mysql> show variables like "secure_file_priv";
MySQL> sql查詢 INTO OUTFILE "目錄名/文件名";
MySQL> sql查詢 INTO OUTFILE "目錄名/文件名" FIELDS TERMINATED BY "列間隔符號" LINES TERMINATED BY "行間隔符號";

select * from studb.user into outfile "/mydatadir/user1.txt";
system cat /mydatadir/user1.txt

select name,uid from studb.user into outfile "/mydatadir/user2.txt";

select name,uid from studb.user limit 3 ;

select name,uid from studb.user limit 3 into outfile "/mydatadir/user1.txt" fields terminated by "#";

++++++++++++++++++++++++++++++++++
三管理表記錄 * (增 刪 改 查)
3.1 增 插入表記錄
一次插入1條記錄給所有字段賦值
insert into 庫.表 values(值列表);

insert into user values (51,"jim","x",2001,2001,"my student","/home/jim","/bin/bash");

一次插入多條記錄給所有字段賦值
insert into 庫.表 values(值列表),(值列表);

insert into user values (52,"jim","x",2001,2001,"my student","/home/jim","/bin/bash"),(53,"jim","x",2001,2001,"my student","/home/jim","/bin/bash");

一次插入1條記錄給指定字段賦值
insert into 庫.表(字段名列表) values(值列表);
insert into user(name,uid,gid) values("bob",3001,3001);

一次插入多條記錄給指定字段賦值
insert into 庫.表(字段名列表) values(值列表),(值列表);

insert into user(name,uid,gid) values("bob",3001,3001),("bob",3002,3001);

insert into user(name,password,uid,gid,comment,homedir,shell) values("plj","x",10000,10000,"teacher","/home/plj","/bin/bash");

+++++++++++++++++++++++++++++++++++++++++++++++
3.2 查詢表記錄 (單表 多表 嵌套 連接)

單表查詢
select 字段名列表 from 庫.表;

select 字段名列表 from 庫.表 where 匹配條件;

select * from studb.user;

select id,name,homedir from studb.user;

select id,name,homedir from studb.user where id<=10;

select id,name,homedir from studb.user where name="root";

3.3 匹配條件 的 表示方式?
數值比較 = != > >= < <=
where 字段名 符號 數值

select name from user where uid=500;
select name from user where id<=10;

字符比較 = !=
where 字段名 符號 "字符串"
select name from user where shell="/bin/bash";

select name from user where name="daemon";

select name,shell from user where shell != "/bin/bash";

範圍內匹配
where 字段名 between 值1 and 值2; 在...之間
where 字段名 in (值列表); 在....裏
where 字段名 not in (值列表); 不在....裏

select name,uid from user where uid between 10 and 20;

select name from user where name in ("root","lucy","damon");

select name,uid from user where uid in (100,500,1000,2001);

select name from user where shell not in ("/bin/bash","/sbin/nologin");

select name,shell from user where shell not in ("/bin/bash","/sbin/nologin");

邏輯匹配 (多個查詢條件時 使用)
邏輯與 and 條件都成立才可以
邏輯或 or 某一個條件成立就可以
邏輯非 ! 取反

select name from user where uid=10 and shell="/bin/bash" ;

select name,uid,shell from user where uid=0 and shell="/bin/bash" ;

select name from user where name="lucy" or name="bob" or uid=1;

select name,uid from user where name!="lucy";

匹配空 is null
匹配非空 is not null

select id ,name from user where name is null;
select id ,name from user where shell is null;
select id ,name,shell from user where shell is null;
select name ,shell from user where shell is not null;

insert into user(id,name)values(61,""),(62,null),(63,"null");

select id,name from user where name="";
select id,name from user where name is null;
select id,name from user where name="null";

DISTINCT 查詢時,字段的重復值不顯示,只顯示第1次出現的值。

select shell from user;
select distinct shell from user;

select shell from user where uid <=1000;
select distinct shell from user where uid <=1000;

查詢時做運算操作 + - / %
alter table user add s_year year default 2000 after name;
select
from user;

select name , 2018 - s_year as age from user where name="root";

select name,uid,gid from user where name="bin";

select name,uid,gid, uid+gid as sum, (uid+gid)/2 as avg from user where name="bin";

select name,uid,gid, uid+gid as sum, (uid+gid)/2 as avg from user;

模糊查詢 like
where 字段名 like ‘表達式‘;
% 表示零個或多個字符
_ 表示 一個字符

select id, name from user where name like ‘%‘;
select name from user where name like ‘%a%‘;
select name from user where name like ‘_‘;
select name from user where name like ‘
%_‘;
select name from user where name like ‘
%__‘;

正則匹配
. ^ $ [ ] *
where 字段名 regexp ‘正則表達式‘;

insert into user(name) values("yaya9"),("6yaya"),("ya5ya"),("y7aya");

select name from user where name regexp ‘[0-9]‘;
select name from user where name regexp ‘^[0-9]‘;
select name,uid from user where uid regexp ‘....‘;
select name,uid from user where uid regexp ‘^....$‘
select name,uid from user where name regexp ‘a.b‘;
select name,uid from user where name regexp ‘^r.
t$‘;

統計函數(對字段的值做統計)
sum(字段)求和
avg(字段)求平均值
max(字段)求最大值
min(字段) 求最小值
count(字段) 統計個數

select avg(uid) from user where sex="girl";
select avg(uid) ,sum(uid) from user;
select min(uid),max(uid) from user;
select count(id) from user;
select count(name) from user;
select count(name),count(id) from user;
select count(name) from user where uid >1000;

查詢結果分組
sql查詢 group by 字段名;
select shell from user where uid<=100 ;

select shell from user where uid<=100 group by shell;

select distinct shell from user where uid<=100;

查詢結果排序
sql查詢 order by 字段名 asc/desc;

select uid,name from user where uid >=10 and uid<=100;

select uid,name from user where uid >=10 and uid<=100 order by uid;

select uid,name from user where uid >=10 and uid<=100 order by uid desc;

查詢結果限制顯示記錄行數
sql查詢 limit 數字;顯示查詢結果的前幾行;
select id,name,uid,shell from user where id<=10 limit 1;
select id,name,uid,shell from user where id<=10 limit 3;

sql查詢 limit 數字1,數字2;顯示指定範圍內的行
數字1 表示起始行 第1行的編號是 0
數字2 表示總行數

select id,name,uid,shell from user where id<=10;
select id,name,uid,shell from user where id<=10 limit 2,3;
select id,name,uid,shell from user where id<=10 limit 4,5;
select id,name,uid,shell from user where id<=10 limit 1,1;
select id,name,uid,shell from user where id<=10 limit 2;

查詢表記錄的語法格式:
select 字段名列表 from 庫.表 where 匹配條件;

條件匹配:
數值比較 = != > >= < <=
字符比較 = !=
邏輯比較 and or !
範圍內匹配 between...and \ in \ not in
空 is null
非空 is not null
模糊查詢 like ‘表達式‘ % _
正則匹配 regexp ‘正則表達式‘ . ^ $ []
數學計算 + -
/ % ( )
統計函數 sum() avg() max() min() count()
不顯示字段的重復值 distinct 字段名
查詢分組 group by 字段名
查詢排序 order by 字段名 asc/desc
限制顯示查詢記錄的行數 limit 數字;
limit 數字1,數字2; limit 0,1
limit 2,2
++++++++++++++++++++++++++++++++++++++++++++
3.4 更新表記錄字段的值 (條件和查詢時的一樣)
批量修改:
update 庫.表 set 字段名=值,字段名="值";

只修改復合條件記錄字段的值:
update 庫.表 set 字段名=值,字段名="值" where 條件;

update studb.user set s_year=1995 ;
update studb.user set s_year=1990 where name="root";
update studb.user set uid=uid+5 where uid<10;
update studb.user set uid=null where name="bin";
update studb.user set name="" where uid=5;
++++++++++++++++++++++++++++++
3.5 刪除表記錄 (條件和查詢時的一樣)
刪除全部表記錄 delete from 庫.表;

刪除指定的記錄
delete from 庫.表 where 條件;
delete from studb.user where uid is null;
+++++++++++++++++++++++++++++++++++++
where嵌套:把內層查詢結果作為外查詢的查詢條件
select 字段名列表 from 庫.表
where 條件 (select 字段名列表 from 庫.表 where 條件);

alter table user add liunxsys float(5,2) default 60 after name;
update user set liunxsys=90 where uid=11;
update user set liunxsys=13 where uid=20;
update user set liunxsys=29 where uid=32;

select avg(liunxsys) from user where uid>=10 and uid<=50;

select name ,liunxsys from user where uid>=10 and uid<=50 and liunxsys < avg(liunxsys) ;

select name ,liunxsys from user where uid>=10 and uid<=50 and liunxsys < (select avg(liunxsys) from user where uid>=10 and uid<=50);

select name ,liunxsys from user where liunxsys < (select avg(liunxsys) from user);

select name from studb.user where name in (select user from mysql.user where host="localhost" and user="root");

stuinfo: name iphone class
addrinfo: name addr
select name from stuinfo where name in (select name from addrinfo where addr="beijing");
select name from stuinfo where name not in (select name from addrinfo where name="zhsan" and addr="beijing");
++++++++++++++++++++++++++++++++++++++++++++++++
復制表 :
命令格式 create table 庫.表 sql查詢;
功能 1 快速創建新表 2 備份表

create table studb.user2 select * from studb.user;

create table studb.user3 select * from studb.user order by uid desc limit 5;

create database db4;
create table db4.user5 select * from studb.user where 1 = 2;
key值沒有 要自己添加
++++++++++++++++++++++++++++++++++++++++++++++
對象 : 學生 安娜
唯一標識學號
繳費表 110
班級表 110
就業表 110

多表 查詢 -----SQL命令格式
select 字段名列表 from 表名列表; (迪卡爾集)

select 字段名列表 from 表名列表 where 條件;只顯示與條件匹配的記錄。

create database db4;
create table db4.t1 select name,uid,shell from studb.user limit 3;

create table db4.t2 select name,uid,homedir from studb.user limit 5;

select from db4.t1; select from db4.t2;

use db4;
select * from t1,t2; 3x5=15
select t1.name,t1.uid,t2.homedir from t1,t2; 3x5=15

select t1.name,t1.uid,t2.homedir from t1,t2 where t1.name = t2.name;

select t1.*,t2.homedir from t1,t2 where t1.name = t2.name and t1.uid = t2.uid;

連接查詢
左連接查詢
select 字段名列表 from 表A left join 表B on 條件;

右連接查詢
select 字段名列表 from 表A right join 表B on 條件;

create table db4.t3 select name,uid,shell from studb.user limit 3;

create table db4.t4 select name,uid,shell from studb.user limit 5;

select from db4.t3; select from db4.t4;

select * from t3 left join t4 on t3.uid = t4.uid;

select * from t3 right join t4 on t3.uid = t4.uid;

mysql> select t3.shell from t3 left join t4 on t3.uid = t4.uid
-> group by shell;
+++++++++++++++++++++++++++++++++++++++++++
視圖 存儲過程 觸發器

03: 數據導入導出 、 表記錄基本操作 、 查詢及匹配條件 、 多表查詢