ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql

2021-10-23 00:03:15  阅读:241  来源: 互联网

标签:ename sal empno emp Mysql where select


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 |
±---------+

标签:ename,sal,empno,emp,Mysql,where,select
来源: https://blog.csdn.net/qq_46489085/article/details/120838650

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有