条件查询:
逻辑条件: and or 需求:查询学生的id为1,且姓名为张三的学生
selete * from student where id=1 and name='张三';(交集)
需求:查询学生的id为2,或姓名为张三的学生
selete * from student where id=2 or name='张三';(并集)
比较条件: > < >= <= = <> (between and–在…之间 包前包后) 需求:查询servlet分数大于80分的学生
selete * from student where servlet>80;
需求:查询mysql分数小于或等于85分的学生
selete * from student where mysql<=85;
需求:查询servlet分数大于或等于80分,且小于或等于85分的学生
selete * from student where servlet>=80 AND servlet<=85;
代替上面语句的语法
selete * from student where servlet BETWEEN 80 AND 85;
需求:查询年龄不等于30的学生
selete * from student where age<>30;
判空条件: is null, is not null, =’’, <>’’ **Null:表示没有数据**
**空字符:表示有数据**
需求:查询没有性别数据的学生(数据‘男’或‘女’)
selete* from student where gender IS NULL OR gender='';
需求:查询有性别数据的学生
selete * from student where gender IS NOT NULL AND gender<>'';
模糊条件: like 模糊替代符号:
**%:替代任意个字符**
**_:替代一个字符**
需求:查询姓“李”的学生
SELECT * FROM student WHERE NAME LIKE '李%';
需求:查询姓名中包含‘四’字的学生
SELECT * FROM student WHERE NAME LIKE '%四%';
需求:查询姓‘李’,全名只有两个字的学生
SELECT * FROM student WHERE NAME LIKE '李_';
聚合函数查询(用于统计结果) Max()取最大值 min()取最小值 avg()取平均值 count()统计标的记录数量 sum()求和
需求:查询servlet的最高分
SELECT MAX(servlet) FROM student;
需求:查询mysql的最低分
SELECT MIN(mysql) FROM student;
需求:查询servlet的平均分
SELECT AVG(servlet) FROM student;
需求:查询当前有几个学生
SELECT COUNT(*) FROM student;
需求:查询servlet成绩的总和
SELETE SUM(servlet) from student;
分页查询(limit) **Limit起始行数,查询的行数**
**起始行数从0开始**
需求:查询第1,2条数据
SELECT * FROM student LIMIT 0,2;
分页查询需知道:当前页码,每页显示条数
结论分页查询当前页数据:select * from student limit (当前页码-1)*每页显示条数,每页显示条数;
需求:学生共20条数据,每页显示5条,共4页
查询第3页(第11到15条)的学生数据:select * from student limit 10,5;
查询后排序(order by) DESC:降序。数值从大到小,字母z-a
ASC:升序。数值从小到大,字母a-z
默认情况下,按照插入的顺序排序
需求:按照id的升序排序
select * from student order by id asc;
需求:按照servlet成绩降序排序
select * from student order by servlet desc;
多个排序条件的情况:先按照前面的条件排序,当出现重复记录,再按照后面的条件排序
需求:按照age升序,再按照servlet成绩升序排序
select * from student order by age asc,servlet asc;
分组查询(group by) 需求:查询每个地区有多少人
SELECT address,COUNT(*) FROM student GROUP BY address;
需求:统计男女的人数
注意:where条件必须放在group by 分组之前
SELECT gender,COUNT(*) FROM student WHERE gender IS NOT NULL AND gender<>'' GROUP BY gender;
分组后筛选(having) 需求:查询哪些地区的人数是大于2个的地区
查询哪些地区多少人 2)筛选人数大于2的地区
注意:having使用在group by分组之后,对分组后的条件进行筛选
SELECT address,COUNT(*) FROM student GROUP BY address HAVING COUNT(*)>2;
5.数据约束(给表添加数据约束,从而约束用户操作表数据的行为)
1)默认值约束(default) create table test(
name varchar(20),
gender varchar(20) default ‘男’
)
需求:当不插入gender的时候,分配一个‘男’的默认值
注意:1)当没有插入gender字段的时候,分配一个默认值
2)非空约束(not null) create table test(
name varchar(20) not null,
gender varchar(20)
)
需求;name字段一定要有值(不能不插入数据,不能是null),这是给name添加非空约束
1)非空约束,不能不插入值
Insert into test(gender) values(‘男’);
2)非空约束,不能插入null
Insert into test(name,gender) values(null,’男’);
3)唯一约束(unique) create table test(
Id int unique,
name varchar(20)
)
需求:id的值不能出现重复。这时就要给id添加一个唯一约束
1)不能插入重复的值
2)唯一约束,可以插入多个null。所以唯一约束不能约束null
Insert into test(id,name) values(1,’张三’);
4)主键约束(primary key)(唯一+非空) 注意;
1)通常情况下,我们会给每张表都设置一个主键字段,用来标记记录的唯一性
2)但是不建议把业务含义字段作为主键,因为随着业务的变化,业务字段可能出现重复
3)建议给每张表都独立添加一个叫id的字段,把这个id字段设置成主键,用来作为记录的唯一性
create table test(
Id int primary key,
name varchar(20)
)
4)唯一性
5)非空性
5)自增长约束(auto_increment) create table test(
Id int primary key auto_increment,
name varchar(20)
)
自增长约束:初始值为0,每次递增1
使用truncate table 删除数据的时候,可以把自增长的初始值置为0
6)外键约束(原来制约两张表的关系) 员工表(副表:被别的表约束的表,外键设置在副表)
Create table employee(
Id int primary key auto_increment,
name varchar(20),
deptId int,
添加外键约束(foreign key)
Constraint employee_dept_fk foreign key(deptId) references dept(id)
外键名 外键字段
)
部门表(主表:约束别人的表)
Create table dept(
Id int primary key auto_increment,
Name varchar(20)
)
外键约束在什么情况下会起作用? 插入数据:当往副表插入了主表中不存在的数据时,外键起作用
修改数据:当往副表中修改主表中不存在的数据时,外键起作用
删除数据:副表中有关联主表数据的情况下,当删除主表数据时,外键起作用
当有了外键之后,应该如何管理数据呢? 插入数据:先插入主表的数据,再插入副表数据
修改数据:先修改主表数据,再修改副表数据
删除数据:先删除副表数据,再删除主表数据
7)级联技术(cascade) 级联:当有了外键的时候,我们希望修改或删除数据的时候,修改或删除主表数据时,同时能够影响副表的数据,这时就可以使用级联
Create table employee(
Id int primary key auto_increment,
name varchar(20),
deptId int,
添加外键约束(foreign key)
添加级联修改:on update cascade
添加级联修改:on delete cascade
Constraint employee_dept_fk foreign key(deptId) references dept(id) on update cascade on delete cascade
外键名 外键字段
);
部门表(主表:约束别人的表)
Create table dept(
Id int primary key auto_increment,
Name varchar(20)
);