练sql有本书灰常的好,《SQL基础教程》,简单易懂,全是图片

不过有些人不想看书,就想当个伸手党,《SQL基础教程》的所有重点整理到这儿了

按我的经验来讲,这篇绝对值得点赞喜欢收藏三连。面试、工作用都给力

不会的时候control + F,搜索关键词查询,比百度管事


第一章 表的建立

先建立一个数据库 再在数据库中建立不同的表

Create database shop;Create table product(
product_id char(4) not null,
Product_name varchar(100) not nll,
Primary key(product_id)
);

1. 数据类型

  • Integer-整数型数据
  • Char()-字符型数据 指定长度 长度不够制定值时通过半角符号补全
  • Varchar()-字符型数据 长度未达最大值时不补全
  • Date-时间格式数据

2.表的删除

Drop table product;

2.1添加列

Alter table product add column product_name varchar(100);

2.2删除列

Alter table product drop column product_name;

3.向表中插入数据

Insert into product values(‘001’,’牛仔裤’,’衣服’,‘2000’);
Insert into product values(‘002’,’帽子’,’衣服’,‘200’);

练习题答案

Create table address_book
(
regist_no integer not null,
Name varchar(128) not null,
Address varchar(256) not null,
Tel_no char(10),
Mail_address char(20),
Primary key(regist_no)
);Alter table address book add postal_code char(8) not null;

第二章 查询基础

1.使用select语句来筛选出某个表中想要的列

Select <列名>,<列名> from <表名>

2.查询出所有的列

Select * from<表名>

3.为列设置别名

Select <列名> as <别名>,<列名>as<别名> from <表名>

4.删除重复行

SELECT DISTINCT product_type, sale_price
from product; --把product_type里相同的sale_price都删除了

5.用where来指定查询数据的条件

SELECT product_name, product_type FROM Product
WHERE product_type = '衣服';

6.注释的书写方式

--只有一行
/* */可跨越多行

7.将所有的售价都提升一倍

Select product_name,sale_price*2 as sale_pricex2
from product;

8.选出售价为500的产品

SELECT product_name, product_type FROM Product
WHERE sale_price = 500;

9.逻辑运算符not and or

And-取交集or-取并集 通过()来嵌套逻辑规则

SELECT product_name, product_type, regist_date FROM Product
WHERE product_type = '办公用品'
AND ( regist_date = '2009-09-11'OR regist_date = '2009-09-20');

练习题答案

Select product_name,regist_date from product
WHERE regist_date>'2009-09-20';Select product_name,sale_price,purchase_price from product
Where sale_price-purchase_price>500;Select product_name,product_type,sale_price*0.9 as profile from product
Where sale_price*0.9-purchase_price>100;

第二章 聚合与排序

聚合函数:对数据进行某种操作或计算时使用的函数

Count(计算表中的特定记录的行数)
-sum
-avg
-max
-min

1.计算null之外的数据的行数

Select count(purchase_price)
From product;Select sum(sale_price) as total_sale_price,sum(purchase_price) as total_purchase_price
From product;

2.使用聚合函数删除重复值后计算

计算去除重复数据行后的数据行数

Select count(distinct product_type)
From product;Select sum(distinct sale_price)
From product; 

3.对表进行分组——将表的行按不同类型归类

按照商品种类统计数据行数

Select product_type,count(*)
From product
Group by product_type;

4.同时使用where和group by子句

Select purchase_price,count(*)
From product
Where product_type=’衣服’
Group by purchase_price;
--执行顺序-from-where-group by-select

5.为聚合指定条件

注意⚠️where只能指定记录(行)的条件,不能用来指定组的条件(对某些行求和 )

从按照商品种类进行分组后的结果中,取出“包含的数据行数为2 行”的组

Select product_type,count(*)
From product
Group by product_type
Having count(*)=2;
--先把数据分组 再选出包含两条数据的呢个组SELECT product_type,AVG(sale_price) FROM Product
GROUP BY product_type
HAVING AVG(sale_price) >= 2500;
--先把数据group以后 从中选出均价大于2500的group

注意⚠️having函数只能包含-常数 聚合函数 聚合键

6.对查询结果进行排序

子句书写顺序-select-from-where-group by-having-order by

  • Desc降序排列asc升序排列

指定多个排序键-先按第一个要求排 若其中有重复项再按第二个规则排

SELECT product_id,product_name,sale_price,purchase_price FROM Product
ORDER BY sale_price,product_id;

  • Order by子句中可以使用聚合函数
SELECT product_type,COUNT(*)
FROM Product
GROUP BY product_type
ORDER BY COUNT(*);

--显示product_type 和所有行数两列,根据product_type分组 并按组内数量排序

练习题答案

Select product_type,sum(sale_price),sum(purchase_price)
from product
Group by product_type
Having sum(sale_price)>1.5*sum(purchase_price)
ORDER BY regist_date desc;

第四章 数据更新

1.向表中插入一行数据

INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0001', 'T恤衫', '衣服', 1000, 500, '2009-09-20');

插入默认值 没有默认值且无数值时为null

CREATE TABLE ProductIns
(product_id CHAR(4) NOT NULL,
sale_price INTEGER DEFAULT 0, -- 销售单价的默认值设定为0;
PRIMARY KEY (product_id));

2.表的删除

DROP TABLE 语句可以将表完全删除

DELETE 语句会留下表(容器),而删除表中的全部数据- DELETE FROM Product

指定删除 删除部分数据

DELETE FROM Product
WHERE sale_price >= 4000;

3.改变表中的数据

将登记日期全部更新为“2009-10-10”

UPDATE Product

SET regist_date = '2009-10-10'

将商品种类为厨房用具的记录的销售单价更新为原来的10 倍

UPDATE Product
SET sale_price = sale_price * 10
WHERE product_type = '厨房用具';

第五章 复杂查询 视图 子查询 关联子查询

--视图和表的区别:表将所有数据保存在计算机存储系统中-视图仅保存本次操作时使用的SQL语句 并不保存数据 而下次再调取的时候只需消耗一点cpu执行语句就能生成一张新的临时表

--视图的优点:极大的节省计算机容量 表中的数据更新以后 视图也会自动更新

1.创建视图

Create view productsum(product_type,cnt_product)
As
Select product_type,count(*)
From product
Group by product_type;

使用视图

SELECT * from productsum;

2.视图的使用禁忌

视图不能使用order by语句

视图不能插入或更新数据-只能在表中修改数据

3.删除视图

DROP VIEW ProductSum;

4.子查询-一张一次性视图

将用来定义视图的select语句直接作用于from子句中

--从哪里查询?-从一个临时创建的视图里

Select product_type,cnt_product
From(
select product_type,count(*) as cnt_product
From product
Group by product_type
) as productsum;

增加子查询的嵌套层数

Select product_type,cnt_product
From(select*From(select product_type,count(*) as cnt_productFrom productGroup by product_type) as productsumWhere cnt_product=4
)as productsum2;

--创建两个临时视图进行操作

5.标量子查询

--必须且只能返回1行1列的结果 返回表中某一行的某一列的值

在where中使用标量子查询-该子查询结果必须是单一的

查出销售单价高于平均销售单价的商品

--计算出每组的平均值 找出每组内售价高于平均值的商品

Select product_id,product_name,sale_price
From product
Where sale_price>(select avg(sale_price) From product);

在having子句中使用标量子查询

选出按照商品种类计算出的平均销售单价高于全部商品平均销售单价的商品种类

Select product_type,avg(sale_price)
From product
Group by product_type
Having avg(sale_price)>(select avg(sale_price)from product);

--执行顺序:将产品归类 归类好了后将产品类型和对应的平均售价输出成行-寻找:归类后的平均售价大于归类前平均售价的商品所有信息 并根据上层约束条件输出其种类信息及平均售价信息

6.关联子查询

选出每类商品中高于该类商品平均售价的商品

Select product_type,product_name,sale_price
From product as p1
Where sale_price>(select avg(sale_price) from product as p2Where p1.product_type=p2.product_typeGroup by product_type);

--where表示限定‘商品种类’对平均单价进行比较

注意⚠️结合条件一定写在子查询内

练习题答案

Create view viewpractice5_1
As
Select product_name,sale_price,regist_date
From productSelect*from viewpractice5_1
Where sale_price>1000 and regist_date=’2009-09-20’;Select product_id,product_name,product_type,sale_price,avg(sale_price)as sale_price_all
From product;

第六章 函数、谓语、case表达式

函数类型

  • 算术函数-(用来进行数值计算的函数)
  • 字符串函数-(用来进行字符串操作的函数)
  • 日期函数-(用来进行日期操作的函数)
  • 转换函数-(用来转换数据类型和值的函数)
  • 聚合函数-(用来进行数据聚合的函数)

1.算术函数

1.1计算数值的绝对值

SELECT m,ABS(m) AS abs_col
FROM SampleMath;

1.2计算除法(n ÷ p)的余数

SELECT n,p,MOD(n, p) AS mod_col
FROM SampleMath;

1.3对m 列的数值进行n 列位数的四舍五入处理 对m数据四舍五入n位

SELECT m,n,ROUND(m, n) AS round_col
FROM SampleMath;

2.字符串函数

2.1拼接三个字符串(str1+str2+str3)

SELECT str1,str2,str3,str1 | | str2 | | str3
FROM SampleStr
WHERE str1 = '山田'

2.2计算字符串长度

SELECT str1,LENGTH(str1) AS len_str
FROM SampleStr;

2.3大写转换为小写

SELECT str1,LOWER(str1) AS low_str
FROM SampleStr;

2.4替换字符串的一部分

SELECT str1,str2,str3,REPLACE(str1, str2, str3) AS rep_str
FROM SampleStrl;

--用str3替换str1中的str2

2.5截取出字符串中第3 位和第4 位的字符

SELECT str1,SUBSTRING(str1 FROM 3 FOR 2) AS sub_strFROM SampleStr;

2.6将小写转换为大写

SELECT str1,UPPER(str1) AS up_str
FROM SampleStr
WHERE str1 IN ('ABC', 'aBC', 'abc', '山田');

2.7日期函数

SELECT CURRENT_TIME;

2.8转换函数

将NULL 转换为其他值

SELECT CAST('2009-12-14' AS DATE) AS date_col;SELECT COALESCE(NULL, 1),COALESCE(NULL, 'test', NULL),COALESCE(NULL, NULL, '2009-11-01')
From Samledata;

col_1|col_2|col_3

-------+-------+-----------

1 | test | 2009-11-01

(expression_1, expression_2, ...,expression_n)依次参考各参数表达式,遇到非null值即停止并返回该值。如果所有的表达式都是空值,最终将返回一个空值

3.常用谓语

  • Like - 字符串的部分一致查询
  • Between - 范围查询
  • Is null, is not null - 判断是否为null
  • In - 使用子查询作为IN 的参数

-- 取得“在大阪店销售的商品的销售单价”

SELECT product_name,sale_price
FROM Product
WHERE product_id IN (SELECT product_idFROM ShopProductWHERE shop_id = '000C');

4.Case表达式

4.1 通过CASE 表达式将A ~ C 的字符串加入到商品种类当中

SELECT product_name,CASE WHEN product_type = '衣服'THEN 'A :' | | product_type WHEN product_type = '办公用品' THEN 'B :' | | product_type WHEN product_type = '厨房用具' THEN 'C :' | | product_type ELSE NULLEND AS abc_product_type
FROM Product

4.2 使用CASE 表达式进行行列转换

-- 对按照商品种类计算出的销售单价合计值进行行列转换

SELECT SUM(CASE WHEN product_type = '衣服'
THEN sale_price ELSE 0 END) AS sum_price_clothes, SUM(CASE WHEN product_type = '厨房用具'
THEN sale_price ELSE 0 END) AS sum_price_kitchen, SUM(CASE WHEN product_type = '办公用品'
THEN sale_price ELSE 0 END) AS sum_price_office
FROM Product

第七章 集合运算

--使用2张以上的表的SQL语句,通过以行的方式为单位的集合运算符和以列为单位的联结,可讲分散在多张表中的数据

1.集合运算-增加行

使用UNION 对表进行加法

SELECT product_id,product_name
FROM Product
UNION
SELECT product_id,product_name
FROM Product2;

集合运算相当于并集,同时还能够去除重复的记录

注意⚠️:作为运算对象的记录列数必须相同-列的类型必须一致-可以使用任意select语句,但order by只能使用一次

2.1使用INTERSECT 选取出表中公共部分

SELECT product_id,product_name
FROM Product
INTERSECT
SELECT product_id,product_name
FROM Product2
ORDER BY product_id;

2.2使用EXCEPT 对记录进行减法运算

SELECT product_id,product_name
FROM Product
EXCEPT
SELECT product_id,product_name
FROM Product2
ORDER BY product_id;

从第一个表里减去两个表重复的内容

3. 联结运算-增加列

SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_price
FROM ShopProduct AS SP
INNER JOIN Product AS P
ON SP.product_id = P.product_id;

--将表ShopProduct命名为sp并取出SP.shop_id, SP.shop_name, SP.product_id, P.product_name, P.sale_price列,将表Product命名为p,并将两表的列按shop_id为规则合并

3.1内联结和WHERE 子句结合使用

SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_price
FROM ShopProduct AS SP
INNER JOIN Product AS P ON SP.product_id = P.product_id
WHERE SP.shop_id = '000A';

3.2外联结-两个表中所有的行都进行联结(内联结只显示两表共有的行)同时需要确定主表

ELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_price
FROM ShopProduct AS SP
RIGHT OUTER JOIN Product AS P ON SP.product_id = P.product_id

3.3对3 张表进行内联结

SELECT SP.shop_id,SP.shop_name,SP.product_id,P.product_name,P.sale_price,IP.inventory_quantity
FROM ShopProduct AS SP INNER JOIN Product AS P ON SP.product_id = P.product_idINNER JOIN InventoryProduct AS IP ON SP.product_id = IP.product_id
WHERE IP.inventory_id = 'P001';

这么香,该点赞的点赞 该收藏的收藏

用sql取a与b的交集_【庖丁解牛SQL(二)】SQL核心语法速查相关推荐

  1. c++ 取两个链表的交集_使用C ++程序查找两个链表的交集

    c++ 取两个链表的交集 Problem statement: Write a C++ program to find the intersection of two single linked li ...

  2. 两个sql交集_简单明了的sql基础语句

    一,数据库及表的增删改查 查看所有数据库:show databases; 切换到xxx库:use xxx; 查看库中所有的表:show tables; 查看表结构:desc 表名; 数据库创建:cre ...

  3. 【SQL取数练习,入门篇】牛客网SQL入门板块个人练习,含sql文件,复习必备

    文章目录 数据表介绍1: 练习1:入门(简单) 数据表介绍2: 练习2:入门(基础) 入门(文本) 数据表介绍1: 用户信息表:user_profile 其中device_id指终端编号(每个用户有唯 ...

  4. sql 删除重复记录保留一条_从零学会SQL·二——简单查询

    一.使用select查询语句完成以下练习 student表 查询姓名和性别 查询所有字段 给查询的字段名替换别名,姓名替换为s_name,性别替换为"人类性别" 查询姓名时删除重复 ...

  5. sql update 日期减6个月_【干货】SQL基础快速入门

    我们知道,关系数据库通过表来管理数据,数据库中可以同时存储多张表,数据库管理的是表,那么谁来管理数据库呢? 数据库由数据库管理系统(DBMS)来操纵和管理,终端用户通过dbms访问数据库中的数据,数据 ...

  6. 两个sql交集_数据库(sql)关键字

    1.order by关键字 作用:用于对查询结果排序. 用法:利用asc(升序)和desc(降序)进行排序. (升序) (降序) 当排序列的值相同时可在后面添加备用排序选项(如图) 2.集合操作 2. ...

  7. 两个sql交集_如何使用性能分析工具定位SQL执行慢的原因?

    在前面的文章中就讲过了查询优化器,知道在查询优化器中会经历逻辑查询优化和物理查询优化.需要注意的是,查询优化器只能在已经确定的情况下(SQL 语句.索引设计.缓冲池大小.查询优化器参数等)决定最优的查 ...

  8. mysql 分组排序取前n_mysql分组排序取前N条记录的最简洁的单条sql ! | 学步园

    -- mysql分组排序取前N条记录的最简洁的单条sql. use test; drop table if exists test; create table test ( id int primar ...

  9. SQL取最大值编码(自动编码)

    SQL取最大值编码(自动编码) 用途 : 使用SQL语法做出自动编码效果,例如将单号自动+1后,产生该笔单号 Table说明 SQL语法 SELECT 'A'+REPLICATE('0',7-len( ...

最新文章

  1. 辩证看待 iostat
  2. Exchange 2016 Outlook新建会议时收到提醒邮件
  3. MySQL(七)关于MySQL不同版本下临键锁锁定范围不同
  4. 「Python」pandas入门教程
  5. mysql 日志记录 archive_完美起航-Mysql日志管理、备份与恢复
  6. Navicat创建数据库表 、导入sql文件,生成表结构
  7. webstorm 左侧文件目录树(不显示,怎么办?) - 设置篇
  8. Eigen--Array
  9. 【模板】非旋Treap
  10. [转载] Python一行代码实现1到100之和
  11. WMI 脚本入门:第二部分 (MSDN)
  12. Windows 10 优化
  13. java 视频压缩_Java视频压缩有人会吗?
  14. Atitit. Toast alert loading js控件   atiToast v2新特性
  15. RubyOnRails杂记
  16. CVE-2018-5767 栈溢出漏洞复现
  17. 基本共射放大电路的动态分析
  18. 小米平板2刷哪个系统更流畅_两个系统随你选 小米平板2刷机小教程
  19. Bioventus在马来西亚上市DUROLANE(R),并选中Athrotech作为独家经销伙伴
  20. 浏览器主页被篡改劫持怎么办

热门文章

  1. 2017年值得学习的3个CSS特性
  2. python json.dumps() 中文乱码问题
  3. 小米开源文件管理器MiCodeFileExplorer-源码研究(1)-2个模型Model
  4. hadoop -- mapreduce执行过程
  5. VC++2012编程演练数据结构《25》线索二叉树
  6. sps 2007 小问题1:人员选择器PeopleEditor如何使用
  7. CCPC2020太原理工获得一枚奖牌
  8. Bailian3721 和数【标记】
  9. POJ3579 Median【二分法+中位数】
  10. Bailian3709 2进制转化为3进制【进制】