select查询语句

本文介绍了SQL查询的基础操作,包括选择字段、别名、条件查询、数学运算、模糊查询和排序。通过示例展示了如何从数据库中选取特定数据,如部门名称、员工薪资、工作岗位等,并讲解了如何进行条件过滤,如工资范围、工作岗位类型,以及如何进行排序展示。此外,还涉及到了模糊查询中的LIKE操作符和通配符使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

select查询语句

简单查询

查询部门名字

mysql> select dname from dept;
+------------+
| dname      |
+------------+
| ACCOUNTING |
| RESEARCH   |
| SALES      |
| OPERATIONS |
+------------+
4 rows in set (0.29 sec)
查询两个字段,或者多个字段使用,隔开

查询部门编号和部门名

mysql> select deptno,dname from dept;
+--------+------------+
| deptno | dname      |
+--------+------------+
|     10 | ACCOUNTING |
|     20 | RESEARCH   |
|     30 | SALES      |
|     40 | OPERATIONS |
+--------+------------+
4 rows in set (0.03 sec)
查询所以字段

方式一

select a,b,c,d,e,f... from tablename;

方式二(效率低,可读性差,在实际开发中不建议)

mysql> select * from dept;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.02 sec)
给查询的列起别名
mysql> select deptno,dname as deptname from dept;
+--------+------------+
| deptno | deptname   |
+--------+------------+
|     10 | ACCOUNTING |
|     20 | RESEARCH   |
|     30 | SALES      |
|     40 | OPERATIONS |
+--------+------------+
4 rows in set (0.03 sec)

省略as


mysql> select deptno,dname deptname from dept;
+--------+------------+
| deptno | deptname   |
+--------+------------+
|     10 | ACCOUNTING |
|     20 | RESEARCH   |
|     30 | SALES      |
|     40 | OPERATIONS |
+--------+------------+
4 rows in set (0.03 sec)

别名带空格

mysql> select deptno,dname  'dept name' from dept;
+--------+------------+
| deptno | dept name  |
+--------+------------+
|     10 | ACCOUNTING |
|     20 | RESEARCH   |
|     30 | SALES      |
|     40 | OPERATIONS |
+--------+------------+
4 rows in set (0.03 sec)

注意:在所有的数据库中,字符串同一使用单引号括起来,单引号是标准,双引号在oracle数据库中用不了,但是在mysql中可以使用。

列参合数学运算
mysql> select ename,sal*12 from emp;
+--------+----------+
| ename  | sal*12   |
+--------+----------+
| SMITH  |  9600.00 |
| ALLEN  | 19200.00 |
| WARD   | 15000.00 |
| JONES  | 35700.00 |
| MARTIN | 15000.00 |
| BLAKE  | 34200.00 |
| CLARK  | 29400.00 |
| SCOTT  | 36000.00 |
| KING   | 60000.00 |
| TURNER | 18000.00 |
| ADAMS  | 13200.00 |
| JAMES  | 11400.00 |
| FORD   | 36000.00 |
| MILLER | 15600.00 |
+--------+----------+
14 rows in set (0.07 sec)

别名为中文

mysql> select ename,sal*12 as '年薪' from emp;
+--------+----------+
| ename  | 年薪     |
+--------+----------+
| SMITH  |  9600.00 |
| ALLEN  | 19200.00 |
| WARD   | 15000.00 |
| JONES  | 35700.00 |
| MARTIN | 15000.00 |
| BLAKE  | 34200.00 |
| CLARK  | 29400.00 |
| SCOTT  | 36000.00 |
| KING   | 60000.00 |
| TURNER | 18000.00 |
| ADAMS  | 13200.00 |
| JAMES  | 11400.00 |
| FORD   | 36000.00 |
| MILLER | 15600.00 |
+--------+----------+
14 rows in set (0.05 sec)
条件查询

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

mysql> select empno,ename from emp where sal = 800;
+-------+-------+
| empno | ename |
+-------+-------+
|  7369 | SMITH |
+-------+-------+
1 row in set (0.13 sec)

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

mysql> select empno,ename from emp where sal != 800;
+-------+--------+
| empno | ename  |
+-------+--------+
|  7499 | ALLEN  |
|  7521 | WARD   |
|  7566 | JONES  |
|  7654 | MARTIN |
|  7698 | BLAKE  |
|  7782 | CLARK  |
|  7788 | SCOTT  |
|  7839 | KING   |
|  7844 | TURNER |
|  7876 | ADAMS  |
|  7900 | JAMES  |
|  7902 | FORD   |
|  7934 | MILLER |
+-------+--------+
13 rows in set (0.04 sec)

或者:
mysql> select empno,ename from emp where sal <> 800;

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

select empno,ename from emp where sal < 2000;

查询工资大于2000的编号和姓名

select empno,ename from emp where sal > 2000;

查询在两个之间的数据

mysql> 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 |
+-------+-------+---------+
5 rows in set (0.04 sec)
mysql> select empno,ename,sal from emp where sal between 2450 and 3000;
+-------+-------+---------+
| empno | ename | sal     |
+-------+-------+---------+
|  7566 | JONES | 2975.00 |
|  7698 | BLAKE | 2850.00 |
|  7782 | CLARK | 2450.00 |
|  7788 | SCOTT | 3000.00 |
|  7902 | FORD  | 3000.00 |
+-------+-------+---------+
5 rows in set (0.04 sec)

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

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

该写法错误,不能使用等号

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

正确写法

mysql> select empno,ename,sal from emp where comm is null;
+-------+--------+---------+
| empno | ename  | sal     |
+-------+--------+---------+
|  7369 | SMITH  |  800.00 |
|  7566 | JONES  | 2975.00 |
|  7698 | BLAKE  | 2850.00 |
|  7782 | CLARK  | 2450.00 |
|  7788 | SCOTT  | 3000.00 |
|  7839 | KING   | 5000.00 |
|  7876 | ADAMS  | 1100.00 |
|  7900 | JAMES  |  950.00 |
|  7902 | FORD   | 3000.00 |
|  7934 | MILLER | 1300.00 |
+-------+--------+---------+
10 rows in set (0.04 sec)

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

mysql> select empno,ename,sal from emp where comm is not null;
+-------+--------+---------+
| empno | ename  | sal     |
+-------+--------+---------+
|  7499 | ALLEN  | 1600.00 |
|  7521 | WARD   | 1250.00 |
|  7654 | MARTIN | 1250.00 |
|  7844 | TURNER | 1500.00 |
+-------+--------+---------+
4 rows in set (0.03 sec)

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

mysql> select empno,ename,sal,job from emp where job = 'MANAGER' and sal >2500;
+-------+-------+---------+---------+
| empno | ename | sal     | job     |
+-------+-------+---------+---------+
|  7566 | JONES | 2975.00 | MANAGER |
|  7698 | BLAKE | 2850.00 | MANAGER |
+-------+-------+---------+---------+
2 rows in set (0.03 sec)

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

mysql> select empno,ename,sal,job from emp where job = 'MANAGER' or job = 'SALESMAN';
+-------+--------+---------+----------+
| empno | ename  | sal     | job      |
+-------+--------+---------+----------+
|  7499 | ALLEN  | 1600.00 | SALESMAN |
|  7521 | WARD   | 1250.00 | SALESMAN |
|  7566 | JONES  | 2975.00 | MANAGER  |
|  7654 | MARTIN | 1250.00 | SALESMAN |
|  7698 | BLAKE  | 2850.00 | MANAGER  |
|  7782 | CLARK  | 2450.00 | MANAGER  |
|  7844 | TURNER | 1500.00 | SALESMAN |
+-------+--------+---------+----------+
7 rows in set (0.03 sec)

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

and和or同时出现有优先级问题

and的优先级比or高

会先执行and,然后执行or,想要or先执行需要加小括号。

mysql> select * from emp where sal > 2500 and deptno=10 or deptno = 20;
+-------+-------+-----------+------+------------+---------+------+--------+
| EMPNO | ENAME | JOB       | MGR  | HIREDATE   | SAL     | COMM | DEPTNO |
+-------+-------+-----------+------+------------+---------+------+--------+
|  7369 | SMITH | CLERK     | 7902 | 1980-12-17 |  800.00 | NULL |     20 |
|  7566 | JONES | MANAGER   | 7839 | 1981-04-02 | 2975.00 | NULL |     20 |
|  7788 | SCOTT | ANALYST   | 7566 | 1987-04-19 | 3000.00 | NULL |     20 |
|  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL |     10 |
|  7876 | ADAMS | CLERK     | 7788 | 1987-05-23 | 1100.00 | NULL |     20 |
|  7902 | FORD  | ANALYST   | 7566 | 1981-12-03 | 3000.00 | NULL |     20 |
+-------+-------+-----------+------+------------+---------+------+--------+
6 rows in set (0.04 sec)

加括号后

mysql> select * from emp where sal > 2500 and (deptno=10 or deptno = 20);
+-------+-------+-----------+------+------------+---------+------+--------+
| EMPNO | ENAME | JOB       | MGR  | HIREDATE   | SAL     | COMM | DEPTNO |
+-------+-------+-----------+------+------------+---------+------+--------+
|  7566 | JONES | MANAGER   | 7839 | 1981-04-02 | 2975.00 | NULL |     20 |
|  7788 | SCOTT | ANALYST   | 7566 | 1987-04-19 | 3000.00 | NULL |     20 |
|  7839 | KING  | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL |     10 |
|  7902 | FORD  | ANALYST   | 7566 | 1981-12-03 | 3000.00 | NULL |     20 |
+-------+-------+-----------+------+------------+---------+------+--------+
4 rows in set (0.04 sec)

使用 in 查询工作岗位是MANAGER和SALESMAN的员工

in 相当于多个or

mysql> select empno,ename,sal,job from emp where job in ('MANAGER','SALESMAN');
+-------+--------+---------+----------+
| empno | ename  | sal     | job      |
+-------+--------+---------+----------+
|  7499 | ALLEN  | 1600.00 | SALESMAN |
|  7521 | WARD   | 1250.00 | SALESMAN |
|  7566 | JONES  | 2975.00 | MANAGER  |
|  7654 | MARTIN | 1250.00 | SALESMAN |
|  7698 | BLAKE  | 2850.00 | MANAGER  |
|  7782 | CLARK  | 2450.00 | MANAGER  |
|  7844 | TURNER | 1500.00 | SALESMAN |
+-------+--------+---------+----------+
7 rows in set (0.05 sec)

使用 in 查询工作岗位不是MANAGER和SALESMAN的员工

mysql> select empno,ename,sal,job from emp where job not in ('MANAGER','SALESMAN');
+-------+--------+---------+-----------+
| empno | ename  | sal     | job       |
+-------+--------+---------+-----------+
|  7369 | SMITH  |  800.00 | CLERK     |
|  7788 | SCOTT  | 3000.00 | ANALYST   |
|  7839 | KING   | 5000.00 | PRESIDENT |
|  7876 | ADAMS  | 1100.00 | CLERK     |
|  7900 | JAMES  |  950.00 | CLERK     |
|  7902 | FORD   | 3000.00 | ANALYST   |
|  7934 | MILLER | 1300.00 | CLERK     |
+-------+--------+---------+-----------+
7 rows in set (0.03 sec)

模糊查询

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

%匹配任意多个字符

下划线,一个下划线只匹配一个字符

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

查询名字中含有O的

mysql> select ename from emp where ename like '%O%';
+-------+
| ename |
+-------+
| JONES |
| SCOTT |
| FORD  |
+-------+
3 rows in set (0.03 sec)

查询名字以T结尾的

mysql> select ename from emp where ename like '%T';
+-------+
| ename |
+-------+
| SCOTT |
+-------+
1 row in set (0.03 sec)

查询名字以K开始的

mysql> select ename from emp where ename like 'K%';
+-------+
| ename |
+-------+
| KING  |
+-------+
1 row in set (0.03 sec)

找出第二个字母是A的


mysql> select ename from emp where ename like '_A%';
+--------+
| ename  |
+--------+
| WARD   |
| MARTIN |
| JAMES  |
+--------+
3 rows in set (0.02 sec)

找出第三个字母是R的

mysql> select ename from emp where ename like '__R%';
+--------+
| ename  |
+--------+
| WARD   |
| MARTIN |
| TURNER |
| FORD   |
+--------+
4 rows in set (0.03 sec)

找出名字有下划线的

\是转义字符

select ename from emp where ename like '%\_%';
排序

查询所有员工薪资并升序

order by sal 后面不写默认是升序

指定升序 asc


mysql> select ename,sal from emp order by sal asc;
+--------+---------+
| ename  | sal     |
+--------+---------+
| SMITH  |  800.00 |
| JAMES  |  950.00 |
| ADAMS  | 1100.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
| MILLER | 1300.00 |
| TURNER | 1500.00 |
| ALLEN  | 1600.00 |
| CLARK  | 2450.00 |
| BLAKE  | 2850.00 |
| JONES  | 2975.00 |
| SCOTT  | 3000.00 |
| FORD   | 3000.00 |
| KING   | 5000.00 |
+--------+---------+
14 rows in set (0.03 sec)

查询所有员工薪资并降序

指定降序 desc

mysql> select ename,sal from emp order by sal desc;
+--------+---------+
| ename  | sal     |
+--------+---------+
| KING   | 5000.00 |
| SCOTT  | 3000.00 |
| FORD   | 3000.00 |
| JONES  | 2975.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| ALLEN  | 1600.00 |
| TURNER | 1500.00 |
| MILLER | 1300.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
| ADAMS  | 1100.00 |
| JAMES  |  950.00 |
| SMITH  |  800.00 |
+--------+---------+
14 rows in set (0.03 sec)

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

mysql> select ename,sal from emp order by sal asc,ename asc;//sal在前,只有sal相等的时候才会考虑启用ename排序
+--------+---------+
| ename  | sal     |
+--------+---------+
| SMITH  |  800.00 |
| JAMES  |  950.00 |
| ADAMS  | 1100.00 |
| MARTIN | 1250.00 |
| WARD   | 1250.00 |
| MILLER | 1300.00 |
| TURNER | 1500.00 |
| ALLEN  | 1600.00 |
| CLARK  | 2450.00 |
| BLAKE  | 2850.00 |
| JONES  | 2975.00 |
| FORD   | 3000.00 |
| SCOTT  | 3000.00 |
| KING   | 5000.00 |
+--------+---------+
14 rows in set (0.03 sec)

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

mysql> select ename,sal from emp where sal between 1250 and 3000 order by sal desc;
+--------+---------+
| ename  | sal     |
+--------+---------+
| SCOTT  | 3000.00 |
| FORD   | 3000.00 |
| JONES  | 2975.00 |
| BLAKE  | 2850.00 |
| CLARK  | 2450.00 |
| ALLEN  | 1600.00 |
| TURNER | 1500.00 |
| MILLER | 1300.00 |
| WARD   | 1250.00 |
| MARTIN | 1250.00 |
+--------+---------+
10 rows in set (0.03 sec)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值