MySQL笔记3 基本的SELECT语句

命令行中导入表

mysql> source d:\mysqldb.sql

使用DESCRIBE 或 DESC 命令,表示表结构。

DESCRIBE employees;
#或 
DESC employees;
mysql> desc employees;
+---------------+---------------+-------+-------+-----------+-------+
| Field 	  	| Type 			| Null 	| Key 	| Default	| Extra |
+---------------+---------------+-------+-------+-----------+-------+
| employee_id 	| int(6) 		| NO 	| PRI 	| 0 		| 		|
| first_name  	| varchar(20) 	| YES 	| 		| NULL 		| 		|
| last_name 	| varchar(25) 	| NO 	| 		| NULL 		| 		|
| email			| varchar(25) 	| NO 	| UNI 	| NULL 		| 		|
| phone_number	| varchar(20) 	| YES	| 		| NULL 		| 		|
| hire_date 	| date 			| NO 	| 		| NULL 		| 		|
| job_id 		| varchar(10) 	| NO 	| MUL 	| NULL 		| 		|
| salary 		| double(8,2) 	| YES 	| 		| NULL 		| 		|
| commission_pct| double(2,2) 	| YES 	| 		| NULL 		| 		|
| manager_id 	| int(6) 		| YES 	| MUL 	| NULL 		| 		|
| department_id | int(4) 		| YES 	| MUL 	| NULL 		| 		|
+---------------+---------------+-------+-------+-----------+-------+
11 rows in set (0.00 sec)

1. SELECT...

SELECT 1; #没有任何子句
SELECT 9/2; #没有任何子句

2. SELECT ... FROM

  • 语法:
    SELECT 标识选择哪些列
    FROM 标识从哪个表中选择
    
  • 选择全部行
	SELECT *
	FROM departments;

在这里插入图片描述

一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符‘*’。使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势是,当不知道所需要的列的名称时,可以通过它获取它们。
在生产环境下,不推荐你直接使用 SELECT * 进行查询

  • 选择特定的列
    SELECT department_id, location_id
    FROM departments;
    
    在这里插入图片描述

MySQL中的SQL语句是不区分大小写的,因此SELECT和select的作用是相同的,但是,许多开发人员习惯将关键字大写、数据列和表名小写,读者也应该养成一个良好的编程习惯,这样写出来的代码更容易阅读和维护。

3. 列的别名

  • 重命名一个列

  • 便于计算

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

  • AS 可以省略

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

  • 举例

    SELECT employee_id emp_id, last_name AS lname,department_id "dept_id"
    FROM employees;
    

在这里插入图片描述

4. 去除重复行

默认情况下,查询会返回全部行,包括重复行

SELECT department_id
FROM employees;

在这里插入图片描述

在SELECT语句中使用关键字DISTINCT去除重复行

SELECT DISTINCT department_id
FROM employees;

在这里插入图片描述

针对于:

SELECT DISTINCT department_id,salary
FROM employees;

这里有两点需要注意:

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

5. 空值参与运算

  • 空值:null
  • null 不等于 0、’’、‘null’
  • 在 MySQL 里面, 空值不等于空字符串。一个空字符串的长度是 0,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的。
  • 所有运算符或列值遇到null值,运算的结果都为null
SELECT employee_id,salary "月工资",commission_pct "奖金率",
12 * salary * (1 + commission_pct) "年工资"
FROM employees;
# 解决方法:使用IFNULL
SELECT employee_id,salary "月工资",commission_pct "奖金率",
12 * salary * (1 + IFNULL(commission_pct,0)) "年工资"
FROM employees;

在这里插入图片描述

6. 着重号

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

  • 错误的:
mysql> SELECT * FROM ORDER;
ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual thatcorresponds to your MySQL server version 
for the right syntax to use near 'ORDER' atline 1
  • 正确的
mysql> SELECT * FROM `ORDER`;

+----------+------------+
| order_id | order_name |
+----------+------------+
| 1 	   | shkstart   |
| 2        | tomcat     |
| 3        | dubbo      |
+----------+------------+

7. 查询常数

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

SELECT '尚硅谷' as corporation, last_name 
FROM employees;

在这里插入代码片

8. 过滤数据

  • 语法:

    SELECT 字段1,字段2
    FROM 表名
    WHERE 过滤条件
    
    • 使用WHERE 子句,将不满足条件的行过滤掉
    • WHERE子句紧随 FROM子句
  • 举例

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值