【MySQL】单表查询

一、表的准备

查询操作的SQL演示将基于下面这四张表进行,我们先创建好这四张数据表,并为其添加数据。

1、第一张表为部门表,名称为包含三个字段:部门编号(deptno),部门名称(dname),部门位置(loc)

create table DEPT(  
  DEPTNO int(2) not null,  
  DNAME  VARCHAR(14),  
  LOC    VARCHAR(13)  
);       

为部门编号字段(deptno)添加主键约束:

alter table DEPT  
  add constraint PK_DEPT primary key (DEPTNO); 

向部门表(dept)中插入数据:

insert into DEPT (DEPTNO, DNAME, LOC)  
values (10, 'ACCOUNTING', 'NEW YORK');  
insert into DEPT (DEPTNO, DNAME, LOC)  
values (20, 'RESEARCH', 'DALLAS');  
insert into DEPT (DEPTNO, DNAME, LOC)  
values (30, 'SALES', 'CHICAGO');  
insert into DEPT (DEPTNO, DNAME, LOC)  
values (40, 'OPERATIONS', 'BOSTON');  

2、第二张表为员工表(emp),该表包含8个字段,分别为员工编号(empno),员工姓名(ename),职位(job),直属领导(mgr),入职日期(hiredate),薪水(sal),补助(comm),所属部门编号(deptno):

create table EMP  
(  
  EMPNO    int(4) primary key,  
  ENAME    VARCHAR(10),  
  JOB      VARCHAR(9),  
  MGR      int(4),  
  HIREDATE DATE,  
  SAL      double(7,2),  
  COMM     double(7,2),  
  DEPTNO   int(2)  
);  

为员工表emp的字段deptno添加外键约束,与部门表(dept)的字段部门编号(deptno)关联:

alter table EMP  
  add constraint FK_DEPTNO foreign key (DEPTNO)  
  references DEPT (DEPTNO);  

向员工表(emp)中插入数据:

insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, null, 20);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, null, 20);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, null, 30);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, null, 10);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, null, 20);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7839, 'KING', 'PRESIDENT', null, '1981-11-17', 5000, null, 10);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, null, 20);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, null, 30);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, null, 20);  
insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)  
values (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, null, 10);  

3、第三张表为薪资等级表,该表包含3个字段,分别为:薪资等级(grade),最低薪资(losal),最高薪资(hisal):

create table SALGRADE  
(  
  GRADE int primary key,  
  LOSAL double(7,2),  
  HISAL double(7,2)  
);  

向薪资等级表(salgrade)中插入数据:

insert into SALGRADE (GRADE, LOSAL, HISAL)  
values (1, 700, 1200);  
insert into SALGRADE (GRADE, LOSAL, HISAL)  
values (2, 1201, 1400);  
insert into SALGRADE (GRADE, LOSAL, HISAL)  
values (3, 1401, 2000);  
insert into SALGRADE (GRADE, LOSAL, HISAL)  
values (4, 2001, 3000);  
insert into SALGRADE (GRADE, LOSAL, HISAL)  
values (5, 3001, 9999);  

4、第四张表为奖金表,该表包含4个字段,分别为:员工姓名(ename),员工工作(job),薪资(sal),comm

create table BONUS  
(  
  ENAME VARCHAR(10),  
  JOB   VARCHAR(9),  
  SAL   double(7,2),  
  COMM  double(7,2)  
);  

二、单表查询

在数据库操作中,单表查询就是在一张表中进行数据的查询。

1、简单的单表查询

对员工表emp表查询,*代表所有数据

select * from emp;

显示部分列:

select empno,ename,sal from emp;

显示部分行:where子句

select * from emp where sal > 2000;

显示部分列,部分行:

select empno,ename,job,mgr from emp where sal > 2000;

2、为查询的字段起别名

为查询的字段起别名可以省略关键字as ,也可以省略了别名带的单引号和双引号:

select empno 员工编号,ename 姓名,sal 工资 from emp; 

为查询的字段起别名时使用关键字as,别名也可以携带单引号或者双引号,两者没有区别:

select empno as 员工编号,ename as 姓名,sal as 工资 from emp;
select empno as '员工编号',ename as "姓名",sal as 工资 from emp;

在别名中有特殊符号的时候,单引号或者双引号不可以省略不写,如下,员工 编号之间有一个空格(空格属于特殊符号)

select empno as 员工 编号,ename as "姓 名",sal as 工资 from emp;

如果别名员工 编号不使用单引号和双引号,就会返回1064错误:

-- > 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '编号,ename as "姓 名",sal as 工资 from emp' at line 1

3、 查询字段时可以使用算术运算符

select empno,ename,sal,sal+1000 as '涨薪后',deptno from emp where sal < 2500;
select empno,ename,sal,comm,sal+comm from emp;  

4、去重操作
对查询到的数据进行去重操作,需要使用关键字distinct

select distinct job from emp;

如果关键字distinct后包含多个列,表示的是对后面的所有列组合去重 ,而不是单独的某一列去重:

select distinct job,deptno from emp; 


5、排序

为查询到的数据排序需要使用关键字order by

默认情况下是按照升序排列的

select * from emp order by sal;

asc 表示升序,可以默认不写

select * from emp order by sal asc; 

desc 表示降序

select * from emp order by sal desc; 

在sal(工资)升序的情况下,deptno(部门编号)按照降序排列

select * from emp order by sal asc ,deptno desc;

猜你喜欢

转载自blog.csdn.net/hold_on_qlc/article/details/130177603