Mysql练习语句
设置外键:
为已经添加好的数据表添加外键:
语法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表名(对应的表的主键字段名);
例: alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)
|
CONSTRAINT 'SB' FOREIGN KEY (wai_id) REFERENCES 'waibiaoname' (zhu_id)
'SB'是外键别名
use test;
create table DEPT(
DEPTNO BIGINT PRIMARY KEY AUTO_INCREMENT,
DNAME VARCHAR(20),
LOC VARCHAR(20)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table EMP(
EMPNO BIGINT primary key AUTO_INCREMENT,
ENAME VARCHAR(20),
JOB VARCHAR(20),
MGR BIGINT,
HIREDATE DATE,
SAL DOUBLE(7,2),
COMM DOUBLE(7,2),
DEPTNO BIGINT
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
alter table EMP add constraint FK_ID foreign key(DEPTNO) REFERENCES DEPT(DEPTNO);
01.查询每个雇员的编号、姓名、职位。
SELECT EMPNO 编号,ENAME 姓名,JOB 职位 from emp;
02.查询每个雇员的职位,职位。
SELECT JOB 职位 from emp;
03.查询每个雇员的职位,使用DISTINCT消除掉显示的重复行记录。
SELECT DISTINCT JOB 职位 FROM emp;
04.计算出每个雇员的基本年薪,同时查询出雇员的编号、姓名。
SELECT SAL*12 基本年薪,EMPNO 编号,ENAME 姓名 from emp;
05.每个雇员每个月公司会补贴饭食200元,交通补助300元,计算年薪(年薪=(工资+奖金)*12)。//---------------------------
SELECT (SAL+500+IFNULL(COMM,0))*12 年薪,EMPNO 编号,ENAME 姓名 from emp;
06.查询基本工资高于2000的全部雇员信息。
SELECT * from emp where SAL>2000;
07.查询出smith的信息。
SELECT * from emp where ENAME='smith';
08.查询出所有不是CLERK的详细信息。
SELECT * from emp where JOB != 'CLERK';
09.查询出所有销售人员(SALESMAN)的基本信息,并且要求销售人员的工资高于1300。
SELECT * from emp where JOB = 'SALESMAN' and SAL > 1300;
10.查询出工资范围在1500~3000之间的全部雇员信息(包含1500和3000)。
SELECT * from emp where SAL BETWEEN 1500 and 3000;
11.查询出所有经理或者是销售人员的信息,并且要求这些人的基本工资高于1500。
SELECT * from emp where JOB='MANAGER' or JOB='SALESMAN' and SAL>1500;
12.要求查询出所有在1981年雇佣的雇员信息。
SELECT * from emp where HIREDATE like '%1981%';
13.查询所有领取奖金的雇员信息(comm不为空)。//------------------------------
SELECT * from emp where COMM !='';
14.查询所有领取奖金高于100的雇员信息。
SELECT * from emp where COMM>100;
15.查询出雇员编号是7369、7566、9999的雇员信息。
SELECT * from emp where EMPNO='7369' or EMPNO='7566' or EMPNO='9999';
16.查询出所有雇员姓名是以A开头的全部雇员信息。
SELECT * from emp where ENAME like 'A%';
17.查询出雇员姓名第二个字母是M的全部雇员信息。
18.查询出雇员姓名任意位置上包含字母A的全部雇员信息。
19.查询出所有雇员的信息,要求按照工资排序。
20.要求查询所有雇员的信息,按照雇佣日期由先后排序。
21.查询全部雇员信息,按照工资由高到低排序,如果工资相同,则按照雇佣日期由先后排序。
22.查询部门30中的所有员工。
23.查询出所有办事员(CLERK)的姓名,编号和部门编号。
24.查询出奖金高于薪金的员工。
SELECT * from emp where COMM>SAL;
25.查询出奖金高于薪金的60%的员工。
SELECT * from emp where COMM>(SAL*0.6);
26.查询出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。
27.查询出部门10中所有经理,部门20中所有办事员,既不是经理又不是办事员但其薪金大于或等于2000的所有员工的信息。
28.查询出收取奖金的员工的不同工作。
SELECT DISTINCT JOB from emp where NOT ISNULL(COMM) and COMM>0;
39.查询出不收取奖金或收取的奖金低于100的员工。
SELECT * from emp where COMM is null or COMM<100;
40.查询出不带有“R”的员工的姓名。
SELECT ENAME from emp ENAME where ENAME not like '%R%';
41.查询出每个雇员的姓名、职位、领导姓名。//--------------------------------------
SELECT a.ENAME,b.JOB,b.ENAME from EMP a join EMP b on a.MGR=b.EMPNO;
42.查询出所有员工的编号、姓名及其直接上级的编号、姓名,显示的结果按领导年工资的降序排列。
SELECT a.EMPNO,a.ENAME,b.EMPNO,b.ENAME,(b.SAL+IFNULL(b.COMM,0))*12 领导年薪 from EMP a join EMP b on a.MGR=b.EMPNO ORDER BY (b.SAL+IFNULL(b.COMM,0))*12 DESC;
43.查询出在销售部(SALES)工作的员工姓名、基本工资、雇佣日期、部门名称。(不知道销售部编号)。
SELECT e.ENAME,e.SAL,e.HIREDATE,d.DNAME from EMP e,DEPT d where e.DEPTNO = d.DEPTNO and d.DNAME='SALES';
44.查询出所有员工的姓名、部门名称和工资。
SELECT e.ENAME,e.SAL,d.DNAME from EMP e,DEPT d where e.DEPTNO = d.DEPTNO;
45.查询出所有员工的年工资,所在部门名称,按年薪从低到高排序。//--------------------------------------------
SELECT (e.SAL+IFNULL(e.COMM,0))*12 年工资,d.DNAME from EMP e,DEPT d where e.DEPTNO = d.DEPTNO ORDER BY (e.SAL+IFNULL(e.COMM,0))*12 ASC;
46.查询出某个员工的上级主管及所在部门名称,并要求出这些主管中的薪水超过3000。//---------------------------
SELECT e2.ENAME,e2.SAL,d.DNAME from EMP e1 join emp e2 on e1.MGR=e2.EMPNO join dept d on e2.DEPTNO = d.DEPTNO where e2.SAL>=3000;
47.查询出公司的最高和最低工资。
SELECT max(SAL),MIN(SAL) from emp;
48.查询出每个部门的人数、平均工资,只显示部门编号。
select count(*),avg(sal),empno
from emp
group by deptno;
49.查询出每种职位的最高和最低工资。
select max(sal),min(sal),job
from emp
group by job;
50.查询平均工资高于2000的职位信息,以及从事此职位的雇员人数、平均工资。
select count(*),avg(sal),job
from emp
group by job
having avg(sal)>2000;
51查询出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资。
select d.deptno,d.dname,avg(sal),min(sal),max(sal)
from emp e,dept d
where e.deptno=d.deptno
group by d.deptno
having count(empno)>1;
52.查询出部门名称和这些部门的员工信息(数量、平均工资),同时列出那些没有员工的部门。
select dname,count(e.empno) 员工数,avg(e.sal) 平均工资
From emp e right join dept d on e.deptno=d.deptno
group by d.deptno;