简单查询

查询一个字段:

select 字段名 from 表名;

其中要注意:

select和from都是关键字。
字段名和表名都是标识符。

强调:

对于SQL语句来说,是通用的,
所有的SQL语句以“;”结尾。
另外SQL语句不区分大小写,都行。

实例:

a. 查询部门名字

mysql>select dname from dept;

mysql (2)-单表查询_mysql (2)-单表查询

查询两个字段,或者多个字段使用逗号隔开“,”。

b. 查询部门编号和部门名

select deptno,dname from dept;

mysql (2)-单表查询_mysql (2)-单表查询_02

c. 查询所有字段

第一种方式:可以把每个字段都写上
select a,b,c,d,e,f... from tablename;

第二种方式:可以使用*

select * from dept;

mysql (2)-单表查询_mysql (2)-单表查询_03

这种方式的缺点:
1、效率低
2、可读性差。

在实际开发中不建议,可以自己玩没问题。你可以在DOS命令窗口中想快速的看一看全表数据可以采用这种方式。

d. 给查询的列起别名

mysql> select deptno,dname as deptname from dept;

mysql (2)-单表查询_mysql (2)-单表查询_04

使用as关键字起别名。

注意:只是将显示的查询结果列名显示为deptname,原表列名还是叫:dname

像是查询语句临时复制了一个备份,然后对备份进行了修改,通过create可保存,这个备份
记住:select语句是永远都不会进行修改操作的。(因为只负责查询)

as关键字可以省略吗?可以的
mysql> select deptno,dname deptname from dept;

起别名时,别名里有空格不符合语法,解决办法:

select deptno,dname 'dept name' from dept; //加单引号
select deptno,dname "dept name" from dept; //加双引号

mysql (2)-单表查询_mysql (2)-单表查询_05

·  注意:在所有的数据库当中,字符串统一使用单引号括起来,

单引号是标准,双引号在oracle数据库中用不了。但是在mysql中可以使用。

再次强调:数据库中的字符串都是采用单引号括起来。这是标准的。双引号不标准。

e. 查询时对字段使用数学表达式

实例:

mysql> select ename,sal from emp;

mysql (2)-单表查询_mysql (2)-单表查询_06

mysql> select ename,sal*12 from emp;

mysql (2)-单表查询_mysql (2)-单表查询_07

同时使用别名和数学表达式

mysql (2)-单表查询_mysql (2)-单表查询_08

条件查询

什么是条件查询?

不是将表中所有数据都查出来。是查询出来符合条件的。

语法格式:

select

字段1,字段2,字段3....

from

表名

where

条件;

都有哪些条件?

运算符

= 等于

查询薪资等于800的员工姓名和编号?

select empno,ename from emp where sal = 800;

查询SMITH的编号和薪资?

select empno,sal from emp where ename = 'SMITH'; //字符串使用单引号

<>或!= 不等于

查询薪资不等于800的员工姓名和编号?

select empno,ename from emp where sal != 800;

select empno,ename from emp where sal <> 800; // 小于号和大于号组成的不等号

< 小于

查询薪资小于2000的员工姓名和编号?

mysql> select empno,ename,sal from emp where sal < 2000;

<= 小于等于

查询薪资小于等于3000的员工姓名和编号?

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

> 大于

查询薪资大于3000的员工姓名和编号?

select empno,ename,sal from emp where sal > 3000;

>= 大于等于

查询薪资大于等于3000的员工姓名和编号?

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

between ⋯ and ⋯

两个值之间, 等同于 >= and <=

查询薪资在2450和3000之间的员工信息?包括2450和3000

第一种方式:>= and <= (and是并且的意思。)

select empno,ename,sal

from emp

where sal >= 2450 and sal = 3000;

第二种方式:between ⋯ and ⋯

select empno,ename,sal

from emp

where sal between 2450 and 3000;

注意:

用between and的时候,必须遵循左小右大。

between and是闭区间,包括两端的值。

is null 为 null(is not null 不为空)

询哪些员工的津贴/补助为null?

mysql> select empno,ename,sal,comm from emp where comm = null;

Empty set (0.00 sec)

mysql> select empno,ename,sal,comm from emp where comm is null;

mysql (2)-单表查询_mysql (2)-单表查询_09

注意:在数据库当中null不能使用等号进行衡量。需要使用is null

因为数据库中的null代表什么也没有,它不是一个值,所以不能使用

等号衡量。

查询哪些员工的津贴/补助不为null?

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

mysql (2)-单表查询_mysql (2)-单表查询_10

and 并且

查询工作岗位是MANAGER并且工资大于2500的员工信息?

select

empno,ename,job,sal

from

emp

where

job = 'MANAGER' and sal > 2500;

mysql (2)-单表查询_mysql (2)-单表查询_11

or 或者

查询工作岗位是MANAGER和SALESMAN的员工?

select

empno,ename,job

from

emp

where

job = 'MANAGER' or job = 'SALESMAN';

mysql (2)-单表查询_mysql (2)-单表查询_12

and和or同时出现的话,有优先级问题吗?

查询工资大于2500,并且部门编号为10或20部门的员工?

select

*

from

emp

where

sal > 2500 and deptno = 10 or deptno = 20;

分析以上语句的问题?

and优先级比or高;

以上语句会先执行and,然后执行or。

以上这个语句表示什么含义?

找出工资大于2500并且部门编号为10的员工,或者20部门所有员工找出来。

select

*

from

emp

where

sal > 2500 and (deptno = 10 or deptno = 20);

and和or同时出现,and优先级较高。如果想让or先执行,需要加“小括号”以后在开发中,如果不确定优先级,就加小括号就行了。

in 包含,相当于多个 or (not in 不在这个范围中)

查询工作岗位是MANAGER和SALESMAN的员工?

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

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

mysql (2)-单表查询_mysql (2)-单表查询_13

注意:in不是一个区间。in后面跟的是具体的值。

查询薪资是800和5000的员工信息?

select ename,sal from emp where sal = 800 or sal = 5000;

select ename,sal from emp where sal in(800, 5000); //这个不是表示800到5000都找出来。

mysql (2)-单表查询_mysql (2)-单表查询_14

not in 表示不在这几个值当中的数据。

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

mysql (2)-单表查询_mysql (2)-单表查询_15

not 可以取非,主要用在 is 或 in 中

is null

is not null

in

not in

like

称为模糊查询,支持%或下划线匹配

%匹配任意多个字符

下划线:任意一个字符。

(%是一个特殊的符号,_ 也是一个特殊符号)

找出名字中含有O的?

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

找出名字以T结尾的?

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

找出名字以K开始的?

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

找出第二个字每是A的?

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

找出第三个字母是R的?

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

排序

查询所有员工薪资,排序?

select ename,sal from emp order by sal; // 默认是升序!!!

mysql (2)-单表查询_mysql (2)-单表查询_16

怎么降序?

指定降序:

select ename,sal from emp order by sal desc;

mysql (2)-单表查询_mysql (2)-单表查询_17

指定升序?

select ename,sal from emp order by sal asc;

mysql (2)-单表查询_mysql (2)-单表查询_18

可以两个字段排序吗?或者说按照多个字段排序?

查询员工名字和薪资,要求按照薪资升序,如果薪资一样的话,

再按照名字升序排列。

select ename,sal from emp order by sal asc, ename asc; // sal在前,起主导,只有sal相等的时候,才会考虑启用ename排序。

mysql (2)-单表查询_mysql (2)-单表查询_19

根据字段的位置也可以排序

select ename,sal from emp order by 2; // 2表示第二列。第二列是sal

按照查询结果的第2列sal排序。

了解一下,不建议在开发中这样写,因为不健壮。

因为列的顺序很容易发生改变,列顺序修改之后,2就废了。

综合一点的案例:

找出工资在1250到3000之间的员工信息,要求按照薪资降序排列。

mysql (2)-单表查询_mysql (2)-单表查询_20

关键字顺序不能变:

select...

from...

where...

order by...

以上语句的执行顺序必须掌握:

第一步:from

第二步:where

第三步:select

第四步:order by(排序总是在最后执行!)

数据处理函数

数据处理函数又被称为单行处理函数

单行处理函数的特点:一个输入对应一个输出。

和单行处理函数相对的是:多行处理函数。(多行处理函数特点:多个输入,对应1个输出!)

单行处理函数常见的有哪些?

lower 转换小写

mysql> select lower(ename) as ename from emp;

mysql (2)-单表查询_mysql (2)-单表查询_21

upper 转换大写

mysql> select upper(name) as name from t_student;

substr 取子串(substr( 被截取的字符串, 起始下标,截取的长度))

select substr(ename, 1, 1) as ename from emp;

注意:起始下标从1开始,没有0.

找出员工名字第一个字母是A的员工信息?

第一种方式:模糊查询

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

第二种方式:substr函数

select

ename

from

emp

where

substr(ename,1,1) = 'A';

首字母大写?

select name from t_student;

select upper(substr(name,1,1)) from t_student;

select substr(name,2,length(name) - 1) from t_student;

select concat(upper(substr(name,1,1)),substr(name,2,length(name) - 1)) as result from t_student;

concat函数进行字符串的拼接
select concat(empno,ename) from emp;


length 取长度
select length(ename) enamelength from emp;

trim 去空格
mysql> select * from emp where ename = '  KING';
Empty set (0.00 sec)

mysql> select * from emp where ename = trim('   KING');

str_to_date 将字符串转换成日期
date_format 格式化日期
format 设置千分位