-
对象之间的关系:
数据库建表的时候,对象之间有多种关系:
- 一对一:
一个同学一份作业
- 一对多:
一个学院有多门专业
- 多对一:
多个老师教同一门课
- 多对多:
一个同学选多门课程,一门课程多个同学选
一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表中,以提升操作效率,常常将多对多关系的表拆分成一对一关系的多张表,再通过外键实现表之间的依赖
基本查询
-
基本语法
select * from 表名;
-
列运算
-- 查询给所有员工工资加1000的结果 select id,name,sal+1000 from employee; select `id`,`name`,`age`*10 from student;
1、null加任何值都等于null,,需要用到ifnull()函数。
SELECT IFNULL(sal,0) from 表名;
如果薪资列为空,则输出0;
2、将字符串做加减乘除运算,会把字符串当作0。IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。
-
别名
select `id` `编号`,`name` `名字`,ifnull(`age`,0) as `age` from `student` as s;
只需要在列名后加 as 新列名 ,或是直接加上 新列名即可。
-
条件控制
条件查询:
-- 条件控制 select * from 表名 where 列名=指定值; select * from student where id = 3; select * from student where id in (1,3,7); select * from student where id >5 ; select * from student where id between 3 and 7 ; select * from student where id between 6 and 7 or age > 20;
模糊查询:
select * from student where name like '张_'; select * from student where name like '张%';
(_代表匹配任意一个字符,%代表匹配0~n个任意字符)
排序
-
升序: asc
select * form 表名 order by 列名 asc; asc为默认值可以不写
-
降序:desc
select * from 表名 order by 列名 desc;
-
使用多列作为排序条件: 当第一列排序条件相同时,根据第二列排序条件排序(当第二列依旧相同时可视情况根据第三例条件排序):
select * from 表名 order by 列名1 asc, 列名2 desc;
意思是当列名1的值相同时按照列名2的值降序排。
- 一对一:
函数:
- count( )
- max( )
- min( )
- sum( )
- avg( )
分组查询
select 分组列名,聚合函数1,聚合函数2 from 表名 group by 该分组列名;
分组查询前,还可以通过关键字【where】先把满足条件的人分出来,再分组
分组查询后,也可以通过关键字【having】把组信息中满足条件的组再细分出来
分页查询
使用 limit ,limit用来限定查询结果起始行以及总行数
SELECT id,name,age,gander FROM student limit 3;
# 从开始查找三条记录
SELECT id,name,age,gander FROM student limit 3,3;
# 从第三行起(不算第三行),向后查三条记录
多表查询
内连接
SELECT * from teacher t ,course c where c.t_id = t.id
SELECT * from teacher t (inner) join course c on c.t_id = t.id
内连接查询两张表的公共部分
外连接
左(外)连接
SELECT * from course c left join on teacher t c.t_id = t.id
左连接会显示 左表中存在,但在右表中值为null的行
右(外)连接
SELECT * from course c right join teacher t on c.t_id = t.id
右连接与左连接类似
子查询
select 查询出来的结果仍可作为一张表,跟在 where、having、from字段后面