SQL语句:读操作、写操作、视图

文章目录

  • 读操作
    • 分类
    • 基础查询语句示例
    • 高级查询--分组查询、子查询、表连接、联合查询
      • 分组查询:
      • 子查询(嵌套查询)
      • 表连接
      • 联合查询
  • 写操作
    • 视图

SQL:结构化查询语言

读操作

重点是where查询,即高级查询部分

分类

DML :数据操纵语言,写操作,增insert 删delete 改update
DQL: 数据查询语言 :select
DDL:数据定义语言 create alter drop 创建库,创建表,创建函数,创建存储过程
DCL:数据控制语言。用户,角色,权限

重点是学习前两个部分,三四部分在面试不问,但是笔试有可能遇到

基础查询语句示例

-- 1.查询全部数据。*代表所有列.一般不要直接使用*,因为查询量太大影响性。
SELECT * from t_student;-- 2.限定列查询:
SELECT  id,stu_id,`name`,pinyin,sex,birthday from t_student;-- 3.列起别名,使用as  别名也可以省略as
SELECT  t_student.id as 编号,stu_id AS 学号 ,`name` 姓名,pinyin 拼音,sex 性别,birthday 出生日期  from t_student;-- 4.表起别名:...from t_student as t 在没有歧义的情况下,表名前缀可以省略
SELECT  t.id as 编号,t.stu_id AS 学号,`name` 姓名,pinyin 拼音,sex 性别,birthday 出生日期 from t_student as t;-- 5.列运算
select id,stu_id,`name`,pinyin,sex,height+10 修正身高,weight-10 修正体重 from t_student;-- 6.限定行查询,可以用于分页等操作(重点)
-- 返回查询结果的前 10 行数据
SELECT id,stu_id,`name`,pinyin,sex,birthday FROM t_student LIMIT 10;
-- 第一个参数表示起始行(从0开始),第二个参数表示查询行数
-- 跳过前 10 条,显示第 11 到 20 条数据
SELECT id,stu_id,`name`,pinyin,sex,birthday FROM t_student  LIMIT 10,10;
SELECT id,stu_id,`name`,pinyin,sex,birthday FROM t_student  LIMIT 10 OFFSET 10;-- 7.指定查询条件where。where后面指定查询表达式。支持算术运算符、比较运算符、逻辑运算符 、其它的。
SELECT  id,stu_id,`name`,pinyin,sex,birthday from t_student WHERE id=5;
-- 比较运算符 不等于用的是<>、!
SELECT  id,stu_id,`name`,pinyin,sex,birthday from t_student WHERE id<>5 LIMIT 10;
SELECT  id,stu_id,`name`,pinyin,sex,birthday from t_student WHERE id!=5 LIMIT 10;
SELECT  id,stu_id,`name`,pinyin,sex,birthday from t_student WHERE id<=5;
-- 仅sql支持:
SELECT  id,stu_id,`name`,pinyin,sex,birthday from t_student WHERE birthday > '2000-1-1';-- 8.算术运算符,也可以用在查询条件。支持小括号提高优先级
SELECT  id,stu_id,`name`,pinyin,weight,height from t_student WHERE  weight/((height/100)*(height/100))>24;-- 9.逻辑运算符:and or not;
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE height>=175 AND sex='女';SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE  NOT sex='女';
-- 10.空判断
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE class_id IS NULL;
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE class_id IS NOT NULL;
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE  Not class_id IS NULL;--  11.通配符。模糊查询  %代表0或者多个字符  _代表一个字符 
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE `name` LIKE '张%';
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE `name` LIKE '%晓%';
-- _代表一个字符 
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE `name` LIKE '张_';
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE `name` LIKE '张__';-- 12.正则查询。正则表达式是用于字符串匹配用
-- 下面是大于等于3
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE `name` REGEXP '\\w{3}';
SELECT  id,stu_id,`name`,sex,pinyin,weight,height from t_student WHERE `name` RLIKE '\\w{3}';
--  比如匹配11位数字的微信号
SELECT  id,stu_id,`name`,sex,pinyin,weight,height,wechat from t_student WHERE `wechat` RLIKE '\\d{11}';
--  比如匹配不是11位数字的微信号
SELECT  id,stu_id,`name`,sex,pinyin,weight,height,wechat from t_student WHERE `wechat` NOT RLIKE '\\d{11}';-- 13. 结果集去重 DISTINCT 慎用  影响性能 
SELECT DISTINCT sex FROM t_student LIMIT 20;
-- 14.查询结果排序: order by,mysql默认按照数字插入的自然顺序排序
SELECT  id,stu_id,`name`,pinyin,sex,birthday,weight,height from t_student  LIMIT 20;
-- 身高升序。asc升序,desc降序,asc可以省略,默认就是升序
SELECT  id,stu_id,`name`,pinyin,sex,birthday,weight,height from t_student ORDER BY height ASC LIMIT 100;
-- desc降序查询:
SELECT  id,stu_id,`name`,pinyin,sex,birthday,weight,height from t_student ORDER BY weight DESC LIMIT 100;-- 多列查询 当排序条件出现"矛盾"时,在 ORDER BY 子句中排在第一位的优先级更高。
SELECT  id,stu_id,`name`,pinyin,sex,birthday,weight,height from t_student ORDER BY height ASC, weight DESC LIMIT 100;

高级查询–分组查询、子查询、表连接、联合查询

分组查询:

-- 二、分组查询
-- 1.SELECT后面只能是分组列和聚合函数列:聚合函数共五个:avg、sum、max、min、count,对数字进行 聚合运算
-- 分组列:sex,聚合函数:avg。聚合函数可以写多个
SELECT sex,AVG(height) FROM t_student GROUP BY sex;
-- 聚合函数可以写多个,也可以进行运算,。其中COUNT().()里面写啥都行
-- COUNT() 里面可以是任何列,因为它的作用是计算非空行的数量。如果用 *,就表示计算所有行的数量。
SELECT sex,MAX(weight),MIN(weight),COUNT(*) FROM t_student GROUP BY sex;
SELECT class_id,MAX(height),MAX(weight) FROM t_student GROUP BY class_id;-- 2.多次分组
-- 第一次分组:按 class_id 分组,把相同班级的学生分到一组。
-- 第二次分组:在每个 class_id 组内,再按 sex(性别)分组,比如男生一组,女生一组。
SELECT class_id,sex,MAX(height),MAX(weight) FROM  t_student GROUP BY class_id,sex ORDER BY class_id,sex;-- 3.无分组(也叫单分组) count中的参数表示根据哪一列来统计行数。0:常数列,和表的总行数一样的 *:全部。下面三种执行都不一样,什么时候有区别?注意:count不统计空值。
SELECT  COUNT(0) FROM t_student;   -- SELECT 0 from t_student;常数列 
SELECT  COUNT(*) FROM t_student;
SELECT  COUNT(id) FROM t_student;
SELECT  COUNT(sex) FROM t_student;
-- 注意:count不统计空值-- 如果对count进行去重,那么结果就不是全部的了。常量去重就是一条记录。
SELECT  COUNT(DISTINCT class_id) FROM t_student;
SELECT  COUNT(DISTINCT 0) FROM t_student;-- 常量去重就是一条记录。
SELECT sex,AVG(DISTINCT height) FROM t_student GROUP BY sex;-- 4.分组之后的条件筛选(聚合之后的数据再次筛选:WHERE)
-- 区分 :SELECT是分组之前的筛选,WHERE是分组之后的筛选
SELECT class_id,sex,MAX(height) mh,MAX(weight) mwFROM  t_student GROUP BY class_id,sex HAVING mh >183 AND mw>95ORDER BY class_id,sex ;

子查询(嵌套查询)

-- 三、子查询(嵌套查询)
-- 1.列子查询(不常用)
SELECT id,stu_id,`name`,(SELECT `class_name`FROM t_class WHERE id = class_id ) class_name,class_id,sex,birthday FROM t_student LIMIT 10;--  2.表子查询,必须起别名。将查询结果作为一个表:
SELECT  id,stu_id,`name`,pinyin,sex,birthday from (SELECT * FROM t_student WHERE sex='女') t1;--  3.在where中,比较运算符子查询
--  等号(不等号)子查询,要求子查询结果必须是一行一列。
SELECT  id,stu_id,`name`,pinyin,sex,birthday 
from  t_student WHERE class_id=(SELECT id FROM t_class  WHERE class_name = '080503-JAVA');
-- 大于号子查询  小于号子查询 
SELECT  id,stu_id,`name`,pinyin,sex,birthday 
from  t_student WHERE class_id>(SELECT id FROM t_class  WHERE class_name = '080503-JAVA');
--  ALL:
SELECT  id,stu_id,`name`,pinyin,sex,birthday 
from  t_student WHERE class_id>ALL(SELECT id FROM t_class  WHERE class_name = '%JAVA%');
-- ANY:
SELECT id,stu_id,`name`,pinyin,sex,birthday,class_id  FROM t_student 
WHERE class_id > ANY(SELECT id FROM t_class WHERE class_name = '080503-JAVA');
-- 4.in 和not in 子查询
-- in:集合中的任意一个
SELECT id,stu_id,`name`,pinyin,sex,birthday from t_student  WHERE id in(1,2,3);
SELECT id,stu_id,`name`,pinyin,sex,birthday from t_student 
WHERE id in (SELECT id FROM  t_class where class_name LIKE '%JAVA%');-- 5.EXISTS 和not EXISTS子查询,唯一的断言类查询
SELECT id,stu_id,`name`,pinyin,sex,birthday 
from t_student WHERE EXISTS (SELECT  id from  t_class where class_name LIKE '%JAVA%');-- 6.相关子查询:
-- 查询出比所在班平均身高要高的学生
SELECT id,stu_id,`name`,pinyin,sex,birthday 
from t_student t1 
WHERE height > (SELECT AVG(height)FROM t_student t2 WHERE t2.class_id = t1.class_id);

表连接

-- 四、表连接:将 两张表中的数据,显示到一个结果集中。
--  1.内连接(最常使用),连接的时候必须使用on指定连接条件。特点:连接条件的列在左右两侧都必须存在才能连接
SELECT t1.id,stu_id,`name`,pinyin,sex,birthday,class_id,t2.class_name,t2.begin_time
FROM t_student t1
INNER JOIN  t_class t2
ON t1.class_id = t2.id ORDER BY t1.id;-- 2.左外连接,简称左连接:LEFT JOIN 。outer通常省略。
-- 和内连接的区别:左表数据一定全部显示,右边连接不上显示Null 
SELECT t1.id,stu_id,`name`,pinyin,sex,birthday,class_id,t2.class_name,t2.begin_time
FROM t_student t1
LEFT JOIN t_class t2
ON t1.class_id = t2.id ORDER BY t1.id;-- 3.右外连接,简称右连接.RIGHT JOIN。outer通常省略。
--  和内连接的区别:右表数据一定全部显示,左边连接不上显示Null 
SELECT t1.id,stu_id,`name`,pinyin,sex,birthday,class_id,t2.class_name,t2.begin_time
FROM t_student t1
right JOIN t_class t2
ON t1.class_id = t2.id ORDER BY t1.id;-- 4.全外连接。mysql不支持---解决方案:联合查询。
-- 左表和右表全显示 ,连接不上的显示Null。
-- 虽然不支持,但是使用union将左外连接和右外连接连接在一起就实现了全外连接
SELECT  * from (SELECT t1.id,stu_id,`name`,pinyin,sex,birthday,class_id,t2.class_name,t2.begin_time
FROM t_student t1
LEFT JOIN t_class t2
ON t1.class_id = t2.id ORDER BY t1.id) t1UNIONSELECT  * from (SELECT t1.id,stu_id,`name`,pinyin,sex,birthday,class_id,t2.class_name,t2.begin_time
FROM t_student t1
right JOIN t_class t2
ON t1.class_id = t2.id ORDER BY t1.id) t2;

联合查询

-- 五、联合查询:UNION关键字
--  注意事项:
-- 1.无需是同一张表
-- 2.列数必须一致
-- 3.数据类型基本匹配
-- 4.UNION会自动去重 UNTONN ALL不会去重-- 1.将两个结果集合并成一个:合并结果集
SELECT id,stu_id,`name`,pinyin,sex,birthday from t_student  WHERE sex ='男'
UNION
SELECT id,stu_id,`name`,pinyin,sex,birthday from t_student  WHERE sex ='女';

写操作

语法固定

-- 写操作。增删改查--->CURD
-- 1.最常见:注意字段值不为空的字段必须给他赋值,且值要和参数个数、顺序 一致
INSERT into t_student (stu_id,name,sex) VALUES ('st_001','孙小美','女');-- 2.插入全部列:不建议用,不常用INSERT INTO `t_student` VALUES (1, 'st_0000', 3, '伍华欣', 'wǔ huá xīn', 'wuhuaxin', '华欣', '伍', '女', '1989-10-13', 171, 47.1, 91, '1038132', '13270787041', '13270787041', 'wuhuaxin@yahoo.com', 32580, NULL, '汉族', NULL, '中国', NULL, NULL, NULL);-- 3.插入结果集(不常用):只要是合法集就行.如果是常量没有from表,就是直接直接插入一行。要求:列数必须一致,数据类型基本匹配
-- 	一次性插入结果集 : 
INSERT INTO t_class
SELECT 21, '080203-JAVA', '2008-02-03', '2008-06-24', 1, 0, 1, NULL 
UNION
SELECT 22, '091219-UI', '2009-12-19', '2010-05-02', 3, 0, 1, NULL-- 4.指定列
INSERT INTO t_class (class_name,begin_time,end_time)
SELECT '080203-JAVA', '2008-02-03', '2008-06-24' 
UNION
SELECT  '091219-UI', '2009-12-19', '2010-05-02'-- 5.修改:无论怎么改不能违反已经制定的约束:比如非空约束...
update t_student set 
stu_id='st_2000',
name='钱夫人',
sex='女'
where id=1;-- 6.删除:
DELETE FROM t_student
where id=12;

视图

视图就相当于子查询的结果集起个别名,是一个假的表:

sql语句创建视图:

语法 :

create view 视图名 as 子查询

示例:

create view v_salary as 
SELECT emp_id,base_salary+pension+allowance+bonus-deduct-tax from t_salary;

或者直接在navicate里面直接创建视图,视图里面写的就是子查询的sql语。
在这里插入图片描述
创建好之后:

加粗样式
如上,视图里面的数据是不能改动的 ,因为数据来自实际表里面,视图就是一张假表,方便我们查询的。

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

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

相关文章

Python 机器学习实战:基于 Scikit-learn

本文围绕《Python 机器学习实战&#xff1a;基于 Scikit-learn 的项目开发》展开&#xff0c;先介绍 Scikit-learn 库的基础特性与优势&#xff0c;再阐述机器学习项目开发的完整流程&#xff0c;包括数据收集与预处理、模型选择与训练、评估与优化等。通过具体实战案例&#x…

java里List链式编程

java里对list的操作&#xff0c;我们一遍使用for遍历&#xff0c;输出或改变里面的内容。单经常在代码里面我们发现&#xff0c;也可以使用这样的代码结构daPaymentActionVo.setApnolist(paymentActionVo.getApnolist().stream().map(PaymentActionVo.Voucher::getApno).collec…

【esp32s3】7 - VSCode + PlatformIO + Arduino + 构建项目

一、PlatformIO 1.1. 概述 官方文档&#xff1a;What is PlatformIO? PlatformIO 是一个跨平台的物联网开发生态系统&#xff0c;专门为嵌入式系统开发设计&#xff0c;支持多种开发板和框架。 1.1.1. 主要特点 跨平台&#xff1a;支持 Windows、macOS 和 Linux多框架支持&…

LE AUDIO CIS/BIS音频传输时延的计算

LE AUDIO音频总时延计算方法 按照BAP的规范,LE AUDIO音频总延时包括三个部分:Audio Processing Time,Transport Latency,Presentation Delay。如下图所示是播放音乐的示例图: 这里还有一个麦克风录音的总时延示例图: Audio Processing Time:这个就是音频DSP获取音频数…

git 修改 更新

git 修改 更新先更新&#xff0c;后修改# 暂存当前修改 git add . git stash# 获取最新的 main 分支 git checkout main git pull# 新建开发分支 git checkout -b lbg_0727# ⚠️ 先把 main 的最新代码合并/变基到当前分支&#xff08;用于消除冲突&#xff09; # 方法1&#x…

飞鹤困局:增长神话的裂痕

增长天花板已然逼近&#xff0c;飞鹤需要探寻新方向。作者|安德鲁编辑|文昌龙“飞鹤&#xff0c;更适合中国宝宝体质”——这句曾让无数妈妈点头的广告语&#xff0c;帮飞鹤坐上了中国奶粉市场的头把交椅。可多年后&#xff0c;时代红利退潮&#xff0c;故事不好讲了。飞鹤的利…

Java设计模式之<建造者模式>

目录 1、建造者模式 2、建造者模式结构 3、实现 4、工厂模式对比 5、适用场景差异 前言 建造者模式是一种创建型设计模式。用于封装复杂对象的构建过程&#xff0c;通过步骤构建产品类。它包括产品类、抽象建造者、具体建造者和指挥者角色。 优点在于灵活性、解耦和易扩展…

fchown/fchownat系统调用及示例

55. fchmod - 通过文件描述符改变文件权限 函数介绍 fchmod是一个Linux系统调用&#xff0c;用于通过文件描述符来改变文件的访问权限。它是chmod函数的文件描述符版本&#xff0c;避免了路径名解析。 函数原型 #include <sys/stat.h> #include <unistd.h>int fchm…

20250726-5-Kubernetes 网络-Service 代理模式详解(iptables与ipvs)_笔记

一、服务三种常用类型  1. LoadBalancer类型 工作原理:与NodePort类似,在每个节点上启用端口暴露服务,同时Kubernetes会请求底层云平台(如阿里云、腾讯云、AWS等)的负载均衡器,将每个Node([NodeIP]:[NodePort])作为后端添加。 自动化实现:云厂商通过官方实现的控制…

horizon置备出错

报错内容如下&#xff1a; [2025/7/28 19:15] 置备 Customization failure: Customization of the guest operating system is not supported due to the given reason: 期间出错 解决方法&#xff1a;将模板转换为虚拟机&#xff0c;安装vmtools&#xff1b;再安装vmtools之后…

【unitrix】 6.19 Ord特质(ord.rs)

一、源码 这段代码定义了一个标记特征&#xff08;marker trait&#xff09;Ord 和三个实现&#xff0c;用于将类型标记与 Rust 标准库中的 Ordering 枚举关联起来。 use crate::sealed::Sealed; use core::cmp::Ordering; use crate::number::{Greater, Equal, Less}; /// 用于…

数据结构之顺序表链表栈

顺序表 什么是 list list 的使用 线性表是什么 顺序表是什么 顺序表和线性表的关系 顺序表和数组的区别 List 和 ArrayList 的关系 如何自己模拟实现 myArrayList ArrayList 的构造 ArrayList 的常见方法 以下两种写法有什么区别 ArrayList<Integer> arrayLis…

day062-监控告警方式与Grafana优雅展示

文章目录0. 老男孩思想-马太效应1. API监控2. zabbix的API接口2.1 生成zabbix的api token2.2 访问格式2.3 前端添加web监测3. 监控告警方式3.1 云监控-邮件告警3.1.1 邮箱开启授权码3.1.2 zabbix前端配置3.1.3 消息模板3.1.4 配置邮箱收件人信息3.1.5 配置触发器3.2 企业微信告…

Ettus USRP X410/X440 运行 ADC 自校准

Ettus USRP X410/X440 运行 ADC 自校准 打开一个接收&#xff08;Rx&#xff09;会话到您在设备名称输入中指定的设备并返回会话句柄 out&#xff0c;您可以使用该句柄在所有后续 NI-USRP VI 中识别此仪器会话。 支持设备&#xff1a;Ettus USRP X410/X440输入/输出 文明.png 会…

Qt元类型系统(QMetaType)详解

Qt元类型系统详解一、Qt元类型系统(QMetaType)详解1. 核心功能2. 注册机制3. 关键技术点4. 信号槽支持5. 流式传输支持6. 使用场景7. 注意事项二、完整示例1、基本实例2、基本实例3、元类型在信号槽中的应用4、高级用法三、元对象编译器moc元对象编译器&#xff08;Moc&#xf…

《C++继承详解:从入门到理解公有、私有与保护继承》

《C继承详解&#xff1a;从入门到理解公有、私有与保护继承》 文章目录《C继承详解&#xff1a;从入门到理解公有、私有与保护继承》一、继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承基类成员访问方式的变化1.3 继承类模版二、基类和派生类间的转换三、…

佳能iR-ADV C5560复印机如何扫描文件到电脑

打印机与电脑连接首先&#xff0c;确保佳能iR-ADV C5560复印机通过USB或Wi-Fi等网络连接的方式成功连接到电脑。这可以通过USB线缆或Wi-Fi等网络来实现。连接完成后&#xff0c;便可利用打印机内置的扫描功能&#xff0c;轻松将文件扫描并传输至电脑中。【扫描操作步骤】接下来…

腾讯AI IDE

1.官网说明&#xff1a;打开腾讯AI IDE官网。2.安装说明&#xff1a;安装成功后的界面。3.登录 说明&#xff1a;通过邮箱和密码登录。4.成功说明&#xff1a;成功登录如下界面。5.简单一问说明&#xff1a;理解能力感觉不错。拥有Claude-3.7-Sonnet​​&#xff0c;​​Claude…

【LeetCode 热题 100】(一)哈希

1. 两数之和 class Solution {public int[] twoSum(int[] nums, int target) {int length nums.length;// 1.声明一个hashmap {nums[i], i}HashMap<Integer, Integer> map new HashMap<>();for (int i 0; i < length; i) {int second target - nums[i];if(m…

PMOS快速关断电路、PMOS加速关断电路

[电源系列]二、低成本MOS快速关断电路原理分析 MOS的减速加速电路设计 分享一个微碧在网上看到的电路情况 加速电路1 PMOS关断时间较长。 当用100kHz的频率驱动PMOS时&#xff0c;PMOS G极的电压信号并不是一个脉冲波&#xff0c;PMOS一直处于线性放大的状态&#xff0c;并且…