【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) 注释

sql 复制代码
单行注释:#注释文字(MySQL特有的方式)
单行注释:-- 注释文字(--后面必须包含一个空格。)
多行注释:/* 注释文字 */

这里的命名规则后面会进行讲解,因为这里也用不到

(4) 数据的导入

数据导入分为两种方法
方法1:在命令行cmd上运用source指令
方法2:在可视化软件上面利用对应的功能

方法1演示:

source指令:source + 文件的完整路径

在命令行下输入对应的指令,就比如这里的source E:\atguigudb.sql,然后后面就会将数据库导入进去

方法2演示:

这里以SQLyog为例子,就是点击执行SQL脚本,然后输入你的文件的位置就可以,然后就可以导入了

导入成功不妨可以查询一下是否导入成功

不难看到这个数据库导入成功了

四,基本的SELECT语句

(1) SELECT...

示例代码

sql 复制代码
SELECT 1, 1*9

看到运行结果,可以看到就是得出一行常数

(2) SLECET...FROM...

语法:

sql 复制代码
SELECT 标识选择哪些列
FROM 标识从哪个表中选择

示例代码:选择全部列

sql 复制代码
SELECT *
FROM departments;

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

sql 复制代码
SELECT first_name, email FROM employees;

(3) 列的别名

三种起列的别名的方法

sql 复制代码
#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) 去除重复行

示例代码:

sql 复制代码
SELECT department_id
FROM employees;

不难看到这里出现了很多重复的10或者20,这个时候需求是看这个id是由哪几种的话,那么就需要进行筛选,要用DISTINCT
SELECT语句中使用关键字DISTINCT去除重复行

sql 复制代码
SELECT DISTINCT department_id
FROM employees;

这样就可以去除重复行了

坑区:当写了两个在字符串内会发生什么

sql 复制代码
SELECT DISTINCT department_id,salary
FROM employees;

这个时候,会将两者结合起来,找到不同的,就是组合找到所有不同的数据展示出来

(5) 空值进行计算

sql 复制代码
#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) 着重号

如果当窝们的数据库的表的名字与关键冲突了,虽然不推荐命名与关键字冲突,但是如果坚决要用,就要使用着重号``

sql 复制代码
SELECT * FROM ORDER;
SELECT * FROM `ORDER`;

五,显示表的结构

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

运用此关键字可以看到表结构

过滤

语法:

sql 复制代码
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件

示例代码:

sql 复制代码
SELECT first_name, email
FROM employees
WHERE first_name = 'Steven';

不难看到这里的数据被过滤了
六,总结

相关推荐
liliangcsdn4 小时前
如何使用python创建和维护sqlite3数据库
数据库·sqlite
TDengine (老段)11 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)11 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
@yanyu66611 小时前
idea中配置tomcat
java·mysql·tomcat
安当加密11 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生
爱喝白开水a11 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
想ai抽11 小时前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库
武子康12 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
longgyy12 小时前
5 分钟用火山引擎 DeepSeek 调用大模型生成小红书文案
java·数据库·火山引擎