MySQL学习笔记(2)
数据查询
新建表orders
create table if not exists orders
(
oid int primary key auto_increment,
money decimal(10,3)
) Engine=InnoDB default charset=utf8mb4;
修改表user的结构,添加外键
alter table user add column oid int;
alter table user add foreign key orders (oid) references orders (oid);
向user表中插入数据:
insert into user(username,oid) values('张三',1) on duplicate key update oid =values(oid);
查询所有的列,使用*
select *from user;
查询部分列,列和列之间用逗号隔开
select userid, sex from user;
列和列之间不用逗号隔开则是为列取别名
//给列取别名
select username 姓名,sex 性别 from user;
//给列取别名 使用as
select username as 姓名, sex as 性别 from user;
计数
select count(*) 人数 from user;
条件过滤
select username 姓名,sex 性别 from user where userid>10 and oid>0;
所有的过滤条件都是通过where子句给出的,除整型数和浮点数以外,其他所有内容都应该放在引号内
操作符
- in:检查一个值是否在一组值中;
select *from user where userid in(20,21,23);
- between ……and:检查一个值是否在一个范围内;
select *from orders where money between 0 and 10;
- not:使用not运算符来否定结果
select *from orders where money not between 5 and 10;
- 简单模式匹配
使用like 运算符来实现简单的模式匹配。使用下划线(_)来精准匹配一个字符,使用(%)来匹配任意数量的字符
select *from user where username like '张_';
select *from user where username like '张%';
思考:如何匹配字符串中的%;
在字符串中,某些序列具有特殊含义。这些序列均用反斜线(‘\’)开始,即所谓的转义字符。MySQL识别下面的转义序列:
\0 | ASCII 0(NUL)字符。 |
---|---|
’ | 单引号(‘’’)。 |
" | 双引号(‘"’)。 |
\b | 退格符。 |
\n | 换行符。 |
\r | 回车符。 |
\t | tab字符。 |
\Z | ASCII 26(控制(Ctrl)-Z)。该字符可以编码为‘\Z’,以允许你解决在Windows中ASCII 26代表文件结尾这一问题。(如果你试图使用mysql db_name < file_name,ASCII 26会带来问题)。 |
\ | 反斜线(‘\’)字符。 |
% | ‘%’字符。参见表后面的注解。 |
_ | ‘_’字符。参见表后面的注解。 |
这些序列对大小写敏感。例如,‘\b’解释为退格,但‘\B’解释为‘B’。
- 限定结果集
使用limit限定
select *from user limit 10;# limt 0 10 1~10
//In other words, LIMIT row_count is equivalent to LIMIT 0, row_count.
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15