数据库初学者

-- 主表
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;

-- 局部变量 --在存储过程中使用的变量叫做局部变量 只在存储过程中进行使用

-- 触发器
-- 数据库的备份
--

posted @ 2016-05-09 16:20  java菜鸟变大神  阅读(164)  评论(0)    收藏  举报