数据库初学者
-- 主表
CREATE TABLE dept(
id INT PRIMARY KEY AUTO_INCREMENT,
deptname VARCHAR(20)
)
INSERT INTO dept (id,deptname) VALUES(1,'经理部');
INSERT INTO dept (id,deptname) VALUES(4,'秘书部');
INSERT INTO dept(deptname)VALUES('客服部');
-- 副表
CREATE TABLE emp(
id INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
deptid INT , -- 把部门的名称改为部门的id
CONSTRAINT emp_dept_fk FOREIGN KEY( deptid) REFERENCES dept(id) ON UPDATE CASCADE ON DELETE CASCADE,
bossid INT
)
DROP TABLE emp;
INSERT INTO emp (NAME,deptid,bossid) VALUES('王五',2,1);
INSERT INTO emp(NAME,deptid) VALUES('小王1',4);
SELECT * FROM emp;
SELECT * FROM dept;
DELETE FROM dept WHERE id=4;
UPDATE dept SET id=4 WHERE id=2;
-- 多表查询
-- 需求: 查询员工以及其所在的部门(员工的姓名,部门名称)
-- 不推荐进行使用(重复数据) 产生迪卡尔乘积现象 3*4=12 重复的数据
SELECT NAME,deptname FROM emp,dept;
-- 需求: 查询员工以及其所在的部门(员工的姓名,部门名称)
-- 多表查询的规则: 1确定查询哪些表 2)查询哪些字段 3) 表与表之连接的条件(连接条件的数量是表的数量-1)
SELECT NAME,deptname
FROM emp,dept WHERE emp.deptid=dept.id;
-- 另外一种方法 内连接
SELECT NAME,deptname FROM emp INNER JOIN dept ON emp.deptid=dept.id;
-- 使用别名
SELECT e.name ,d.deptname FROM emp e INNER JOIN dept d ON e.deptid=d.id;
-- 查询每个部门的员工
-- 经理部 null
-- 技术部 null
-- 客服部 翠花
-- 秘书部 null
-- (右)外连接 使用右边表去匹配左边表的数据 如果符合条件就显示数据 如何不符合条件 则显示null
SELECT d.deptname,e.name FROM emp e RIGHT OUTER JOIN dept d ON d.id=e.deptid
-- 左连接
SELECT d.deptname ,e.name FROM dept d LEFT OUTER JOIN emp e ON d.id=e.deptid;
-- 自连接
-- 查询员工以及其上司
-- 员工姓名 上司 姓名
-- 翠花 翠花
-- 张三 翠花
-- 李四 张三
-- 王五 翠花
SELECT e.name AS '员工' ,b.name AS '上司' FROM emp e LEFT OUTER JOIN emp b ON e.bossid=b.id;
-- 存储过程
-- 创建存储过程
DELIMITER $ -- $声明 存储过程的结束符
CREATE PROCEDURE pro_test()
BEGIN -- 开始
-- 可以写多个sql语句
SELECT * FROM emp;
END $; -- 结束 $结束符
-- 执行存储过程
CALL pro_test();
-- 参数
-- in 表示的是输入 可以携带数据带到存储过程当中
-- out 表示的是输出 可以从存储过程中返回结构
-- inout 表示的是输入输出 即可以输入功能也可以输出功能
-- 带有输入参数的存储过程
DELIMITER $
CREATE PROCEDURE pro_byid(IN str INT )
BEGIN
SELECT * FROM emp WHERE id= str;
END $;
-- 执行存储过程
CALL pro_byid(4 ) ;
-- 定义带有输出的存储过程
DELIMITER $
CREATE PROCEDURE pro_testout(OUT str VARCHAR(20))
BEGIN
SET str='lisisisi';
END $;
-- 删除存储过程
DROP PROCEDURE pro_testout;
CALL pro_testout(@str);
SELECT @str
SELECT * FROM emp;
-- 变量
-- 如何接受返回的结果
-- 全局变量 (内置变量) mysql数据库中自带的一下变量 (所有的连接都能进行使用)
-- 查看所有的内置的变量
-- show VARIABLES;显示全局变量
-- character_set_client : mysql 服务器接受数据的编码
-- character_set_results : musql服务器输出数据的编码
-- set 变量名=值;
INSERT INTO emp (NAME,deptid,bossid) VALUES('赵六',2,2)
-- 会话变量 值存在于当前客户端与服务器端的一次连接当中 如果断开 那么这个会话变量就全部丢失
-- 定义一个会话变量 set @变量名=值;
SET @a=10;
-- 查看会话变量 select @变量名
SELECT @c;
-- 局部变量 --在存储过程中使用的变量叫做局部变量 只在存储过程中进行使用
-- 触发器
-- 数据库的备份
--

浙公网安备 33010602011771号