数据库(SQL)学习——基础篇⼆:基础查询与排序
准备⼯作:建表
#使⽤数据库shop
use shop;
#创建表product
CREATE TABLE product
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER DEFAULT 0,
purchase_price INTEGER,
regist_date DATE,
PRIMARY KEY (product_id));
#向表中插⼊数据
INSERT INTO product VALUES('0001', 'T恤衫', '⾐服', 1000, 500, '2021-12-20'),
('0002', '打孔器', '办公⽤品', 500, 320, '2021-12-19'),
('0003', '运动T恤', '⾐服', 4000, 2800, NULL),
('0004', '菜⼑', '厨房⽤具', 3000, 2800, '2021-12-18'),
('0005', '⾼压锅', '厨房⽤具', 6800, 5000, '2021-12-17'),
('0006', '叉⼦', '厨房⽤具', 500, NULL, '2021-12-16'),
('0007', '擦菜板', '厨房⽤具', 880, 790, '2021-12-12'),
('0008', '圆珠笔', '办公⽤品', 100, NULL, '2021-12-11');
⼀.SELECT语句基础
通过SELECT语句查询并选取出必要数据的过程称为匹配查询或查询(query)
1.基本SELECT语句
基本SELECT语句包含了SELECT和FROM两个⼦句,SELECT⼦句中列举了希望从表中查询出的列的名称,FROM⼦句则指定了选取出数据的表的名称
SELECT <;列名1,列名2,...,列名n>
FROM <;表名>;
例:注意最后⼀个查询项product_name后⾯没有符号
SELECT product_id,product_name
FROM product;
2.使⽤WHERE语句从表中选取符合条件的数据
WHERE⼦句⽤来指定查询数据的条件,查询出只符合该条件的记录
SELECT <;列名1,列名2,...,列名n>
FROM <;表名>
WHERE <;条件表达式>;
例⼦:
SELECT product_id,product_name
FROM product
WHERE product_type = '⾐服';
3.相关法则
(1)星号*代表全部列
# 查询出全部列
SELECT *
FROM product;
(2)可以使⽤AS关键字为列设定别名,设定中⽂别名时需要使⽤双引号""括起来
SELECT product_id AS id,
product_name AS name,
purchase_price AS "进货单价"
FROM product;
(3)使⽤DISTINCT可以删除重复⾏。只是查询结果不重复,原表是没有变化的(没有删除)
# 使⽤DISTINCT删除product_type列中重复的数据
SELECT DISTINCT product_type
FROM product;
(4)SELECT⼦句和WHERE⼦句中可以使⽤运算表达式
SELECT product_id,
product_name AS name,
#SQL语句使⽤运算表达式
sale_price * 2 AS "sale_price * 2"
FROM product
#WHERE⼦句中使⽤运算表达式
WHERE sale_price - purchase_price >= 500;
(5)选取NULL的记录时,WHERE语句中是IS NULL;选取不是NULL的记录时,WHERE语句中是IS NOT NULL
SELECT product_id,product_name
FROM product
# 选取purchase_price是NULL的记录
#WHERE purchase_price IS NULL;
#选取purchase_price不是NULL的记录
WHERE purchase_price IS NOT NULL;
(6)表⽰"不是..."的含义,可⽤不等号<>,也可⽤NOT运算符(在查询条件中添加NOT运算符)
SELECT product_id,product_name,sale_price
FROM productdistinct查询
#在查询条件中使⽤不等号,并添加NOT运算符
WHERE NOT sale_price <> 500;
(7)希望同时使⽤多个查询条件时,可以使⽤AND(且,取交集)、OR(或,取并集)运算符。AND运算符优先于OR运算符,如想优先执⾏OR运算,可以使⽤括号优先处理
例:想查询商品种类为“办公⽤品”且登记⽇期是2021-12-11或2021-12-19的商品
SELECT product_name,product_type,regist_date
FROM product
WHERE product_type = '办公⽤品'
AND (regist_date = '2021-12-11'
OR regist_date = '2021-12-19');
(8)含有NULL时的真值
SQL之外的语⾔基本上只使⽤真和假这两种真值
SQL中还存在NULL,因为不知道这样⼀个值,所以真值的结果既不为真,也不为假,是除真假之外的第三种值——不确定。
三值逻辑下的AND真值表:
真 AND 不确定 = 不确定
不确定 AND 真 = 不确定
假 AND 不确定 = 假
不确定 AND 假 = 假
不确定 AND 不确定 = 不确定
三值逻辑下的OR真值表
真 OR 不确定 = 真
不确定 OR 真 = 真
假 OR 不确定 = 不确定
不确定 OR 假 = 不确定
不确定 OR 不确定 = 不确定
⼆.聚合查询
1.聚合函数
COUNT:计算表中的记录数(⾏数)
聚合函数会将NULL排除在外。但COUNT(*)例外,它不排除NULL,会得到包含NULL的数据⾏数,⽽COUNT(<;列名>)会得到NULL之外的数据⾏数
# 计算全部数据的⾏数,共8⾏
SELECT COUNT(*)
FROM product;
# 计算regist_date不为NULL的数据的⾏数,共7⾏
SELECT COUNT(regist_date)
FROM product;
SUM:计算表中数值列中数据的合计值
# 计算销售单价和进货单价的合计值
SELECT SUM(sale_price),SUM(purchase_price)
FROM product;
AVG:计算表中数值列中数据的平均值
# 计算销售单价和进货单价的平均值
SELECT AVG(sale_price),AVG(purchase_price)
FROM product;
MAX:求出表中任意列中数据的最⼤值
MIN:求出表中任意列中数据的最⼩值
MAX 和 MIN也可⽤于⾮数值型数据
# 进货单价的最⼤值和登记⽇期的最⼩值
SELECT MAX(purchase_price),MIN(regist_date)
FROM product;
注:MAX/MIN函数⼏乎适⽤于所有数据类型的列。SUM/AVG函数只适⽤于数值类型的列
2.使⽤聚合函数删除重复值(原表不变):聚合函数的参数中使⽤DISTINCT
想要计算值的种类时,可以在COUNT函数的参数中使⽤DISTINCT。
#计算去除重复数据后的数据⾏数,结果为3,表⽰表中有3种不同的商品
SELECT COUNT(DISTINCT product_type)
FROM product;
在SUM函数中使⽤DISTINCT,遇到相同的数值时不会再加
SELECT SUM(sale_price),SUM(DISTINCT sale_price)
FROM product;
三.对表分组
1.GROUP BY语句
使⽤聚合函数会将整个表的数据进⾏统计处理,当想将数据按照某列来统计处理时,可以使⽤GROUP BY进⾏分组在GROUP BY⼦句中指定的列称为聚合键或分组列
SELECT <;列名1,列名2,...,列名n>
FROM <;表名>
GROUP BY <;列名1,列名2,...,列名n>;
例⼦:
使⽤GROUP BY语句按照商品种类统计数据⾏数
SELECT product_type,COUNT(*)
FROM product
GROUP BY product_type;
不使⽤GROUP BY语句,就是统计全表数据
SELECT product_type,COUNT(*)
FROM product;
2.GROUP BY语句使⽤的⼀些说明
(1)当聚合键中包含NULL时,会将NULL作为⼀组特殊数据进⾏处理
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论