b站视频:
14-最基本的SELECT...FROM结构_哔哩哔哩_bilibili
8.4 基本查询(Select)语句
数据table: emp员工表创建如下
# 员工表
CREATE TABLE EMP
(EMPNO INT PRIMARY KEY, -- 员工编号ENAME VARCHAR(10), -- 员工名称JOB VARCHAR(9), -- 工作MGR DOUBLE, -- 直属领导编号HIREDATE DATE, -- 入职时间SAL DOUBLE, -- 工资COMM DOUBLE, -- 奖金DEPTNO INT, -- 部门号FOREIGN KEY (DEPTNO) REFERENCES DEPT (DEPTNO)
);INSERT INTO EMP
VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20);
INSERT INTO EMP
VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);
INSERT INTO EMP
VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
INSERT INTO EMP
VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20);
INSERT INTO EMP
VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
INSERT INTO EMP
VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30);
INSERT INTO EMP
VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10);
INSERT INTO EMP
VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-07-13', 3000, NULL, 20);
INSERT INTO EMP
VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO EMP
VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
INSERT INTO EMP
VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-07-13', 1100, NULL, 20);
INSERT INTO EMP
VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);
INSERT INTO EMP
VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20);
INSERT INTO EMP
VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10);
8.4.1 select...from
最基本的select语句:
SELECT 标识选择哪些列
FROM 标识从哪个表中选择
实例1:
select 1+1,3*2;
结果:
实例2:
dual 伪表
select 1+1,3*2
from dual;
结果:
8.4.2 列的别名
语法:AS 别名
说明:
(1)可以给字段取别名、可以给表名取别名
(2)AS 可以省略
(3)如果给字段取别名,如果别名中包含特殊符号,例如“空格”等,建议给别名加上双引号
(4)如果是给表名取别名,那么不能加双引号或单引号,也不能有特殊符号,例如“空格”等
(5)建议别名简短,见名知意
示例:
# 查询员工姓名以及工作
select ENAME as "员工姓名",JOB as "工作"
from emp;
8.4.3 去除重复行
默认情况下,查询会返回全部行,包括重复行
# 查询员工表的部门编号
select DEPTNO
from emp;
结果:
出来所有的部门编号
# 查询员工表的部门编号 select distinct DEPTNO from emp;
结果:
这里有两点需要注意:
-
Distinct 需要放到所有列名的前面,如果写成select ename, distinct deptno from emp;会报错
-
distinct其实是会对后面所有的列名的组合进行去重。你能看到最后的结果是12条,因为这12条部门id不同,都有sal这个属性值。如果你想要都有哪些不同的部分(DEPTNO),只需要写DISTINCT DEPTNO即可,后面不需要再加上其他的列名了。
select distinct DEPTNO, SAL from emp;
结果:
练习:牛客网-SQL 39
8.4.4 空值参与运算
所有运算符或列值遇到null值,运算的结果都为 null
这里你一定要注意,在 MySQL 里面, 空值不等于空字符串。一个空字符串的长度是 0,而一个空值的长 度是空。而且,在 MySQL 里面,空值是占用空间的
NULL不等同于0,'','null';
8.4.5 着重号
我们需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法名冲突。如果真的相同,请在SQL语句中使用一对``(着重号)引起来 例如 mysql> SELECT * FROM ORDER
;
8.4.6 显示表结构
使用DESCRIBE 或 DESC 命令,表示表结构。
# 显示了表中字段的详细信息 desc emp;
结果:
8.4.7 总结
(1)如果SELECT后面是*,那么表示查询所有字段
(2)SELECT后面的查询列表,可以是表中的字段,常量值,表达式,函数
(3)查询的结果是一个虚拟的表
(4)select语句,可以包含5种子句:依次是where、 group by、having、 order by、limit必须照这个顺序。