-- 连接查询
-- 老师的姓名已经教授的课程
-- teacher tname course cname
-- teacher.tid=course.tid
select tname,cname from teacher left JOIN
course ON teacher.tid=course.tid;
-- as 起别名
select a.tname,b.cname from teacher as a left JOIN
course as b on a.tid=b.tid;
-- 数据类型
-- 常用的数据类型
-- 整数类型 TINYINT(1) SMALLINT(2) MEDIUMINT(3) int(4) BIGINT(8)
-- 浮点型 double(总长度,小数位数) FLOAT DECIMAL
-- 字符串 char varchar text
-- char最大长度是255
-- varchar 能够存储的字节数是65535
-- 1.结构varchar类型的第一个字节不存储数据
-- 2.varchar前两个字节存储数据长度
-- 3.有效位就剩下65532 编码格式决定能够存储多少个字符
-- 4.行中列的总字节长度不能超过65535
-- 如果要存储长文本 使用text类型
-- char和varchar的区别
-- 1.char定长的 varchar 变长的
-- char(20) 存了abc 占20个字符位
-- varchar(20) 变长的 abc 占3个字符位
-- 2.CHAR的性能更好 varchar稍逊 因为要计算字符数
-- 3.场景:身份证号 学号 手机号 订单号 char
-- 介绍信息 店名 姓名 地址 varchar
-- text 长文本 不需要设置长度
-- 日期
-- Date 年月日 time 时分秒毫秒 Datetime年月日时分秒
上面是创建,下面单行是删除
效果:每创建1个,这里的value值+1
create trigger tgg_u_b_student before UPDATE
on student for each row BEGIN
-- old.列名 原来数据
-- new.列名 新的数据
update log set val= CONCAT(str1CONCAT('{',old.sid,',',old.sname,'}'),'->',CONCAT('{',new.sid,',',new.sname,'}')) WHERE
`key`='lastupdate';
end;
行列转换
select name,
sum(case subject
when '语文' then fraction
else 0
end) as '语文',
sum(case subject
when '数学' then fraction
else 0
end)as '数学',
sum(case subject
when '英语' then fraction
else 0
end )as'英语'
from t_score group by name
效果:
触发器
触发器:相当于一个事件,一旦标准发生了指定时间,该触发器就会自动运行
-- 触发可以通过三种操作触发:增删改
-- 触发时机 before after
-- 尽量不使用触发器 会影响正常业务逻辑,由Java逻辑代码完成触发器的工作
1. 触发器的类型
BEFORE触发器:在指定的操作(如INSERT、UPDATE、DELETE)之前执行。
AFTER触发器:在指定的操作(如INSERT、UPDATE、DELETE)之后执行。
INSTEAD OF触发器:用于视图,替代触发操作执行。
2.触发器相关语法
删除触发器:drop trigger 触发器名
创建触发器代码:
CREATE TRIGGER trigger_name
trigger_time trigger_event
ON table_name
FOR EACH ROW
BEGIN
-- 触发器逻辑
END;
trigger_name:触发器的名称。
trigger_time:触发器执行的时间,可以是 BEFORE 或 AFTER。
trigger_event:触发器的事件,可以是 INSERT、UPDATE 或 DELETE。
table_name:触发器关联的表名。
FOR EACH ROW:表示触发器对每一行数据都执行。
BEGIN ... END:触发器的逻辑代码块。
视图 view
视图 view : 是一个已经编译好的SQL语句
视图特点:不存储数据,数据还是储存在表中 , 加快检索效率
视图作用:1.提高数据的安全性 2.简化复杂查询 3.定制用户数据,聚焦特定数据
-- 创建视图 create view as sql语句 v_ (表 t_)
--删除视图 drop view if exists 视图名1 [视图名2,视图名3……]
函数
-- if函数 三元
-- 如果是语文就显示成绩fraction,否者就显示0
select * ,if(subject ='语文',fraction,0) from t_score;
-------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------
存储过程
CREATE PROCEDURE procedure_name
(
[IN | OUT | INOUT] parameter_name datatype,
...
)
BEGIN
-- 存储过程逻辑
END;
存储过程的参数
- IN:输入参数,用于传递值给存储过程。
- OUT:输出参数,用于从存储过程返回值。
- INOUT:既可以作为输入参数,也可以作为输出参数。
JDBC
JDBC(Java数据库连接):使用Java语言操纵关系型数据库的一套API
1. DriverManager (驱动管理对象)
2.注册驱动
3. Connection (数据库连接对象)
4. Statement (执行静态SQL的对象)
5. ResultSet (结果集对象)
6. PreparedStstemet ( 执行动态SQL对象)