MySQL之简单查询

DQL简介

DQL中主要是用来查询数据库中的数据,不会对数据库中的数据进行改变,查询关键字:SELECT
语法:SELECT 字段名 FROM 表名 [WHERE –> GROUP BY –>HAVING–> ORDER BY];
其中[]中的内容是一些条件。

在使用SELECT之前,先创建一个数据monkey1024:

create database monkey1024;

然后在这个数据库中创建三张表之后初始化数据,sql脚本如下:

create table dept(
    DEPTNO int(2) PRIMARY KEY,
    DNAME varchar(14),
    LOC varchar(13)
);

INSERT INTO dept values(10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO dept values(20, 'RESEARCH', 'DALLAS');
INSERT INTO dept values(30, 'SALES', 'CHICAGO');
INSERT INTO dept values(40, 'OPERATIONS', 'BOSTON');


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)
);



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


create table salgrade(
    GRADE int(11),
    HISAL int(11),
    LOSAL int(11)
);

INSERT INTO SALGRADE VALUES (1,1200,700); 
INSERT INTO SALGRADE VALUES (2,1400,1201); 
INSERT INTO SALGRADE VALUES (3,2000,1401);
INSERT INTO SALGRADE VALUES (4,3000,2001);
INSERT INTO SALGRADE VALUES (5,9999,3001);

注意:mysql在windows下是不区分大小写的,在linux中区分大小写,规则如下:

  • 数据库名与表名是严格区分大小写的;
  • 表的别名是严格区分大小写的;
  • 字段名和字段的别名在所有的情况下均是忽略大小写的;
  • 变量名也是严格区分大小写的;

可以在linux中修改mysql配置使其忽略大小写。

注释

单行注释,注意–后面加个空格

--  这是单行注释

多行注释

/*
    多行注释
*/

简单查询

查询员工姓名:

select ename from emp;

说明:select询句后面跟的是字段名称,select是关键字,select和字段名称之间采用空格隔开,
from后面是要查询的表。

查询员工编号和员工姓名:

select empno,ename from emp;

说明:多个字段之间采用,隔开。

查询emp表中的全部字段:

select * from emp;

说明:开发中不建议使用*,因为会先将其编译成字段,然后再去查询,稍微影响一些性能,而且也不明确,在开发中建议将要查询的字段都写上。

查询员工编号,姓名和年薪

select empno,ename,sal*12 from emp;

说明:字段上可以使用数学表达式,在执行select操作时,该操作不会改变数据库中的值,只是将计算结果展现。

将查询出的字段名称进行重命名

 select empno,ename,sal * 12 as yearsal from emp;

其中as可以省略:

 select empno,ename,sal * 12 yearsal from emp;

可以显示中文:

select empno,ename,sal * 12 as '年薪' from emp;

说明:该操作不会改变数据库中的值,中文需要使用”引上。

条件查询

条件查询需要使用where,并且where需要放到from 表的后面。

查询薪水是5000的员工

select empno,ename,sal from emp where sal = 5000; 

查询job是MANAGER的员工

select empno,ename,job from emp where job = 'manager';

说明:job是varchar类型,后面的值需要使用”引上。

查询薪水不等于5000的员工

select empno,ename,sal from emp where sal <> 5000;

在mysql中<>表示不等于,!=也表示不等于,两者的含义和使用方式是一样的。

between … and …

查询薪水为1600到3000的员工:

select empno,ename,sal from emp where sal >= 1600 and sal <= 3000;

或者使用between…and…

select empno,ename,sal from emp where sal between 1600 and 3000; 

说明:使用between…and… 的范围包括条件的值,即相当于>=和<=。

is null

查询津贴为空的员工:

select empno,ename,comm from emp where comm is null;

查询津贴不为空的员工

 select empno,ename,comm from emp where comm is not null;

and
表示且,可以在where后面可以添加多个限制条件。

查询工作岗位为“MANAGER”并且薪水大于2500的员工

select empno,ename,job,sal from emp where job ='MANAGER' and sal > 2500;

or
表示或,只要满足一项条件即可。

查询出 job 为 SALESMAN 或 job为MANAGER的员工:

select ename,job from emp where job = 'SALESMAN' or job = 'MANAGER';

and和or表达式的优先级

and优先级高于or。

查询薪水大于1800,并且部门编号为20或30的员工:

select * from emp where sal>1800 and (deptno=20 or deptno=30);

说明:因为and优先级高于or,所以将两个or条件使用括号括起来。

in

只要满足一项条件即可,完全可以采用or来表示,采用in会更简洁一些

查询出Job是SALESMAN或者是MANAGER的员工:

select ename,job from emp where job in ('SALESMAN','MANAGER');

查询出薪水不是1600和3000的员工:

select ename,sal from emp where sal not in (1600,3000);

like

模糊查询,在数据量较大的情况下,使用like会影响性能。

查询姓名以M开头的所有员工:

select ename from emp where  ename like 'M%'; 

查询姓名以N结尾的所有员工:

select ename from emp where ename like '%N';

查询姓名中包含O的所有员工:

select ename from emp where ename like '%O%'; 

查询姓名中第二个字母是A的所有员工:

select ename from emp where ename like '_A%';