MySQL对数据表的查询语句
例题:
先来一个样例表:
create table tb_users(
id bigint primary key auto_increment,
username varchar(20) not null,
password varchar(24) not null,
birth date,
sex boolean default 1,
score numberic(8,2)
)engine=innodb default charset utf8;
基本语法:
select:查询主体
from:表名称或者视图名称,表名称或者视图名称----- 在MySQL中允许查询语句中没有from
where:查询的条件语句
group by:分组having: 分组条件
order by:排序条件 asc--从小到大排序 / desc--从大到小排序
limit:进行分页
1:普通查询:
查看表中所有数据 select * from tb_users 这里的星号*是个通配符,表示获取所有列的值
在查询语句中使用星号*代表获取表中的所有列,如果只获取其中一部分列,例如只查询用户的
称和口令,可以写成 select username,password from tb_users
此时可以看出我们也可以不使用星号,下面分析星号的优劣:
劣势:
使用星号会增加查询分析器的解析成本
如果使用MyBatis之类的持久层框架时,增删字段容易操作配置不一致问题
查询无用的字段会增加网络消耗,尤其是针对text/blob之类的大对象字段
使用星号可能会失去优化器中覆盖索引策略优化
优势:
一定程度上减少了编码量
不需要指导表中的字段名称,可以避免书写具体字段名称的繁琐和笔误
增加新字段时,不需要修改select代码,在一定程度上提高了代码的复用率
2:带条件查询:
例如查看表中年龄大于18岁的所有用户信息 :
select * from tb_users where year(now())-year(birth)>18
例如查看表中id值大于等于5的所有用户信息
select * from tb_users where id>=5;
注意等值判断使用=,不是==,例如获取编号为16的用户信息select * from tb_users where
id=5; 是单等号,不是双等号
等于判断 =、不等于判断 !=、大于 >、小于 <,大于等于 >=、小于等于 <=
3、非空或者空值判断 :
注意不能使用 =null 或者 !=null 的写法,应该使用 is null 或者 is not null
例如查询性别未知的用户信息 select * from tb_users where sex is null
4、字符串比较:
使用等号 select * from tb_users where username='giao' and password='123456'
模糊查询 like/not like 统配符_和 %
统配符_表示一个任意字符
统配符%表示任意个任意字符
例如查询所有姓张的用户信息 select * from tb_users where username like '张%';
统配符_和%可以是在字符串的任意位置
y_表示包含两个字符长的字符串,必须y开头。例如y1匹配,y12不匹配,y也不匹配
y%表示以y开头,后面跟任意个任意字符的字符串。例如ay不匹配,y匹配,y123也匹配
_y表示包含两个字符长的字符串,必须y结尾,例如1y匹配,12y不匹配,y也不匹配
%y表示以y结尾,前面有任意个任意字符的字符串。例如ay匹配,y匹配,12y1不匹配
_y_ 表示三个字符长的字符串,中间字符必须为y
%y%表示包含字符y的字符串,可以在开头,可以在尾巴,也可以中间
5、选择表中的若干元组:
元组就是事物特征的组合,可以用于描述一个具体的事物
关系就是一个带有表头的二维表格,表中的每行数据就是一个元组,元组的集合就是关系,每个列
就是一个属性。在二维表中元组也可以称为行,属性为列
字段:某个事物的一个特征,也可以称为属性或者列
表:记录属性的组合,表示同一类事物的组合
主键:能够唯一标识一行数据的列组合。一个表只能有一个主键,但是主键可以是由多个列构成
域:属性的取值范围
关系模式:就是关系的描述,表示方法 关系名(属性列表,...),例如学生(学号,姓名,性别,年龄)
关系的约束:实体完整性、参照完整性、用户自定义完整性
写法:
select * from tb_users where (id,name) > (1,'aaa');
select * from tb_users where id>1 and name>'aaa'
在使用条件计算时可以使用 and--与,or--或,not--非 运算