目录

  • 一.SQL的分类
  • 二.注释
  • 三.数据的导入
  • 四.基本SELECT语句
  • 五.运算符
    • 算术运算符
    • 比较运算符
    • 逻辑运算符
    • 位运算符
  • 六.排序和分页
    • 排序
    • 分页
  • 七. 多表查询
    • 为什么要多表查询?
    • 多表查询典型错误——笛卡尔积
    • 异表存有相同字段查询不明确的问题
    • 多表查询的分类

一.SQL的分类

1.DDL(data definition language)数据定义语言

2.DML(data manipulation language) 数据操纵语言

3.DCL(Data Control Language)数据控制语言

SQL在windows环境下对大小写不敏感

还有分类为四种或五种的都大同小异,读者可以自行搜索

二.注释

  1. 单行注释
  • #
  1. 多行注释 /**/

多行注释可以嵌套单行注释,但不可以嵌套多行注释

三.数据的导入

  • 命令行的方式
source sql文件的绝对路径
  • 图形化界面以DBeaver为例

ctrl+shift+alt+o快速导入sql脚本

四.基本SELECT语句

  1. SELECT…FROM
# 良好的书写规范
SELECT 字段1,字段2…
FROM 表名;
  1. 别名
# AS是alias的缩写
# 别名是多个单词且没有连字符一定要用"",如 "full name"
SELECT 字段1 别名,字段2 AS 别名…
FROM 表名
  1. 去重
关键字 DISTINCT  用在 SELECT后
  1. 空值参与运算
# 空值与任何值运算的结果还是空值(null)
解决方法:IFNULL(字段,空值替换的值)
  1. 显示表的结构
DESCRIBE 表名 或
DES 表名
  1. 过滤数据
WHERE

五.运算符

算术运算符

+ - * /(div) %(mod)
  • 注意SQL的+没有连接符的作用
  • /(div)得到的结果肯定是浮点型或null
  • 优先级为:先乘除取模再加减

比较运算符

常规:><=<=>=

比较结果为真返回1,为假返回0,其余返回null

值得注意的是:

  • 安全等于 <=> 可以对null进行判断,两边都是null返回1,只有一个null返回0
  • 不等于运算符 <>或!=

字符串与不同类型比较的时候,会发生隐式转换,转换不成功返回0

如:

select 1='a', 0 = 'a'
结果为  0 1
# 安全等于
select 1<=>'1', null <=> null , null <=> 0

其他与null有关的操作符:

is null
is not null
isNull() #函数

模糊查询:

  • % 不确定个数的字符
  • _ 单个字符
  • \ 默认转义字符
# 查询last_name中包含字符'a'的员工信息
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%';# 查询last_name中第二个字符是'a'的员工信息
SELECT last_name
FROM employees
WHERE last_name LIKE '_a%';# 查询last_name中第二个字符是'_'的员工信息
SELECT last_name
FROM employees
WHERE last_name LIKE '_\_%';
# 当然,我们也可以更换默认转义字符
WHERE last_name LIKE '_$_%' ESCAPE '$';

逻辑运算符

  • 逻辑与 &&(and)
  • 逻辑或 ||(or)
  • 逻辑非 !(not)
  • 逻辑异或 xor

位运算符

~ & | ^ >> <<

和c语言一样

六.排序和分页

排序

用order by实现排序,注:没有指定排序方式默认升序

指定排序方式:

  • ascend 升序
  • descend 降序
# 按工资降序排列
select last_name,salary,department_id
from employees
order by salary asc

二级排序

在上面例子中会出现一个问题,工资会有相同的情况,那就会自动按照插入先后排序

当然我们也可以多重排序:

# 按工资降序,部门号升序排列
order by salary asc, department_id

分页

limit (pageNum - 1) * size , size #计算与页码的关系
# 每页显示二十条数据 这是第1页
select  last_name ,salary
from employees
limit 0,20# 第三页
select  last_name ,salary
from employees
limit 40,20

关键字声明顺序要求:

where …
order by …
limit …

从第n条数据后开始查询:

limit 跳过的条目  offset 偏移量#从30条数据后开始查询
select employee_id ,salary
from employees
order by employee_id desc #降序
limit 30 offset 2;

七. 多表查询

为什么要多表查询?

这里有个前置问题就是为什么要分表?
其实还是性能和效率问题,总会有不常使用的字段和可整合的字段,分库分表可以降低数据量,优化储存。

  1. 可以降低网络远程交互次数
  2. 减少加载冗余数据

多表查询典型错误——笛卡尔积

# 出现笛卡尔积错误
# 需求:通过员工表,查询工作地址id
/** employees 107条数据
* departments 27条数据* 查询结果 2889条数据 (28889 = 107 * 27)*/
select employee_id ,location_id
from employees ,departments

可以看到上述错误的结果集是employee与departments做笛卡尔积得到的集合
即: result = employees × departments

原因 没有链接条件或链接不正确

添加链接条件后:

select employee_id ,location_id
from employees ,departments
where employees.department_id =departments.department_id

异表存有相同字段查询不明确的问题

select department_id
from employees ,departments
where employees.department_id =departments.department_id

解决方法:指定表名 (为了便于多表查询,我们通常会给表起别名)

select dp.department_id
from employees ep ,departments dp
where ep.department_id = dp.department_id

如果有n表实现多表查询,至少需要n-1个链接条件

多表查询的分类

  • 等值链接和不等值链接
  • 自链接和非自链接
  • 外链接和内链接
  1. 不等值链接
# 需求:查询员工的工资属于哪个等级
select e.last_name ,e.salary ,jg.grade_level
from employees e ,job_grades jg
where e.salary between jg.lowest_sal and jg.highest_sal
order by  jg.grade_level asc
  1. 自链接
# 需求:查询员工的姓名,员工id,管理者姓名,管理者的员工id
select  e.last_name ,e.employee_id,mag.last_name ,mag.employee_id
from employees e,employees mag
where e.manager_id = mag.employee_id
  1. 内链接与外链接

以下例子均以员工表 (A表)和 部门表 (B表) 为例

  1. inner join,即A ∩ B ,内链接还分为:
  • 隐式内链接
  • 显式内链接
# 隐式内链接
select e.last_name ,d.location_id
from employees e , departments d
where e.department_id = d.department_id # 显式内链接
select e.last_name ,d.location_id
from employees e inner join departments d
on e.department_id = d.department_id

inner可以省略

  1. left outer join,即( A ∩ B ) ∪ A
select e.last_name ,d.location_id
from employees e left outer join departments d
on e.department_id = d.department_id

outer可以省略

  1. right outer join,即( A ∩ B ) ∪ B
select e.last_name ,d.location_id
from employees e right outer join departments d
on e.department_id = d.department_id
  1. left excluding join,即A - ( A ∩ B )
select e.last_name ,d.location_id
from employees e left outer join departments d
on e.department_id = d.department_id
where d.department_id is null
  1. right excluding join,即B - ( A ∩ B )
select e.last_name ,d.location_id
from employees e right outer join departments d
on e.department_id = d.department_id
where e.department_id is null
  1. full outer join, 即A ∪ B
select e.last_name ,d.location_id
from employees e left join departments d
on e.department_id =d.department_id
union all
select e.last_name ,d.location_id
from employees e right join departments d
on e.department_id =d.department_id
where e.department_id is null
  1. outer excluding join,即(A ∪ B) - ( A ∩ B )
select e.last_name ,d.location_id
from employees e left join departments d
on e.department_id =d.department_id
where d.department_id is null
union all
select e.last_name ,d.location_id
from employees e right join departments d
on e.department_id =d.department_id
where e.department_id is null

上面的代码出现了union all,我们来介绍其作用:

union all操作符合并两个或两个以上 SELECT 语句的结果集,相当于 ∪

注意必须保持每条 SELECT 语句中的列的顺序和列的数量相同,也必须拥有相似的数据类型。

如以下使用是错误的:

# 两条 SELECT 语句列顺序不一致
select e.last_name ,d.location_id
from employees e left join departments d
on e.department_id =d.department_id
where d.department_id is null
union all
select ,d.location_id,e.last_name
from employees e right join departments d
on e.department_id =d.department_id
where e.department_id is null

union操作符合并两个或两个以上 SELECT 语句并进行去重处理

UNION ALL 命令和 UNION 命令几乎是等效的,我们要尽可能的使用UNION ALL,效率更高

用using函数简化等值链接

使用条件:

  1. 查询必须是等值连接
  2. 等值连接中的列必须具有相同的名称和数据类型
select  e.last_name ,d.department_name
from employees e join departments d
using(department_id,manager_id)

表atguigu的表,文中的练习和答案可以找我拿(不只文中)

mysql学习第一弹——查询基础相关推荐

  1. 掉进悬崖的小白,捡到python基础秘籍,学习第一周——语法基础,小游戏,无脑循环

    掉进悬崖的小白,捡到python基础秘籍,学习第一周--语法基础,小游戏,无脑循环 人生苦短,我用python 语言的种类: 语言的发展: 什么是python 搭建 Python开发环境: 集成开发环 ...

  2. 大数据HiveSQL学习笔记三-查询基础语法以及常用函数

    大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...

  3. 前端学习第一周-计算机基础,html标签的介绍,其中包括列表,表格以及表单的使用

    前端学习第一周-HTML基础 文章目录 前端学习第一周-HTML基础 前言 DAY 1 计算机组成 计算机网络 DAY 2 vscode快捷方式 HTML骨架 DAY 3 HTML属性 HTML标签 ...

  4. MySQL学习笔记-恶补基础篇

    目录 概述 1.初识数据库 1.1.DataBase 1.2.数据库分类 1.3.DBMS(数据库管理系统) 1.4.命令行操作数据库 2.操作数据库 2.1.操作数据库 2.2.数据库列类型 2.3 ...

  5. ubuntu服务器mysql管理 第一弹

    2019独角兽企业重金招聘Python工程师标准>>> 第一弹.在Ubuntu服务器上安装MySQL 注:服务器管理通过SecureCRT来管理操作. 由于Linux的强大,对于大多 ...

  6. MySQL学习笔记一之基础架构

    MySQL学习笔记一之架构@TOC 架构图如下 Server层 连接器 负责跟客户端建立连接.获取权限.维持和管理连接 客户端如果太长时间没有动静,连接器会将其自动断开,时间由参数wait_timeo ...

  7. matlab 邻近度 离群点_Matlab基础学习第一弹!干货来啦!

    传说中除了生孩子什么都会的Matlab,客官不考虑学一下嘛!(吐血码字快哭了的必必终于放弃了排版) 做project.参加美赛,写论文必备神器,除了当计算器使用,还可以画图,可以处理数字信号,甚至可以 ...

  8. 网络爬虫学习第一弹:urllib库使用

    小道之前有学过一点爬虫,但是面对越来越严峻的就业形势,为了提高自身竞争力,决定系统的学习一下爬虫.用的是崔庆才大大的书.写博作为自己的学习笔记,方便以后复习.欢迎高人补充赐教!小道感激不尽! 网络爬虫 ...

  9. Mysql优化第一弹:彻底征服女朋友

    人世仙家本自殊,何须相见向中途.惊鸿瞥过游龙去,漫恼陈王一事无. 嗨,大家好,我是洛神,性别男.一个来自快乐星球的程序员. 欢迎大家专注我的公众号[程序员洛神],我会不定期发放福利哟~ 前言 这篇文章 ...

最新文章

  1. 2021年大数据Hive(一):​​​​​​​Hive基本概念
  2. 架构设计|异步请求如何同步处理?
  3. ajax请求返回json实例,Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
  4. 阿里中间件再获高度肯定,“三位一体”推动技术普惠
  5. 华为发布《大交通时代》:开启未来数字交通宏图
  6. java写入carbondata_Carbondata使用过程中遇到的几个问题及解决办法
  7. amqp rabbitmq_Spring AMQP RabbitMQ示例
  8. 《圈圈教你玩USB》 第二章 USB 硬件系统设计_测试程序的编写和调试——看书笔记
  9. python设计程序界面_python图形界面(GUI)设计
  10. java 服务器程序部署环境搭建
  11. php条形码宽度,PHP条形码生成封装类
  12. 网友抽中淘宝大奖,怎料小丑竟是自己
  13. ictclas分词系统 java_1-Ictclas50分词系统ForJava
  14. Mysql 5.7 免安装版windows安装完整教程
  15. java方法案例:判断整数是奇数还是偶数
  16. renqun_youhua=2004892,竞价推广链接后缀标识都是什么含义?
  17. RGB图片处理(1)——RGB概念理解
  18. 基于Android课堂学习系统的文献综述
  19. 程序员如何从技术岗转为技术管理层
  20. SOUI视频教程 官方论坛

热门文章

  1. python3杀死进程_Python多处理:优雅地杀死进程
  2. Nginx - 负载均衡
  3. Python基础知识(六):异常处理
  4. 【机器学习】特征选择与稀疏学习
  5. Ansible最佳实践
  6. 聚乙烯醇/全氟磺酸基聚合物重金属吸附膜纳米纤维膜
  7. FS5080E ESOP8 原厂1A电流5V升压双节锂电池开关充电IC
  8. 手把手教你从0到1搭建web ui自动化框架(python3+selenium3+pytest)
  9. java中都有哪些锁?
  10. 遗传算法matlab_科学与艺术的融合:遗传算法绘制蒙娜丽莎