【MySQL】第二章 基本的SELECT语句
一,SQL的概述
(1)SQL的背景知识
SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言, 与数据直 接打交道 ,由 IBM 上世纪70年代开发出来。后由美国国家标准局(ANSI)开始着手制定SQL标准, 先后有 SQL-86 , SQL-89 , SQL-92 , SQL-99 等标准在不同的软件上编写SQL是不一样的,比如Oracle和MySQL里面一些语句是一样的,因为所有的语言都是要按照SQL规范的去制定的,但是除此之外,它们还有自己的特殊的语言
二,SQL的分类
SQL的语言分类主要分为以下3个大类
(1) DDL:数据定义语言
CREATE \ ALTER \ DROP \ RENAME \ TRUNCATE(2) DML:数据操作语言
INSERT \ DELETE \ UPDATE \ SELECT (重中之重)(3) DCL:数据控制语言
COMMIT \ ROLLBACK \ SAVEPOINT \ GRANT \ REVOKE查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言)。还有单独将 COMMIT 、 ROLLBACK 取出来称为TCL (Transaction Control Language,事务控制语言)。
三,SQL语言的规则和规范
(1) SQL的符号和指令书写
1. SQL 可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进
每条命令行以 ; 或 \g 或 \G 结束(这个是在cmd上可以,在SQLyog不可以)
关键字不能被缩写也不能分行2. 关于标点符号(超级简单不需要记忆)必须保证所有的()、单引号、双引号是成对结束的必须使用英文状态下的半角输入方式字符串型和日期时间类型的数据可以使用单引号(' ')表示列的别名,尽量使用双引号(" "),而且不建议省略as(2) SQL的大小写书写
MySQL的书写在Window环境下大小写是不敏感的MySQL的书写在Linux环境下大小写是敏感的数据库名、表名、表的别名、变量名是严格区分大小写的关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的。推荐采用统一的书写规范:数据库名、表名、表别名、字段名、字段别名等都小写SQL 关键字、函数名、绑定变量等都大写(3) 注释
单行注释:#注释文字(MySQL特有的方式) 单行注释:-- 注释文字(--后面必须包含一个空格。) 多行注释:/* 注释文字 */
这里的命名规则后面会进行讲解,因为这里也用不到
(4) 数据的导入
数据导入分为两种方法
方法1:在命令行cmd上运用source指令
方法2:在可视化软件上面利用对应的功能方法1演示:
source指令:source + 文件的完整路径
在命令行下输入对应的指令,就比如这里的source E:\atguigudb.sql,然后后面就会将数据库导入进去
方法2演示:
这里以SQLyog为例子,就是点击执行SQL脚本,然后输入你的文件的位置就可以,然后就可以导入了
导入成功不妨可以查询一下是否导入成功
不难看到这个数据库导入成功了
四,基本的SELECT语句
(1) SELECT...
示例代码
SELECT 1, 1*9
看到运行结果,可以看到就是得出一行常数
(2) SLECET...FROM...
语法:SELECT 标识选择哪些列 FROM 标识从哪个表中选择
示例代码:选择全部列
SELECT * FROM departments;
一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符‘*’。使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势是,当不知道所需要的列的名称时,可以通过它获取它们。在生产环境下,不推荐你直接使用 SELECT * 进行查询推荐使用选取特定行SELECT first_name, email FROM employees;
(3) 列的别名
三种起列的别名的方法
#6. 列的别名 # 1. 直接空格 # 2. as:全称:alias(别名),可以省略 # 3. 列的别名可以使用一对""引起来,不要使用''。 SELECT employee_id emp_id,last_name AS lname,department_id "部门id",salary * 12 AS "annual sal" FROM employees;
双引号一般用到如果别名有空格的时候使用
AS是增加可读性质的
虽然这里的" " 写成 ' ' 在MySQL不会报错,但是根据ANSI规定,是' ' 用来表示字符串的," " 是用来起别名的,在Oracle中弄混会报错,MySQL不严谨,所以为此养成好的习惯(4) 去除重复行
示例代码:
SELECT department_id FROM employees;
不难看到这里出现了很多重复的10或者20,这个时候需求是看这个id是由哪几种的话,那么就需要进行筛选,要用DISTINCT
在SELECT语句中使用关键字DISTINCT去除重复行SELECT DISTINCT department_id FROM employees;
这样就可以去除重复行了
坑区:当写了两个在字符串内会发生什么
SELECT DISTINCT department_id,salary FROM employees;
这个时候,会将两者结合起来,找到不同的,就是组合找到所有不同的数据展示出来
(5) 空值进行计算
#8. 空值参与运算 # 1. 空值:null # 2. null不等同于0,'','null' SELECT * FROM employees;#3. 空值参与运算:结果一定也为空。 SELECT employee_id,salary "月工资",salary * (1 + commission_pct) * 12 "年工资",commission_pct FROM employees; #实际问题的解决方案:引入IFNULL SELECT employee_id,salary "月工资",salary * (1 + IFNULL(commission_pct,0)) * 12 "年工资",commission_pct FROM `employees`;
直接运用空值进行运算的话,那么就会导致全NULL的情况
这个时候就要引入IFNULL了
(6) 着重号
如果当窝们的数据库的表的名字与关键冲突了,虽然不推荐命名与关键字冲突,但是如果坚决要用,就要使用着重号``
SELECT * FROM ORDER; SELECT * FROM `ORDER`;
五,显示表的结构
使用DESCRIBE 或 DESC 命令,表示表结构运用此关键字可以看到表结构
过滤
语法:SELECT 字段1,字段2 FROM 表名 WHERE 过滤条件
示例代码:
SELECT first_name, email FROM employees WHERE first_name = 'Steven';
不难看到这里的数据被过滤了
六,总结