mysql+sqlyog 多表查询练习

#创建部门表
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`;

猜你喜欢

转载自www.cnblogs.com/woaiacfun/p/11042938.html