系列文章目录
牛客有关mysql关键字的练习和总结
文章目录
前言
牛客有关mysql关键字的练习和总结
提示:以下是本篇文章正文内容,下面案例可供参考
1,关键字
1,view
mysql视图表(view)是一种虚拟存在的表,它和真实的表一样,但是它依赖于真实的表,即它做了一些筛选,只展示一个表中它想要的字段,或者只展示多个表中它想要的字段。但是当真实的表发生变化的时候,它也会发生变化。
1,创建视图
create view <视图名> as <select 语句>
2,alter
当我们需要修改数据表名或者删除数据表字段时,就需要用到 mysql 的 alter 命令
基本语法:
删除字段
alter table table_name drop i(字段);
添加字段:
alter table table _name add i(字段) int(类型);
示例:
增加字段:
alter table actor add create_date datetime not null
default '2020-10-01 00:00:00';
3,drop
删除字段
4,add
增加字段
5,trigger
触发器;
基本语法:
create trigger trigger_name
trigger_time trigger_event on tbl_name
for each row
trigger_stmt
- trigger_name :触发器名称
- trigger_time :触发时机,取值为before 或者 after
- trigger_event:触发事件,取值为 insert ,update,delete
- trigger_stmt:触发器程序体,可以是一句sql语句,或者用 begin 和 end 包含的多条语句,每条语句结束要用分号结尾。
new 和 old 详情:
使用方法:
new.columnName(数据库的某一列 )
用来表示触发器所在表中,触发了触发器的哪一行数据
1,在insert 中,new 用来表示将要(before)或者已经(after)插入的新数据
2,在update 中,old用来表示将要或者已经被修改的原数据,new 表示将要或者已经修改为的新数据
3,在delete中,old用来表示将要或者已经被删除的原数据;
实例:
构造一个触发器:
create trigger audit_log
after insert on employees_test
for each row
begin
insert into audit values(new.id,new.name);
end
6,update
更新
输出:结果是受影响行数
语法:
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
示例:
update titles_test
set to_date = null ,from_date = '2001-01-01' where
to_date = '9999-01-01'
两个表联合更新某个字段
update update salaries as s join emp_bonus as e on s.emp_no = e.emp_no
set salary = salary*1.1
where to_date = '9999-01-01'
7,alter
当修改数据库表名或者修改数据库表字段时,使用alter
基本语法:
alter table table_name
实例:
修改表名
alter table table_name rename as/to new_table_name
创建外键
alter table table_name add constraint foreign key table_column references table_name2(table_column)
8,子查询
where in/not in
where and in/not in
实例:
两次查询
update salaries set salary = salary*1.1
where to_date = '9999-01-01'
and salaries.emp_no in (select emp_no from emp_bonus)
9,join on
两个乃至多个表联合
基本语法:
table1 as t1 join table2 as t2 on t1.column = t2.column
实例:
两个表关联更改字段
update salaries as s join emp_bonus as e on s.emp_no = e.emp_no
set salary = salary*1.1
where to_date = '9999-01-01'
获取有奖金的员工的信息,以及奖金
select e.emp_no,e.first_name,e.last_name,eb.btype,s.salary,(s.salary * eb.btype * 0.1)as bonus
from employees as e join salaries as s on e.emp_no = s.emp_no
join emp_bonus as eb on e.emp_no = eb.emp_no
where s.to_date = '9999-01-01'
10,limit
limit 分页
基本语法:
limit x,y;
x是偏移量
y要获取的数据量
实例:
11,exists,in
exists:判断是否存在某种条件的记录,如果存在这种记录就返回true,否则则返回false,相当于in
not exsits 相当于 not in
实例:
查找未分配部门的员工信息
exists
select *
from employees as e
where not exists(select emp_no from dept_emp as d where d.emp_no = e.emp_no )
in
select *
from employees as e
where emp_no not in(select emp_no from dept_emp as d)
12,case when then end
分类条件
case when 条件1 then 结果1
when 条件2 then 结果2
else 结果3
end
实例:
select e.emp_no,e.first_name,e.last_name,eb.btype,s.salary,
case when eb.btype = 1 then s.salary * 0.1
when eb.btype = 2 then s.salary * 0.2
else s.salary * 0.3
end as bonus
from emp_bonus as eb,employees as e,salaries as s
where eb.emp_no = e.emp_no
and s.emp_no = e.emp_no
and s.to_date = '9999-01-01'
order by e.emp_no