MySQL语句大总结

    • 基础语法
    • 数据库约束
    • 复杂语法
      • 1:聚合查询(所谓聚合计算聚合函数的结果)
      • 2:联合查询
      • 什么是内连接;什么是外连接?
      • 3:子查询(套娃,慎用)
      • 4:合并查询

基础语法

建库
create database liao;
create database if not exists liao charset utf8;
不设置;默认是拉丁文;不支持中文

create database if not exists charset utf8;
查库
show databases;

选库
use liao;

删库
drop database liao;

建表
create table tablename(ziduan1 varchar , ziduan2 int);

create table if not exists tablename( ziduan1 varchar(20), ziduan2 int);
查表
show tables

查表结构
desc tablename;

删表
drop table tablename

改表(问chatgpt)
alrer table tablename modify coumn password varchar(65)

插表数据
insert into tablename values(zhangsan,19),(lisi,18)
insert into tablename (ziduan2) values(19);
insert into tablename (ziduan1,ziduan2) values(wangwu,19);
insert into tablename1 select *from tablename2; 把查询的结果插入到另一个表中;得要求列数量和类型要匹配

查表数据
select *from tablename;
select ziduan1,ziduan2 from tablename;
select ziduan1,ziduan2+10 from tablename
select ziduan1 as newtablename from tablename
select distinct ziduan1 from tablename;对结果去重复

select *from tablename order by ziduan1;小到大;升序
select *from tablename order by ziduan1 desc;大到小;降序
select *from tablename order by ziduan1,ziduan2 desc;ziduan1也重复那么就用ziduan2进行降序排序

条件查询:条件放在表名的后面;这些条件同样能放到改和删除里
运算符
大于、小于、大于等于、小于等于;不必多言
where ziduan1<20;
等于 null不适合用;null=null =》null
<==> 这个用于null=null就安全
不等于
!=, <>
范围匹配
between 范围1 and 范围2 就是你的值是这个 【范围1】 -【范围2】
where ziduan1 between 60 and 100;

集合里匹配
where ziduan1 in(20,30,“123”,“456”);

是null吗
where ziduan1 is null;

是非空吗
where ziduan1 is not null

模糊匹配
where ziduan1=孙%;
1:孙% 只要是孙开头,无论几个字符都没问题。
2:%孙 以孙结尾的
3:%孙% 不管开头结尾,只要包含孙即可
4:_ 下划线匹配一个字符:
孙_%:孙开头,并且孙后面只有一个字符
孙_ _%:两个下划线代表孙后面两个字符
:肉夹馍的孙,前面一个字,后面一个字,中间夹着孙

注意:如果有别名的情况;where这里的条件不能用别名;因为是先执行条件,才看是否执行前面的表达式和别名

上面的还能搭配逻辑运算符:and、or、not。优先级就不去记了;有需要加括号呗。

限制查询数量:分页的时候能使用
select * from tablename limit n; 只能显示n个;如果超过n个具体显示哪n个?不确定
select *from tablename limit 5 offset 0; 从0的地方开始计数查5条
select *from tablename limit 0,5; 和上面等价;省略offset

各个部分的位置:select 需要查询的内容 from tablename 条件查询 限制查询 排序

改表数据
update tablename set ziduan2=22 where 1=1;

删表数据
delete from tablename where ziduan1=zhangsan

数据库约束

not null - 指示某列不能存储 NULL 值。(这一列必须得填)

unique - 保证某列的每行必须有唯一的值。(这列数据不能重复;会通过索引先查一下有没有重复再插入)

default -规定没有给列赋值时的默认值。
name varchar(20) default “太帅了”

primary key - (not null和 unique 的结合)。主键,非空且要唯一,例如身份证,学号;一个表主键只能有一个。
联合主键,把多个列放到一起作为共同主键;知道有这个东西
自增主键;作为主键的值(就是当我们指定id为主键,也就是id不为空也不重复,mysql自增主键会帮你生成符合的值);必须是数值型才能自增。id int primary key auto_increment。如果1-10你突然插入个101;下一个自增也会从101开始

foreign key - 多表关联,要求某个记录必须在另一个表里存在。
create table classid(id int primary key,name varchar(20)); 父表
create table student(id int primary key,name varchar(20),classID int,foreign key (classID) references classid(id)); 子表
学生表被关联的字段主不主键无所谓,主要是班级表的id要有主键。
第一个方面:我们得要判断插入的学生id是否在班级id出现,就需要提供索引查询(不然你默认情况要遍历表效率太低)
第二个方面:班级id主键没了,就说明他的班级都有重复的号,那我插入班级2,你有两个班级为2的号,我插入哪去;我不知道这个classID是谁的(子表引用的唯一性)
第三个方面:要想创建外键,要求父表对应的列得有primary key或者unique约束
为什么要约束:
父表对子表的约束力:插入(或修改update)的数据学生表里的classID得符合在班级表里id列存在。
子表对父表的约束力:当子表已经有创建数据的时候,你的父表或者父表的这列你是删除不了的。删库可以。其它就只能先删子表再删父表
不能两张表相互创建外键约束,因为你创建的时候得指定父表,两个都是子表,先创建的指定谁呢?
使用场景:
电商:商品表(id,名称,库存),订单表(订单数量id,商品id,购买时间); 订单表的商品id得在商品表存在
一个问题;当我要下架商品怎么办,商品表又不能删(外键约束父表)。
逻辑删除,做个标记,让其变无效。当我要重新上架的时候还能把这个标记改回来。

check - 保证列中的值符合指定的条件。(mysql5不支持,写了忽略掉)

约束组合使用:not null+unique=primary key;所以当按下面组合使用时;我们查询的表结构这列是PRI
create table tablename(id int not null unique,name varchar(20) not null unique);

复杂语法

1:聚合查询(所谓聚合计算聚合函数的结果)

针对列进行操作;我们之前的计数只是针对行进行操作;比如english+chinese
常见聚合函数
sum(求和):计算一列中所有值的总和。
avg(平均值):计算一列中所有值的平均值。
max(最大值):找到一列中的最大值。
min(最小值):找到一列中的最小值。
count(计数):计算一列中非空值的数量。
select count(ziduan1) from tablename;
select sum(ziduan2) from tablename;
select count(ziduan1),sum(ziduan2) from tablename;

聚合查询-分组查询
在聚合查询的时候把这个group by的列相同分为一组;然后进行聚合查询。
比如:
create table emp(
id int primary key auto_increment,
name varchar(20) not null,
role varchar(20) not null,
salary numeric(11,2)
);
insert into emp(name, role, salary) values
(‘马云’,‘服务员’, 1000.20),
(‘马化腾’,‘游戏陪玩’, 2000.99),
(‘孙悟空’,‘游戏角色’, 999.11),
(‘猪无能’,‘游戏角色’, 333.5),
(‘沙和尚’,‘游戏角色’, 700.33),
(‘隔壁老王’,‘董事长’, 12000.66);

select role,max(salary),min(salary),avg(salary) from emp group by role;

2:联合查询

select * from student ,class where studen.classId=class.classId; 可以直接写字段名即可;只是我们当前字段名重复了,只能这样子指定;这样写也是比较稳妥和可读。把两张表的信息都查在一起;项目里非常常用;我们选择需要的列查出来即可。

联合查询执行流程:
1:首先两张表
在这里插入图片描述
2:
在这里插入图片描述

3:把无意义去掉。这里有意义的全是他们的id是相同的(也就是班级对的上),这里筛选的条件where 就叫连接条件

联合查询另一种完成:
select *from tablename1 join tablename2 on studen.classId=class.classId;
这种写法有些区别;第一种的只能实现内连接,join on 内连接,外连接都能实现

什么是内连接;什么是外连接?

在这里插入图片描述
在这里插入图片描述

两者有啥区别吗?大多数情况下没区别;当表的数据是一 一对应就没有区别(就都是中间交集的一块);当不是一 一对应就有区别。
在这里插入图片描述
内连接:两种内连接查询的情况
在这里插入图片描述
外连接:
左外连接;前面加个left。会把左表的结果尽量列出来;哪部怕在右表中没有对应的记录,就使用 null填充
在这里插入图片描述

右外连接;前面加个right。会把右表的结果尽量列出来;哪部怕在左表中没有对应的记录,就使用 null填充
在这里插入图片描述
自连接:
自己和自己迪卡尔积,( 特殊问题的特殊处理手段,代价不小);可以把行转成列.sql无法行与行使用条件比较,只能列与列比较(但是有些需求就要这种效果)
比如:如下的表;同一个同学的两门成绩70.5和98.5怎么比较;好像还真没办法比较;我们之前都是行的字段进行比较。
在这里插入图片描述
进行自连接会产生大量无效数据;我们要条件筛选进行精简一下;两张表是一样的;我们取一个别名方便进行引用其中的字段。
select *from tablename1 as s1, tablename1 as s2 where s1.student_id=s2.student_id;
在这里插入图片描述

3:子查询(套娃,慎用)

把多个sql合成一个;比如一个查询的结果作为另一个查询的条件一部分

4:合并查询

比如把两个查询的结果集合并成一个;得这两个结果集的列相同才能合并
查询A union 查询B 这种写法两个查询的结果可以来自不同的表;只要查询的列匹配即可
union all两者差不多(union会去重复,把重复的只保留一份,其它的一样)

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

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

相关文章

【面试总结大纲】

面试 1. springSpring AOP的具体实现核心概念分别指的是什么?基于注解的切面实现主要包括以下几个步骤&#xff1a;两个切面&#xff0c;它们之间的顺序是怎么控制的 springmvc的工作流程设计模式原则Spring 框架中用到了哪些设计模式&#xff1f; 2. Java-锁2.1锁的分类可重入…

PostgreSQL ash —— pgsentinel插件

一、 插件作用 众所周知&#xff0c;pg是没有像oracle那样的ash视图的&#xff0c;因此要回溯历史问题不太方便。pgsentinel插件会将pg_stat_activity与pg_stat_statements视图内容定期快照&#xff0c;并存入pg_active_session_history和pg_stat_statements_history视图中。 1…

一文搞懂APT攻击

APT攻击 1. 基本概念2. APT的攻击阶段3. APT的典型案例参考 1. 基本概念 高级持续性威胁&#xff08;APT&#xff0c;Advanced Persistent Threat&#xff09;&#xff0c;又叫高级长期威胁&#xff0c;是一种复杂的、持续的网络攻击&#xff0c;包含高级、长期、威胁三个要素…

【JavaEE】JavaScript

JavaScript 文章目录 JavaScript组成书写方式行内式内嵌式外部式&#xff08;推荐写法&#xff09; 输入输出变量创建动态类型基本数据类型数字类型特殊数字值 String转义字符求长度字符串拼接布尔类型undefined未定义数据类型null 运算符条件语句if语句三元表达式switch 循环语…

问题: 视频颜色问题,偏绿

参考 什么是杜比视界&#xff1f; - https://www.youtube.com/watch?vldXDQ6VlC7g 【哈士亓说】07&#xff1a;HDR、杜比视界究竟是个啥&#xff1f;为什么这个视频还不是HDR视频&#xff1f; - https://www.youtube.com/watch?vrgb9Xg3cJns 正文 视频应该是 杜比视界 电…

windows系统服务管理命令sc

sc可以用于管理系统服务、计划任务、系统日志等方面&#xff0c;是不可或缺的神器。 基本用法 在命令提示符下输入sc命令&#xff0c;然后按回车键。 上图展示的是sc命令的使用方法&#xff0c;支持哪些参数实现哪些功能 要查看系统所有服务列表&#xff0c;包括它们是否正在…

区别对比表:阿里云轻量服务器和云服务器ECS对照表

阿里云轻量应用服务器和云服务器ECS区别对照表&#xff0c;一看就懂的适用人群、使用场景、优缺点、使用限制、计费方式、网路和镜像系统全方位对比&#xff0c;阿里云服务器网分享ECS和轻量应用服务器区别对照表&#xff1a; 目录 轻量应用服务器和云服务器ECS区别对照表 轻…

Spring Security 6.1.x 系列 (1)—— 初识Spring Security

一、 Spring Security 概述 Spring Security是Spring组织提供的一个开源安全框架&#xff0c;基于Spring开发&#xff0c;所以非常适合在Spring Boot中使用。 官方文档地址&#xff1a;https://docs.spring.io/spring-security/reference/index.html GitHub地址&#xff1a;…

2023年CSP-J真题详解+分析数据(选择题篇)

目录 前言 2023CSP-J江苏卷详解 小结 前言 下面由我来给大家讲解一下CSP-J的选择题部分。 2023CSP-J江苏卷详解 1.答案 A 解析&#xff1a;const在C中是常量的意思&#xff0c;其作用是声明一个变量&#xff0c;值从头至尾不能被修改 2.答案 D 解析&#xff1a;八进制…

大压缩作用下软基底薄膜周期性分层现象的研究

引言 通过实验、理论模型和有限元模拟的结合&#xff0c;英思特通过将一个薄膜粘接到一个预应变超过400%的软弹性衬底上&#xff0c;探索了微观和宏观尺度上控制周期性屈曲脱层形成和发展的机理。我们发现&#xff0c;在大的基底预应变释放时&#xff0c;膜中的变形遵循三阶段…

LCR 170. 交易逆序对的总数(C语言+分治递归)

1. 题目 在股票交易中&#xff0c;如果前一天的股价高于后一天的股价&#xff0c;则可以认为存在一个「交易逆序对」。请设计一个程序&#xff0c;输入一段时间内的股票交易记录 record&#xff0c;返回其中存在的「交易逆序对」总数。 2. 输入输出样例 示例1 输入&#xff1…

【多线程进阶】synchronized 原理

文章目录 前言1. 基本锁策略2. 加锁工作过程2.1 偏向锁2.2 轻量级锁2.3 重量级锁 3. 其他的优化操作3.1 锁消除3.2 锁粗化 总结 前言 在前面章节中, 提到了多线程中的锁策略, 那么我们 Java 中的锁 synchronized 背后都采取了哪些锁策略呢? 又是如何进行工作的呢? 本节我们就…