知识回顾
DML数据操作语言
操作表中的数据
写入操作
新增insert
insert into 表名 values();
删除delete
delete from 表名 [where…];
修改update
update 表名字 set列=值, 列=值 [where…]
读取操作DQL
查询select
select 列, 列, 列 from 表名字[where];
select from 表名字;
建议大家不叫使用 底层需要做列名匹配 性能比较慢
补充一个创建数据库或表格时处理中文字符的问题
创建database 每一个表格都可以存储中文
create database 名字 [default character set = ‘字符集’];
create database student [default character set=utf8];
创建table 设置支付机
create table 名字(
列 类型 长度..
)[character set utf8][collate 排序规则];
utf8 utf8_general_ci
排序方式utf*_general_ci 默认 性能比较高 可能不太精准 俄罗斯 越南
排序方式utf8_unicode_ci 性能比较低 扩展性好
还可以通过show table status from 数据库名字 like ‘表格名字’;
=============================================================
在找寻数据的时候做一个筛选
条件筛选 where
- 除了insert 以外的其他三
- 个语句都可以做筛选
- where 是一个关键字 拼接再出了insert 语句以外的其他语句基本结构之后
- delete from 表where …;
- update 表 set 列=值 where…;
- select 列 from 表 where…;
- 筛选用来筛选出符合条件的记录行数
- 并不是控制显示的列
- 按照某一个列或者是一某一些条件进行筛选
- 列 满足一定条件
- where 后面具体怎么使用 链接什么东西
比较运算符号 > < >= <=
select * from student where chinese > 95;
select * from student where english < 85;
select * from student where physical = 99;
算数运算符号: + - * /
一个要求需要一个学生两年以后年龄> 20岁的
select * from student where sage+2>20;
逻辑运算符 &(and) |(or) !(not)
如果and 和 or同时执行, and比or的优先级高
语文成绩满足95 && 英语成绩满足95
select * from student where chinese >= 95 and englise >=95;
数据库底层做的事情
1.解析SQL 知道了表格 查询到所有记录 筛选记录
2.从表格中把所有数据都读取出来 放在数据库缓存 集合List
3.将list集合做一个遍历循环 每一次拿到一个元素(一行记录) 条件
假设我们的表格有7条记录
如果只写一个where条件
执行7次循环就可以比价出来了
如果使用了and这个语句至少有两个条件那它会先用第一个条件先筛一遍, 然后用后面那个条件 再筛一遍(执行效率较慢) 一般第一遍筛选要把条件苛刻的写在前面**
//条件查询所有的男生|| 年龄>17岁
select from student where sname = “nan”o ssex = 17;
{between and}
//条件 查询物理成绩>=75 并且 <= 90分
select from student where betwenn physics >= 75 and physics <=90;
in 满足条件就可以
select from student where chinese in(99, 92);(满足括号条件其中一个)
select from student where not chinese in(99, 92);不在这个范围里面的**
- *like 模糊查询 %表示0个或多个 _用来代替1个字符(有且只有一个)
- //条件我想找 与’z’开头的
- select * from student where sname like ‘z%’
- select * from student where sname like ‘_h%’;
- //条件我想找带n字母的名字
- select * from student where sname like ‘%n%’;
- //条件我不想找带n字母的名字
- select * from student where sname not like ‘%n%’;
- 删除:
- delete from student where sname = ‘wangwu’;
- 修改其中的属性信息
- update student set ssex = ‘nv’ where sname = ‘lisi’;
- 排序
- 连接在查询的语句之后的
- order by 列
- 升序排列 asc (默认就是升序的 可以省略不写)
- 降序排列 desc
- //条件: 我想先筛选出来年龄 然后再按照降序排列
- select * from student where ssex = 18 order by english desc;
- //条件我想按照语文降序排列 如果语文成绩有相同的 我就按照英语成绩降序排列
- select * from student order by chinese desc , english asc;
- select * from student where ssex = ‘nan’, or sage = 17;
创建一个学生表格 用来记录学生信息
学号 名字 性别 年龄 生日 中文 英文 物理 化学 班级编号
float(m,n);总共可以存储m位数字 小数点之后有n位
m取值范围1-65 n取值范围0-30
m是10, n是0
(5,2) 999.99 这是存储的最大类型
create table student(
sid int(3),
sname varchar(20),
ssex varchar(3),
sage int(3),
sbirthday date,
chinese float(5,2),
english float(5,2),
physics float(5,2),
physical float(5,2),
classid int(4)
)character set utf8;
select * from student where chinese > 95;
