【MySQL】SELECT语句

文章详细介绍了SQL中的SELECT语句,包括基本结构、别名使用、去重操作、过滤数据的WHERE子句以及显示表结构的DESCRIBE命令。强调了避免使用通配符*以提高查询效率,以及如何处理与保留字冲突的情况。
摘要由CSDN通过智能技术生成

1、基本结构
SELECTFROMSELECT * FROM departments;
> 通过通配符可以获取不知道所需要的列的名称。
> 除非需要使用表中所有的字段数据,最好不要使用通配符‘*’。
> 获取不需要的列数据会降低查询和所使用的应用程序的效率。
> 在生产环境下,不推荐你直接使用SELECT * 进行查询。

SELECT department_id, location_id
FROM departments;
2、别名 AS
  • 通过AS重命名一个列,AS 可以省略。
  • 列的别名,尽量使用双引号(" "),以便在别名中包含空格或特殊的字符并区分大小写。
SELECT last_name AS name, commission_pct comm
FROM employees;

SELECT last_name "Name", salary*12 "Annual Salary"
FROM employees;

SELECT employee_id AS id, first_name fname, job_id "jid" 
FROM employees;
3、增加字段

查询表中数据,对结果增加一列字段test ,字段固定值为’练习’。

SELECT '练习' AS test, employee_id
FROM employees;
4、去重 DISTINCT
  • 使用关键字DISTINCT去除重复行。
  • DISTINCT 需要放到所有列名的前面。
  • DISTINCT 对后面所有列名的组合进行去重。
SELECT DISTINCT department_id
FROM employees;
5、着重号 ‘’

当表名、字段等和保留字、数据库系统或常用方法冲突时,使用一对 ``(着重号)引起来。

SELECT * FROM ORDER;   #错误,字段名和关键字ORDER冲突
SELECT * FROM `order`; #正确用法
6、过滤数据 WHERE
  • 使用WHERE 将不满足条件的行过滤掉。
  • WHERE子句紧随 FROM子句。
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件;

SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90;

在这里插入图片描述

7、显示表结构 DESCRIBE / DESC
  • 使用DESCRIBE 或 DESC 命令查询表结构。
DESCRIBE employees;DESC employees;

各个字段的含义分别解释如下:
Field:表示字段名称。
Type:表示字段类型。
Null:表示该列是否可以存储NULL值。
Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一
部分;MUL表示在列中某个给定值允许出现多次。
Default:表示该列是否有默认值,如果有,那么值是多少。
Extra:表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等。

8、空值运算NULL
  • 所有运算符或列值遇到NULL值,运算的结果都为NULL。
  • 空值不等于空字符串。空值NULL是占用空间的。
SELECT employee_id,salary,commission_pct,
12 * salary * (1 + commission_pct) "annual_sal"
FROM employees;
9、SELECT的执行过程
  • SELECT查询结构
#方式1:
SELECT ...,....,...
FROM ...,...,....
WHERE 多表的连接条件
AND 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...

#方式2:
SELECT ...,....,...
FROM ... JOIN ...
ON 多表的连接条件
JOIN ...
ON ...
WHERE 不包含组函数的过滤条件
AND/OR 不包含组函数的过滤条件
GROUP BY ...,...
HAVING 包含组函数的过滤条件
ORDER BY ... ASC/DESC
LIMIT ...,...
  • SELECT执行顺序
  • 关键字的顺序是不能颠倒的:
    SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT…
  • SELECT 语句的执行顺序:
    FROM -> WHERE -> GROUP BY -> HAVING -> SELECT 的字段 -> DISTINCT -> ORDER BY -> LIMIT
  • 在 SELECT 语句执行步骤的时,每个步骤都会产生一个虚拟表,然后将这个虚拟表传入下一个步骤中作为输入。
  • 需要注意的是,这些步骤隐含在 SQL 的执行过程中,对于我们来说是不可见的。
  • SELECT 是先执行 FROM 这一步的。
10、练习
# 1.查询员工12个月的工资总和,并起别名为ANNUAL SALARY
SELECT employee_id, salary*12 AS 'annual salary'
FROM employees;

# 2.查询employees表中去除重复的job_id以后的数据
SELECT DISTINCT job_id
FROM employees;

# 3.查询工资大于12000的员工姓名和工资
SELECT last_name, salary
FROM employees
WHERE salary > 12000;

# 4.查询员工号为176的员工的姓名和部门号
SELECT last_name, department_id
FROM employees
WHERE employee_id = 176;

# 5.显示表 departments 的结构,并查询其中的全部数据
DESC departments;
SELECT * FROM departments;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值