mysql SQL必知语法

文章目录

    • 概要
    • 技术细节
    • 小结

概要

mysql SQL必知语法

SQL必知语法包括SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY等关键字,用于查询和操作数据库中的数据。SELECT用于选择需要查询的列,FROM用于指定数据表,WHERE用于设置查询条件,GROUP BY用于对结果进行分组,HAVING用于对分组结果进行过滤,ORDER BY用于对结果进行排序。熟练掌握这些关键字和语法规则,可以实现高效、准确的数据库查询和操作。

技术细节

创建数据库
CREATE DATABASE 数据库名;
CREATE DATABASE chapter1 – 创建一个新数据库

删除数据库
DROP DATABASE <数据库名>;
DROP DATABASE chapter1

USE chapter1

数据类型
/*
字符串类型:
CHAR(size)定长、VARCHAR(size)变长 size为字符长度
TEXT 长文本
TINYTEXT 短文本
BLOB 二进制长文本···

数字类型:
严格数值数据类型(INTEGER、SMALLINT、DECIMAL 和 NUMERIC)
近似数值数据类型(REAL、FLOAT(size,d)DOUBLE(size,d) d小数点右侧的最大位数…)。
整数类型 INT、TINYINT、SMALLINT、MEDIUMINT 和 BIGINT。(存储和范围不同)

日期/时间类型:
DATE()yyyymmdd、DATETIME()yyyymmddhhmmss、TIME()hhmmss、YEAR()
TIMESTAMP()1970-01-01 00:00:01至今多少秒、
···
*/


– 这是单行注释
这是单行注释

/* 这是多行注释
第一行
第二行 */

#创建表
CREATE TABLE table_name (column_name column_type);
#三要素:表名 字段名 字段描述

CREATE TABLE offices (office_id INT NOT NULL PRIMARY KEY,address VARCHAR ( 50 ) NOT NULL,city VARCHAR ( 50 ) NOT NULL,province VARCHAR ( 50 ) NOT NULL 
);-- 创建一个名为offices的表CREATE TABLE employees (employee_id INT NOT NULL,en_name VARCHAR ( 50 ) NOT NULL,ch_name VARCHAR ( 50 ) NOT NULL,job_title VARCHAR ( 50 ) NOT NULL,salary INT NOT NULL,reports_to INT,office_id INT NOT NULL,PRIMARY KEY ( employee_id ) 
) ENGINE = INNODB DEFAULT CHARSET = utf8;
-- 继续创建一个名为employees的表
-- 使用innodb存储引擎
-- 编码utf8

#删除数据表
DROP TABLE table_name ;
DROP TABLE employees;-- 删除表

#插入数据
INSERT INTO table_name ( field1, field2,…fieldN ) VALUES ( value1, value2,…valueN );

INSERT INTO employees 
VALUES( '33391', 'jackson', '谭鸿飞', '销售经理', '62871', '37270', '1' );-- 插入完整行INSERT INTO employees ( employee_id, en_name, ch_name, job_title, salary, office_id )
VALUES( '37270', 'hall', '边天磊', '总经理', '163996', '10' );-- 提供列名,插入部分行

#查询数据
SELECT column(列名), another_column, …FROM table(表名)

use chapter1SELECTemployee_id,ch_name 
FROMemployeesSELECT* 
FROMemployeesSELECT DISTINCTreports_to 
FROMemployees -- 显式指定返回不同的列 
-- -- -- -- -- -- --

#过滤数据
– WHERE 子句
SELECT
office_id,
ch_name,
en_name
FROM
employees
WHERE
office_id= 1
or ch_name =‘边天磊’

– where满足的操作符 = != <> BETWEEN IS NULL··· 数值不需要带’',但是字符需要

– AND操作符——通过不止一列过滤,可以使用AND操作符给WHERE子句添加条件。

– OR操作符——匹配任意条件则会返回并输出。

SELECToffice_id,ch_name,en_name,salary
FROMemployees 
WHERE(office_id= 1 OR office_id =2)  //office_id IN (1,2)
AND salary>95000
-- AND的优先级更高,必要时需要通过括号进行明确分组。SELECToffice_id,ch_name,en_name 
FROMemployees 
WHEREoffice_id NOT IN (1,2)
AND salary>95000-- like子句 构造通配符
SELECToffice_id,ch_name,en_name 
FROMemployees 
WHEREen_name LIKE'b%' -- % 任意字符 _ 单个字符 (包括空格)注意通配符的位置和个数SELECToffice_id,ch_name,en_name 
FROMemployees 
WHEREen_name like '%n'SELECToffice_id,ch_name,en_name 
FROMemployees 
WHEREen_name like 'ha___' -- 不要过度使用#排序
SELECToffice_id,ch_name,en_name 
FROMemployees 
where 1=1
ORDER BY 1,3
#LIMIT
SELECT reports_to 
FROMemployees LIMIT 5 SELECT reports_to ,salary
FROMemployees 
order by salary desc
LIMIT 5 SELECT salary 
FROMemployees LIMIT 5 OFFSET 5;-- 限制结果

#算数计算
/* MySQL运算符及运算符的优先级。
算术运算符:+、-、*、/、%
比较运算符:=、<>、!=、>、<、>=、<=、BETWEEN、NOT BETWEEN、IN、NOT IN 、ISNULL 、 IS NOT NULL
逻辑运算符:NOT、AND、OR
位运算符:&、|、^、!
*/
SELECT
salary+2000,salary
FROM
employees

#函数处理数据

– 文本处理
SELECT
offices.*, LEFT(address, 3)
FROM
offices

– 其他文本函数
LENGTH(str)/LOWER(str)转换为小写/LTRIM(str)去掉字符串左边的空格/REPLACE(s,s1,s2)···

– 数值处理函数
ABS(X)/COS(X)/PI()/MOD(x,y)

#汇总数据
– 聚集函数
AVG()-- 只能用于单个列
COUNT()–

SELECT
COUNT(*),
MAX(salary),
AVG(salary)+500 AS averge_salary
FROM
employees
WHERE
office_id=3

#分组数据
– 创建分组

SELECT
COUNT(*),
MAX(salary),
AVG(salary)+500 AS averge_salary,
office_id
FROM
employees
GROUP BY
office_id

– 过滤分组
SELECT
COUNT(),
MAX(salary),
AVG(salary)+500, – AS averge_salary
office_id
FROM
employees
GROUP BY
office_id
HAVING COUNT(
)>3 – 在这里where不可以在进行过滤分组,因为他过滤的是行而不是分组。

– 分组和排序
– ORDER BY 对产生的输出排序 任意列都可以(甚至没有被选中的列也可以使用)
– GROUP BY 对行分组,但是输出可能不是分组的顺序,只可以选择列或者表达式列,而且必须使用每个选择列表达式
SELECT
COUNT(*)AS items,
MAX(salary),
AVG(salary)+500 AS averge_salary,
office_id
FROM
employees
GROUP BY
office_id
HAVING items>3
ORDER BY averge_salary DESC

子查询
SELECT
address
FROM
offices
WHERE
office_id IN ( SELECT office_id FROM employees WHERE job_title = ‘销售经理’ );
– 一般不这么写因为难以阅读和调试。同时子语句的查询语句只能查询单个列。
– 两个表通过一个where联结,三个表用至少次过滤 WHERE AND

#连接表
/JOIN 按照功能大致分为如下三类:
INNER JOIN(内连接,或等值连接):获取两个表中字段匹配关系的记录。
LEFT JOIN(左连接):获取左表所有记录,即使右表没有对应匹配的记录。
RIGHT JOIN(右连接): 与 LEFT JOIN 相反,用于获取右表所有记录,即使左表没有对应匹配的记录。
outer join
/

use chapter1SELECTaddress,en_name,ch_name
FROMoffices,employees
WHEREoffices.office_id=employees.office_id
AND job_title like "售前%"
-- 为了匹配,必须完全限定列名,谨防笛卡尔积的联结(叉联结)SELECT E.*,O.*
FROM employees as E,offices O自然连接
SELECT E.*,O.*
FROM employees E,offices O
WHERE E.office_id=O.office_id

内连接 – inner join on

外连接 – outer join on
左外连接 右外连接

SELECT offices.,employees.
FROM offices LEFT JOIN employees
ON employees.office_id=offices.office_id

全链接 – 左外连接+ union+右外连接

自连接 – 不是连接类型,但是是一种比较常用的手段

SELECTE1.en_name,E1.salary,E1.office_id,E2.en_name,E2.salary,E2.office_id
FROMemployees AS E1,employees E2
WHEREE1.salary<E2.salary
ANDE1.office_id=3
ANDE2.office_id=4

组合查询
UNION 查询必须包括相同的列,表达式和聚集函数 和 UNION ALL 包含所有行,不去重

小结

如果你们学习完成SQL必知语法后,对于数据库的查询和操作有了更深入的理解和掌握。掌握了SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY等关键字和语法规则,能够更加灵活地编写SQL查询语句,实现对数据库中数据的精确提取和操作。通过不断练习和实践,我相信我能够运用这些语法知识处理更加复杂的数据库任务,提高工作效率和质量。

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

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

相关文章

下载软件时的Ubuntu x86_64-v2、skylake、aarch64版本分别代表什么?

Ubuntu-x86_64-v2、Ubuntu-x86_64-skylake和Ubuntu-aarch64都是Ubuntu的不同版本或变种&#xff0c;它们之间的主要区别在于所支持的硬件架构和针对特定硬件的优化。 Ubuntu-x86_64-v2&#xff1a; 这是基于x86_64&#xff08;也称为AMD64或Intel 64&#xff09;架构的Ubuntu版…

Ubuntu上根据关键字模糊查找指定文件夹或文件

在Ubuntu上根据关键字模糊查找指定文件夹或文件&#xff0c;可以使用以下方法&#xff1a; GNOME 桌面搜索&#xff1a; 使用GNOME桌面的Spotlight式搜索功能&#xff0c;通过按下Super键&#xff08;通常是Windows键&#xff09;并输入关键字&#xff0c;可以搜索文件和文件夹…

人类连接的桥梁:探索Facebook如何连接世界

随着技术的发展和全球化的进程&#xff0c;我们的世界正在变得越来越紧密相连。在这个过程中&#xff0c;社交媒体平台扮演了一个至关重要的角色&#xff0c;为人们提供了一个跨越国界、文化和语言的交流平台。其中&#xff0c;Facebook作为全球最大的社交媒体平台&#xff0c;…

rancher踩坑日志:prometheus访问kubelet 10250端口提示鉴权失败

该原因是因为kubectl禁止了非授权用户访问10250端口来获取node的数据。 解决思路&#xff1a; 添加prometheus访问kubelet时带上证书进行验证匹配 --> 由于我的prometheus是rancher安装的&#xff0c;不知道要怎么修改所以研究了一会没研究明白就放弃了。设置prometheus访问…

Rockchip Android13 Vold(二):Framework层

目录 前言 1、接收VolumeInfo状态 2、通知VolumeInfo状态变化 3、创建StorageVolume

Create2024百度AI开发者大会记录

去年2023.3.16日百度文心大模型发布&#xff0c;今天2024.4.16日 代码智能体&#xff1a;思考模型代码解释器 思考模型整合提示&#xff0c;输入给代码解释器 代码解释器出结果&#xff0c;返回给思考模型&#xff0c;然后迭代 智能代码助手 baidu Comate 多模型推理 种子模型…

JavaScript入门--循环

JavaScript入门--循环 一、for循环二、for in语句三、break语句四、continue语句五、while循环六、do-while语句一、for循环 先来看一个循环案例: for (i = 0; i < 5; i++) {

如何批量删除不包含指定关键字的数据行?

一、需求 有一个报名表&#xff0c;包括年龄&#xff0c;地址&#xff0c;特长等数据&#xff0c;现在想删除特长一列中不含“篮球”这个关键字行&#xff0c;可以使用这些办法。 二、删除数据 方法1.自动筛选&#xff0c; 1.1 选中数据后&#xff0c;点击数据选项卡&#…

java 中公有类的产量如何定义

在Java编程语言中,“公有类”和“产量”的概念并不直接相关联。 “公有类”(public class)是指在Java中,可以被任何其他类访问的类。如果你想要定义一个公有类,你将在类声明处使用 public 关键字: // 这是一个公有类的例子 public class MyClass {// 类体部分,包含字段…

微信人脉扩张!多号批量自动加好友,你get到了吗?

微信是我们在拓展社交圈和寻找商业机会时&#xff0c;与更多的人建立联系的重要渠道。但是&#xff0c;手动一个个添加好友显然费时费力&#xff0c;这时候&#xff0c;微信管理系统的批量自动加好友功能就成为了微信人脉扩张的神器。 通过微信管理系统&#xff0c;我们可以轻…

Java中如何提取视频文件的缩略图

在Java中&#xff0c;可以使用FFmpeg库来提取视频文件的缩略图。以下是一种使用FFmpeg的方法来提取视频缩略图的示例代码&#xff1a; import java.io.File; import java.io.IOException;public class VideoThumbnailExtractor {public static void main(String[] args) {Stri…

IO流-打印流

简介 为打印而生的IO流 打印流的继承体系 优点 高效方便打印的是啥就是啥&#xff0c;不会瞎转&#xff08;不会把97转成a&#xff09; PrintStream try(PrintStream ps new PrintStream("test7.txt", "UTF-8"); ){ps.println(97); // 打印流的优点就是原…

三个晚上!给干废了!MINI2440 挂载 NFS

虚拟机执行&#xff1a;sudo ifconfig tap0 10.10.10.1 up qemu 开发板&#xff1a; set bootargs noinitrd root/dev/nfs rw nfsroot10.10.10.1:/nfsroot ip10.10.10.10:10.10.10.1 ::255.255.255.0 consolettySAC0,115200 Hit any key to stop autoboot: 0 MINI2440 # set…

mybatisplus 使用group by 和 count 报 java.lang.NumberFormatException

报错信息&#xff1a; java.lang.NumberFormatException: For input string: "Critical" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) ~[na:na] resultMap如下&#xff1a; <resultMap id"severityNumRes…

前后端分离vue.js+nodejs新闻文章发布论坛网站系统44x94

Vue&#xff1a; Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的工具链以及…

​代码混淆的原理是什么?常见代码混淆方法介绍

本文主要想你介绍代码混淆的原理&#xff0c;常见代码混淆方法&#xff0c;欢迎查阅~ 移动应用代码安全非常重要&#xff0c;代码逆向会导致代码逻辑被获取&#xff0c;进一步导致控制流被hook&#xff0c;安全防线被破&#xff0c;给APP安全带来巨大风险&#xff0c;因此开发者…

跟着Datawhale重学数据结构与算法

数据结构和算法之前学过&#xff0c;现在跟着Datawhale重学一下&#xff0c;就当是监督自己学习&#xff0c;重新拾起来养成一个好的习惯&#xff0c;以后可以一直坚持下去。 开源链接&#xff1a;【 教程地址 】【电子网站】 首先&#xff1a; #mermaid-svg-Cdr3rn9fGCVAiKS…

Redis消息队列-基于Stream的消息队列-消费者组

7.5 Redis消息队列-基于Stream的消息队列-消费者组 消费者组&#xff08;Consumer Group&#xff09;&#xff1a;将多个消费者划分到一个组中&#xff0c;监听同一个队列。具备下列特点&#xff1a; 创建消费者组&#xff1a; key&#xff1a;队列名称 groupName&#xff1a…

安装SSMS出现错误和SSMS连接数据库失败

1.点击图片下安装的时候&#xff0c;出现0x80070643错误 解决办法&#xff1a; 1,如果是是第一次安装的话&#xff0c;重新启动电脑&#xff0c;把原来下载的SSMS删除掉&#xff0c;在重新下载安装 2.如果是原来就下载过&#xff0c;先…

OpenBayes 在线教程|张国荣、鲁迅等老照片秒变高清!即刻上手的超火 SUPIR-AI 图像修复教程

小伙伴们&#xff0c;大家在生活中是不是也会遇到这样的烦恼&#xff1a;心心念念想要打印一张充满回忆的老照片或酷炫动漫壁纸&#xff0c;却发现图像糊得像打了马赛克&#xff1f; 市面上的图像修复工具五花八门&#xff0c;选择困难症人群找得快要崩溃&#xff1f; 终于找…