mysql -uroot -p111
use kexie;
show tables;
查看表结构:desc dept;部门表 desc emp;员工表 desc salgrade;公司等级表
数据查询DQL
投影:
单表
返回表中所有列
select * from dept;
select * from emp;
select * from salgrade;
返回表中指定列
(人名+月薪)
select ename,sal from emp;
(人名+'月薪为'+月薪)
select ename,'月薪为',sal from emp;
(人名+月薪*12)
select ename,sal*12 from emp;
(人名+年薪)
select ename,sal*12 '年薪' from emp;
查询emp表中 job 的种类
select job from emp;
select distinct job from emp;
(默认是all :select all job from emp; )
多表?
查询员工姓名与其所在部门的位置
select ename,loc from emp,dept ? X;
多表需要有共同属性进行连接
select ename,loc from emp,dept where emp.deptno=dept.deptno;
选择:
查询所在部门new york的员工姓名
select ename from emp,dept where emp.deptno=dept.deptno and loc='new york';
查询姓名为S...的员工姓名
select ename from emp where ename like 'S%';
查询没有COMM津贴的员工姓名
select ename,comm from emp where comm is null;
排序:
order by
按津贴高低进行排序
select ename,comm from emp order by comm desc;
select ename,comm from emp order by comm; (默认asc)
聚集函数:
使用聚集函数count() 、sum、max、min、avg
计算没有津贴的人数
select count(*) from emp where comm is null; //统计元组个数,不跳过空值
select count(1) from emp where comm is null;
select count(empno) from emp where comm is null; //empno为主键,统计一列中值的个数
计算有津贴的人数
select count(comm) from emp; //结果是4 说明聚集函数会自动过滤空值
group by子句 分组 区别where作用在基本表/视图 重点在group by什么 (什么分组)
求各个部门号及相应的部门人数
select deptno,count(empno) from emp group by deptno;
求部门人数大于5人的各个部门号与对应的部门人数
select deptno,count(empno) from emp group by deptno having count(empno)>5 ;
连接查询
等值查询,自身连接,外连接,多表连接
等值查询
select ename,loc from emp,dept where emp.deptno=dept.deptno;
select emp.*,dept.* from emp,dept where emp.deptno=dept.deptno;
自身连接:表与其自己进行连接
MGR是EMPNO的外码
查询每一个员工的员工号的上级领导编号mgr (这个要理解下)
select first.empno,second.mgr from emp first,emp second where first.mgr=second.empno;
外连接:left outer join 表 on(条件)
select * from emp left outer join dept on(emp.deptno=dept.deptno);
嵌套查询:
in子查询
查看部门名字为sales的员工姓名
select ename,dname from emp,dept where emp.deptno=dept.deptno and dname='sales';
select ename from emp where deptno in(select deptno from dept where dname='sales');
exists子查询,不返回任何数据,只产生逻辑真假true false
查询所有员工在sales部门的员工姓名
select ename from emp where exists(
select * from dept where deptno=emp.deptno and dname='sales');
数据更新
插入数据
insert into 表(属性a,属性b,属性c,属性d...);
修改数据
update 表 set 修改后的属性= ? where 原属性= ;
update dept set loc='合肥' where loc='boston';
select * from dept;
删除数据
delete from dept where loc='合肥';
select * from dept;
建立视图
create view newyork_view
as
select deptno,dname from dept where loc='new york';
删除视图
drop view newyork_view;
drop view newyork1_view;
create view newyork1_view as select emp.deptno,emp.ename from dept,emp where emp.deptno=dept.deptno and loc='new york';
查询和基本表是一样的操作
更新视图
update newyork_view
set ename='111'
where ename='king';