1. SELECT简单查询作用
通过简单查询,可以查询表中的所有列或者指定列,通过算术运算符、列别名以及消除重复行可以改变查询结果的显示方式。
2. SELECT查询所有列
2.1 语法
SELECT * | 列名1,列名2,...列名n
FROM table;
说明:
1、“*”号代表指定表中的所有列名;
2、“|” 代表“或者”的含义,所以SELECT子句后面可以既可以写“*”,也可以写所有的列名,不能两种方式都写;
3、如果使用第二种方式,每个列名之间必须要用逗号分隔,最后一个列名后面不写逗号;
4、FROM子句后面写要查询的表名;
5、SQL语句的最后需要加分号;
例:查询所有部门信息
SELECT * FROM dept;
或者
SELECT deptno,dname,loc FROM dept;
DEPTNO | DNAME | LOC |
10 | ACCOUNTING | NEW YORK |
20 | RESEARCH | DALLAS |
30 | SALES | CHICAGO |
40 | OPERATIONS | BOSTON |
如上两种查询方式的结果完全相同,建议使用第二种方式,可读性强,效率稍高。
3. SELECT查询指定列
3.1 语法
SELECT 列名1[,列名2,...列名n]
FROM table;
说明:
1、[ ] 中括号里面的内容可以省略;
2、想显示哪列,写对应的列名就可以。
例:查询所有部门的部门编号、部门所在地
SELECT deptno,loc
FROM dept;
查询结果如下:
DEPTNO | LOC |
10 | NEW YORK |
20 | DALLAS |
30 | CHICAGO |
40 | BOSTON |
4. 算术运算符
4.1 算术运算符作用
可以在SELECT子句中使用算术运算符(只对数值型数据起作用),来改变查询结果的显示方式。
算术运算符包括:
运算符 | 作用 |
+ | 加 |
- | 减 |
* | 乘 |
/ | 除 |
例:查询每个员工的姓名,工资,以及工资增加300后的金额。
SELECT ename, sal, sal+300
FROM emp;
查询结果如下:
ENAME | SAL | SAL+300 |
KING | 5000 | 5300 |
BLAKE | 2850 | 3150 |
CLARK | 2450 | 2750 |
JONES | 2975 | 3275 |
MARTIN | 1250 | 1550 |
ALLEN | 1600 | 1900 |
4.2 算术运算符优先级
- 乘除优先于加减
- 相同优先级按照从左至右的顺序依次计算
- 可以使用括号提升优先级
例:比较如下两条SQL语句的查询结果,理解算术运算符优先级。
语句1:
SELECT ename, sal, 12*sal+100
FROM emp;
语句2:
SELECT ename, sal, 12*(sal+100)
FROM emp;
语句1的查询结果如下:
ENAME | SAL | 12*SAL+100 |
KING | 5000 | 60100 |
BLAKE | 2850 | 34300 |
CLARK | 2450 | 29500 |
JONES | 2975 | 35800 |
MARTIN | 1250 | 15100 |
...... | ...... | ...... |
语句2的查询结果如下:
ENAME | SAL | 12*(SAL+100) |
KING | 5000 | 61200 |
BLAKE | 2850 | 35400 |
CLARK | 2450 | 30600 |
JONES | 2975 | 36900 |
MARTIN | 1250 | 16200 |
...... | ...... | ...... |
5. 空值
5.1 空值的含义
空值用NULL表示,表示一种无效的、未知的值,空值不是零,也不是空格。
例:查询员工姓名,岗位,工资,津贴
SELECT ename, job, sal, comm
FROM emp;
查询结果如下,其中SMITH的津贴为NULL值。
ENAME | JOB | SAL | COMM |
SMITH | CLERK | 800.00 | NULL |
ALLEN | SALESMAN | 1600.00 | 300.00 |
WARD | SALESMAN | 1250.00 | 500.00 |
..... | ..... | ..... | ..... |
5.2 空值参与运算
空值参与算术运算,运算后的结果仍为NULL
例:查询员工姓名,工资,津贴,以及工资和津贴的和。
SELECT ename,sal,comm,sal+comm
FROM emp;
查询结果如下,可以看到空值参与算术运算后,结果仍为空值
ENAME | SAL | COMM | SAL+COMM |
SMITH | 800 | NULL | NULL |
ALLEN | 1600 | 300 | 1900 |
WARD | 1250 | 500 | 1750 |
JONES | 2975 | NULL | NULL |
...... | ...... | ...... | ...... |
6. 列别名
6.1列别名作用及语法
列别名用来给查询语句中的列或者表达式重新命名,使语句的可读性更强。
语法:
SELECT 列名1 | 表达式1 [as] [列别名1],
列名2 | 表达式2 [as] [列别名2],
..列名n | 表达式n [as] [列别名n]
FROM table;
说明:
1、列别名可以直接写在列名或者表达式的后面,也可以加as关键子,加不加as没有任何区别,通常不加。
2、如果SELECT子句中有计算表达式,通常使用列别名。
例:查询员工姓名,工资,年薪(年薪=工资*12)
SELECT NAME , SAL , SAL*12 YearSal
FROM EMP;
查询结果如下:注意列的标题显示的是别名
ENAME | SAL | YearSal |
SMITH | 800 | 9600 |
ALLEN | 1600 | 19200 |
WARD | 1250 | 15000 |
JONES | 2975 | 35700 |
...... | ...... | ...... |
注意:以下情况列别名两侧需要添加双引号
1、列别名中包含有空格
2、列别名中包含有特殊字符,如%,- 等。
例:查询员工姓名,工资,年薪(列别名要求Year Sal , 注意中间有空格)
SELECT NAME , SAL , SAL*12 "Year Sal"
FROM EMP;
7. 消除重复行
7.1 消除重复行作用及语法
重复行是查询结果中有完全相同的数据行,如下面结果中第一行和第二行就是重复行。
JOB | DEPTNO |
SALESMAN | 30 |
SALESMAN | 30 |
MANAGER | 30 |
消除重复行是消除相同的查询结果,只保留一行重复数据,使用关键字 DISTINCT 来完成。
语法:
SELECT DISTINCT 列名1,列名2,....列名n
FROM table;
例:执行如下SQL语句,观察结果。
SELECT DISTINCT deptno
FROM emp;
DEPTNO |
10 |
20 |
30 |
上述SQL语句的查询结果为:显示员工表中有几种不同的部门编号。
也可以使用DISTINCT关键字消除多列重复数据(同时考虑所有列的数据重复)
例:执行如下SQL语句,观察结果。
SELECT DISTINCT deptno,job
FROM emp;
DEPTNO | JOB |
20 | CLERK |
30 | SALESMAN |
20 | MANAGER |
30 | MANAGER |
10 | MANAGER |
20 | ANALYST |
10 | PRESIDENT |
30 | CLERK |
10 | CLERK |
可以看出,上述SQL语句的查询结果为:显示员工表中,每个部门有哪些不同的岗位类型。
8.总结
主要讲解了简单查询的几种查询方式,包括查询所有列,指定列,带有算术运算的查询,空值,列别名,以及消除重复行