#创建部门表 CREATE TABLE dept( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARBINARY(20) ); INSERT INTO dept(NAME) VALUES("开发部"),("市场部"),("财务部"); #创建员工表 CREATE TABLE emp( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARBINARY(10), gender CHAR(1),#性别 salary DOUBLE,#薪水 join_date DATE,#入职日期 dept_id INT, FOREIGN KEY (dept_id) REFERENCES dept(id) #外键,关联部门表(部门表的主键) ); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES ('孙悟空','男',7200,'2013-02-21',1); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES ('猪八戒','男',3600,'2010-12-02',2); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES ('唐僧','男',9000,'2008-08-08',2); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES ('白骨精','女',5000,'2015-10-07',3); INSERT INTO emp(NAME,gender,salary,join_date,dept_id) VALUES ('蜘蛛精','女',4500,'2011-03-14',1);
SELECT COUNT(*) FROM emp,dept;
#笛卡尔积 A,B 两个集合,取这两个集合的所有组成情况
SELECT * FROM emp,dept;
#消除无用的数据,内连接查询,外链接查询,子查询
#查询所有员工信息和对应的部门信息
SELECT * FROM emp , dept WHERE emp.`dept_id` = dept.`id`;
id name gender salary join_date dept_id id name
1 孙悟空 男 7200 2013-02-21 1 1 开发部
2 猪八戒 男 3600 2010-12-02 2 2 市场部
3 唐僧 男 9000 2008-08-08 2 2 市场部
4 白骨精 女 5000 2015-10-07 3 3 财务部
5 蜘蛛精 女 4500 2011-03-14 1 1 开发部
#查询员工表的名称,员工表的性别,部门名称
SELECT emp.`name` , emp.`gender`,dept.`name` FROM emp,dept WHERE emp.`dept_id` = dept.`id`;
SELECT
t1.name,t1.gender,t2.name
FROM
emp t1,dept t2
WHERE
t1.`dept_id` = t2.`id`;
name gender name
孙悟空 男 开发部
猪八戒 男 市场部
唐僧 男 市场部
白骨精 女 财务部
蜘蛛精 女 开发部
#左外连接 查询左表的所有数据以及其交集部分
SELECT t1.*,t2.`name` FROM emp t1 LEFT JOIN dept t2 ON t1.`dept_id` = t2.`id`;
id name gender salary join_date dept_id name
1 孙悟空 男 7200 2013-02-21 1 开发部
5 蜘蛛精 女 4500 2011-03-14 1 开发部
2 猪八戒 男 3600 2010-12-02 2 市场部
3 唐僧 男 9000 2008-08-08 2 市场部
4 白骨精 女 5000 2015-10-07 3 财务部
#右外连接
SELECT t1.*,t2.`name` FROM emp t1 RIGHT JOIN dept t2 ON t1.`dept_id` = t2.`id`;