尚硅谷MySQL笔记 3-9

我不会记录的特别详细

大体框架

  • 基本的Select语句
  • 运算符
  • 排序与分页
  • 多表查询
  • 单行函数
  • 聚合函数
  • 子查询

第三章 基本的SELECT语句

SQL分类

这个分类有很多种,大致了解下即可

  • DDL(Data Definition Languages、数据定义语言),定义了不同的数据库、表、视图、索引等数据库对象,也可以用来创建、删除、修改数据库和数据表的结构。
    常见的CREATEDROPALTER
  • DML(Data Manipulation Language、数据操作语言),用于添加、删除、更新和查询数据库记录,并检查数据完整性。
    主要包括INSERTDELETEUPDATESELECT等。SELECT用的最多.
  • DCL(Data Control Language、数据控制语言),用于定义数据库、表、字段、用户的访问权限和安全级别。
    主要包括GRANTREVOKECOMMITROLLBACKSAVEPOINT等。

SQL的规则与规范

规则

这个必须遵守

  • 每条命令以;或\g或\G结束
  • 关键字不能被缩写也不能分行,更不能在中间插入空格,如select写成sel ect,错误
  • 字符串和日期时间类型的数据可以使用单引号(‘’)表示
  • 列的别名用双引号(“”),建议加上as

规范

  • windows下对大小写不敏感
  • Linux下大小写敏感,比如数据库名大写和小写不一样,但是关键字、函数名、列名及其别名是忽略大小写的
  • 推荐的规范
  • -SQL关键字、函数名、绑定变量都大写,其余的都小写

注释

单行注释 #和–,多行注释 /**/

# 单行注释
-- 单行注释
/*多行注释
*/

命名规则

这个了解即可

  • 库名,表名不得超过30个字符,变量名限制为29个字符
  • 同一个MySQL软件中,库名必须唯一,同一个库中,表名必须唯一,同一个表中,字段名唯一
  • 若关键字与字段名冲突且坚持使用,用着重号(``)把字段引起来
    例子
create database a;//正确
create database a;//错误,已经存在
use a;
create table order(id int);//错误,order是关键字
create table `order`(id int);//正确

数据导入指令

source sqlFile

基本的Select语句

select … from TableName;

为什么不推荐使用*
因为获取所有的列会降低性能,让效率变低

列的别名

就比如你要计算年工资,你总不能存一个年工资和月工资把,这样浪费空间,还不是起一个别名
注意事项
别名使用双引号,列名和别名之间加入AS,若别名有空格必须使用双引号,别名要见名知义
例子:

SELECT name,salary,salary * 12 AS "annual salary" FROM employee;

DISTINCT

去重的,对所在列以及后面的列去重
例如:

SELECT DISTINCT departmentId From employee;//对departmentId进行去重
SELECT DISTINCT departmentId,salary FROM employee;//对部门id和工资这个组合进行去重
/*
若有两条记录
departmentId salary
1			  8000
1			  7800
那么这两条记录会保留
若两条记录是
departmentId salary
1				8000
1				8000
这个是保留一个
*/

NULL参与运算

只要有NULL结果必定为NULL
注意:NULL不是空,他占存储空间,NULL的长度为空

查询常数

这个我没有试过,明天试试
就比方说我想要把公司A的所有部门都列出来,格式如下:

公司A部门名称
公司A部门1
公司A部门2
公司A部门3

可以这么写

SELECT "公司A",departmentName from deparments;

显示表结构

DESC或者DESCRIBE

DESCRIBE departments;
desc departments;

结果中有两列是Key和Extra,只记录这两个

  • Key:表示该列是否已编制索引。PRI表示该列是表主键的一部分(主键可以有多个列组成);UNI表示该列是UNIQUE索引的一部分(复合索引);MUL表示在列中某个给定值允许出现多次。
  • Extra:该列的附加信息,例如AUTO_INCREMENT等等

where

这个太简单了,不记录了

第四章 运算符

算数运算符

加->+
减->-
乘->*
除->/
取余->%,比如 17 % 5 = 2 (17 -3*5)

比较运算符

这个很简单,简要记录
真为1,假为0,其他为null

  • 不等于:<>,!=
  • 大于(等于):>(>=)
  • 小于(等于):<(<=)

等号运算符

  • 若两边都是字符串,比较的是ASCII码是否相等
    若是整数就是比较数值大小
  • 若一个是字符串,另一个是整数,MySQL会把字符串转换为数字进行比较
  • 若有一个为null,那么结果必定为null

安全等于运算符 <=>

他比等于多一个对null的判断,只有他是针对null的,就是当两边都是null的时候返回1;一边为null一边不为null返回0

SELECT NULL <=> NULL, 1<=>1;

逻辑运算符

与或非,异或没了,这里简单记录,
注意这里只要有一个参数是NULL那么结果必定为NULL,优先级:NOT > AND > OR(XOR)

运算符规则例子
NOT 或!若为0结果为1,若为1,结果为0SELECT NOT
AND 或 &&同一则一,有一个0就是0SELECT 1 && 1
OR 或 ||有一个一就是一,全为0结果就是0SELECT 1 OR 0
XOR两个不一样就是1,一样就是0SELECT 1 XOR 0

位运算符

我的理解就是把操作数转换为补码按照指定的运算符的规则进行运算,再把结果转换为十进制数字
支持的运算符

运算符含义例子
&按位与(AND)SELECT A & B
|按位或(OR)SELECT A | B
^按位异或(XOR)SELECT A ^ B
~按位取反SELECT ~A
>>按位左移SELECT A <<1
<<按位右移SELECT B >>1

解释: 以 8 和-2 为例
8转换为补码是 0 1000
-2的原码是 1 0010
-2的反码是 1 1101
-2的补码是 1 1110

8 & -2
   0 1000
& 1 1110
——————
   0 1000
这里直接转二进制即可,结果是8

8 | -2
   0 1000
|  1 1110
——————
   1 1110
最高位是1,是负数,要求真值,对1 1110取补等于1 0010 转换为二进制数为-2 ,但是显示的结果是18446744073709551614,应该是默认情况下数字以bigint类型存储的,bigint类型是8个字节,他的结果解释方式应该是把二进制解释成无符号数,要不然不会这么大的数字,如果是按照这么来的话,那1 1110需要进行符号位扩展,扩展如下
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110 ,就是在1 1110的最高位1前面加了79个1,把这一串数字转换为十进制等于18446744073709551614

8 ^ -2
   0 1000
|  1 1110
——————
   1 0110
符号位扩展,扩展成64位,扩展结果
1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 0110,把这东西转换为十进制18446744073709551606

~ -2
-2的补码(64位)等于1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1110

# 1111 1111 -> 0000 0000 
# 1111 1111 -> 0000 0000 
# 1111 1111 -> 0000 0000 
# 1111 1111 -> 0000 0000
# 1111 1111 -> 0000 0000
# 1111 1111 -> 0000 0000
# 1111 1110 -> 0000 0001
# 从上到下,把->后面的数字串起来为1前面63个0,当成无符号数,转换为十进制为1,所以答案就是1

1 >> 2
tips:在一定的条件下,可以当作除以2的n次幂来用
右移的规则:右移指定的位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0补齐。
这里不做符号位扩展了,简要的记录一下
1的补码是0 1,右移一位,01的最低位1就没了,高位补零,那么直接移成了0
1 << 2
tips: 在一定的条件下,可以当成乘以2的n次幂来用
就是乘以了2n,n就是右移的位数,可能会溢出

优先级

在这里插入图片描述

其他运算符

  • IS NULL: 判空的
  • IS NOT NULL:判非空的
  • LEAST:返回多值中的最小值
SELECT LEAST(1,2,3,4) FROM DUAL;
  • GREATEST:返回多值中的最大值
SELECT GREATEST(1,2,3,4) FROM DUAL;
  • BETWEEN AND:判断值是否在指定的区间内,区间是左闭右闭的
SELECT 2 between 1 and 2;
  • ISNULL:判空
  • IN: 判断一个值是否为列表中的任意一个值
    一般是在子查询里面用的比较多
SELECT 2 NOT IN (1,2);
  • NOT IN:判断一个值是否不是一个列表中的任意一个值
SELECT 2 NOT IN (1,2);
  • LIKE 运算符:匹配字符串的,模糊匹配
    %是通配零个或多个字符的
    _是只能匹配一个字符的
SELECT 'abcd' LIKE 'a__d';
  • ESCAPE:回避特殊符号的,\也可以
    比方说,查找前两个字符是EM,第三个字符是%或者_的
    :取消_,%的匹配作用
    ESCAPE:指定一个字符充当\的作用,这个言简意赅点,
    指定字符后面紧挨着的第一个匹配符号(_,%)失效,这个不太常用
SELECT DepartmentId FROM DEPT WHERE DepartmentId like 'EM\%'or DepartmentId like 'EM\_';//这个用的比较少,了解
SELECT DepartmentId FROM DEPT WHERE DepartmentId like 'EMa%' ESCAPE 'a'or DepartmentId like 'EMb_' ESCAPE 'b';
  • REGEXP运算符
    这里要用到点正则表达式的东西,这个用到了去网上搜
    正则表达式简要了解下,这东西能写出一本书出来

‘^’:匹配以该字符后面的字符开头的字符串
‘$’:匹配以该字符前面的字符结尾的字符串
'. ': 匹配任何一个但字符
“[…]”:匹配出现在方括号里面的字符,如匹配所有字母:[a-zA-Z]
‘*’:匹配零个或多个在它前面的字符,

扩展 正则表达式

常应用于检索字符串,提取数字,验证等等
MySQL支持的
在这里插入图片描述

  1. 查询以特定字符或字符串开头的记录:
    在name列查询以ea开头的记录
SELECT * FROM `user` where name REGEXP '^ea';
  1. 查询以特定字符或字符串结尾的记录:
    在name列查询以or结尾的记录
SELECT * FROM `user` where name REGEXP 'or$';
  1. 用符号’.'通配一个字符,查询name列字段值中包含ea且e和a之间只有一个字母的记录
SELECT * FROM `user` where name REGEXP 'e.a';
  1. 用’*‘和’+'匹配多个字符:在name列中查找以字母c开头且c后面出现字母e至少一次的记录
SELECT * FROM `user` where name REGEXP '^ce+';
  1. 匹配指定字符串,可以匹配多个
  • 在name列中查找包含ea的记录
SELECT * FROM `user` WHERE name REGEXP 'ea';
  • 在name列中查找包含ea和or的记录
SELECT * FROM `user` WHERE name REGEXP 'ea | or';
  1. 匹配指定字符中任意一个,就是方括号的用法
    在name列中查找包含字母abced和 wxy的记录
SELECT * FROM `user` WHERE name REGEXP '[a-dw-y]
  1. 匹配指定字符以外的字符 "[^字符集合]"匹配不在指定集合中的任何字符
    在name列中查找id字符串包含a-h和数字1-8以外字符的记录
SELECT * FROM `user` WHERE id REGEXP '[^a-h1-8]';
  1. 使用{n,}或者{n,m}来指定字符串连续出现的次数,“字符串{n,}”表示至少匹配n次前面的字符;“字符串{n,m}”表示匹配前面的字符串不少于n次,不多于m次。例如,or{2,}表示or连续出现至少2次,也可以
    大于2次;ea{2,4}表示ea连续出现最少2次,最多不能超过4次。

运算符一章完成,明天完成排序的一半

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/39946.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目难点:解决IOS调用起软键盘之后页面样式布局错乱问题

需求背景 &#xff1a; 开发了一个问卷系统重构项目&#xff0c;刚开始开发的为 PC 端&#xff0c;其中最头疼的一点无非就是 IE 浏览器的兼容适配性问题&#xff1b; 再之后项目经理要求开发移动端&#xff0c;简单的说就是写 H5 页面&#xff0c;到时候会内嵌在 App 应用、办…

multiple definition of......first defined here

一、背景 环境&#xff1a; 银河麒麟–ARM–GCC7.4.0 写了一个动态库&#xff0c;依赖opencv和freeImage等第三方库&#xff0c;用cmake进行编译。原本在centos6-x86-gcc7.5.0上面进行编译非常的顺利&#xff0c;但是拿到麒麟arm上面编译就提示了这个错误&#xff1a;这个报错…

Ruby软件外包开发语言特点

Ruby 是一种动态、开放源代码的编程语言&#xff0c;它注重简洁性和开发人员的幸福感。在许多方面都具有优点&#xff0c;但由于其动态类型和解释执行的特性&#xff0c;它可能不适合某些对性能和类型安全性要求较高的场景。下面和大家分享 Ruby 语言的一些主要特点以及适用的场…

【C语言】动态通讯录 -- 详解

⚪前言 前面详细介绍了静态版通讯录【C语言】静态通讯录 -- 详解_炫酷的伊莉娜的博客-CSDN博客&#xff0c;但是静态版通讯录的空间是无法被改变的&#xff0c;而且空间利用率也不高。为了解决静态通讯录这一缺点&#xff0c;这时就要有一个能够随着存入联系人数量的增加而增大…

Ansys Zemax | 手机镜头设计 - 第 1 部分:光学设计

本文是 3 篇系列文章的一部分&#xff0c;该系列文章将讨论智能手机镜头模组设计的挑战&#xff0c;从概念、设计到制造和结构变形的分析。本文是三部分系列的第一部分&#xff0c;将专注于OpticStudio中镜头模组的设计、分析和可制造性评估。&#xff08;联系我们获取文章附件…

安防监控视频云存储平台EasyNVR通道频繁离线的原因排查与解决

安防视频监控汇聚EasyNVR视频集中存储平台&#xff0c;是基于RTSP/Onvif协议的安防视频平台&#xff0c;可支持将接入的视频流进行全平台、全终端分发&#xff0c;分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。为了满足用户的集成与二次开发需求&#xf…

企业计算机服务器遭到了locked勒索病毒攻击如何解决,勒索病毒解密

网络技术的不断发展&#xff0c;也为网络安全埋下了隐患&#xff0c;近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的计算机服务器遭到了locked勒索病毒的攻击&#xff0c;导致企业的财务系统内的所有数据被加密无法读取&#xff0c;严重影响了企业的正常运行。最近…

如何通过观测云的RUM找到前端加载的瓶颈--可观测性入门篇

声明与保证 本文写作于2023年6月&#xff0c;性能优化的评价标准和优化方式仅适用于当前观测云控制台&#xff0c;当然随着产品迭代及技术更新&#xff0c;本文也会应要求适当更新。 创建、修订时间创建修改人版本2023/6/24观测云***v1.0.0 1.网站性能评价的发展史&#xff…

打开vim的语法高亮

在一个Ubuntu中自带的vim版本是8.2.4919&#xff0c;默认就是开始了语法高亮的&#xff0c;打开一个Java文件效果如下&#xff1a; 它不仅仅对Java文件有语法高亮&#xff0c;对很多的文件都有&#xff0c;比如vim的配置文件也有语法高亮&#xff0c;有语法高亮时读起来会容易…

DNNGP模型解读-early stopping 和 batch normalization的使用

一、考虑的因素&#xff08;仅代表个人观点&#xff09; 1.首先我们看到他的这篇文章所考虑的不同方面从而做出的不同改进&#xff0c;首先考虑到了对于基因组预测的深度学习方法的设计 &#xff0c;我们设计出来这个方法就是为了基因组预测而使用&#xff0c;这也是主要目的&…

排序算法-冒泡排序(C语言实现)

简介&#x1f600; 冒泡排序是一种简单但效率较低的排序算法。它重复地扫描待排序元素列表&#xff0c;比较相邻的两个元素&#xff0c;并将顺序错误的元素交换位置&#xff0c;直到整个列表排序完成。 实现&#x1f9d0; 以下内容为本人原创&#xff0c;经过自己整理得出&am…

WAVE SUMMIT2023六大分会场同步开启,飞桨+文心大模型加速区域产业智能化!

由深度学习技术及应用国家工程研究中心主办、百度飞桨和文心大模型承办的WAVE SUMMIT深度学习开发者大会2023将于8月16日重磅来袭&#xff01;届时上海、广州、深圳、成都、南昌和宁波六大分会场将同步开启&#xff01; 分会汇聚区域产业大咖、科研机构专家、知名学者和技术大…

【C++ 学习 ⑬】- 详解 list 容器

目录 一、list 容器的基本介绍 二、list 容器的成员函数 2.1 - 迭代器 2.2 - 修改操作 三、list 的模拟实现 3.1 - list.h 3.2 - 详解 list 容器的迭代器 3.2 - test.cpp 一、list 容器的基本介绍 list 容器以类模板 list<T>&#xff08;T 为存储元素的类型&…

【第二阶段】kotlin函数引用

针对上篇传入函数参数我们也可以重新定义一个函数&#xff0c;然后在main中调用时传入函数对象 lambda属于函数类型的对象&#xff0c;需要把普通函数变成函数类型的对象&#xff08;函数引用&#xff09;&#xff0c;使用“&#xff1a;&#xff1a;” /*** You can edit, ru…

DRF 缓存

应用环境 django4.2.3 &#xff0c;python3.10 由于对于服务而言&#xff0c;有些数据查询起来比较费时&#xff0c;所以&#xff0c;对于有些数据&#xff0c;我们需要将其缓存。 最近做了一个服务&#xff0c;用的时 DRF 的架构&#xff0c;刚好涉及缓存&#xff0c;特此记…

webSocket 笔记

1 认识webSocket WebSocket_ohana&#xff01;的博客-CSDN博客 一&#xff0c;什么是websocket WebSocket是HTML5下一种新的协议&#xff08;websocket协议本质上是一个基于tcp的协议&#xff09;它实现了浏览器与服务器全双工通信&#xff0c;能更好的节省服务器资源和带宽…

centos 7.9 部署django项目

1、部署框架 主要组件&#xff1a;nginx、uwsgi、django项目 访问页面流程&#xff1a;nginx---》uwsgi---》django---》uwsgi---》nginx 2、部署过程 操作系统&#xff1a;centos 7.9 配置信息&#xff1a;4核4G 50G 内网 eip &#xff1a;10.241.103.216 部署过程&…

深入学习SpringCloud Alibaba微服务架构,揭秘Nacos、Sentinel、Seata等核心技术,助力构建高效系统!

课程链接&#xff1a; 链接: https://pan.baidu.com/s/1hRN0R8VFcwjyCTWCEsz-8Q?pwdj6ej 提取码: j6ej 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 --来自百度网盘超级会员v4的分享 课程介绍&#xff1a; &#x1f4da;【第01阶段】课程简介&#xff1a;全…

Android FrameWork 层 Handler源码解析

Handler生产者-消费者模型 在android开发中&#xff0c;经常会在子线程中进行一些耗时操作&#xff0c;当操作完毕后会通过handler发送一些数据给主线程&#xff0c;通知主线程做相应的操作。 其中&#xff1a;子线程、handler、主线程&#xff0c;其实构成了线程模型中经典的…

STM32存储左右互搏 I2C总线FATS读写EEPROM ZD24C1MA

STM32存储左右互搏 I2C总线FATS读写EEPROM ZD24C1MA 在较低容量存储领域&#xff0c;EEPROM是常用的存储介质&#xff0c;可以通过直接或者文件操作方式进行读写。不同容量的EEPROM的地址对应位数不同&#xff0c;在发送字节的格式上有所区别。EEPROM是非快速访问存储&#xf…