MySQL匹配條件和操作查詢結果

一、基本匹配條件

  • 環境準備
[root@db1 ~]# mkdir /myload
[root@db1 ~]# vim /etc/my.cnf
[mysqld]
secure_file_priv="/myload"
[root@db1 ~]# chown mysql /myload/		//必須要保證mysql用戶對這個目錄有讀寫的權限
[root@db1 ~]# ls -ld /myload/
[root@db1 ~]# systemctl restart mysqld
mysql> create database db3 ;
mysql> create table db3.user(
    -> name  char(30) , password  char(1) , uid int  , gid  int  ,
    -> comment  varchar(150) , homedir  char(80) , shell  char(60) 
    -> );
mysql> desc db3.user;

mysql> system cp  /etc/passwd  /myload/		//system調用系統命令
mysql> system  ls /myload/
passwd

mysql>  load data infile "/myload/passwd"
    -> into table db3.user
    -> fields  terminated by ":" 	//定義分隔符,必須要和passwd文件的分隔符一致
    -> lines terminated by "\n";	//換行符

1、數值比較

  • 字段必須是數值類型
類型 比較 例子
= 相等 id = 3
> 大於 uid > 3
>= 大於或等於 uid >= 3
< 小於 uid < 3
<= 小於等於 uid <= 3
!= 不相等 uid != 3
  • 示例
mysql> select  *   from db3.user  where  id <= 5 ;
mysql> select  name  ,  uid  , gid   from db3.user  where  uid  !=  gid ;

2、字符比較

  • 必須是字符類型
類型 比較 例子
= 相等 name = “root”
!= 不相等 name != “root”
is null shell is null
is not null 非空 shell is not null
  • 示例
 mysql> select name from db3.user where  name  = "mysql" ;
 mysql> select name  , shell  from  db3.user where  shell != "/bin/bash" ;
 mysql> select  name  , uid  , shell from  db3.user where  shell is not  null ;
 mysql> select  name  , uid  , shell from  db3.user where  shell is null ;

3、邏輯匹配

  • 多個判斷條件時使用
類型 用途 格式
or 邏輯或 條件1 or 條件2 or 條件3
and 邏輯與 條件1 and 條件2 and 條件3
! 或 not 邏輯非
  • 示例
mysql> select name , uid  from  db3.user where  name = "sync" or  name = "apache" or  uid=3;			
mysql> select  * from  db3.user where id >= 10  and  id <= 20 ;
mysql> select name , uid  from  db3.user where  name = "sync" ||  name = "apache"  ||  uid=3;
mysql> select  * from  db3.user where id >= 10 &&  id <= 20 ;
mysql> select  name , uid  from  db3.user  where   uid = 1 or  uid = 0  and  name = "root" ;	
//與  或  同時存在,與優先
mysql> select  name , uid  from  db3.user   where  ( uid = 1 or  uid = 0 )  and  name = "root";
//加括號可以提高優先級

4、範圍匹配

  • 匹配範圍內的任意一個值即可
類型 比較
in (值列表) 在…裏…
not in (值列表) 不在…裏…
between 數字 and 數字 在…之間…
  • 示例
mysql> select name  ,  uid  ,  gid  from db3.user where uid between  10  and  40 ;
mysql> select name , uid from  db3.user where uid in (3 ,6,9,11);
mysql> select name from db3.user where name in  ("root" , "sync" , "daemon" , "bin");			
mysql> select shell  from  db3.user where  shell not  in  ("/bin/bash","/sbin/nologin");

二、高級匹配條件

1、模糊查詢

  • 用法
    • where 字段名 like ‘通配符’
    • _ 表示一個字符
    • % 表示0~n個字符
  • 示例
mysql> select  name  from  db3.user where  name like  '___';
//匹配三個字符
mysql> select  name  from  db3.user where  name like  '____';
//匹配四個字符
mysql> select  name  from  db3.user where  name like  '%a%';
//匹配帶有a前後有任意字符
mysql> select  name  from  db3.user where  name like  'a%';
//匹配a後帶有任意字符

2、正則表達式

  • 用法
    • where 字段名 regexp ‘正則表達式’
    • 正則元字符 ^ $ . [] * |
  • 示例
mysql> select name , uid  from   db3.user where  name  regexp '^r|t$' ;
//查找以r開頭和以t結尾

3、四則運算

  • 字段必須是數值類型
    • 加減乘除"+ - * /"、取餘"%"、提高優先級"()"
  • 示例
mysql> update db3.user set uid=uid+1   where id <= 5;			
mysql> update db3.user set uid=uid-1   where id <= 5;	
		
mysql> alter table db3.user add age tinyint unsigned  not null default 19 after name ;

mysql> select name  ,  2020  - age  s_year  from  db3.user where name = "root" ;
mysql> select name  ,  2020  - age  s_year  from  db3.user ;
mysql> select name,uid,gid ,(uid+gid)/2  pjf   from db3.user  where  name="games";			
mysql> select * from db3.user where id % 2 = 0 ;
mysql> select name , uid  from  db3.user where  uid % 2  !=  0 ;

三、操作查詢結果

把查找出來的數據,再處理一下

1、聚集函數

  • MySQL內置數據統計函數
    • avg(字段名) //統計字段平均值
    • sum(字段名) //統計字段之和
    • min(字段名) //統計字段最小值
    • max(字段名) //統計字段最大值
    • count(字段名) //統計字段值個數
mysql> select max(uid) from db3.user ;
//查詢uid最大的行
mysql> select max(uid) from db3.user  where id <= 10;
//查詢uid<=10的並且是最大的
mysql> select min(uid) from db3.user  where id <= 10;
//查詢uid<=10的並且是最小的
mysql> select avg(uid) from db3.user;
//uid的平均值
mysql> select count(name) from  db3.user where shell!="/bin/bash";
//查詢/bin/bash解釋器的有多少個
mysql> select count(*) from  db3.user;
//查詢總共多少行
mysql> select min(uid) , max(gid) from db3.user;
//查詢最小uid和最大gid
mysql> select min(uid) zx , max(gid) zd from db3.user;
//給提取出來的結果起名字,臨時顯示

2、查詢結果排序

  • 用法
    • SQL查詢 order by 字段名 [asc|desc];
    • asc 升序
    • desc 降序
  • 示例
 mysql> select name , uid  from  db3.user  where  uid >=10 and  uid <= 800  order by uid asc;

 mysql> select name , uid  from  db3.user  where  uid >=10 and  uid <= 800  order by uid  desc;

3、查詢結果分組

  • 用法
    • SQL查詢 group by 字段名;
  • 示例
mysql> select shell  from  db3.user where uid >= 10  group by shell;
mysql> select shell from db3.user group by shell;
  • distinct 去重顯示 (去掉字段的重複值 輸出查詢結果)
mysql> select shell from db3.user;
mysql> select  distinct shell from db3.user ;

4、查詢結果過濾

  • having用法
    • SQL查詢 having 條件表達式;
  • 示例
mysql> select name from  db3.user where shell != "/bin/bash"  having  name in ("sync","games");

5、限制查詢結果顯示行數

  • 用法
    • SQL查詢 limit 數字; //顯示查詢結果前過少條記錄
    • SQL查詢 limit 數字1,數字2; //顯示指定範圍內的查詢記錄
    • 數字1 起始行 (0表示第一行)
    • 數字2 總行數
  • 示例:指定字段的前1、3、5行
 mysql> select name , uid  , gid  from db3.user where  shell !=  "/bin/bash" limit 1;
 mysql> select name , uid  , gid  from db3.user where  shell !=  "/bin/bash" limit 3;
 mysql> select name , uid  , gid  from db3.user where  shell !=  "/bin/bash" limit 5;
  • 示例:範圍查詢,指定字段
mysql> select id ,name , uid  , gid  from db3.user limit 2 , 5;
//查詢第二行的後五行,不包括前兩行
mysql> select id ,name , uid  , gid  from db3.user limit 3 , 3;
//查詢第三行的後三行,不包括前三行
  • 示例:全表範圍查詢
select  *  from  db3.user  where id  <= 10  limit  5 , 2;
//查詢第五行的後兩行,不包括第五行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章