联表查询

where等值查询

on 连接查询

1.内连接

SELECT `grade`,s.id,`name` FROM student  [AS] s INNER JOIN result [AS] r WHERE s.id=r.id

student和result都有的显示

Oracle有full join ,但MySQL中没有,使用union达到目的

2.全连接

SELECT * FROM student LEFT JOIN result ON student.id=result.id
UNION
SELECT * FROM student RIGHT JOIN result ON student.id=result.id

student有的和result有的

3.并集去交集

SELECT * FROM student LEFT JOIN result ON student.id=result.id
WHERE result.id IS NULL
UNION
SELECT * FROM student RIGHT JOIN result ON student.id=result.id
WHERE student.id IS NULL 

student和result的并集去除都有的交集(student和result独有的)

4.左连接

SELECT `grade`,s.id,`name` FROM student  AS s LEFT JOIN result AS r ON s.id=r.id

student表有的都显示,(result有的)student没有的不显示

5.左独有

SELECT `grade`,s.id,`name` FROM student  AS s LEFT JOIN result AS r ON s.id=r.id
WHERE r.id IS NULL 

(student有result没有的数据)

6.右连接

SELECT `grade`,s.id,`name` FROM student  AS s RIGHT JOIN result AS r ON s.id=r.id

result有的都显示,(student有的)result没有的不显示

7.右独有

SELECT * FROM student RIGHT JOIN result ON student.id=result.id
WHERE student.id IS NULL

显示result有的且student没有的

自连接

自己表和自己连接,核心:一张表(假装)拆分为两张一样的表即可

原表(根据id和pid分成两张表,id=pid自连)

SELECT fu.`id`,zi.`pid`,fu.`name` AS 谁,zi.`name` AS 特长
FROM student AS fu JOIN student AS zi ON fu.id=zi.pid

查询到表

分页和排序

order by排序

SELECT * FROM student ORDER BY pwd [ASC]-- 升序排序(默认)(从小到大)
SELECT * FROM student ORDER BY pwd DESC -- 降序排序(从大到小)

limit 分页

SELECT * FROM student LIMIT 0,3-- 从0下标开始取3条数据
SELECT * FROM student LIMIT 6-- 从0下标开始取6条数据
SELECT * FROM student LIMIT (n-1)*pagesize,pagesize
--(n-1)*pagesize起始页,pagesize页面条数

子查询和嵌套查询

嵌套查询指的是一个查询语块可以嵌套在另外一个查询语句块的where子句或者having子句中,前者为子查询或内查询,后者为父查询或外查询

where {这个值是计算出来的}

在where语句中嵌套一个子查询

where (select * from )

SELECT `name`,`id`,`pwd` FROM student
WHERE id IN (SELECT `id` FROM result WHERE grade>60)
ORDER BY pwd

select语法(书写顺序)

SELECT [ALL | DISTINCT]
{*|table.*|[table.field1[AS alias1][,table.field2[AS alias2]][,...]]}
FROM table_name[AS table_alias]
[LEFT|RIGHT|INNER

JOIN table_name2]#联合查询
[WHERE ...]#指定结果需满足的条件
[GROUP BY ....]#指定结果按那几个字段分组
[HAVING ]#过滤分组的记录必须满足的次要条件
[ORDER BY]#指定查询记录按一个或多个条件排序
[LIMIT ]#指定查询的记录从哪条至哪条
#[可选]{必选}

select语法(执行顺序)

具体的执行顺序并不是按照书写的顺序,

而是会经过服务层优化器组件,最终的执行顺序如下:

FROM 
ON
JOIN
WHERE
GROUP BY 
HAVING 
SELECT
DISTINCT
ORDER BY
LIMIT
从最先执行的from操作,到最后执行的limit操作,

每个操作都会产生一个虚拟表,该虚拟表作为下一个处理的输入

MySQL函数

常用函数:(不常用)

数学运算

SELECT ABS(-8)#8绝对值
SELECT CEILING(9.4)#10向上取整
SELECT FLOOR(9.4)#9向下取整
SELECT ROUND(9.6)#10,四舍五入
SELECT ROUND(9.688,1)#9.7,四舍五入并保留一位小数
SELECT CHAR_LENGTH('我妹最漂亮')#5字符串长度
SELECT CONCAT('我妹','最可爱')#我妹最可爱,拼接字符串
SELECT INSERT('小美女最漂亮',1,3,'我妹是小可爱')#我妹是小可爱最漂亮
-- 从1下标开始替换三个字符(小美女)为(我妹是小可爱)
SELECT REPLACE('to be number two','two','one')#to be number one把two替换成one
SELECT LOWER('HELLO WORLD')#hello world转小写
SELECT UPPER('to be number one')#TO BE NUMBER ONE转大写
SELECT INSTR('hongxingerke','n')#3返回第一次出现n的索引
SELECT SUBSTR('我妹是小可爱最漂亮',4,6)#小可爱最漂亮,从下标4开始截取6个
SELECT REVERSE('我妹最漂亮')#亮漂最妹我,反转

日期时间

SELECT LOCALTIME()#2021-07-28 10:26:09本地时间
SELECT CURRENT_DATE()#2021-07-28当前日期
SELECT CURDATE()#2021-07-28当前日期
SELECT NOW()#2021-07-28 10:28:48当前时间
SELECT SYSDATE()#2021-07-28 10:29:23系统时间
SELECT YEAR(NOW())#2021年
SELECT MONTH(NOW())#7月
SELECT DAY(NOW())#28日
SELECT HOUR(NOW())#10时
SELECT MINUTE(NOW())#33分
SELECT SECOND(NOW())#45秒

系统

SELECT SYSTEM_USER()#root@localhost
SELECT USER()#root@localhost
SELECT VERSION()#10.3.7-MariaDB

转义字符

SELECT 'ab\'ac'  #ab'ac

聚合函数

函数名称 描述
count() 记数
sum() 求和
avg() 平均值
max() 最大值
min() 最小值

count记数

SELECT COUNT(*) FROM student#不会忽略null值,本质 计算行数
SELECT COUNT(1) FROM student#不会忽略null值,本质 计算行数
SELECT COUNT(`name`) FROM student #忽略所有null值

执行效率

#列名为主键时count(列名)比count(1)快

列名不为主键,count(1)比count(列名)快

如果表多个列并且没有主键,则count(1)优于count(*)

如果表只有一个字段,则select count(*)最优

SELECT SUM(pid) FROM student
SELECT AVG(pid) FROM student
SELECT MAX(pid) FROM student
SELECT MIN(pid) FROM student

分组 group by

group by

SELECT `pid`,`name`,`id`,AVG(id) FROM student GROUP BY pid HAVING COUNT(`pid`)>2

group by 后不能用where 用having代替where,having类似where 过滤返回的结果

primary key 主键约束,自动创建唯一索引

foreign key 外键约束,外键字段的内容是引用另一表的字段内容

unique index 唯一索引,唯一值但不是主键

drop、delete、truncate之间的区别?

drop删除库或者表,数据和结构定义

delete 和truncate只是删除表的数据

delete可以指定where条件,删除满足条件的记录,tuncate删除所有记录

对于自增字段,delete不会自增值清零,truncate是把表记录和定义都删除了,然后重建表的定义,所以自增主键会重头开始记数

数据库级别的MD5加密

什么是MD5?

主要是增强算法的复杂度和不可逆性

MD5不可逆,具体的值的MD5是一样的

MD5破解网站的原理,背后有一个字典,MD5加密后的值→加密前的值

例子:

INSERT INTO testmd5 VALUES(1,'小可爱','123456')
UPDATE testmd5 SET pwd=MD5(pwd) WHERE id=1
-- 插入时加密
INSERT INTO testmd5 VALUES(2,'小仙女',MD5('123123'))
DELETE FROM testmd5 WHERE id=2  #删除id=2的记录

MysqlSQL语句2☞联表查询、自连接、分页和排序、子查询、常用函数、聚合函数、MD5加密相关推荐

  1. mysql 伪表查询语句_mysql联表批处理操作

    1 概述 mysql中的单表增删改查操作,可以说是基本中的基本. 实际工作中,常常会遇到一些基本用法难以处理的数据操作,譬如遇到主从表甚至多级关联表的情况(如一些历史问题数据的批量处理),考虑到效率问 ...

  2. java mongodb 多表关联查询,多条件查询,分页,排序

    前言: 由于最近项目赶,版本迭代快,不知道大BOSS从哪里听别人说MongoDB用来做关系型数据库好,而且速度快,性能高:听到这话的我,立马就反驳了回去:"MongoDB不支持事物" ...

  3. SQL语句多表查询:【多表连查】和【子查询】

    SQL语句多表查询:[多表连查]和[子查询] 说明:insert.update.delete只针对[一张表]执行操作. 说明:select可以查询一张表.也可以查询多张表. 说明:多表查询分为:[多表 ...

  4. 三、MySQL子查询学习笔记(标量子查询、列子查询、行子查询、表子查询 详解)

    三.MySQL子查询学习笔记 7:子查询 含义: 一条查询语句中又嵌套了另一条完整的select语句,其中被嵌套的select语句,称为子查询或内查询:在外面的查询语句,称为主查询或外查询 分类: 一 ...

  5. 子查询及其分类(标量子查询+列子查询+行子查询+表子查询)

    子查询 什么是子查询 子查询概念 子查询:sub query 子查询是一种常用计算机语言SELECT-SQL语言中嵌套查询下层的程序模块.当一个查询是另一个查询的条件时,称之为子查询. 子查询:指在一 ...

  6. eclipse列名无效_【转】sql使用In语句查询出所有,但子查询列名无效

    本文转自http://www.ddvip.com/tech/100019101.html 原文题目:关于sql语句in的使用注意规则 今天使用sql时候发现一个问题,使用IN查询时,查出主表所有的数据 ...

  7. 基于Metronic的Bootstrap开发框架经验总结(16)-- 使用插件bootstrap-table实现表格记录的查询、分页、排序等处理...

    在业务系统开发中,对表格记录的查询.分页.排序等处理是非常常见的,在Web开发中,可以采用很多功能强大的插件来满足要求,且能极大的提高开发效率,本随笔介绍这个bootstrap-table是一款非常有 ...

  8. mysql子查询字符串位置_MySql基础-子查询

    一.子查询定义 定义: 子查询允许把一个查询嵌套在另一个查询当中. 子查询用()括起来 子查询,又叫内部查询,相对于内部查询,包含内部查询的就称为外部查询. 子查询可以包含普通select可以包括的任 ...

  9. 查询子串_SQL视图、子查询和常见函数的应用

    一.视图 含义:虚拟表,和普通表一样使用,通过表动态生成的数据. 创建语法的关键字 是否实际占用物理空间 使用 视图 CREATE VIEW 没有(只保存了SQL逻辑) 增删改查,一般不能增删改 表 ...

最新文章

  1. 第九天2017/04/18(3、重载/覆盖 PK 重写/重定义、父类子类混搭风、抽象类)
  2. python的类包括_Python的类,复杂吗
  3. 优秀博客-前端博客(转)
  4. python编程30题_python编程30个常用技巧
  5. ZCGL大数据项目优化组件布置
  6. pythontuple数据类型_Python数据类型之Tuple元组实例详解
  7. 常见五大开源网络监控软件测评分析
  8. SpringBoot集成文件 - 如何基于POI-tl和word模板导出庞大的Word文件?
  9. 悬浮动画切换重叠处触发来回闪烁问题
  10. CPU、内存、缓存的关系
  11. 新的天花?高通量如何加速抗猴痘病毒化合物筛选 | MedChemExpress
  12. catti二级笔译综合能力真题_二级笔译CATTI近十年真题及参考答案
  13. [Usaco2007 Nov]tanning分配防晒霜
  14. networks.agent_net Additional property attachable is not allowed
  15. 软件工程第一次作业+反思
  16. 2021年上海市安全员C证考试试题及上海市安全员C证操作证考试
  17. Neutrino追问AMA第8期|Nervos COO 吕国宁:我们的目标是做最好的 Layer 1 主链
  18. 第12周 oj 逆序输出
  19. Python-调试工具:pysnooper模块
  20. 闲谈IPv6-说说IPv6地址分配和BGP

热门文章

  1. 仿QQ好友列表分组折叠效果
  2. vscode主题背景插件_vscode 全透明背景图
  3. 【百度智能云】通过调用baidu_aip对图像进行画质增强
  4. 【PA2012】【BZOJ3502】Tanie linie
  5. vivo手机使用应用沙盒一键修改imsi数据
  6. 程序员应该读的几本书
  7. iPhone12销量惊人,两个月就冲到5G手机市场前二
  8. 动手学强化学习第六章(Dyna-Q算法)
  9. 2019想脱单?这款Python智能化“天气提醒”程序暖心你的小姐姐!
  10. linux killall 源代码,Linux基础命令---杀死进程killall