表数据
Create Table
部门表
CREATE TABLE `t_dept` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dept_name` varchar(255) DEFAULT NULL COMMENT '部门名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
员工表
Create Table
CREATE TABLE `t_emp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`emp_name` varchar(255) NOT NULL COMMENT '员工姓名',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`email` varchar(255) DEFAULT NULL,
`salary` decimal(10,0) DEFAULT NULL COMMENT '工资',
`gender` int(1) NOT NULL COMMENT '性别',
`birthday` date DEFAULT NULL COMMENT '生日',
`dept_id` int(11) DEFAULT NULL COMMENT '部门id',
`job_id` int(11) DEFAULT NULL COMMENT '岗位id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
职位表
Create Table
CREATE TABLE `t_job` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`job_name` varchar(255) DEFAULT NULL COMMENT '岗位名称',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8
1.什么是连接查询,连接查询的分类
什么是连接查询?
从多表联合查取出最终结果
连接查询的分类
(1)根据语法来划分
SQL92
SQL99(常用)
(2)根据连接方式划分
内连接:
等值连接
非等值连接
自连接
外连接:
左外连接(左连接)
右外连接(右连接)
全连接
2.笛卡尔积怎么产生的,如何解决笛卡尔积
笛卡尔积的产生
当两张表进行连接查询在没有条件限制的情况下,两张表记录数的乘积
如何解决笛卡尔积
添加查询条件
3.内连接与外连接的区别
内连接两个表没有主副之分关系是平等的,而外链接列如A和B两个表,A为主表B为副表主要查询的是A表
的数据,如果副表与主表的数据不匹配,副表自动模拟出null与之匹配
4.内连接的用法
内连接:等值连接 特点:连接条件是等量关系
SQL92:
SELECT * FROM t_dept t,t_emp p WHERE t.id=p.dept_id;
SQL99:(常用,inner可以省略)
SELECT * FROM t_dept t JOIN t_emp p ON t.id=p.dept_id;
==
select * from t_dept t inner join t_emp e on t.id=e.dept_id;
内连接:非等值连接 特点:连接条件是非等量关系
SELECT * FROM t_dept t JOIN t_emp p ON t.sal between p.lsal and p.psal;
内连接:自连接 特点:将自身一个表看成两个表进行连接查询
SELECT * FROM t_emp t1,t_emp t2 WHERE t1.job_id=t2.job_id;
5.外连接的用法(特点无条件查询主表数据)
外连接:右外连接(已右表为基准表,左表与之进行匹配查询,没有匹配的数据用null进行拼接)
SELECT * FROM t_dept t RIGHT OUTER JOIN t_emp t2 ON t.id=t2.dept_id;(outer可以省略)
外连接:左外连接(已左表为基准表,右表与之进行匹配查询,没有匹配的数据用null进行拼接)
SELECT * FROM t_dept t LEFT OUTER JOIN t_emp t2 ON t.id=t2.dept_id;(outer可以省略)