目录
函数
一.字符串函数
二.数值函数
三.日期函数
四.流程控制函数
约束
多表查询
多表关系
一.内连接
二.外连接
三.自连接
四.联合查询
五.子查询
标量子查询
列子查询
行子查询
表子查询
函数
一.字符串函数
二.数值函数
SELECT LPAD(FLOOR(RAND()*1000000),6,'0');//生成6位随机数
三.日期函数
四.流程控制函数
约束
1.概念:作用于字段上的规则,用于限制存储在表中的数据
2.使用:在create创建表或者alter修改表时,添加约束。
AUTO_INCREMENT 自动递增
3.外键
在创建表时,添加外键
create table 表名(
字段名 数据类型
...
[constraint] [外键名称] foreign key (外键字段名) references 主表(主表列名)
);
为表中已有字段,添加外键
alter table 表名 add constaint 外键名称 foreign key (外键字段名) references 主表(主表列名);
删除外键
alter table 表名 drop foreign key 外键名称;
外键删除/更新行为
在添加外键时,后面跟上 on update 行为 on delete 行为 ;
cascade 级联
多表查询
多表关系
1.多对一(一对多) e.g. 员工与部门
实现:在多的一方建立外键,指向一的一方的主键。
2.多对多 eg.学生选修课程
实现:建立中间表,至少包含两个外键,分别关联两方主键
3.一对一
用于单表拆分
实现:在其中一方添加外键,另一方添加主键,并且设置外键unique
多表查询时,应添加过滤条件,消除无效的笛卡尔积
一.内连接
相当于查询俩表或多表的交集部分数据
隐式内连接
select student.name,sc.courseid from student ,student_course sc where student.id=sc.studentid;
显式内连接
select student.name,sc.courseid from student [inner]jion student_course sc on student.id=sc.studentid;
可读性和可维护性:显式内连接在语法上更加明确和直观,易于理解和维护。它可以清楚地表达出连接操作和连接条件。相比之下,隐式内连接的语法相对简洁,但在复杂的查询中可能会较难理解和调试。
二者执行内连接的操作是相同的,只是语法形式不同
二.外连接
左外连接和内连接都是基于连接条件将两个表中符合条件的行进行匹配。但是左外连接会返回左表中所有的行,不管是否在右表中有与之匹配的行;而内连接只返回两个表中匹配的行。
右表中没有与之匹配的行,对应的列值将为NULL。
三.自连接
表必须起别名
按需求不同,选择内连接/外连接进行自连接查询
应用场景:员工包括普通员工和领导,当查所属领导时,可使用。
四.联合查询
五.子查询
标量子查询
列子查询
子查询 返回 一列多行
依据学生id,查询该名学生的选课情况。
select id,name,teacherId,teacherName,description from course where id in(select courseid from student_course where studentid=?)
行子查询
子查询 返回 一行多列
select * from student where (age,sex,class) =(select age,sex,class from student where name="Lee")
表子查询
子查询 返回 多行多列
操作符主要为in 常放于from后,作为一张临时表,再和其他表进行连查操作
这张临时表应起别名
*参考视频 bilibili黑马程序员*