码叔的网络日志

学习、记录、分享

基本的SELECT语句

2024-01-04

基本的SELECT语句

查询表中指定字段的全部数据

SELECT 字段1,字段2,… 
FROM 表名

查询表中全部字段的全部数据

SELECT * 
FROM 表名

一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符*”。使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的字段数据通常会降低查询效率。通配符的优势是,当不知道所需要的列的名称时,可以通过它获取它们

在生产环境下,不推荐直接使用SELECT * 进行查询

列的别名

  • 重命名一个列

  • 便于计算

  • 紧跟列名,也可以在列名和别名之间加入关键字AS,别名使用双引号,以便在别名中包含空格或特殊的字符

  • 区分大小写

  • AS可以省略

  • 建议别名简短,见名知意

举例:

SELECT employee_id emp_id,last_name AS name,department_id "部门id",salary * 12 "annual sal"
FROM employees;

去除重复行

需求:查询员工表中一共有哪些部门id

错误:没有去重的情况

SELECT department_id
FROM employees;

正确:去重的情况

SELECT DISTINCT department_id

FROM employees;

执行报错:salary和department_id行数不一致

SELECT salary,DISTINCT department_id

FROM employees;

仅仅是没有报错,但是没有实际意义

SELECT DISTINCT department_id,salary
FROM employees;

空值

  • 空值:null

  • null不等同于0,'','null'

  • 控制参与运算

举例:

数据库中部分记录commission_pct字段包含空值

空值参与运算:结果一定为空值

SELECT employee_id,salary * (1 + commission_pct) * l2 "年工资",commission_pct
FROM employees;

实际问题的解决方案:引入IFNULL

SELECT employee_id,salary * (1 + IFNULL(commission_pct,0)) * l2 "年工资",commission_pct
FROM employees;

着重号

若数据库名、表名或者字段名等与数据库中的关键词和保留字重复,需要用着重号(`)包起来

SELECT * 
FROM `ORDER`

查询常数

会给每一行记录都会添加查询的常数

SELECT '常数',123,employee_id,last_name
FROM employees;

显示表结构

DESCRIBE 表名;
或
DESC 表名;

过滤

  • 使用WHERE子句,将不满足条件的行过滤掉

  • WHERE子句紧随FROM子句

SELECT 字段1,字段2,……
FROM 表名
WHERE 过滤条件

举例:

查询90号部门的员工信息

SELECT *
FROM employees
#过滤条件
WHERE department_id = 90;