SQL入门语句

news2025/1/22 16:52:41

 MySQL和SQL的区别是什么?之间是什么关系?

        SQL(Structured Query Language)是用于管理和操作关系型数据库(RDBMS)的标准语言。SQL还可以用于这些RDBMS:MySQL、Oracle、Microsoft SQL Server、PostgreSQL。

        而MySQL则是一种实现了SQL标准的关系型数据库管理系统。换句话说,MySQL是实现了SQL功能的软件,而SQL则是用于与这种软件进行交互的标准化语言。

        MySQL处理数据量5千万条的数据,下性能更好。

MySQL下载地址

        安装包:MySQL :: Download MySQL Installer

        安装指南:Mysql超详细安装配置教程(保姆级) - 知乎

MySQL中的注释怎么写?

-- 这是一个单行注释

/*  
这是一个多行注释,可以跨越多行  
在这里你可以写入更多的注释内容  
*/  

-- 从products这个表格中把prod_name这一列取出来
-- 每个SQL语句结尾都要加一个分号 


SELECT prod_name FROM products;

-- 取出数据,按照某一列(prod_name),升序排列ASC

SELECT prod_name FROM products ORDER BY prod_name ASC;

-- 降序排列DESC

SELECT prod_name FROM products ORDER BY prod_name DESC;

--  取出多列。列名之间加个逗号即可

SELECT prod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC;

-- 在前面那个排序基础上,再增加一个排序条件。
-- 适用于在前面那个排序基础上,有些行的prod_price完全一样,我希望再用prod_name对这些前一个条件一样行按照后面那个条件再排序
-- 只需要在后面写上第二个条件的列名  和升降序

SELECT prod_id, prod_price, prod_name FROM products ORDER
 BY prod_price DESC, prod_name ASC;


-- 不想升降序,就把DESC和ASC这两个东西删掉

-- ORDER BY与LIMIT组合选择符合条件的前n行 

SELECT prod_price FROM products ORDER BY prod_price DESC LIMIT 10; -- 前10个

取第10行开始到第18行

SELECT prod_name FROM products LIMIT 10,18;

只取出这一列中不重复的数据

        取出这一列的列名是vend_id

SELECT DISTINCT vend_id FROM products;

数据汇总,算avg, min, max等统计指标

从products这个数据表中把prod_price取出,并计算出prod_price的平均值,返回出来

SELECT AVG(prod_price) FROM products

 如果你想把取出的这一列 换个其他的列名  可以用AS

SELECT AVG(prod_price) AS avg_price FROM products

 统计出数据集有多少行

-- * 表示所有的数据
SELECT COUNT(*) AS num_cust FROM customers;

统计出某一列  中 非空的行  的  行数

        注意空的行,不算进去

SELECT COUNT(cust_email) AS num_cust FROM customers;

取某一列的最大的那一条数据

SELECT MAX(prod_price) AS max_price FROM products;
-- 提取出来这一列的列名是max_price

最小的

SELECT MIN(prod_price) AS min_price FROM  products;

 注意上面算的这些最大最小,是不把空值的内容纳入对比比较 的范围。

  

设定条件,只统计order_num为20005的订单号的商品,总共卖出去的商品数量quantity

        用WHERE去筛选出订单号是不是20005

SELECT SUM(quantity) AS item_ordered FROM orderitems WHERE order_num = 20005

 如果想要取出的数据是 价格×销量,可以这样写

SELECT SUM(quantity * item_price) AS total_price FROM orderitems 
WHERE order_num = 20005

计算prod_price的平均值,但是这个要只用非重复的价格来计算

SELECT AVG(DISTINCT prod_price) AS avg_price FROM products WHERE vend_id = 1003

将前面这个 min max avg 等等统计量组合成多列

SELECT COUNT(*) AS num_items,
       MIN(prod_price) AS price_min,
       MAX(prod_price) AS price_max.
       AVG(prod_price) AS price_avg,
FROM products;

WHERE GROUP BY数据按照条件过滤

WHERE里面的条件不等于即可以写!=,

SELECT prod_name, prod_price FROM products WHERE prod_price != 2.50

也可以写 <>

SELECT prod_name, prod_price FROM products WHERE prod_price <> 2.50

 大于5,小于10这种,就不能用大于和小于符号了。要用BETWEEN   AND。这个两段的5和10 都是取到的,大于等于5 和小于等于10

SELECT prod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;

用WHERE把prod_name中 为字符串“fuses”的取出来

SELECT prod_name, prod_price FROM products WHERE prod_name = "fuse";

把空的列   的  列名取出来

        IS NULL 表示为空

SELECT cust_name FROM customers WHERE cust_email IS NULL;

WHERE多个条件进行匹配,

        同时满足用AND,

        vend_id为1003,prod_price价格小于10

SELECT prod_id, prod_price, prod_name FROM 
products WHERE vend_id = 1003 AND prod_price <= 10;

        其中一个满足即可用OR

SELECT prod_id, prod_name,prod_price, vend_id 
FROM products WHERE vend_id = 1003 OR prod_price <= 10;

如果你是很多个值OR,你不想写多少个OR。你可以用IN(所有想囊括的东西)

SELECT prod_name, prod_id, prod_price FROM products WHERE vend_id IN (1002,1003);

指定不是这几个

SELECT prod_id, prod_name,prod_price FROM products WHERE vend_id NOT IN (1002,1003)

分组,输出每个组元素的个数 

        这里vend_id相同的就会被归类为一组。数出每一组数据的个数命名为num_prods这一列

        vend_id这一列也取出来了

SELECT vend_id, COUNT(*) as num_prods 
FROM products 
GROUP BY vend_id;

刚刚那个表,我希望将  num_prods数量大于等于3的筛选出来 

        用HAVING去写额外的条件

SELECT vend_id, COUNT(*) AS num_prods
FROM products
GROUP BY vend_id
HAVING COUNT(*) >= 3

JOIN多张表的联结,从多张表取数据 

        WHERE...AND...

同时从两张表上取数据

        从vendors和products 这两张表上取数据  合并成一张表。合并的条件是 二者的vend_id这一列相同

SELECT vend_name, prod_name, prod_price
FROM vendors, poducts
WHERE vendors.vend_id = products.vend_id;

        vend_id相同的表格,提取的下面三列是这样 

创建条件,联结多个表

        将三个表中 vend_id相等、prod_id相等 ,且order_num 为20005的 四列取出来

SELECT prod_name, vend_name, prod_price, quantity 
FROM 
orderitems, products, vendors
WHERE
products.vend_id = vendors.vend_id
AND
orderitems.prod_id = products.prod_Id
AND
order_num = 20005;

 

 内部联结

        INNER JOIN

 INNER JOIN 取两个集合的交集

        现在这段代码实际就是在取vendors和products这两个集合的交集。“交”体现在取vendors和products这两个集合中  符合 vend_id相同的那一部分

SELECT vend_name, prod_name, prod_price
FROM vendors, products
WHERE vendors.vend_id = products.vend_id;

         实际上上面这段取交集的代码,有下面这个更简便的写法

SELECT vend_name, prod_name, prod_price
FROM vendors INNER JOIN products
ON vendors.vend_id = products.vend_id;

                FROM写表格出处的时候,两个表格,vendors和products使用INNER JOIN来连接

                交集的条件写在ON之后,是vendor和products的vend_id相同

        INNER JOIN这个交集,画图表示就是下面

LEFT JOIN

而LEFT JOIN就像下面这个图表示的这样,LEFT JOIN左边的集合A全都取,写在右边的集合,只取A和B的交集,除去这个交集,B的任何东西都不取

代码是下面这样,把INNER JOIN替换成LEFT JOIN即可

SELECT vend_name, prod_name, prod_price
FROM vendors LEFT JOIN products
ON vendors.vend_id = products.vend_id;

下面这个是查询出的表格。空的这两行就是vendors这个表格里面有,products这个表格所没有的。其他那些非空的就是vendors和products 的交集。

        RIGHT JOIN 

只取右边的,右边的所有都取,左边的只取A和B的交集,左边其他的东西都不取

        其实直接SELECT B 不是更好?哈哈哈哈哈哈

代码如下,就是把LEFT JOIN替换成RIGHT JOIN

SELECT vend_name, prod_name, prod_price
FROM vendors RIGHT JOIN products
ON vendors.vend_id = products.vend_id;

 数据新增、插入

按照现有数据表的列名,把新增的这一行,每一列的数据都填入

        表格有8列,你就必须填进去8个值,缺一个也不行

        在SQL里空值用大写的NULL表示

        INSERT INTO表示向里面插入,VALUESB表示插入的值是后面那些

INSERT INTO customers
VALUES(NULL,
        'Pep E. LaPew',
        '100 Main Street',
        'Los Angeles',
        'CA',
        '90046',
        'USA',
        NULL,
        NULL);

插入成功是这样

如果你想在插入值的过程里,指定每一个插入的数据填进去哪些值,可以用在VALUES前面,customers这个表明后面加个括号,括号里面写列名

        每一个后面的字符串或者数字,对应填入 前面那个的位置的表头对应的列名

INSERT INTO customers(cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country,
    cust_contact,
    cust_email)
    VALUES( 'Pep E. LaPew2',
            '100 Main Street',
            'Los Angeles',
            'CA',
            '90046',
            'USA',
            NULL,
            NULL);

        如果你某些列是空的,你可以在指定列名的时候直接不去填写这些缺失的列的列名。SQL就会默认给这些列分配一个NULL值

        比如上面那个cust_contact和cust_email这两列,新添加进去的值为NULL。下面就演示一下,不写列名,也不写填充值为空,让系统自动填充的功能。

INSERT INTO customers(cust_name,
    cust_address,
    cust_city,
    cust_state,
    cust_zip,
    cust_country,
)
VALUES('Pep E. LaPew2',
    '100 Main Street',
    'Los Angeles',
    'CA',
    '90046',
    'USA');

新增数据的时候把列名也写进去的好处是,你可以自由的安排列名之间的顺序,然后按照你设定的顺序来输入每一列对应的数据。这样数据的录入更加清楚你输进去的每个数字对应哪个维度新增的数据。

        比如下面我在写列名的时候就调转了cust_address和cust_name的顺序,录入数据的时候 两个数据的位置也调转了。但是录进去,cust_address还是对应'100 Main Street', cust_name还是对应'Pep E. LaPew3'

INSERT INTO customers(
    cust_address,
    cust_name,
    cust_city,
    cust_state,
    cust_zip,
    cust_country,
)
VALUES(
    '100 Main Street',
    'Pep E. LaPews',
    'Los Angeles',
    'CA',
    '90046',
    'USA');

同一套列名,刚才是插入一条数据,如果插入多条数据呢?

        VALUES,前一个数据括号后面加个逗号 ,一个新的括号,录入数据

INSERT INTO customers(
    cust_address,
    cust_name,
    cust_city,
    cust_state,
    cust_zip,
    cust_country,
)
VALUES(
    '100 Main Street',
    'Pep E. LaPews',
    'Los Angeles',
    'CA',
    '90046',
    'USA'),
    (
    'M. Martian',
    '42 Galaxy',
    'New York',
    'NY',
    '11213',
    'USA'
        
);

数据更新UPDATE

把某一行的某一列的值替换成其他的值

         UPDATE关键字打头,SET后面写你要修改的列的名字,等于号后面写被修改替换成的数据内容, Where后面写条件限制是哪几行

UPDATE customers
SET cust_email = 'R_U_OK@hsbc.com'
WHERE cust_id = 10005;

也可以同时更改同一行的多列数据

UPDATE customers
SET cust_name = 'A piece of Shit'
    cust_email = 'King_of_SB@icbc.com'
WHERE cust_id = 10005;

数据删除

注意使用UPDATE和DELETE的同时一定要加WHERE限制条件,否则会删除整个表格或者将整个表格的数据都修改了

        将用户id为10006的行都删掉

DELETE FROM customers
WHERE cust_id = 10006;

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

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

相关文章

React进阶之路(二)-- 组件通信、组件进阶

文章目录 组件通信组件通信的意义父传子实现props说明子传父实现兄弟组件通信跨组件通信Context通信案例 React组件进阶children属性props校验组件生命周期 组件通信 组件通信的意义 组件是独立且封闭的单元&#xff0c;默认情况下组件只能使用自己的数据&#xff08;state&a…

0成本LLM微调上手项目,⚡️一步一步使用colab训练法律LLM,基于microsoft/phi-1_5,包含lora微调,全参微调

项目地址 &#xff1a;https://github.com/billvsme/train_law_llm ✏️LLM微调上手项目 一步一步使用Colab训练法律LLM&#xff0c;基于microsoft/phi-1_5 。通过本项目你可以0成本手动了解微调LLM。 nameColabDatasets自我认知lora-SFT微调train_self_cognition.ipynbsel…

P1131 [ZJOI2007] 时态同步

Portal. 先找出树上以 S S S 为起点最长的一条链&#xff0c;然后让其他链的长度都和该链对齐即可。 维护每个结点 x x x 的子树最长链 d max ⁡ ( x ) d_{\max}(x) dmax​(x)&#xff0c;则每次 DFS 求出最长链之后调整对齐的代价为 d max ⁡ ( x ) − ( d max ⁡ ( s o …

Java算法(二):数组元素求和(元素个位和十位不能是 7 ,且只能是偶数)

java算法&#xff08;二&#xff09; 需求&#xff1a; ​ 有这样一个数组&#xff1a; 元素是&#xff1a;{68, 27, 95, 88, 171, 996, 51, 210} ​ 求出该数组中满足要求的元素和 ​ 要求是&#xff1a; 求和的元素各位和十位都不能是 7 &#xff0c;并且只能是偶数 packa…

机器学习中的假设检验

正态性检验相关分析回归分析 所谓假设检验&#xff0c;其实就是根据原假设来构造一种已知分布的统计量来计算概率&#xff0c;根据概率值大小来判断能否拒绝原假设&#xff0c;从而得到一种结论。假设检验的过程就是&#xff0c;构造一个原假设成立条件下的事件A&#xff0c;计…

如何实现单病种上报的多院区/集团化/平台联动管理

背 景 米软售前人员在了解客户单病种上报的相关需求中发现&#xff0c;部分医院分为本部、分部或总院、分院等多个院区&#xff0c;各院区需共用一套系统&#xff1b;部分医院与其他兄弟医院隶属于同一集团医院&#xff0c;全集团需统一部署&#xff1b;部分市/区卫健委要求全…

【Node.js入门】1.3 开始开发Node.js应用程序

1.3 开始开发Node.js应用程序 学习目标 &#xff08;1&#xff09;熟悉开发工具Visual Studio Code的基本使用&#xff1b; &#xff08;2&#xff09;掌握Node.js应用程序的编写、运行和调试的基本方法。 构建第一个 Node.js应用程序 代码 const http require("htt…

RabbitMQ 消息中间件 消息队列

RabbitMQ1、RabbitMQ简介2、RabbitMQ 特点3、什么是消息队列4、RabbiMQ模式5、集群中的基本概念 单实例安装RabbitMQ安装依赖安装erlang安装rabbitmq开启rabbitmq的web访问界面添加用户修改配置文件重启服务浏览器访问Rabbit-test rabbitMQ集群准备工作&#xff08;三台&#x…

AM@向量代数@向量基本概念和向量线性运算

文章目录 abstract向量的基本概念向量向量的坐标分解式和坐标&#x1f47a;向量的模向量的长度(大小)&#x1f47a;零向量单位向量&#x1f47a;方向向量非零向量的单位向量正规化向量夹角&#x1f47a; 向量方向角和向量间夹角投影几何描述向量的线性运算向量的加减运算向量的…

【STM32 开发】| INA219采集电压、电流值

目录 前言1 原理图2 IIC地址说明3 寄存器地址说明4 开始工作前配置5 程序代码1&#xff09;驱动程序2&#xff09;头文件3) 测试代码 前言 INA219 是一款具备 I2C 或 SMBUS 兼容接口的分流器和功率监测计。该器件监测分流器电压降和总线电源电压&#xff0c;转换次数和滤波选项…

jmeter+ant实现的接口自动化测试

jmeterANT接口自动化测试框架 项目说明 本框架是一套基于jmeterAntExcelPython而设计的数据驱动接口自动化测试框架&#xff0c;jmeter 作为执行器&#xff0c;Ant 作为构建工具&#xff0c;进行构建测试&#xff0c;本框架无需你使用代码编写用例&#xff0c;测试用例存储在…

基于CSP的运动想象EEG分类任务实战

基于运动想象的公开数据集&#xff1a;Data set IVa (BCI Competition III)1 数据描述参考前文&#xff1a;https://blog.csdn.net/qq_43811536/article/details/134224005?spm1001.2014.3001.5501 EEG 信号时频空域分析参考前文&#xff1a;https://blog.csdn.net/qq_4381153…

算法竞赛——数论(一),数论内容的介绍,基础数论

文章目录 一&#xff0c; 数论学习路线的介绍和相关建议1&#xff0c;建议学习人群 &#xff1a;2&#xff0c;建议学习时长3&#xff0c;学习路线的介绍1&#xff0c;基础数论2&#xff0c;组合数学3&#xff0c;计算几何 二&#xff0c;基础数论第一部分 —— 快速幂和快速幂…

2023年十大最佳 iPhone 恢复软件

您的 iPhone 存储了大量有价值的数据&#xff0c;包括照片和视频。但是&#xff0c;即使使用高度安全的 Apple 设备&#xff0c;数据丢失也可能随时发生。从众多可用工具中选择最适合 iPhone 的数据恢复软件可能是一项艰巨的任务。因此&#xff0c;我们测试了性能并审查了 2023…

使用Hypothesis生成测试数据

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

[vue-router]vue3.x Hash路由前缀问题

[vue-router]vue3.x Hash路由前缀问题 问题描述问题分析 问题描述 是在本地开发时&#xff0c;使用的HASH路由&#xff0c;然后在偶然的情况下在/#/前添加了前缀&#xff0c;发现不影响本地的路由的使用&#xff1f;&#xff1f;&#xff1f;&#xff01;&#xff01;&#xf…

rviz中引入SW的模型

一、SW装配图转urdf 参考链接&#xff1a;https://blog.csdn.net/weixin_45168199/article/details/105755388 这部分直接看参考链接就可以&#xff0c;主要思路如下 1、把sw中的零散零件按照机器人中连杆的分类整合成几个大零件 2、把几个大零件整合成装配体&#xff0c;并…

如何在Jetpack Compose中显示PDF?

当读取和显示 PDF 的组件缺失时该怎么办? 声明式编程可以拯救你. Jetpack Compose已经存在好几年了, 但_在某些方面它的使用仍然面临挑战_. 例如, 缺少用于查看PDF的官方组件, 而为数不多的第三方库通常也是有代价的. 在我们的应用中, 我们会遇到在许多场景中显示 PDF 的需求…

跨境电商源码独立开发:一次购买,终生使用

随着全球电子商务的快速发展&#xff0c;越来越多的企业开始涉足跨境电商领域。为了在这个竞争激烈的市场中脱颖而出&#xff0c;您需要一个专业的跨境电商解决方案。我们的团队为您提供最优质的源码独立开发服务&#xff0c;让您拥有一个功能强大、安全稳定的跨境电商平台。 一…

腾讯觅影数智医疗影像平台获颁世界互联网领先科技成果大奖

11月8日&#xff0c;2023年世界互联网大会乌镇峰会在乌镇举行&#xff0c;腾讯再度获颁“世界互联网领先科技成果”大奖。腾讯健康总裁吴文达在世界互联网领先科技成果发布活动中介绍&#xff0c;“腾讯觅影数智医疗影像平台”已全面开放20多个医疗AI引擎助力科研创新&#xff…