SQL入门语句

 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 ORDERBY 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.mzph.cn/news/137641.shtml

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

相关文章

ios 开发问题小集 [持续更新]

文章目录 一、如何给列表上的UITableViewCell添加手势二、获取NSIndexPath的方式2.1 根据row, section 来创建2.2 根据point 的位置来找到 indexPath三、tableView在Grouped样式下,设置表头表尾空白一、如何给列表上的UITableViewCell添加手势 给cell添加手势,大家都会这么做…

Kafka中遇到的错误:

1、原因&#xff1a;kafka是一个去中心化结果的&#xff0c;所以在启动Kafka的时候&#xff0c;每一个节点上都需要启动。 启动的命令&#xff1a;kafka-server-start.sh -daemon /usr/local/soft/kafka_2.11-1.0.0/config/server.properties

AMESim 2021安装教程

主要是AMESim的安装 写在前面&#xff0c;由于项目需要&#xff0c;需要自学AMESim&#xff0c;因此需要安装这个软件&#xff0c;目前仅仅安装使用&#xff0c;还不涉及到与MATLAB的联合仿真&#xff0c;老板说用 RT LAB半实物仿真平台&#xff0c;但是简单搜了一下&#xff0…

Flutter笔记:绘图示例 - 一个简单的(Canvas )时钟应用

Flutter笔记 绘图示例 - 一个简单的&#xff08;Canvas &#xff09;时钟应用 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_2855…

如何记录血压的波动情况

import pandas as pd from plotnine import * import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [Microsoft YaHei] 记录时间(time)、收缩压(SBP)、舒张压(DBP)&#xff1a; df pd.DataFrame({ time: [2023-11-01 08:30, 2023-11-02 21:00, 2023-11-0…

正则表达式中(?s)与(?m)的区别

理论&#xff1a; (?m) 和 (?s) 是正则表达式中的两个模式标志&#xff0c;它们具有不同的作用&#xff1a; (?m) 多行模式标志&#xff08;也称为 “multiline” 模式&#xff09;&#xff1a; 默认情况下&#xff0c;正则表达式将整个输入字符串视为单行多行文本中使用…

前端-第一部分-HTML

一.初识HTML 1.1 HTML 简介 HTML 全称为 HyperText Mark-up Language&#xff0c;翻译为超文本标签语言&#xff0c;标签也称作标记或者元素。HTML 是目前网络上应用最为广泛的技术之一&#xff0c;也是构成网页文档的主要基石之一。HTML文本是由 HTML 标签组成的描述性文本&a…

力扣最热一百题——每日温度

Python后面的文章&#xff0c;内容都比较多&#xff0c;但是同时我又想保持每天更新的速度&#xff0c;所以Python的文章我继续打磨打磨&#xff0c;先更新一篇算法的文章。 一身正气报国家&#xff0c;旁无乱境不恋她 ヾ(◍∇◍)&#xff89;&#xff9e; 力扣题号&#xff1a…

css呼吸效果实现

实现一个图片有规律的大小变化&#xff0c;呈现呼吸效果&#xff0c;怎么用CSS实现这个呼吸效果呢 一.实现 CSS实现动态效果可以使用动画( animation)来属性实现&#xff0c;放大缩小效果可以用transform: scale来实现&#xff0c;在这基础上有了动画&#xff0c;就可以设置一个…

ps人像怎么做渐隐的效果?

photoshop怎么制作人像渐隐的图片效果&#xff1f;渐隐效果需要使用渐变来实现&#xff0c;下面我们就来看看详细的教程。 首先&#xff0c;我们打开Photoshop&#xff0c;点击屏幕框选的【打开】&#xff0c;打开一张背景图片。 下面&#xff0c;我们点击左上角【文件】——【…

Exploration by random network distillation论文笔记

Exploration by Random Network Distillation (2018) 随机网络蒸馏探索 0、问题 这篇文章提出的随机网络蒸馏方法与Curiosity-driven Exploration by Self-supervised Prediction中提出的好奇心机制的区别&#xff1f; 猜想&#xff1a;本文是基于随机网络蒸馏提出的intrin…

16-nacos-快速入门

1.4.启动 启动非常简单&#xff0c;进入bin目录 然后执行命令即可&#xff1a; windows命令&#xff1a; startup.cmd -m standalone3.Nacos的依赖 父工程&#xff1a; <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-…

楼宇天台视频AI智能监管方案,时刻保障居民安全

一、背景需求分析 我们经常能看到这样的新闻报道&#xff0c;小孩登上小区的天台玩耍&#xff0c;因为家长和物业人员发现得晚&#xff0c;没有及时制止&#xff0c;结果导致意外事故的发生。此前&#xff0c;在某小区就有居民拍下多名儿童在小区高层住宅的楼顶玩耍跳跃&#…

Pytorch R-CNN目标检测-汽车car

概述 目标检测(Object Detection)就是一种基于目标几何和统计特征的图像分割,它将目标的分割和识别合二为一,通俗点说就是给定一张图片要精确的定位到物体所在位置,并完成对物体类别的识别。其准确性和实时性是整个系统的一项重要能力。 R-CNN的全称是Region-CNN(区域卷积神经…

Nginx实现tcp代理并支持TLS加密实验

Nginx源码编译 关于nginx的搭建配置具体参考笔者之前的一篇文章&#xff1a;实时流媒体服务器搭建试验&#xff08;nginxrtmp&#xff09;_如何在线测试流媒体rtmp搭建成功了吗-CSDN博客中的前半部分&#xff1b;唯一变化的是编译参数&#xff08;添加stream模块并添加其对应ss…

无线城市WiFi解决方案【完整Word】

wx供重浩&#xff1a;创享日记 获取完整无水印高清Word版 文章目录 第1章 项目背景1.1“无线城市”的定义1.2 国内外“无线城市”发展概况1.3 典型案例分析1.4 建设无线城市的必要性1.5 无线城市能为政府带来的价值 第2章 项目需求分析2.1 无线城市的现状分析2.2 无线城市的总体…

Excel中功能区的存放位置很灵活,可以根据需要隐藏或显示

在这个简短的教程中,你将找到5种快速简单的方法来恢复Excel功能区,以防丢失,并学习如何隐藏功能区,为工作表腾出更多空间。 功能区是Excel中所有操作的中心点,也是大多数可用功能和命令所在的区域。你觉得功能区占用了你太多的屏幕空间吗?没问题,只需单击鼠标,它就被隐…

Wsl2 Ubuntu在不安装Docker Desktop情况下使用Docker

目录 1. 前提条件 2.安装Distrod 3. 常见问题 3.1.docker compose 问题无法使用问题 3.1. docker-compose up报错 参考文档 1. 前提条件 win10 WSL2 Ubuntu(截止202308最新版本是20.04.xx) 有不少的博客都是建议直接安装docker desktop&#xff0c;这样无论在windows…

用栈实现队列

一、题目。 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾 int pop() 从队列的开头移除并返回元素 int peek(…

go 使用 odbc 报错 SQLSetEnvUIntPtrAttr

GitHub - alexbrainman/odbc: odbc driver written in go 在centos下使用odbc连接数据库&#xff0c;报错 SQLSetEnvUIntPtrAttr: {㠳6} ㈵″㠳4&#xff0c; unixodbc已经安装好&#xff0c;并且使用isql连接数据库没有问题&#xff0c;最后发现是 /usr/lib64/libodbc.so …