MySQL 单表查询必知必会


摘要:
下文讲述MySQL数据库中,单表查询你必须知道的事情,您可以通过学习下面的文章,做到彻底的掌握MySQL单表查询,如下所示:
实验环境:sql server 2008 R2


通过本文的学习你可以达到的目的:
熟练掌握MySQL的select和where关键字的用法。

--切换数据库
---创建测试数据表 
create table userInfo(
    keyId int unsigned primary key auto_increment not null,
    name varchar(80) default "",
    age tinyint unsigned default 0,
    height decimal(6,2),
    gender enum ("男", "女", "未填写")  default "未填写",
    group_id int unsigned default 1,
    is_delete bit default 0
);

-- 班级表
create table groupInfo(
    group_id int not null,
    name varchar(80) not null
);

-- 插入测试数据, 都是偶像, 没有其他意思哈.
insert into userInfo 
(name,age,height,gender,group_id,is_delete) 
values
(0,'余昌砥',16,160.00,1,1,0),
(0,'卞炳根',19,180.00,2,2,0),
(0,'罗登铬',23,195.00,1,1,0),
(0,'岑步抱',45,135.00,1,2,0),
(0,'孔芬百',80,180.00,2,1,0) 

insert into groupInfo values
(1, "第一小组"),
(2, "第二小组");

--单表select查询测试
mysql> select * from userInfo; 

mysql> select * from groupInfo;
 
--查询前2行数据方法字段
mysql> select * from userInfo limt 2; 

--查询指定字段的前2行数据的方法
mysql>select name, age from userInfo limit 2;
 
--as输出列别名
mysql>select name as "名字", height as "身高" 
from userInfo 
where keyId in (1,2); 

--as 返回结果集取别名
mysql>select name as "名字", height as "身高" 
from userInfo  as test
where keyId in (1,2);
 

--distinct 过滤重复行
mysql>select distinct gender
from userInfo  ; 

/*
where 条件检索数据分享 

-- 年龄大于或等于160
select * 
from userInfo
where height >=160; 

-- 身高大于150的信息
select * 
from userInfo
where height > 150;

--身高等于150的信息
select * from userInfo where height = 150;

-- 身高不等于150的信息
select * 
from userInfo 
where height !=150;

/*
-------------------------------------------
逻辑运算符: and, or, not
*/

-- 身高在150-170间的用户信息
select *
from userInfo 
where (height >= 150) and (height <= 170);

-- 身高小于150的男生
select *
from  userInfo 
where (height < 150) and (gender = "男");

-- or
-- 身高超过170 或者 年龄在30以上的 男生 姓名和群组Id
select name, group_id as "群组Id"
from  userInfo 
where ((height > 170) or (age > 30)) 
    and (gender = "男");
 
-- not
-- 不在 身高170以上的女生 姓名和身高
select name, height
from userInfo
where not (height >= 170 and gender = "女");


/*
null 空值检测
*/
-- 身高未填写的人
select name, age, height
from userInfo 
where height is null; 


-- 身高填写的人
select name, age, height
from students
where height is not null;
范围查询 in; between...and



/*
 in 关键字的应用
*/

----18 ,19 ,20岁的人的信息
select *
from  userInfo  
where age in (18, 19, 20) 
  
---between..and 用法  
----年龄在 18-30之间的所有用户 
select *
from userInfo  
where  age between 18 and 30
 ; 
    

---like关键字的用法 
-- % 替换任意个; _ 替换1个, _ _ 替换2个;

-- 姓名中,以"孔"开头的所有信息
select * 
from userInfo
where name like "孔%"; 


-- 姓名中, 带有"孔"的所有名字
select * 
from userInfo
where name like "%孔%";  
 

-- 姓名只有2个字长度的信息
-- 使用两个下划线占位符
select * 
from userInfo
where name like "__";  

-- 姓名最至少为2个字的信息
select * 
from userInfo
where name like "__%";

  
-- 名字的第二个字是 "孔王"
select  *
from userInfo 
where name regexp ".孔.*";