需要用到的文件粘贴代码命名为.sql后缀
#设置编码
SET names utf8;
#丢弃数据库
DROP DATABASE IF EXISTS tedu;
#床建数据库
CREATE DATABASE tedu charset=utf8;
#静茹数据库
USE tedu;
#创建表格
CREATE TABLE dept(
did INT PRIMARY KEY auto_increment,
dname VARCHAR(8) UNIQUE
);
#插入数据
INSERT INTO dept VALUES (10,'研发部');
INSERT INTO dept VALUES (20,'运营部');
INSERT INTO dept VALUES (30,'市场部');
INSERT INTO dept VALUES (40,'测试部');
#创建员工表
CREATE TABLE emp(
id INT PRIMARY KEY auto_increment,
ename VARCHAR(16) NOT NULL,
birsday date,
sex boolean DEFAULT 0, #1-男 0-女
salary DECIMAL(7,2),
deptid INT,
FOREIGN KEY(deptid) REFERENCES dept(did)
);
#插入数据
INSERT INTO emp VALUES(null,'tao',default,'1973-7-15',50000,20);
1,简单查询
条件查询
练习查询部门编号为10的员工
select *from emp where deptid='10'
练习查询部门编号为null的员工
select *from emp where deptid is null
练习:满足7000以上的女员工
select *from emp where salary>7000 and sex='0'
2,复杂查询
1,子查询
示例:查询出高于平均工资的值
步骤一:查询出平均工资——11125
select avg(salary) from emp;
步骤二:查询出工资大于11125的员工
select*from emp where salary >11125;
综合:
select *from emp where salary>select avg(salary) from emp;
练习:查询出和tao同一个部门的员工有哪些?
select *from emp where eid=(select *from emp where eid='tao');
步骤一 :
select deptid from emp where ename="tao";
步骤二:
select *from emp where deptid=20;
综合:
select *from emp where deptid=(select deptid from emp where ename="tao") and ename!='tao';
不包括‘tao’
加上
and ename!='tao'
练习:查询和tom同一年出生的年份
year()获取日期中的年份
2,多表查询
多表查询的数据他是分布在多个表里的
示例:查询所有员工的姓名及其部门名称
select ename,dname from emp,dept;
3,连接
1,内连接
select ename,dname from emp inner join dept on deptid=did;
2,左外连接
select 左数据项,右数据项 from 左数据表 左外显示 右表格 on 左数据=右边数据;
显示左侧表中所有记录,先写那个那个就是做
3,左外连接 RIGHT
select 左数据项,右数据项 from 左数据表 左外显示 右表格 on 左数据=右边数据;
select ename,dname from emp right outer join dept on deptid=did;
显示右侧表中所有记录,后写那个那个就是右
左外和右外显示中outer关键字可以省略
4,全连接
同时显示,左侧和右侧表中所以记录
full join.. on
mysql 不支持此链接
实现方法:
union all 联合后不合并相同的项目
union 联合后合并相同的项目
select ename,dname from emp left outer join dept on deptid=did
union all
select ename,dname from emp right outer join dept on deptid=did
解决方案:将左外和右外连接进行联合,合并相同的相
则代码为:
select ename,dname from emp left outer join dept on deptid=did)union all (select ename,dname from emp right outer join dept on deptid=did