Mysql语句的分类
SQL语句有很多,最好进行分门别类,这样更容易记忆
注意
MySQL是不见分号不执行
分号表示结束
分为:
-
DQL: .数据查询语言(凡是带有select关键字的都是查询语句)
例如:
select… . -
DML:数据操作语言(凡是对表当中的数据进行增删改的都是DML)
例如:
insert delete update
insert增
delete删
update改
这个主要是操作表中的数据data. -
DDL数据定义语言
凡是带有create. drop、 al ter的都是DDL.
DDL主要操作的是表的结构。不是表中的数据.
create:新建,等同于增
drop:删除
alter:修改
这个增删改和DML不同,这个主要是对表结构进行操作。 -
TCL:
是事务控制语言
包括:
事务提交: comnit;事务画滚:rollback; -
DCL:是数据控制语言
例如:
授权grant 撤销权限revoke
语句的使用
- 查看表的数据
selecr *from 表名
- 只查看表的结构,不查看数据
desc 表名
显示结果类似如下
- 查看当前使用的是什么数据库
select database();
- 查找一个字段
select 字段名 from 表名;
其中要注意:
select 和form都是关键去。
字段名和表名都是标识符.
强调:对于SQL语句来说,是通用的,
所有的SQL语句以分号结尾。
另外SQL语句不区分大小写,都行.
- 查找多个字段
-select 字段名1,字段名2 form 表名;
标题 条件查询
14.1、什么是条件查询?
不是将表中所有数据都查出来。是查询出来符合条件的。
语法格式:
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;
+-------+-------+---------+
| empno | ename | sal |
+-------+-------+---------+
| 7566 | JONES | 2975.00 |
| 7698 | BLAKE | 2850.00 |
| 7782 | CLARK | 2450.00 |
| 7788 | SCOTT | 3000.00 |
| 7902 | FORD | 3000.00 |
+-------+-------+---------+
第二种方式: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;
+-------+--------+---------+------+
| empno | ename | sal | comm |
+-------+--------+---------+------+
| 7369 | SMITH | 800.00 | NULL |
| 7566 | JONES | 2975.00 | NULL |
| 7698 | BLAKE | 2850.00 | NULL |
| 7782 | CLARK | 2450.00 | NULL |
| 7788 | SCOTT | 3000.00 | NULL |
| 7839 | KING | 5000.00 | NULL |
| 7876 | ADAMS | 1100.00 | NULL |
| 7900 | JAMES | 950.00 | NULL |
| 7902 | FORD | 3000.00 | NULL |
| 7934 | MILLER | 1300.00 | NULL |
+-------+--------+---------+------+
10 rows in set (0.00 sec)
注意:在数据库当中null不能使用等号进行衡量。需要使用is null
因为数据库中的null代表什么也没有,它不是一个值,所以不能使用
等号衡量。
查询哪些员工的津贴/补助不为null?
select empno,ename,sal,comm from emp where comm is not null;
±------±-------±--------±--------+
| empno | ename | sal | comm |
±------±-------±--------±--------+
| 7499 | ALLEN | 1600.00 | 300.00 |
| 7521 | WARD | 1250.00 | 500.00 |
| 7654 | MARTIN | 1250.00 | 1400.00 |
| 7844 | TURNER | 1500.00 | 0.00 |
±------±-------±--------±--------+
and 并且
查询工作岗位是MANAGER并且工资大于2500的员工信息?
select empno,ename,job,sal from emp where job =
‘MANAGER’ and sal > 2500;
±------±------±--------±--------+
| empno | ename | job | sal |
±------±------±--------±--------+
| 7566 | JONES | MANAGER | 2975.00 |
| 7698 | BLAKE | MANAGER | 2850.00 |
±------±------±--------±--------+
or 或者
查询工作岗位是MANAGER和SALESMAN的员工?
select empno,ename,job from emp where job = ‘MANAGER’; select
empno,ename,job from emp where job = ‘SALESMAN’;select empno,ename,job from emp where job = 'MANAGER'
or job = ‘SALESMAN’;
±------±-------±---------+ | empno | ename | job | ±------±-------±---------+ | 7499 | ALLEN | SALESMAN | |
7521 | WARD | SALESMAN | | 7566 | JONES | MANAGER | | 7654 |
MARTIN | SALESMAN | | 7698 | BLAKE | MANAGER | | 7782 | CLARK
| MANAGER | | 7844 | TURNER | SALESMAN |
±------±-------±---------+
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');
+-------+--------+----------+
| empno | ename | job |
+-------+--------+----------+
| 7499 | ALLEN | SALESMAN |
| 7521 | WARD | SALESMAN |
| 7566 | JONES | MANAGER |
| 7654 | MARTIN | SALESMAN |
| 7698 | BLAKE | MANAGER |
| 7782 | CLARK | MANAGER |
| 7844 | TURNER | SALESMAN |
+-------+--------+----------+
注意: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都找出来。
±------±--------+
| ename | sal |
±------±--------+
| SMITH | 800.00 |
| KING | 5000.00 |
±------±--------+
select ename,sal from emp where sal in(800, 5000, 3000);
not in 表示不在这几个值当中的数据。 select ename,sal from emp where sal not
in(800, 5000, 3000);
±-------±--------+
| ename | sal |
±-------±--------+
| ALLEN | 1600.00 |
| WARD | 1250.00 |
| JONES | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| TURNER | 1500.00 |
| ADAMS | 1100.00 |
| JAMES | 950.00 |
| MILLER | 1300.00 |
±-------±--------+
not 可以取非,主要用在 is 或 in 中
is null is not null in not in
like
称为模糊查询,支持%或下划线匹配
%匹配任意多个字符
下划线:任意一个字符。
(%是一个特殊的符号,_ 也是一个特殊符号)
找出名字中含有O的?
mysql> select ename from emp where ename like ‘%O%’; ±------+
ename | ±------+ | JONES | | SCOTT | | FORD | ±------+
- 找出名字以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 name from t_student where name like ‘%_%’; //这样不行。
mysql> select name from t_student where name like ‘%_%’; // \转义字符。
±---------+ | name | ±---------+ | jack_son |
±---------+