mysql day04

列起别名

给查询的列起别名?

1
2
3
4
5
6
7
8
9
10
mysql >select deptno,dname as deptname from dept;(对deptno只查询,对dname才起别名)
+--------+------------+
| deptno | deptname |
+--------+------------+
| 10 | ACCOUNTING |
| 20 | RESEARCH |
| 30 | SALES |
| 40 | OPERATIONS |
+--------+------------+
4 rows in set (0.001 sec)

使用as关键字起别名,as为alias(别名)的缩写。as可以用空格代替。

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

记住:select语句永远都不会进行修改操作,因为它的功能只负责查询。

假设起别名的时候,别名里面有空格怎么办?

mysql >select deptno,dname dept name from dept;

DBMS看到这样的语句,进行SQL语句的编译的时候,不符合语法,编译错误。

怎么解决?

加引号

mysql >select deptno,dname “dept name” from dept;

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

Ps:使用中文命名时要使用单引号括起来。

列参与数学运算

计算员工年薪?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
mysql > select ename,sal from emp;
+--------+---------+
| ename | sal |
+--------+---------+
| SMITH | 800.00 |
| ALLEN | 1600.00 |
| WARD | 1250.00 |
| JONES | 2975.00 |
| MARTIN | 1250.00 |
| BLAKE | 2850.00 |
| CLARK | 2450.00 |
| SCOTT | 3000.00 |
| KING | 5000.00 |
| TURNER | 1500.00 |
| ADAMS | 1100.00 |
| JAMES | 950.00 |
| FORD | 3000.00 |
| MILLER | 1300.00 |
+--------+---------+
14 rows in set (0.001 sec)
//先查看员工薪资。
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.001 sec)

结论:字段可以使用数字表达式

条件查询

什么是条件查询?

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

语法格式:

select ….字段1,字段2,字段3…from 表名 where 条件;

条件查询需要用到where语句,where必须放到from语句表的后面。

运算符 说明
= 等于
<>或者!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于
between…and… 两个值之间,等同于>= and <=(左小右大)(闭区间)
is null 为null(is not null 不为空)
and 并且
or 或者
in 包含,相当于多个or(not in 不在这个范围中)
not not 可以取非,主要用在is或者in中
like like成为模糊查询,支持%或者下划线匹配, %匹配任意给字符, 下划线,一个下划线只匹配一个字符。

具体方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
MariaDB [hello]> select EMPNO from emp where EMPNO>7900;
+-------+
| EMPNO |
+-------+
| 7902 |
| 7934 |
+-------+
//查询编号大于7900的员工编号。
2 rows in set (0.001 sec)MariaDB [hello]> select ename,empno from emp where sal>790;
+--------+-------+
| ename | empno |
+--------+-------+
| SMITH | 7369 |
| ALLEN | 7499 |
| WARD | 7521 |
| JONES | 7566 |
| MARTIN | 7654 |
| BLAKE | 7698 |
| CLARK | 7782 |
| SCOTT | 7788 |
| KING | 7839 |
| TURNER | 7844 |
| ADAMS | 7876 |
| JAMES | 7900 |
| FORD | 7902 |
| MILLER | 7934 |
+--------+-------+
14 rows in set (0.001 sec)
//查询工资大于790的员工姓名和编号。
MariaDB [hello]> select ename empno from emp where comm is null;
+--------+
| empno |
+--------+
| SMITH |
| JONES |
| BLAKE |
| CLARK |
| SCOTT |
| KING |
| ADAMS |
| JAMES |
| FORD |
| MILLER |
+--------+
//无补助员工名单

注意:在数据库中null不能使用等号进行衡量。需要使用is null,因为数据库中的null代表什么也没有,它不是一个值,所以不能使用等号衡量。

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

and优先级比or高!!!语句会先执行and之后执行or。

解决方案:加括号!

in的用法:

in(’a’,’b’)

1
2
3
4
5
6
7
8
9
10
11
12
13
MariaDB [hello]> select JOB,ename from emp where job in ('CLERK','ANALYST');
+---------+--------+
| JOB | ename |
+---------+--------+
| CLERK | SMITH |
| ANALYST | SCOTT |
| CLERK | ADAMS |
| CLERK | JAMES |
| ANALYST | FORD |
| CLERK | MILLER |
+---------+--------+
6 rows in set (0.001 sec)
//查询工作是分析师和文员的工作人员,用in语句。

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

关于like

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

​ %匹配任意个字符

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
MariaDB [hello]> select ename from emp where ename like '%o%';
+-------+
| ename |
+-------+
| JONES |
| SCOTT |
| FORD |
+-------+
3 rows in set (0.000 sec)
//查询名字里面有o的人名。
MariaDB [hello]> select ename from emp where ename like '%T';
+-------+
| ename |
+-------+
| SCOTT |
+-------+
1 row in set (0.001 sec)
//查询名字后面以t结尾的人名。
MariaDB [hello]> select ename from emp where ename like 'k%';
+-------+
| ename |
+-------+
| KING |
+-------+
1 row in set (0.000 sec)
//查询名字以k开头的人名。
MariaDB [hello]> select ename from emp where ename like '_A%';
+--------+
| ename |
+--------+
| WARD |
| MARTIN |
| JAMES |
+--------+
3 rows in set (0.001 sec)
//查询名字中第二个字母是A的人名。

注意:找出名字中有下划线的

select name from t_student where like ‘%\_%’;

使用转义字符让下划线保留。


mysql day04
https://gaster44.github.io/2023/10/24/mysql-day04/
作者
huangjinhong
发布于
2023年10月24日
许可协议