sql也是一种编程语言,它里面也有函数,分为内置得函数和自定义得函数(高级)。
内置函数:
1.聚合函数。
2.字符串函数。—操作字符串
3.时间函数—>操作得时间
4.算术函数—>数学操作。
5.其他函数
1. 字符串函数。—操作字符串
常用函数:
-- 字符串拼接函数
select name from t_student;
select concat('我的名字叫:',name,",年龄:",age) as n from t_student;
-- 字符串转换为大写和小写
select name,upper(name),LOWER(name) from t_student;
-- 去除前后空格
select address,trim(address) from t_student;
-- 找到姓李得学生 字符串得截取
select * from t_student where name like '李%';
select * from t_student where substr(name,1,1)='李'
2. 数字函数
常见函数:
-- 向上取整 5.1你给定得值
select ceil(5.1),floor(5.9),mod(10,3),abs(-5.9) from t_student;
-- 要求如果status为0变为1 为1变为0 update
update aaa set status=abs(status-1);
3. 时间函数
-- CURDATE()返回当前日期 后面可以不用跟表名
select curdate();
-- 可以用在where
select * from tb_emp where curdate()-entrydate=1
-- CURTIME()返回当前时间
select curtime() ;
-- NOW()返回当前日期和时间
select now();
-- YEAR(date)获取指定date的年份
select year('2022-04-25');
select * from tb_emp where year(entrydate)=2022
-- DATE_ADD(date, INTERVAL expr type)返回一个日期/时间值加上一个时间间隔expr后的时间值
SELECT DATE_ADD('2020-04-25', INTERVAL 3 YEAR);
-- DATEDIFF(date1, date2)返回起始时间date1和结束时间date2之间的天数
select datediff('2020-05-25','2020-04-25');
-- 入职30天得员工.
select * from tb_emp where DATEDIFF(now(),entrydate)>30
4. 流程函数
-- 如果年龄>30妇女 否则少女
select age,if(age>30,'妇女','少女') from tb_emp;
-- ifnull 如果为null,则
select job,ifnull(job,'工作待定') from tb_emp;
5. 约束
约束是作用于表中字段上的,可以再创建表/修改表的时候添加约束。
create table t_teacher(
id int primary key auto_increment, -- 要求该列得值必须唯一且不能为null.
tname varchar(20) unique, -- unique 唯一约束 表示该列得值必须唯一。但是可以运行多个null
age int not null, -- not null 非空约束 表示该列得值不能为null.
sex char(2) default '男' -- default 默认约束 表示如果该列没有给定值 则默认为男
)
select * from t_teacher;
insert into t_teacher(id,tname,age,sex) values(null,'刘德华',15,'女');
-- Duplicate entry '刘德华' for key 'tname' 由于tname具有唯一约束 表中有名字为刘德华 所以不能在添加刘德华名称
insert into t_teacher(id,tname,age,sex) values(null,'刘德华',18,'男');
-- Column 'age' cannot be null 因为age设置了非空约束所以 添加数据时年龄必须有值。
insert into t_teacher(id,tname,age,sex) values(null,'张学友',null,'男');
-- 因为sex有默认约束 所以在添加数据时可以不为sex设置值,则采用默认值。
insert into t_teacher(id,tname,age) values(null,'张学友',22);
6. 外键约束
外键约束用来让两张图的数据之间建立连接,保证数据的一致性和完整性。
-- 外键
create table t_class(
cid int primary key auto_increment,
cname varchar(20)
);
create table t_stu(
sid int primary key auto_increment,
sname varchar(20),
classid int -- 表示外键列。
);
-- add contraint 约束得名称 foregin key 外键得列名 REFERENCES 主表名(主键)
-- alter table 从表名 add contraint 约束名随便起 foreign key 外键列名 references 主表(主键)
alter table t_stu add CONSTRAINT fk_stu_class FOREIGN key (classid) REFERENCES t_class(cid);
insert into t_class values(null,'QY145'),(null,'QY151');
insert into t_stu values(null,'李青华',2);
-- 因为classid=3 这个值 在我们得班级表中不存在。所以不能添加
insert into t_stu values(null,'张青',1);