1.检索数据
- SHOW 显示某些信息
当你不知道有哪些数据库或库里表的信息等时
如:
show databases;
显示mysql里所有的数据库
输出:
2.use world;show tables;
显示数据库world中所有的表,记住要先选定数据库,用鼠标或者use database-name;
输出:
3.show columns from city;
显示表city中的所有列,共有5列
输出:
每个列是一个字段,返回每一行的字段名、数据类型、是否允许null、键信息、默认值及其他信息。
- SELECT 从一个或多个表中检索信息
- 检索单个列
选中数据库sys;
select variable from sys_config; 检索表sys_config中名为variable的列
输出:
2. 检索多个列
在列名之间加上逗号,最后一个列名后没有逗号
select variable,value,set_time from sys_config; 检索表sys_config中名为variable,value,set_time的列
输出:
3. 检索所有列
可以将所有列名写出来,也可以*代替
select * from sys_config; 检索所有列
4. 检索不同的行
select country from websites; 从表websites中选择列名为country
输出:
可以看到输出结果有5行,但实际上country只有2个,若要不重复输出每个值,可以用关键字distinct:
select DISTINCT country from websites;
输出:
关键字distinct必须放在列名前面,且不是局部作用,而是作用于其后面的所有列
5.指定返回行
select返回所有匹配的行,用limit子句返回指定的行
select country from websites limit 2; 返回前两行
输出:
select country from websites limit 4; 返回前四行
输出:
select country from websites limit 2,2; 返回从第2+1行开始的两行
输出:
5. 使用完全限定的表名
select websites.country from websites limit 4; 选择表websites中的列名country
select websites.country from new_schema.websites limit 4; 选择数据库new_schema中的
表为websites的列country
2.排序检索出的数据
使用select中的order by子句,根据需要排序检索出来的数据。
如果直接输出表的某个列,数据并不是按照纯粹的随机顺序,而是以它在底层表的顺序显示。
子句: 一个子句通常由一个关键字和所提供的数据组成,有些子句必需,有些子句可选。
- from子句,如上一章所示
- order by子句:取一个或多个列名,据此对输出排序。
- 按单个列排序,如:
select country
from websites
order by country;
输出:
- 按多个列排序,如:
select *
from websites
order by column_1,column_2;
如果column_1中的每个值都是唯一的,那就不会再按照column_2排序。
- 关键字DESC:指定排序方向
默认升序排序(从A到Z),还可以降序排序,需要指定DESC关键字。
DESC关键字只作用于直接位于其前面的列。
与DESC相反的关键字是ASC升序。 - 按单个列排序
SELECT *
FROM mydata.emp
order by empno desc;
输出:
workbench不太好用,结果得滚动才能显示全,截图截不全。
- 按多个列排序
SELECT *
FROM mydata.emp
order by deptno desc, empno desc; 分别按列deptno和empno排序,且都是降序
输出:
例:order by与limit组合,找到员工表中工资最高的一行数据。
SELECT *
FROM mydata.emp
order by sal desc
limit 1;
3. 过滤数据
- where子句:指定搜索条件。
where子句在表名(from子句)之后给出。
与order by同时使用时,order by位于where之后。
SELECT *
FROM emp
where sal=1250;
输出:
只返回了sal=1250的所有行。
SELECT *
FROM emp
where sal=1250
order by empno desc;
输出:
- where子句操作符:
- 检查单个值
SELECT *
FROM emp
where sal>=1250
order by sal desc;
输出:
- 不匹配检查
SELECT *
FROM emp
where job<>'manager' 输出除了经理以外人的工资
order by sal desc;
输出:
where job<>'manager’处如果是数字可以不用单引号括起来。
- 范围值检查
用between操作符检查某个范围的值,需要开始值和结束值。
要用and关键字将开始值和结束值分开。
SELECT *
FROM emp
where sal between 1100 and 3000
order by sal desc;
输出:
- 空值检查
在一个列不包含值时,称其为包含空值null。
null:无值,它与字段包含0、空字符串或空格不同。
is null子句:是一个特殊的where子句,检查具有null值的列。
SELECT *
FROM emp
where comm is null
order by sal desc;
输出:
返回comm中是null值的所有行。
4. 数据过滤
4.1 组合where子句
组合where子句建立功能更强的检索条件。
操作符:用来联结或改变where子句中的子句的关键字,也称为逻辑操作符。
- AND操作符
SELECT *
FROM emp
where job='manager' and sal <= 3000 #返回经理中工资小于等于3000的
order by sal desc;
输出:
- OR操作符
SELECT *
FROM emp
where job='clerk' or job='manager'
order by sal;
输出:
- 计算次序:学会用括号
SELECT *
FROM emp
where deptno=10 or deptno=20 and sal <=1300
order by sal;
输出: