【mysql】基本的select语句

1. 列的别名

  • as:全称:alias(别名),可以省略
  • 列的别名可以使用一对""引起来,不要使用''。
  • 作用:重命名一个列 ;便于计算
  • 紧跟列名,也可以在列名和别名之间加入关键字AS,别名使用双引号,以便在别名中包含空格或特殊的字符并区分大小写。
  • AS 可以省略
  • 建议别名简短,见名知意
  • 举例
SELECT last_name AS name
FROM employees;

【mysql】基本的select语句

SELECT last_name AS name, department_id "部门id"
FROM employees;

【mysql】基本的select语句

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

【mysql】基本的select语句

# 2. 去除重复行

  • 查询员工表中一共有哪些部门id
SELECT DISTINCT department_id 
FROM employees;

【mysql】基本的select语句

#错误的:没有去重的情况
SELECT department_id
FROM employees;
#仅仅是没有报错,但是没有实际意义。
SELECT DISTINCT department_id,salary
FROM employees;

这里有两点需要注意:

  1. DISTINCT 需要放到所有列名的前面,如果写成SELECT salary, DISTINCT department_id FROM employees会报错。
  2. DISTINCT 其实是对后面所有列名的组合进行去重,你能看到最后的结果是 74 条,因为这 74 个部门id不同,都有 salary 这个属性值。如果想要看都有哪些不同的部门(department_id),只需要写DISTINCT department_id即可,后面不需要再加其他的列名了。

3. 空值参与运算

  • 所有运算符或列值遇到null值,运算的结果都为null
  • null不等同于0,'','null'
SELECT * FROM employees;

【mysql】基本的select语句

  • 空值参与运算:结果一定也为空。
SELECT employee_id,salary "月工资",salary * (1 + commission_pct) * 12 "年工资",commission_pct
FROM employees;

【mysql】基本的select语句

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

IFNULL(a,b) :如果参数a不是null,就加入计算,如果是null就拿参数b来计算

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

【mysql】基本的select语句

  • 注意,在 MySQL 里面, 空值不等于空字符串。一个空字符串的长度是 0,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的

4. 着重号 ``

  • 因为 ORDER 是排序的关键字,所以不能直接作为表名,如果有重名的order表,就使用着重号引起来
  • 错误的
SELECT * FROM order
> 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'order' at line 1
  • 正确的
mysql> SELECT * FROM `ORDER`;
+----------+------------+
| order_id | order_name |
+----------+------------+
|        1 | shkstart   |
|        2 | tomcat     |
|        3 | dubbo      |
+----------+------------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM `order`;
+----------+------------+
| order_id | order_name |
+----------+------------+
|        1 | shkstart   |
|        2 | tomcat     |
|        3 | dubbo      |
+----------+------------+
3 rows in set (0.00 sec)
  • 结论

需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,请在SQL语句中使用一对``(着重号)引起来。

5. 查询常数

  • SELECT 查询还可以对常数进行查询。就是在 SELECT 查询结果中增加一列固定的常数列。这列的取值是我们指定的,而不是从数据表中动态取出的。
  • 你可能会问为什么我们还要对常数进行查询呢?
  • SQL 中的 SELECT 语法的确提供了这个功能,一般来说我们只从一个表中查询数据,通常不需要增加一个固定的常数列,但如果我们想整合不同的数据源,用常数列作为这个表的标记,就需要查询常数。
  • 比如说,对 employees 数据表中的员工姓名进行查询,同时增加一列字段corporation,这个字段固定值为“兮动人”,可以这样写:
  • 加入常数就会在每一行的前面增加一个常数,比如加个公司名为:“兮动人”
SELECT '兮动人' as corporation, last_name 
FROM employees;

【mysql】基本的select语句

6. 显示表结构

DESCRIBE employees; #显示了表中字段的详细信息
或
DESC employees;

【mysql】基本的select语句
其中,各个字段的含义分别解释如下:

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

7. 过滤元素

  • 练习:查询90号部门的员工信息
SELECT * 
FROM employees
#过滤条件,声明在FROM结构的后面
WHERE department_id = 90;

【mysql】基本的select语句

  • 练习:查询last_name为'King'的员工信息
SELECT * 
FROM EMPLOYEES
WHERE LAST_NAME = 'King'; 

【mysql】基本的select语句

  • 注意:mysql在Windows下大小写不敏感,不区分大小写的,如上的字符串 'King' 也是可以任意大小写的

8. 练习

  1. 查询员工12个月的工资总和,并起别名为ANNUAL SALARY
SELECT employee_id, last_name, salary * 12 "ANNUAL SALARY"
FROM employees

【mysql】基本的select语句

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

【mysql】基本的select语句

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

【mysql】基本的select语句

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

【mysql】基本的select语句

  1. 显示表 departments 的结构
DESC departments;

【mysql】基本的select语句

上一篇:常识普及-C++常见的三种内存破坏场景


下一篇:OSS签名Header实现Demo(GoLang)