样例表
create table tb_user(
id bigint peimary key auto_increment,
username varchar(20) not null,
password varchar(32) not null,
birth date,
sex char,
score number(8,2)
)engine=innodb default charset utf8;
语法:
select all/distinct <目标表达式>,<目标表达式>,...... from 表名称或者视图名称,表名称或者视图名称,...... --mysql中允许查询语句没有from where 条件语句;
select all/distinct <目标表达式>,<目标表达式>,...... from 表名称或者视图名称,表名称或者视图名称,...... group by 分组条件 having 条件表达式 -- having后跟分成的组满足的条件;
select all/distinct <目标表达式>,<目标表达式>,...... from 表名称或者视图名称,表名称或者视图名称,...... order by 排序条件 desc/asc; -- desc是逆序输出,asc是正序输出
select all/distinct <目标表达式>,<目标表达式>,...... from 表名称或者视图名称,表名称或者视图名称,...... limit ....
查看表中所有数据
语法:select * from tb_user;
“*”是一个通配符,表示获取表中所有列的值。
如果是获取表中一部分列,例如只想获取用户名和id值,可以这样写select username,id from tb_user;
使用✳的优势:
- 一定程度上减少了编码量;
- 可以避免书写具体字段名称时的繁琐和笔误;
- 新增字段时,不需要修改select代码,在一定程度上提高了代码的复用率。
使用✳的不足:
- 使用✳会增加查询分析器的解析成本;
- 在使用MyBatis等持久层框架时,增删字段容易出现操作和配置不一致的问题;
- 查询无用的字段会增加网络消耗,尤其是针对text/blob之类的大对象字段;
- 可会失去优化器中覆盖索引策略优化
带条件查询
例如:
查看表中id值大于等于10的所有用户信息:
select * from tb_user where id >=10;
查看表中生日在1999年之后的所有用户信息:
select * from tb_user where year(birth)>1999;
在SQL语句中,等值判断使用=,而不是==。
等于 = , 大于> , 小于< , 大于等于>= , 小于等于<=
在条件查询是可以使用and、or、between、not
select * from tb_student where (id,name) >(1,"aaa");
select * from tb_student where id>1 and name>"aaa";
select * from tb_student where age<20 and sex='男';
select * from tb_student where age >20 and age <25;
select * from tb_student where age between 20 and 25;
select * from tb_student where name="张三" or name like '张%' ;
select * from tb_student where not(sex='男');
在具体应用中一般不会直接存储年龄,而是记录生日,通过year(now())-year(birth) as age
非空或者空值判断
空值判断:is null
非空判断:is not null
字符串比较
模糊查询 like/not like 通配符_或者%
通配符"_“表示一个任意字符
通配符”%"表示任意个任意字符
例如:
-- 查询所有姓杨的用户,这个用户只能叫杨某,名字是两个字的
select * from tb_student where username like '杨_';
-- 查询所有姓杨的用户,这个用户叫杨某某.....,名字可以是任意个字符
select * from tb_student where username like'杨%';
通配符_和%可以在字符串的任意位置
选择表中的若干元组
元组就是事物特征的组合,可以用于描述一个具体的事物。
关系:一个带有表头的二维表格,表中的每一行数据就是一个元组,元组的集合就是关系,每个列就是一个属性。在二维表中元组耶可以称为行,属性是列。
- 字段:某个事物的一个特征,也可也称为属性或者列;
- 表:记录属性的一个特征,表示同一类事物的组合;
- 主键:能够唯一标识一行数据的列组合。一个表只能由有一个主键,但是主键可以由多个列构成;
- 域:属性的取值范围;
- 关系模式:关系的描述;
- 关系约束:实体完整性、参照完整性、用户自定义完整性。
例如:
select * from tb_user where (id,name) > (1,'aaa');
select * from tb_user where id>1 and name>'aaa';