複制表:
作用: 1: 快速建立新表
2: 備份表
格式:create table 庫.表 sql查詢指令;
源表的索引屬性不會複制給新表
mysql>create database userdb;
mysql> create table userdb.user2 select * from userdb.user; //所有表結構和資料
mysql> create database teadb;
mysql> create table teadb.user select name,uid from userdb.user where shell="/bin/bash"; //部分表結構和資料
快速複制表結構
mysql> create table teadb.user2 select *from userdb.user where 1=2;
1=2 #條件不成立,所有查詢結果為空表。
單表查詢
查詢表中所有記錄所有字段的值
格式:select * from 庫.表 ;
查詢表中所有記錄指定字段的值
格式:select 字段名清單 from 庫.表 ;
查詢表中符合條件記錄指定字段的值
格式:select 字段名清單 from 庫.表 where 條件;
查詢條件的表示方式
數值比較 > >= < <= = !=
mysql> select * from userdb.user where id=23;
mysql> select * from userdb.user where uid>500;
字元比較 = !=
字段名 符号 “字元串”
mysql> select name from userdb.user where name="apache";
mysql>select name from userdb.user where name="apache";
mysql>select name from userdb.user where shell="/bin/bash";
mysql>select name,shell,uid from userdb.user where shell="/bin/bash";
mysql>select name from userdb.user where name!="root";
範圍内查找
in (值清單) 在...裡
not in (值清單) 不在...裡 (數值 、字元)
between..數字1..and...數字2 在...之間
mysql> select name,homedir,uid from userdb.user where uid between 20 and 30;
mysql> select name,homedir,uid from userdb.user where uid in (12,9,500,513);
mysql> select name,shell from userdb.user where shell not in ("/bin/bash","/sbin/nologin");
邏輯比對:多個查詢條件
邏輯與 and 多個查詢條件必須同時成立
邏輯或 or 多個查詢條件某一個條件成立就可以
邏輯非 ! 取反
mysql>select name from userdb.user where name="apache" and uid=1200 and shell="/bin/bash";
mysql>select name from userdb.user where name="apache" or uid=2 or shell="/bin/bash";
mysql>select name,uid,shell from userdb.user where name="apache" or uid=2 or shell="/bin/bash";
mysql>select name,uid from userdb.user where (name="root" or name="bin" and uid=1;
mysql>select name,uid from userdb.user where (name="root" and name="bin" or uid=1;
mysql>select name,uid from userdb.user where (name="root" or name="bin" ) and uid=2;
mysql>select name,uid from userdb.user where (name="root" or name="bin" ) and uid=1;
distinct 不顯示字段的重複的值(去掉字段的重複的值)單獨使用
mysql>select distinct shell from userdb.user;
mysql>select distinct shell from userdb.user where uid<1000;
is null 比對空
is not null 比對非空
mysql>insert into userdb.user(id ,name)values(66,NULL),(67,null),(68,"null"),(69,"");
mysql>select id , name from userdb.user where name is null;
mysql>select id , name from userdb.user where name is not null;
mysql>select id , name from userdb.user where name="null";
mysql>select id , name from userdb.user where name="";
正則比對
regexp '正規表達式'
^ $ . * []
Where 字段名 regrexp ‘正規表達式’;
mysql>insert into userdb.user(id , name)values(71,"yaya3"),(72,"9yaya"),(73,"ya7ya"),(74,"yay6a");
mysql>select name from userdb.user where name regexp '[0-9]';
mysql>select name from userdb.user where name regexp '^[0-9]';
mysql>select name from userdb.user where name regexp '[0-9]$';
mysql>select name from userdb.user where name regexp '.....';
mysql>select name from userdb.user where name regexp '^.....$';
四則運算 + - * / %
mysql> alter table userdb.user add age tinyint(2) unsigned zerofill default 21 after name;
mysql> select name,age,2017-age from userdb.user where name="root";
mysql> select name,age,2017-age as s_tear from userdb.user;
as :命名
例題:減法運算
mysql>select name,linuxsys,linuxser from userdb.user;
mysql>select name,linuxsys,linuxser from userdb.user where name="root";
mysql>select name,linuxsys,linuxser,linuxsys+linuxser as zcjfrom userdb.user where name="root";
mysql>select name,linuxsys,linuxser,linuxsys+linuxser as zcj,(linuxsys+linuxser)/2 as pjf from userdb.user where name="root";
mysql>select name,age from userdb.user where name="root";
mysql>select name,age,2017-age as s_year from userdb.user where name="root";
模糊比對
字段 like ‘表達式’
% 零個或多個字元
_ 任意單個字元
mysql> select name from userdb.user where name like 'a%';
mysql> select name from userdb.user where name like '____';
mysql> select name from userdb.user where name like '_%_';
#在sql查詢結果裡查找資料
mysql> select name from userdb.user where name like 'a%' having id=50;
# 名字至少是兩個字元
mysql> select name from userdb.user where name like 'a%t';
# a 開頭t結尾的内容,中間是任意字元。
select name,uid from userdb.user where name like '%a%';
select name,uid from userdb.user where name like 'a%';
select id,name,uid from userdb.user where name like '%';
select name,id from userdb.user where name like '%_%' and name="";
select name,uid from userdb.user where name like '____' and uid>=1000;
聚集函數(對資料做統計的函數)
sum(字段名) 求和
avg(字段名) 平均值
min(字段名) 最小值
max(字段名) 最大值
count(字段名) 個數
備注:使用者名是空的統計個數是不出來,因為空是什麼都沒有是以不算個數。
mysql> select max(uid) from userdb.user;
mysql> select max(uid) from userdb.user where shell="/bin/bash";
mysql> select sum(linuxsys) ,avg(linuxsys) from userdb.user;
mysql> select sum(linuxsys) ,avg(linuxsys) from userdb.user where uid<=10;
mysql>select min(uid) from userdb.user where shell="/bin/bash";
mysql>select max(uid) from userdb.user where shell="/bin/bash";
mysql>select count(id) ,count(name) from userdb.user;
mysql>select count(name) from userdb.user where shell="/bin/bash";
查詢排序
格式:sql查詢 order by 字段名 排序方式;
排序方式:
升序asc(從小到大排序)
降序 desc(從大到小排序)
預設asc升序(從小到大排序)
mysql> select name,uid from userdb.user where uid<1000 order by uid;
mysql> select name,uid from userdb.user where uid<1000 order by uid desc;
查詢分組(去重)
格式:sql查詢 group by 字段名;
mysql> select shell from userdb.user where name like "____" group by shell;
mysql> select shell from userdb.user where uid<=10 group by shell;
mysql> select 部分 from 員工資訊表where 性别="女" and 年齡<30 and 工資>20000 group by部門;
mysql>select shell from userdb.user where uid>=10 and uid<=40 ;
mysql>select shell from userdb.user where uid>=10 and uid<=40 group by shell;
mysql>select gid from userdb.user group by gid;
mysql>select shell from userdb.user group by shell;
mysql>select gid from userdb.user group by gid having gid=1;
限制顯示查詢記錄行數 (預設顯示全部)
sql查詢 limit 數字;
sql查詢 limit 數字1 數字2;
數字1 :是從第幾行顯示
數字2 :顯示到第幾行。
limit 數字 顯示查詢結果的前幾行
limit 起始行,總行數 起始行的編号從零開始
例題:
mysql> select id,name,uid from userdb.user where uid>100 order by uid desc limit 1;
mysql> select id,name,uid from userdb.user where uid>100 order by uid desc limit 2;
mysql> select * from userdb.user limit 1,3; #顯示第2行到第3行。
where嵌套查詢
把内層的查詢結果作為外層查詢的查詢條件
格式:select 字段名清單 from 庫.表 where 條件 (select 字段名清單 from 庫.表);
mysql> select avg(uid) from userdb.user;
mysql> select name,uid from userdb.user where uid< (select avg(uid) from userdb.user);
mysql> select count(uid) from userdb.user where uid< (select avg(uid) from userdb.user);
在不同表裡查找内容:
mysql> select name from userdb.user where name in (select name from teadb.user where uid in(1008,800,13));
In #在teadb.user表裡 (1008,800,13)範圍内。
mysql> select name from userdb.user where name in (select user from mysql.user where name="root");
多表查詢
select 字段名清單 from 表名清單 ; //笛卡爾集
select 字段名清單 from 表名清單 where 條件; //隻顯示與條目比對的值
mysql> create database db4;
mysql> create table db4.t1 select name,uid,shell from userdb.user limit 2;
mysql> create table db4.t2 select name,uid,homedir from userdb.user limit 4;
mysql> use db4;
mysql> select t11.*,t22.name t22.homedir from t11,t22;
mysql> select t11.name,t22.name from t11,t22;
連接配接查詢
左連接配接查詢:以左邊的表為主顯示查詢記錄
select 字段名清單 from 表名 left join 表名 on 條件;
右連接配接查詢:以右邊的表為主顯示查詢記錄
select 字段名清單 from 表名 right join 表名 on 條件;
mysql>select * from t3 left join t4 on t3.uid = t4.uid ;
mysql>select * from t3 left join t4 on t3.name = t4.name and t3.uid=t4.uid and t3.shell = t4.shell;
mysql> select t3.name ,t4.name from t3 left join t4 on t3.uid = t4.uid ;
mysql> select t3.name ,t4.name from t3 right join t4 on t3.uid = t4.uid ;
update修改表記錄(修改記錄字段的值)
批量修改
update 庫.表 set 字段名="值",字段名=”值”;
修改與條件比對的記錄字段的值;
update 庫.表 set 字段名="值",字段名=值 where 條件;
mysql> update userdb.user set age=29,comment="system user";
#把user表中的年齡都改為29,把描述資訊改為system user.
mysql> update userdb.user set age=18 where id<=10;
# 把user表中的前10行的年齡改為18
mysql> select id,name from userdb.user where name in (null,"");
mysql> update userdb.user set name="tom" where name in("null", "")
delete删除表記錄(以行為機關删除)
删除表的所有記錄
mysql>delete from 庫.表;
删除表中與條件比對的記錄
mysql>delete from 庫.表 where 條件;
删除前先查一下,避免出現錯誤。
mysql>delete from userdb.user where shell is null;
mysql> delete from db4.t4;
mysql> delete from userdb.user where id<=3;
mysql> delete from userdb.user where shell="" or shell is null;
修改表名
alter table 源表名 rname [to] 新表名;